最近在用STM32调试增量式编码器,在设备上电后,或者复位完成后,把编码器计数清零后,待机时发现编码器值不停地乱跳;
注:清零函数使用 __HAL_TIM_SET_COUNTER(&htim3,0);
理论来说这么做没问题,但是忽略了编码器有微小的变化,向正方向变化没问题,向反方向就出问题了,不停地进入中断:导致程序误认为扣圈了;
注: if(htim->Instance == htim3.Instance)
{
if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3)) /* 判断CR1的DIR位 */
{
g_timx_encode_count--; /* DIR位为1,也就是递减计数 */
}
else
{
g_timx_encode_count++; /* DIR位为0,也就是递增计数 */
}
}
解决办法:上电后或复位完成后,把编码器计数置在编码器一圈线的一半处,这样不会导致程序误进上面中断: