float Speed;int Encoder_Count = TIM4->CNT;uint32_t Time = HAL_GetTick();int Encoder_Diff = Encoder_Count - Encoder_Count_Last;if (Encoder_Diff > 0x7fff) { Encoder_Diff -= 0xffff;} else if (Encoder_Diff < -0x7fff) { Encoder_Diff += 0xffff;}float Time_Diff = (Time - Time_Last) / 1000000.0f;if (Time_Diff == 0) { Speed = 0;} else { Speed = Encoder_Diff / 192.0f / Time_Diff;}Encoder_Count_Last = Encoder_Count;Time_Last = Time;return Speed;使用这段代码测速后通过串口将速度值打印到屏幕后为什么转速值一直为0,优化代码使用SysTick计时器获取当前时间
时间: 2023-06-10 18:07:15 浏览: 117
该代码获取当前时间,将小时、分钟和秒存储在变量中,并在数字前面添加0 可将这些值组合成一个字符串,并将字符串显示在页面上
有可能是以下原因导致转速值一直为0:
1. 串口通信设置不正确,导致数据无法正确发送到终端。你可以检查串口配置是否正确,比如波特率、数据位、停止位、校验位等。
2. 编码器计数器的值没有清零,导致读取到的差值一直为0。你可以在初始化编码器计数器的时候,将其初始值设为0,或者在每次读取编码器计数器值之前将其清零。
3. 时间差值计算不正确,导致计算出的转速值为0。在你的代码中,计算时间差值的方式是将当前时间减去上一次时间,除以1000000.0f。这个时间差值的单位是秒,因此你需要将计算得到的时间差值转换为毫秒,才能正确计算转速值。
4. 可能存在其他问题,比如编码器损坏、传感器连接错误等。你可以检查一下硬件连接是否正确,或者使用其他方法进行调试。
阅读全文