高速读取正交编码器信号(例如,1MHz,或1m/s,分辨率为1μm)通常需要专用硬件。本设计方案展示了一个简单的方案,仅使用ATtiny2313A AVR微控制器即可实现此功能。当然,微控制器也可以通过串行接口连接到其他设备,或者测量位置可以显示在本地LCD上,可以连接到端口PB。此外,可以添加一个或多个LED来指示错误情况。
图1用ATtiny2313A读取正交信号; Z索引信号是可选的。
在这个实现中,中断处理程序非常重要。它在不到1μs的时间内读取输入信号A和B.差分信号AP/N和BP/N由SN75157接收器处理,如果编码器输出逻辑电平信号,则不需要。
处理器配置为端口PD引脚的任何更改产生中断。该中断是中断向量表中的最后一个,因此
可以省去跳转指令,从而减少2-3个时钟(100-150ns)的中断服务时间。
先前和当前信号之间的异或操作( A 旧 ? B new或 A new ? B old )确定当前位置是否从前一个增加或减少。 old 和 B old 是改变状态前的A和B信号, A new 和 B new 是中断后的值。中断处理程序位于 PCIsubroutine1.txt 文件中。
中断处理程序的执行时间为800-850ns(16-17个时钟)。为了最大限度地缩短ISR的执行时间,一些寄存器专门用于它,主程序不能使用它:
R10保存SREG并测试激活新的中断
R11和R12用于新旧状态
R24和R25用于位置传感器
要计算当前位置,需要只有一个时钟周期。缺点是该位置只能有65536个值。您可以使用3或4个字节确定位置,在这种情况下,子程序执行时间从添加必要指令后增加到18-19个周期(使用寄存器对R24,R26,R28或R30)。
中断处理程序在退出当前ISR之前检查新中断。通过在SREG中设置位T来指示该情况。执行此检查,执行时间增加3个周期。我们使用RB6029(每转4,000个脉冲)以最大速度测试子程序的操作,没有检测到错误。
在激活中断之前,PCIE2值必须放在寄存器R12中(读取PIND寄存器)在启用PCINT2中断并设置SREG -I标志之前。
如果要使用Z索引信号,该位置将存储在三个寄存器中,为1,024,000个值? (4,000次计数/旋转; 256次旋转)。读取数据的中断处理程序更复杂,如 PCIsubroutine2.txt 中所示。长度为19个周期,或当Z激活时当前位置递增时为20个周期。
如果Z索引处于激活状态,我们清除角度位置,增加转数,并检查先前的角度价值是3,999。在该子程序中,检测到三个错误:一个用于重叠的新中断(如前一种情况),另外两个与Z索引相关(检查先前角位置的正确性)。错误计数器寄存器rerr1,rerr2和rerr3应由用户定义。要初始化系统,请运行 InitIndexZ.txt ,等待Z处于活动状态。
-
微控制器
+关注
关注
48文章
7423浏览量
150779 -
PCB打样
+关注
关注
17文章
2968浏览量
21617 -
华强PCB
+关注
关注
8文章
1831浏览量
27693 -
华强pcb线路板打样
+关注
关注
5文章
14629浏览量
42933
发布评论请先 登录
相关推荐
评论