编码器,小弟有几个地方不大懂,
(1)计数器计数的是脉冲值,也就是码盘转过的角度值,如果要算速度的话,那还得知道时间,时间怎么知道的呢,我看到网上的程序都是直接
#define SPEED_SAMPLING_FREQ (u16)(2000/(SPEED_SAMPLING_TIME+1)) 然后设置2000/(SPEED_SAMPLING_TIME等于9,这个是怎么来的? 以及后面的算角度时相邻两次计数值之间时间间隔是怎么样进行计算的?
(2)第二个问题是,计数器是根据输入脉冲来进行计数的,那编码器模式下,输入脉冲的频率我们可以知道吗?
(3)算角度时,这一段程序是什么意思?尤其下面一行为什么要除以65536?
s16 ENC_Get_Electrical_Angle(void)
{
s32 temp;
temp = (s32)(TIM_GetCounter(ENCODER_TIMER)) * (s32)(U32_MAX / (4*ENCODER_PPR));
return((s16)(temp/65536)); // s16 result
}
为什么不能直接用TIM_GetCounter(ENCODER_TIMER) / (4*ENCODER_PPR)?
|