stm32的定时器是16位的,我的计数会超过65535,在网上找了个方法但是还是不行,可能是我对这个程序不理解吧,希望大神给点意见,谢谢,程序如下:
s16 ENC_Get_Electrical_Angle(void)
{
static u16 lastCount = 0;
u16 curCount = ENCODER_TIMER->CNT;
s32 dAngle = curCount - lastCount;
if(dAngle >= MAX_COUNT)
{
dAngle -= ENCODER_TIM_PERIOD;
}
else if(dAngle < -MAX_COUNT)
{
dAngle += ENCODER_TIM_PERIOD;
}
lastCount = curCount;
return (s16)dAngle;
}
上述代码中MAX_COUNT是10ms内可能出现的计数最大值还要大的值
ENCODER_TIM_PERIOD是定时器的period值,最好比MAX_COUNT大
然后定义一个32位的有符号变量,如currentCount
然后每隔10ms执行一次
currentCount += Enc_GetCount();
其中if(dAngle >= MAX_COUNT)
{
dAngle -= ENCODER_TIM_PERIOD;
}
else if(dAngle < -MAX_COUNT)
{
dAngle += ENCODER_TIM_PERIOD;
}是什么意思呀,或者还有其他的方法的。
求帮助,谢谢
|