QEI编程笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QEI编程笔记2010年8月23日14:35:01
1.正交编码器
下面是几张工业上常用的正交编码器图
正交编码器(又名增量式编码器或光电式编码器),用于检测旋转运动系统的位置和速
度。正交编码器可以对多种电机控制应用实现闭环控制,诸如开关磁阻(SR)电机和交流感应电机(ACIM)。典型的增量式编码器包括一个放置在电机传动轴上的开槽的轮子和一个用于检测该轮上槽口的发射器/检测器模块。通常,有三个输出,分别为:A相、B相和索引(INDEX),所提供的信息可被解码,用以提供有关电机轴的运动信息,包括距离和方向。A相(QEA)和B相(QEB)这两个通道间的关系是惟一的。如果A相超前B相,那么电机的旋转方向被认为是正向的。如果A相落后B相,那么电机的旋转方向则被认为是反向的。第三个通道称为索引脉冲,每转一圈产生一个脉冲,作为基准用来确定绝对位置。编码器产生的正交信号可以有四种各不相同的状态(00,01,10,11)。请注意,当旋转的方向改变时,这些状态的顺序与此相反(11,10,01,00)。正交解码器捕捉相位信号和索引脉冲,并将信息转换为位置脉冲的数字计数值。通常,当传动轴向某一个方向旋转时,该计数值将递增计数;而当传动轴向另一个方向旋转时,则递减计数。选择“x4”测量模式,QEI逻辑在A相和B相输入信号的上升沿和下降沿都使位置计数器计数,可以为确定编码器位置提供更高精度的数据(更多位置计数)。
正交编码器接口(QEI)模块提供了与增量式编码器的接口。QEI由对A相和B相信号进行解码的正交解码器逻辑以及用于累计计数值的递增/递减计数器组成。
QEI模块包括:
•三个输入引脚,即两个相位信号和一个索引脉冲
•提供计数器脉冲和计数方向的正交解码器
•16位递增/递减位置计数器
•计数方向状态
•X2和X4计数分辨率
•两种位置计数器复位模式
•通用16位定时器/计数器模式
•由QEI或计数器事件产生的中断
QEI功能概述
2.2.QEI
QEI模块对正交编码器转轮所产生的两位格雷码进行解码,从而通过位置计数器累计值计算位置,以及确定旋转的方向。另外,该接口还能够捕获编码转轮运行时的速率。位置积分器和速度捕获功能可以单独使用,但是在使能速度捕获前必须先使能位置积分器才可以。phA和phB这两个相位信号在被QEI模块解码前可以进行交换,以改变正向和反向的意义和纠正系统的错误接线。QEI模块支持两种信号操作模式:正交相位模式和时钟/方向模式。
在正交相位模式中,编码器产生两个相位差为90度的时钟信号,它们的边沿关系被用来确定旋转的方向。在时钟/方向模式中,编码器产生一个时钟信号和一个方向信号来分别表示步长和旋转方向。QEI模块配置为何种模式主要依赖于所选用的码盘是何种类型。
群星系列单片机自带的QEI模块,在控制方面提供了极大的方便,在许多电机控制领域都可以胜任其职能。
1.位置捕获
当在正交模式时,phA的边沿超前与phB的边沿时,位置计数器在每检测到一个边沿就加1,phA的边沿落后与phB的边沿时,位置计数器在每检测到一个边沿就减1。当一对上升沿和下降沿出现在其中一个相位上,而在另一个相位上没有任何边沿时,旋转方向已经发生了改变。
在时钟和方式模式下,当方向信号为高电平时,位置计数器在每检测到一个边沿就加1;当方向信号为低电平时,位置计数器在每检测到一个边沿就减1。位置计数器的值在感测到索引脉冲或者达到最大位置时会复位。
2.速度检测
QEI模块里面自带一个定时器,设置定时器的定时时间,在预设的时间周期内,获取捕获到的pha和phB的边沿数目,此数目与编码器的速率成正比例。软件初始化QEI时,设置好捕获的模式和捕获的边沿对象,并设置好定时器的时间,即可读取在预设时间内的边沿数,就可以换算出编码器的速率。
3.中断控制
QEI模块可以在以下4种情况下产生中断:
检测到相位错误时
方向改变时
速率定时器定时时间到时
检测到索引脉冲时
QEI的中断,可以灵活配置,对编码器的状态进行监测,实现方便的控制,也可以配合定时器外设的CCP,对编码器进行精确的控制。也可以利用QEI去扩展其他外设的不足,比如把速率定时器当作一个普通定时器用。
2010年8月23日18:19:31
三大主要功能:
在QEI的使用中,实际上是一个定时器进行计数和定时,从而测试出输入PHa和PHb
的脉冲个数,进而测出转速,由PHa和PHb的相位前后判断旋转方向。通过设定一圈有多少脉冲,在计数的作用下进行脉冲计数,可以确定出绝对位置。
由于index信号的作用是每转一圈产生一个脉冲,也可以作为基准用来确定绝对位置。绝对位置捕捉
而当前时间周期的边沿计数在QEICOUNT寄存器中进行累加。当前时间周期一结束,这时QEICOUNT复位为0,并在一个新的时间周期开始计数。在给定时间周期内所计得的边沿数目与编码器的速度成正比例。通过设定每圈的脉冲个数可以确定绝对位置。
测速
速度捕获包含一个可配置的定时器和一个计数寄存器。定时器在给定时间周期内对相位边沿进行计数(使用与位置积分器相同的配置)。控制器通过QEISPEED寄存器来获得上一个时间周期内的边沿计数值,而当前时间周期的边沿计数在QEICOUNT寄存器中进行累加。当前时间周期一结束,在该段时间内计得的边沿总数便可以从QEISPEED寄存器中获得(上一个值丢失)。这时QEICOUNT复位为0,并在一个新的时间周期开始计数。在给定时间周期内所计得的边沿数目与编码器的速度成正比例。
可以使用下面的等式将速率计数器的值转换为rpm(每分钟的转数):
rpm=(clock*(2^VelDiv)*Speed*60)÷(Load*ppr*edges)
此处:
clock表示定时器的时钟频率
ppr表示实际编码器旋转一圈的脉冲数
edge为2或4,根据QEICTL寄存器中设置的捕获模式来决定(CapMode设为0时,edge为2,CapMode为1时edge为4)。
注意:使用库函数时是记录的Speed。由于某些立即数可能会超过32位整数,因此,在计算这个等式时要特别注意。在上例中,时钟为10,000,除法器为2,500,我们可以将这两个值预先除以100(如果它们在编译时是常数),因此这两个值就变为100和25。事实上,如果它们在编译时是常数,则可将它们简化为只简单地乘以4,而又由于边沿计数因子为4,因此两个值刚好抵消。QEIVelocityConfigure()的第三个参数为:ulPeriod。
所以:rpm=(2^VelDiv*Speed*60)*(Sysclk/ulPeriod)÷(ppr*edges)
获取方向
A相(QEA)和B相(QEB)这两个通道间的关系是惟一的。如果A相超前B相,那么电机的旋转方向被认为是正向的。如果A相落后B相,那么电机的旋转方向则被认为是