单片机外部中断计数问题
本帖最后由 qian_zh 于 2014-4-23 20:59 编辑我做的是步进电机的闭环控制,用旋转编码器和电机联动,编码器的AB相接在外部中断上实现计数。
现在遇到一个问题,计数刚开始几组都是正常的,到后来就不准了,电机都停止了,可是单片机还在计数,而且越到后来差别越大,我真搞不懂了,望各位大神帮帮忙。
我和编码器的客服沟通过,他说要把编码器的屏蔽线接地,可是我接地后情况还是没有改观,纠结啊。
我的外部中断计数程序:
void int0_ISR() interrupt 0 //外部中断0中断服务函数
{
if(INT11 == 1) //AB相相差90度,A相触发时,B相为低电平,则反转,下同理
int0_count++;
else
int0_count--;
}
有人说外部中断里要关中断,延迟,再开中断。可是我试过,加不加延迟对实验没什么影响。
自己顶下 我最近也在研究速度问题,不过我的小车是用光电开关和码盘作为计数方式,你可以考虑一下慢慢转动电机,看看效果。 1. 首先用示波器观察一下 A, B 线的波形是否和理论一致
2. IO口有没有上/下拉电阻
3. A,B线 有没有增加对地小电容滤波
xiaomu 发表于 2014-4-24 15:26
1. 首先用示波器观察一下 A, B 线的波形是否和理论一致
2. IO口有没有上/下拉电阻
3. A,B线 有没有增加对 ...
非常感谢您的回答。
1.我用示波器测过A,B线波形,基本上和理论一致,因为是下降沿触发,下降沿跳变迅速,见下图所示。
而且,因为我示波器是一直插在上面,我发现,示波器都没有波形了,外部中断还在计数,搞不懂。
2.A,B线是连在外部中断,也就是P3.2和P3.3口上的,stc89c52应该是内置上拉电阻的吧。
3.A,B线我是直接接在IO口上的,没接小电容。滤波的话你觉得我应该加多大的电容比较好。
我刚开始接触电方面的内容,很多都不懂,希望多多包涵。 ypengfei 发表于 2014-4-24 15:02
我最近也在研究速度问题,不过我的小车是用光电开关和码盘作为计数方式,你可以考虑一下慢慢转动电机,看看 ...
非常感谢您的建议。我研究电机的加减速,从脉冲周期2ms加速到1.2ms,然后匀速,再从1.2ms减速到2ms。我试了两组,减速的时候分别减速到1.8ms和2.5ms,我发现结果差不多,都是从第十次开始误差就变得很大。我觉得会不会可能不是速度的问题。
不知道您计数的时候有没有加抗干扰的电路啊,不知道会不会是干扰的问题。 会不会程序判断计数完成的问题。
页:
[1]