信用网站建设,网站图片做伪静态,黄冈网站建设推荐,东营网站建设入门单片机学习#xff01; 目录 文章目录 前言 一、编码器接口简介 1.1 编码器接口作用 1.2 编码器接口工作流程 1.3 编码器接口资源分布 1.4 编码器接口输入引脚 二、正交编码器 2.1 正交编码器功能 2.2 引脚作用 2.3 如何测量方向 2.4 正交信号优势 2.5 执行逻辑 三、编码器定时… 单片机学习 目录 文章目录 前言 一、编码器接口简介 1.1 编码器接口作用 1.2 编码器接口工作流程 1.3 编码器接口资源分布 1.4 编码器接口输入引脚 二、正交编码器 2.1 正交编码器功能 2.2 引脚作用 2.3 如何测量方向 2.4 正交信号优势 2.5 执行逻辑 三、编码器定时器框图 3.1 编码器接口分布情况 3.2 编码器接口设计 四、编码器接口基本结构 4.1 电路执行逻辑 4.2 反转得负数逻辑 五、工作模式 5.1 编码器接口工作逻辑 5.2 三种工作模式 六、实例 6.1 TI1和TI2均不反相 6.2 TI1反相 6.3 实例总结 总结 前言 本文介绍通过定时器的编码器接口来自动计次。之前博文介绍过通过触发外部中断在中断函数里手动进行计次。编码器接口自动计次与触发外部中断手动计次相比较而言使用编码器接口的好处就是节约软件资源。如果使用外部中断计次当电机高速旋转时编码器每秒产生上千上万个脉冲程序就得频繁进中断。进中断之后完成的任务又只是简单的加一减一软件资源就被这种简单而又低级的工作给占用了。所以对于这种需要频繁执行且操作又简单的任务一般都会设计一个硬件电路模块来自动完成。编码器接口就是用来自动给编码器进行计次的电路每隔一段时间取一下计次值就能得到编码器旋转的速度了。 一、编码器接口简介 Encoder Interface 编码器接口编码器接口可接收增量正交编码器的信号根据编码器旋转产生的正交信号脉冲自动控制CNT自增或自减从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1和通道2 1.1 编码器接口作用 使用定时器的编码接口再配合编码器就可以测量旋转速度和旋转方向。这里编码器测速一般应用在电机控制的项目上使用PWM驱动电机再使用编码器测量电机的速度再用PID算法进行闭环控制。一般电机旋转速度比较高会使用无接触式的霍尔传感器或者光栅进行测速。 编码器接口可以自动给编码器进行计次的电路每隔一段时间计次值就能得到编码器旋转的速度了。 1.2 编码器接口工作流程 编码器接口的工作流程就是接收正交信号自动执行CNT自增或自减。 正交编码器可输出两个方波信号也就是正交信号相位相差90°超前90°或者滞后90°分别代表正转和反转。 一个编码器有两个输出一个是A相一个是B相。然后接入到STM32的定时器的编码器接口编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减。 工作逻辑如初始化之后CNT初始值为0然后编码器右转CNT就右转产生一个脉冲CNT就加一次。比如右转产生10个脉冲后停下来那么这个过程CNT就由0自增到10停下来。编码器左转CNT就--左转产生一个脉冲CNT减一次。比如编码器再左转产生5个脉冲那CNT就在原来10的基础上自减5停下来。 这个编码器接口其实就相当于是一个带有方向控制的外部时钟。它同时控制着CNT的计数时钟和计数方向。这样CNT的值就表示了编码器的位置。 方向测速如果每隔一次取一次CNT的值再把CNT清零。每次取出来的值就表示了编码器的速度。用测周法和测频法的方法来看这个编码器测速实际上就是测频法测正交脉冲的频率。CNT计次然后每隔一段时间取一次计次就是测频法的方法。但是这个编码器接口计次更高级它可以根据旋转方向不仅能自增计次还能自减计次是一个带方向的测速。 1.3 编码器接口资源分布 编码器接口资源比较紧张如果一个定时器配置成了编码器接口模式那它基本上就干不了其他活了如CT86芯片只有TIM1、2、3、4一共四个定时器所以最多只能接4个编码器而且接完4个编码器就没有定时器可以用了。如果编码器需求比较多的话要考虑一下这个资源够不够用。当然还是可以用外部中断代码来接编码器这样就是用软件资源来弥补硬件资源。硬件资源和软件资源是互补的。一般在有硬件资源的情况下优先使用硬件资源。 1.4 编码器接口输入引脚 编码器接口的两个输入引脚借用了输入捕获的通道1和通道2这个可以从下文通用定时器结构框图来看。编码器的两个输入引脚就是每个定时器的CH1和CH2引脚。另外两个CH3和CH4不能接编码器。 二、正交编码器 2.1 正交编码器功能 正交编码器一般可以测量位置或者带有方向的速度值。 2.2 引脚作用 正交编码器一般有两个信号输出引脚一个是A相一个是B相。编码器的旋转轴转起来时A相和B相就会输出上图中的方波信号。转的越快这个方波的频率就越高所以方波的频率就代表了速度可以取出任意一相的信号来测频率就能知道旋转速度了。 2.3 如何测量方向 但是只有一相的信号无法测量旋转方向。因为无论正转还是反转他都是这样的方波。想要测量方向还必须要有另一根线的辅助。
一种方案是不用B相再定义一个方向输出引脚正转置高电平反转置低电平。这也是一种解决方案但这样的信号并不是正交信号。另一种解决方案就是正交信号当正转时A相提前B相90°反转时A相滞后B相90°这里的正转反转都是极性问题是相对的。 2.4 正交信号优势 使用正交信号相比较单独定义一个方向引脚有什么优势
正交信号精度更高因为A、B相都可以计次相当于计次频率提高了一倍。正交信号可以抗噪声因为正交信号两个信号必须是交替跳变的所以可以设计一个抗噪声电路。如果一个信号不变另一个信号连续跳变也就是产生了噪声那这时计次值是不会变化的。 2.5 执行逻辑 分析一下正交信号如何计次和区分旋转方向从上图波形中分析。
在正转的时候 第一个时刻A相上升沿对应B相低电平。是表里的第一行第二个时刻B相上升沿对应A相高电平是表里的第三行第三个时刻A相下降沿对应B相高电平是表里的第二行第四的时刻B相下降沿对应A相低电平是表里的第四行。
可对应上图正转波形和表格。
在反转的时候 第一个时刻B相上升沿对应A相低电平。是表里的第一行第二个时刻A相上升沿对应B相高电平是表里的第三行第三个时刻B相下降沿对应A相高电平是表里的第二行第四的时刻A相下降沿对应B相低电平是表里的第四行。
可对应上图反转波形和表格。 不难发现当A相B相出现两个表中的边沿时一相对应另一相的状态正传和反转正好是反相的。如A相上升沿正转B相就是低电平反转B像就是高电平。对比其他也都是相反的。 编码器接口的设计逻辑首先把A相和B相的所有边沿作为计数器的计数时钟。出现边沿信号时就计数自增或自减。计数的增减也就是计数的方向由另一相的状态来确定当出现某个边沿时判断另一相的高低电平如果对应另一相的状态出现在上图表中那么正转计数自增反转计数自减这样就能实现编码器接口的功能这也是STM32定时器编码器接口的执行逻辑。 三、编码器定时器框图 3.1 编码器接口分布情况 高级定时器和通用定时器的编码器接口都是一样的这两个定时器都只有一个编码器接口。基本定时器没有编码器接口。 3.2 编码器接口设计
编码器接口输入部分 上图中可以看出编码器接口有两个输入端分别要接到编码器的A相和B相。两个网络标号TI1FP1和TI2FP2对应输入部分电路的TI1FP1和TI2FP2这里编码器接口的两个引脚借用了输入捕获单元的前两个通道。所以最终编码器的输入引脚就是定时器的CH1和CH2两个引脚。信号的通路是CH1通过输入滤波器和边沿检测器从TI1FP1通向编码器接口CH2通过输入滤波器和边沿检测器从TI2FP2通向编码器接口。CH3和CH4与编码器接口无关。其中CH1和CH2的输入捕获滤波器和边沿检测器编码器接口也有使用而电路后面部分是否交叉连接TI1FP2和TI2FP1、预分频器和CCR寄存器都与编码器接口无关。
编码器接口输出部分 编码器接口输出部分其实就相当于从模式控制器控制CNT的计数时钟和计数方向。这里的输出执行流程按照上一部分图中相位和边沿对应的表格若出现边沿信号并且对应另一相的状态为正转则控制CNT自增否则控制CNT自减。这里72MHz内部时钟和时基单元初始化时设置的计数方向并不会使用因为此时计数时钟和计数方向都是处于编码器接口托管的状态计数器自增和自减受编码器控制。 四、编码器接口基本结构 4.1 电路执行逻辑 输入捕获的前两个通道通过GPIO口接入编码器的A、B相然后通过滤波器和边沿检测极性选择产生TI1FP1和TI2FP2通向编码器接口编码器接口通过预分频器控制CNT计数器的时钟。同时编码器接口还根据编码器的旋转方向控制CNT的计数方向。编码器正转时CNT自增编码器反转时CNT自减。这里ARR也是有效的一般会设置ARR为65535最大量程。这样可以利用补码的特性很容易得到负数。 4.2 反转得负数逻辑 当CNT初始为0正转CNT自增0、1、2、3、4、6等等。当CNT初始为0反转0下一个数就是65535接着是65534、65533、65532等等。但是这里负数应该是-1、-2、-3。这里会有一个操作直接把16位的无符号数转换为16位的有符号数根据补码的定义65535就对应-165534就对应-265533就对应-3.这样就可以直接得到负数。 五、工作模式 5.1 编码器接口工作逻辑 上方表描述的就是编码器接口的工作逻辑TI1FP1和TI2FP2接的就是编码器的A、B相在A相和B相的上升沿或者下降沿触发计数。向上计数和向下计数取决于边沿信号发生的这个时刻另一相的电平状态对应表中相对信号的电平。TI1FP1对应TI2TI2FP2对应TI1就是另一相电平的意思。 5.2 三种工作模式 表中第一列可以看到编码器还分了3种工作模式分别是仅在TI1计数仅在TI2计数在TI1和TI2都计数。 上文中总结的表格 左表4种状态都是正转都可以计次自增右表这四种状态都是反转都可以计次自减。这些状态都涉及了两个引脚分别是A相上升沿、A相下降沿、B相上升沿、B相下降沿如果这几种状态都执行自增或自减就是A相和B相的边沿都计数。这就对应工作模式的第三种模式TI1和TI2都计数。 当然这里还可以忽略一些边沿
可以仅在A相的上升沿和下降沿自增或自减而B相的这两个状态忽略掉不执行计数也可以仅在B相的上升沿和下降沿自增或自减而A相的这两个状态忽略掉不执行计数。
这样也可以实现功能只不过是计次的精度低了一些。这两种仅在一个边沿计数的模式就对应了工作模式里的前两种模式仅在TI1计数和仅在TI2计数。 工作模式表中的自增自减也对应上文总结的表格若TI1接A相、TI2接B相当A、B相为下表这四个状态时就是正转计数器需要自增。 上表A相上升沿B相低电平对应工作模式表中TI1和TI2都计数A相上升沿对应另一相低电平执行向上计数上表A相下降沿B相高电平对应工作模式表中TI1和TI2都计数A相下降沿对应另一相高电平执行向上计数上表B相上升沿A相高电平对应工作模式表中TI1和TI2都计数B相上升沿对应另一相高电平执行向上计数上表B相下降沿A相低电平对应工作模式表中TI1和TI2都计数B相下降沿对应另一相低电平执行向上计数
观察发现这里正转的状态都是向上计数。 若TI1接A相、TI2接B相当A、B相为下表这四个状态时就是反转转计数器需要自减。 上表A相上升沿B相高电平对应工作模式表中TI1和TI2都计数A相上升沿对应另一相高电平执行向下计数上表A相下降沿B相低电平对应工作模式表中TI1和TI2都计数A相下降沿对应另一相低电平执行向下计数上表B相上升沿A相低电平对应工作模式表中TI1和TI2都计数B相上升沿对应另一相低电平执行向下计数上表B相下降沿A相高电平对应工作模式表中TI1和TI2都计数B相下降沿对应另一相高电平执行向下计数
观察发现这里反转的状态都是向下计数。 总结正转的状态都是向上计数反转的状态都是向下计数。 六、实例
6.1 TI1和TI2均不反相 上图为两个引脚的边沿都计数的模式执行的逻辑对应图上方的表格。
图中上半部分为TI1和TI2的时序信号下半部分为计数器值的变化情况。
第一个状态TI1上升沿TI2低电平表格中上升沿、低电平对应向上计数所以图中计数器变高了一级。后面连着几个状态对应表格都是向上计数为正转。
第二个状态展示的是正交编码器抗噪声的原理在这个状态中TI2没有变化但是TI1却跳变了好几次这不符合正交编码器的信号规律正交信号两个输出交替变化就像人走路一样先左腿迈一步后右腿迈一步左右腿交替向前迈而这里的状态就相当于右腿没动左腿连续走了好几步。显然这个相当于左腿的动作信号是一个毛刺信号。通过上表中正交信号的逻辑就可以把这种噪声滤掉。
从噪声的毛刺信号开始看
TI1上升沿TI2低电平对照表格向上计数这里自增TI1下降沿TI2还是低电平对照表格向下计数这里自减TI1上升沿TI2低电平对照表格向上计数这里自增TI1下降TI2还是低电平对照表格向下计数这里自减
所以这里如果出现了一个引脚不变另一个引脚连续跳变多次的毛刺信号计数器就会加、减、加、减来回摆动最终计数值还是原来那个数并不受毛刺噪声的影响。这就是正交编码器抗噪声的原理。
第三个状态是反转的波形TI1下降沿TI2低电平表格中下降沿、低电平对应向下计数所以图中计数器变低了一级。后面连着几个状态对应表格都是向下计数为反转。
第四个状态TI1不动TI2多次跳变计数值也是来回摆动过滤噪声。
第五个状态是正转向上计数。 6.2 TI1反相 上图展示的是极性的变化对计数的影响。前一个实例是两个引脚都不反向这个实例是TI1反相、TI2不反相的图。 TI1反相TI1和TI2的信号进来都会经过极性选择的部分在输入捕获模式下极性选择是选择上升沿有效还是下降沿有效编码器接口是上升沿和下降沿均有效的上升沿和下降沿都需要计次所以编码器接口这里不在是边沿的极性选择而是高低电平的极性选择。如果选择上升沿的参数就是信号直通过来高低电平极性不反转如果选择下降沿的参数就是信号通过一个非门过来高低电平极性反转。所以在极性选择这里会有两个控制极性的参数选择是否加一个非门反转极性。对应实例如果两个信号TI1、TI2都不反转就对应第一个实例均不反相如果把TI1高低电平反转一下就是这里TI1反相的实例。 分析的时候图中上半部分的TI1和TI2的时序信号是输入信号若直接对照上表分析得到的计次方向是错误的这里TI1反向之后先把图中TI1高低电平取反取反后才是反相后实际给编码器接口的电平再对照表格分析。 6.3 实例总结 TI1和TI2均不反相的实例图和TI1反相后的实例图对照来看这两个图的计数方向是相反的这里可以用于需要反转计数方向时可以把任意一个引脚反相。当然反转计数方向时也可以直接把A、B相两个引脚换一下。 总结 以上就是今天要讲的内容本文仅仅简单介绍了编码器接口的作用、电路结构、执行逻辑。