主题 : 实验猜测:mini2440双沿中断缺陷 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 95399
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2013-08-12
最后登录: 2016-05-25
楼主  发表于: 2014-05-06 10:40

 实验猜测:mini2440双沿中断缺陷

双沿中断缺陷
注:编码器测量原理来源
    鲜浩,任爱芝,盛仲飚. 增量式编码器数据采集[J ] .华北工业学院学报,2003 ,24 (2) :142 - 143.
一、问题背景:增量式编码器精确计数
1、正常情况下:编码器输出信号如下



当B相为高电平时,如果检测到A相有一个上升沿,则可说明波形从左向右运动,则令计数器加1;当B相为低电平时,如果检测到A相有一个上升沿,则可说明波形从右向左运动,则令计数器减1.
2、实际情况下:编码器输出信号如下
实际情况下:编码器输出信号如下

在B相的高电平期间,如编码器正好在A相的边沿位置来回旋转,而最终却没有产生角位移,这样会在B相高电平期间检测到无数个上升沿,会在计数器中加上很多次,这样,编码器并没有产生角位移,但却令相应的计数器加了很多次,从而引起了读数误差.
3、精确测量原理:
当A 相出现一个上升沿(即A 非相出现一个下降沿),若检测到B为高电平,则用软件令计数器加1;当A相出现一个下降沿,若检测到B为高电平,则用软件令计数器减1.这样,两个计数器之差,则对应了编码器实际的角位移,而其正负对应了旋转方向.设置单片机外部中断的触发方式为下降沿触发,当INTO产生断,判断B为高电平,则令计数器减1;当INT1产生中断,判断B为高电平,则令计数器加1.



即:检测  下降沿
A相          (B为高,计数有效,+1,正向)
      A非相(A上升沿)(B为低,计数无效,-1,反向)
(编码器一个脉冲,必定有上升沿和下降沿,)

二、问题发现:S3C2440(ARM9)测量过程
1、电平匹配
编码器输出脉冲(3600 , 0.1度),峰值为工作电压,12V;
控制器为CMOS电平,3.3V附近为高。
使用高速光耦 6N137 电平匹配,输入波形如下:






低速状况下:
A+B

高速状况下(转速在 700 圈/分钟 50 KHZ附近):
A + B


2、计数程序及调试信息
  中断处理函数如下

主程序工作频率:400M
为方便调试,只有外部中断EINT0( A相正 ),EINT1(A相 非,)工作,电机处于低速,消除串口打印延时误差





secureCRT 串口调试软件输出如下:
  

现象说明:在某个脉冲,MCU未能捕捉到 上升沿或下降沿,出现计数失步,累计误差严重。













三、误差来源猜想
在稳定转速下(脉冲=上升沿+下降沿),MCU捕捉边沿会出现错误。
猜测结论:ARM内核处理器,在捕捉同一周期,由同一脉冲转化而来的俩路边沿中断,会出现误差。
关于ARM9 外部中断细节资料很少,下图是 ARM嵌入式系统基础教程(周立功,北航,ARM7)关于边沿触发的讲解。



图片无法显示,调试过程见附件,求指导!
级别: 新手上路
UID: 95399
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2013-08-12
最后登录: 2016-05-25
1楼  发表于: 2014-05-06 10:43
附件:
级别: 新手上路
UID: 95399
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2013-08-12
最后登录: 2016-05-25
2楼  发表于: 2014-05-06 10:44

 回 1楼(wm2590) 的帖子

级别: 新手上路
UID: 95399
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
贡献值: 0 点
综合积分: 26 分
注册时间: 2013-08-12
最后登录: 2016-05-25
3楼  发表于: 2014-05-06 10:46
[upload=1]