源码网站代理,济南网站建设与优化,如何不备案做购物网站,网门网站下载地址提起“时间同步”这个概念#xff0c;大家可能很陌生。一时间搞不清楚是什么意思。
我理解“时间同步”可以解决多个传感器采集数据不同时的问题#xff0c;让多个传感器同时采集数据。
打个比方。两个人走路#xff0c;都是100毫秒走一步#xff08;频率相同是前提…提起“时间同步”这个概念大家可能很陌生。一时间搞不清楚是什么意思。
我理解“时间同步”可以解决多个传感器采集数据不同时的问题让多个传感器同时采集数据。
打个比方。两个人走路都是100毫秒走一步频率相同是前提一般传感器都支持调整频率容易调到同频但不容易同相位因为没法同时启动。就是两个人起点不同就走不到一起去。
为了使他们对齐需要“时间同步”这个概念。
怎么样才能使他们走齐呢需要一个人发送一个信号比如说“停下来”。当另一个人听到这个信号时他倒退一段距离和这个人对齐。然后就可以一起走了。
转到STM32上一个STM32A需要给另一个STM32(B)上发送信号另一个接收到后开始执行采集命令。而A需要延时一段时间执行采集命令才能和B同时采集即时间同步。
那么怎么知道A要延时多久执行采集命令呢可以用示波器硬件测量A发B收之间的时间间隔。也可以A发B收然后B发A收得到的时间间隔除以2得到A发B收的时间间隔。这是软件测量法。
STM32需要使能RTC时钟用Hal_Get_Rtc_Time函数STM32的时间戳。但是弊端是无法精确到毫秒只能达到秒级。因为RTC时钟亚秒计数器无法设置给另一个STM32即HAL_Set_Rtc_Time只能设置时、分、秒无法设置亚秒寄存器这点可以试一下。
所以STM32要实现小于一毫秒的时间同步需要再开一个微秒定时器里面的数值作为微秒时间值和RTC时钟配合起来计时。在RTC_Init的时候维护一个uint16_t的变量Micros然后在另一个函数里extern声明一下再调用。STM32启动微秒定时器中断每隔一微秒加一。实际测试起来微秒中断太可怕了达不到这个性能可以这么写但是执行不了因为速度太快中断函数里的程序执行不过来所以我采用的是100微秒的中断在里面加100维护微秒值Micros。
这样就出现了A和B的两个RTC时钟都是100微秒中断计时一次。同频但不同相。
为了实现同相需要发信号。比如Stm32外接一个Wifi模块蓝牙模块或Rola模块。总之是一个可以发送接收的模块。
流程A发送RTC时间戳延时一段时间发送到接收的时间触发采集。
B接收到时间戳立即触发采集。这样两者就是同时触发的啦。
A和B时间同步。