本帖最后由 eydj2008 于 2010-11-13 11:21 编辑
yewuyi 分析得 很好 很好理解 能行得通
我来总结一下:
1.可以检测其中一线 我们假设为A线 可以检测上升 或是下降沿中断 中断设置为最高优先级(占用最多不过10个指令周期 已经应用) 这里以上升沿为例
a.检测到A线上升沿触发了中断,那么再检测B线的电平为高(反转)或者为低(正转) 来判断是正还是反转 (以上图为例) 这样就可以在一个齿之间 判断是正转还是反转了,精度与齿数相同。
b.也有结构(每个齿不同)和编码器做得不够好的情况,比如:A线的上升沿 刚好又是B线的 上升沿或是下降沿 这样无论你怎么是检测B线 要么都为高,要么都为低.这种是要避免的情况(一般这样情况很少,可以改善编码器与编码盘见c)
c.编码器与编码盘 最佳的做法是 编码盘 编码盘齿间距==二个光电检测中心距离/3*2 或是/5*2 /7*2 。。。 刚好正交 就可以解决这个问题
且编码盘的凹凸齿距 相等
d.我看了老外的程序 并没有加滤波(用中断不好滤波,),当然加上更好(肪冲宽度远小于齿距的,放弃不计数,是干扰) 会多占几个时钟周期来滤波。
e.个人感觉用定时查询方式不是很理想,因为它只能检测电平。而电平有四种情况
正转 A 0 1 1 0
B 0 0 1 1
反转 A 0 0 1 1
B 0 1 1 0
这样占用CPU时间过多 定时查询的时候,会出现四种情况 还得判断出来。
附 300R/MIN 100齿 每个齿的时间是2ms 定时周期至少得高出这个5倍以上 <400us |