我想测量不同温度下telosB的计算速度。要对设备进行编程,我使用contiki。 我的想法是让它以固定的间隔发送消息并返回
clock_time (void)
作为内容。第二个设备读取该消息并将其与其自己的clock_time(void)返回值一起存储在文件中。有了这个,我可以说:
在温度A下,设备需要500个时钟周期才能发送100条消息,第二个设备需要600个时钟周期才能接收100条消息。
在温度B下,设备需要500个时钟周期才能发送100条消息,而第二个设备需要800个时钟周期才能接收100条消息。
这意味着设备在温度B下确实较慢,因为接收器必须等待更长时间。
我现在陷入困境,因为每次执行解决方案时我都得到不同的结果+结果在链接质量不完美且一些软件包丢失时失真。 是否有解决方案,可能有不同的设置,这有助于我证明这个想法?
答案 0 :(得分:1)
您可以在它们之间以恒定间隔发送消息(例如,在A时间内每隔5毫秒),并为每条消息添加序列号。这样,即使缺少某些消息,您也会知道每个收到的消息相对于先前消息的预期时间。
要测量CPU速度,您实际上不需要测量接收和处理每条消息的时间。它无论如何都不是一个客观的衡量标准,因为通信的大部分时间实际上花费在实际接收上,实际接收是从无线电时钟而不是来自一个驱动CPU的时钟。
如果CPU速度确实是您想要测量的,请不要使用clock_time()
。您需要配置一个msp430硬件定时器来源于DCO。
另一种选择,如果执行你的想法似乎太复杂,就是将DCO频率与低频晶体振荡器的频率进行比较。这不会给出最准确的结果,因为晶体也会受到温度的影响,但如果要将CPU速度测量到精度%而非ppm,则足够好。请参阅函数msp430_sync_dco()
for an example how来执行此操作。
答案 1 :(得分:1)
我的假设是,时钟频率在不同温度下会发生变化。我想以某种方式衡量它。
如果要测量时钟频率的偏差,请使用frequency counter。这就是它的用途,它可以测量频率,达到比微控制器更高的精度。
一般来说,大多数时钟源应该在设备的工作温度范围内足够稳定,运行时间的差异应该可以忽略不计。如果您在足够的温度下运行设备,时钟速度甚至会降低几个百分点,这可能会阻止无线电操作,因为它们的发送/接收频率也会漂移。
答案 2 :(得分:1)
MSP430通常具有自由运行的内部振荡器,您可以对其进行编程,以便为处理器时钟提供近似的工作频率。该校准在两个频率之间交替,以给出所需工作频率的近似值。看了telosB的电路图后,它有一个32kHz的晶体,可以用来提供更准确的时间源。我不熟悉您正在使用的板上的操作系统或其他软件,但是这个32kHz振荡器可以用作主处理器时钟的校准源,其中软件使用内部定时器来计算实际的主处理器时钟速率和调整编程的时钟频率,使其恢复到所需的频率。 This link 转到TI MSP培训材料中描述DCO操作和校准的页面。如果OS包含此功能,则工作频率随温度的漂移将取决于32kHz晶体特性和频率跟踪算法。它可能不是单调的。
还有发送消息的应用程序的软件结构。如何触发发送消息的决定。我将使用的常规方法是使用一个定时器,该定时器使用晶体生成一个事件,触发主循环软件以定义的周期发送消息。然后主软件在事件上生成消息。假设事件之间有足够的处理器周期以允许生成消息,那么实际的时钟频率是无关紧要的。
你说链接并不完美,有些消息会丢失。在这两种情况下,您都会以500个刻度发送100条消息。设备不能错过传输,因为它是始发者。接收数据时间的差异看起来可能是由于接收方丢失消息的数量。您每5个OS滴答发送一条消息,可能是接收间隔相似,因此如果任意两个消息之间的时间超过6个滴答,您可以检测丢失的消息。
另一个想法;如何生成操作系统滴答声。如果它是从处理器时钟导出的,那么节拍持续时间将随着处理器时钟而变化。如果它是由32kHz XL1振荡器产生的,那么它的周期将随晶体频率特性而变化。