AVR微控制器处理正交编码器信号只需不到1μs的时间

发布时间:2016-2-15 10:53    发布者:designapp
关键词: AVR , 编码器
高速读取正交编码器信号(比如1MHz,或1m/s,分辨率是1μm)通常需要专用硬件。本设计实例展示了一种简单的方案,它只使用了一个型号为ATtiny2313A的AVR微控制器就能实现这个功能(图)。当然,微控制器也可以通过串口连接到其它器件,或者将测量到的位置信息显示在与端口PB连接的本地液晶显示器上。另外,还可以将一个或多个LED增加到信号误差条件中。


图:用ATtiny2313A读取正交信号;Z索引信号是可选的。


在这个实现中,中断处理程序非常重要。它可以在不到1μs的时间内读取输入信号A和B。差分信号AP/N和BP/N由SN75157接收器处理,如果你的编码器输出的是逻辑电平信号,甚至无需处理。

处理器经配置可以根据端口PD引脚的任何变化产生中断。这个中断位于中断矢量表的最后,因此无需跳转指令,进而可以减少2-3个时钟(100~150ns)的中断服务时间。

通过以前信号和当前信号之间的异或(XOR)操作(Aold?Bnew 或Anew ?Bold)可以判断当前位置是在以前位置基础上增加了还是减少了。Aold和Bold是状态改变前的A和B信号,Anew和Bnew是在中断发生后的值。中断处理程序在PCIsubroutine1.txt文件中。

中断处理程序的执行时间是800~850ns(16~17个时钟)。为了尽量减少中断服务例程(ISR)的执行时间,需要使用一些专门的寄存器,这些寄存器一定不能再被主程序使用:

·R10用于保存SREG,并检测新中断的激活
·R11和R12用于新旧状态
·R24和R25用于位置传感器

计算当前位置只需一个时钟周期。缺点是位置只有65536个值。你可以用3个或4个字节来判断位置,此时子程序的执行时间由于增加了必要的指令(使用寄存器对R24、R26、R28或R30)而增加到18-19个周期。

中断处理程序在退出当前ISR之前会检查是否有新的中断。这种情况由SREG中的T位置位通知。实现这种检查后的执行时间将增加3个周期。我们用RB6029(每个圈(rotation)有4000个脉冲)以最快速度测试了子程序的运行,没有发现错误。

在激活中断之前,必须将PCIE2值放进寄存器R12(在使能PCINT2中断和SREG-I标志置位之前先要读取PIND寄存器)。

如果你想使用Z索引信号,位置需要存储在三个寄存器中,因为有1024000个值(4000个/圈;256个圈)。中断处理程序读取数据的过程比较复杂,详见PCIsubroutine2.txt文件。当Z处于激活状态,同时当前位置增加时,长度是19个周期或20个周期。

如果Z索引是激活状态,我们清除角度位置,增加圈的数量,同时检查前面的角度位置是3999。在这个子程序中检测到三个错误:一个错误是叠加了新的中断(就像前一例子中那样),两个错误与Z索引(检查以前角度位置的正确性)有关。误差计数寄存器rerr1、rerr2和rerr3应该由用户来定义。为了初始化系统,需要执行InitIndexZ.txt程序,它会等待Z被激活。
本文地址:https://www.eechina.com/thread-160692-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 利用模拟开发工具生态系统进行安全电路设计
  • 想要避免发生灾难,就用MPLAB SiC电源仿真器!
  • Cortex-M4外设 —— TC&TCC结合事件系统&DMA优化任务培训教程
  • 更佳设计的解决方案——Microchip模拟开发生态系统
  • 贸泽电子(Mouser)专区

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表