TI中文支持网
TI专业的中文技术问题搜集分享网站

28035根据霍尔信号测速有误差怎么办

三个霍尔信号接28035的EQEP1A/1B/1I,这三个引脚设置为普通输入,双边沿触发中断。用定时器0记录60度内的时间。那么问题来了,时间为定时器0中断次数的整数倍,会有误差,除非把定时器周期设的很短如1us,这样误差很小,但隔1us进入一次中断会影响程序运行。但如果设为10us误差会很大。怎么办呢?

Johnson Chen1:

为什么要用TIMER0金中断来计时呢?

通常应该是用ECAP或者,用外部中断的方法来实现。这样误差就不大了,

三个霍尔信号接28035的EQEP1A/1B/1I,这三个引脚设置为普通输入,双边沿触发中断。用定时器0记录60度内的时间。那么问题来了,时间为定时器0中断次数的整数倍,会有误差,除非把定时器周期设的很短如1us,这样误差很小,但隔1us进入一次中断会影响程序运行。但如果设为10us误差会很大。怎么办呢?

Tong Daniel:

回复 Johnson Chen1:

是用外部中断,但时间如果不是用Timer0来计算,那应该用什么方式呢?谢谢了

三个霍尔信号接28035的EQEP1A/1B/1I,这三个引脚设置为普通输入,双边沿触发中断。用定时器0记录60度内的时间。那么问题来了,时间为定时器0中断次数的整数倍,会有误差,除非把定时器周期设的很短如1us,这样误差很小,但隔1us进入一次中断会影响程序运行。但如果设为10us误差会很大。怎么办呢?

Tong Daniel:

回复 Tong Daniel:

找到解决办法了,是我自己学艺不精,采用以下计算方法,还是比较准的

T0CNT_now=CpuTimer0Regs.TIM.all; L++; if(L==1)MotorADJ.Now_Speed=10000000*L/((1000*(timer0Base.usCounter-1)+(60000+T0CNT_last-T0CNT_now)/60)*Pole);//计算转速 :单位 r/min;timer0Base.usCounter=0;

} T0CNT_last=T0CNT_now;

三个霍尔信号接28035的EQEP1A/1B/1I,这三个引脚设置为普通输入,双边沿触发中断。用定时器0记录60度内的时间。那么问题来了,时间为定时器0中断次数的整数倍,会有误差,除非把定时器周期设的很短如1us,这样误差很小,但隔1us进入一次中断会影响程序运行。但如果设为10us误差会很大。怎么办呢?

mangui zhang:

回复 Tong Daniel:

除了计算方法外  还有波形要做好整形处理 

三个霍尔信号接28035的EQEP1A/1B/1I,这三个引脚设置为普通输入,双边沿触发中断。用定时器0记录60度内的时间。那么问题来了,时间为定时器0中断次数的整数倍,会有误差,除非把定时器周期设的很短如1us,这样误差很小,但隔1us进入一次中断会影响程序运行。但如果设为10us误差会很大。怎么办呢?

Tong Daniel:

回复 mangui zhang:

你是指霍尔信号整形处理吗,那就是在硬件上要考虑了吧

赞(0)
未经允许不得转载:TI中文支持网 » 28035根据霍尔信号测速有误差怎么办
分享到: 更多 (0)