使用ATtiny2313A AVR微控制器即可实现高速读取正交编码器信号

高速读取正交编码器信号(例如,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处于活动状态。

使用重新设计的紧凑型 BLDC 驱动器提高电机性能
面对“疯X”和“疯8”,中国厂商应该这样做
【成功案例】通过Z-Wave LR方案助力Alarm.com实现智能漏水检测
联发科与捷豹电波签署战略合作框架协议
瑞波开源了首个比特币插件并实现了一笔交易在7个不同账本中的转移
使用ATtiny2313A AVR微控制器即可实现高速读取正交编码器信号
简单全面!一文读懂自动驾驶需要的所有传感器(推荐)
常用于调节隔离式电源输出电压电路
佐思汽车周报2018年前三季度:增长的营收,下滑的利润
新冠肺炎疫情爆发,刷脸支付遭遇前所未有的挑战
不是生产力工具,还能叫元宇宙吗?
如何制作220v交流至5v直流稳定电源
赛灵思+三星:推出新款SmartSSD计算存储驱动器
亚马逊深入汽车领域
Graphcore发布IPU开发者云 给中国AI开发者带来一大助力
当今社会下我们对医疗机器人的疯狂渴望
高通骁龙810抢先看:64位八核,20nm工艺
avx钽电容的应用能够为我们解决哪些麻烦
在JavaScript中动态的创建QML对象
如何判断集成电路IC是否“有问题”