18
102
0
初级会员
#define MAX_COUNT 1200 这是10ms内可能出现最大差值[/mw_shl_code]#define ENCODER_TIM_PERIOD (MAX_COUNT*3) 最大ARR值[/mw_shl_code] s16 ENC_Get_Electrical_Angle(void)
#define ENCODER_TIM_PERIOD (MAX_COUNT*3) 最大ARR值[/mw_shl_code] 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;
} 或者 哪位有可以的算法 能否分享下
使用道具 举报
530
11万
34
管理员
3
新手入门
48
本版积分规则 发表回复 回帖后跳转到最后一页
查看 »
正点原子公众号
|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )
GMT+8, 2025-6-25 14:28
Powered by OpenEdv-开源电子网
© 2001-2030 OpenEdv-开源电子网