STM32F103_正交编码器接口应用笔记

Abstract --- The quadrature encoder which is very popular in the motor servo control application, known as a 2-channel incremental encoder, converts linear displacement
into a pulse signal. By monitoring the number of pulses and the relative phase of the
two signals you can track the position, the direction of rotation and speed. In ddition,
a third channel, or index signal, can be used to reset the position counter.
STM3210x which is the MCU based on ARM latest core - Cortex-M3, integrates the
quadrature encoder interface. Accordingly STM3210x can handles the encoder
signal without any CPU overhead which it is possible for CPU to focus on the vector
control.
在马达控制类应用中, 正交编码器可以反馈马达的转子位置及转速信号。TM32F10x 系列MCU集成了正交编码器接口,增量编码器可与MCU直接连接而无需外部接口电路。该应用笔记详细介绍了STM32F10x与正交编码器的接口,并附有相应的例程,使用户可以很快地掌握其使用方法。
1正交编码器原理
正交编码器实际上就是光电编码器,分为增量式和绝对式,较其它检测元件有直接输出数字量信号,惯量低,低噪声,高精度,高分辨率,制作简便,成本低等优点。增量式编码器结构简单,制作容易,一般在码盘上刻A、B、Z三道均匀分布的刻线。由于其给出的位置信息是增量式的,当应用于伺服领域时需要初始定位。
格雷码绝对式编码器一般都做成循环二进制代码,码道道数与二进制位数相同。格雷码绝对式编码器可直接输出转子的绝对位置,不需要测定初始位置。但其工艺复杂、成本高,实现高分辨率、高精度较为困难。
本文主要针对增量式正交编码器,它产生两个方波信号A和B,它们相差+/- 90°,其符号由转动方向决定。如下图所示:
图1:增量式正交编码器输出信号波形
2STM32F10x正交编码器接口详述
STM32F10x的所有通用定时器及高级定时器都集成了正交编码器接口。定时器的两个输入TI1和TI2直接与增量式正交编码器接口。当定时器设为正交编码器模式时,这两个信号的边沿作为计数器的时钟。而正交编码器的第三个输出(机械零位),可连接外部中断口来触发定时器的计数器复位。
2.1定时器正交编码器接口框图
图2:定时器正交编码器接口
笔式摄像机2.2功能描述
选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIM1_SMCR寄存器中的SMS=0
01;如果只在TI1边沿计数,则置SMS=010;
如果计数器同时在TI1和TI2边沿计数,则置SMS=011。
通过设置TIM1_CCER寄存器中的CC1P和CC2P位,可以选择TI1和TI2极性;如果需要,还可以对输入滤波器编程。
两个输入TI1和TI2被用来作为增量编码器的接口。参看表1,假定计数器已经启动(TIM1_CR1寄存器中的CEN=1),则TI1FP1或TI2FP2上的有效跳变作为计数器的时钟信号。TI1FP1和TI2FP2是TI1和TI2在通过输入滤波器和极性控制后的信号;如果没有滤波和变相,则TI1FP1=TI1,TI2FP2=TI2。根据两个输入信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信号的跳变顺序,计数器向上或向下计数,因此TIM1_CR1寄存器的DIR位由硬件进行相应的设置。不管计数器是对TI1计数、对TI2计数或者同时对TI1和TI2计数。在任一输入(TI1或者TI2)跳变时都会重新计算DIR位。
编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。这意味着计数器只在0到TIM1_ARR寄存器中自动装载值之间连续计数(根据方向,或是0到ARR计数,或是ARR到0计数)。所以在开始计数之前必须配置TIM1_ARR;同样,捕获器、比较器、预分频器、周期计数器、触发输出特性等仍工作如常。编码模式和外部时钟模式2不兼容,因此不能同时操作。
在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此,它的内容始终指示着编码器的位置。计数方向与相连的传感器旋转的方向对应。表1列出了所有可能的可能的组合,假设TI1和TI2不同时变换。
表1:计数方向与编码器信号的关系
一个外部的增量编码器直接和MCU连接不需要外部接口逻辑。但是,一般使用比较器将编码器的差动输出转换到数字信号,这大大增加了抗噪声干扰能力。编码器输出的第三个信号表示机械零点,可以连接到一个外部中断输入,触发一个计数器复位。
抗干扰滤波器
图2给出一个计数器操作的实例,显示了计数信号的产生和方向控制。它还显示了当选择了双边沿时,输入抖动是如何被抑制的;这种情况可能会在传感器的位置靠近一个方向转换点时发生。在这个例子中,我们假定配置如下: z CC1S=’01’ (TIMx_CCMR1寄存器,IC1FP1映射到TI1)热锻工艺
z CC2S=’01’ (TIMx_CCMR2寄存器,IC2FP2映射到TI2)
z CC1P=’0’ (TIMx_CCER寄存器,IC1FP1不反相,IC1FP1=TI1)
z CC2P=’0’ (TIMx_CCER寄存器,IC2FP2不反相,IC2FP2=TI2)
z SMS=’011’ (TIMx_SMCR寄存器,所有的输入均在上升沿和下降沿有效).
z CEN=’1’ (TIMx_CR1寄存器,计数器使能)
图3  编码器模式下的计数器操作实例
自动平开门
图3为当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同)
图4  IC1FP1反相的编码器接口模式实例
当定时器配置成编码器接口模式时,提供传感器当前位置的信息。如果使用另一个配置在捕获模式的定时器,测量两个编码器事件的间隔,可以获得动态的信息(速度,加速度,减速度)。指示机械零点的编码器输出可被用作此目的。根据两个事件间的间隔,可以按照固定的时间读出计数器值。如果可能的话,你可以把计数器的值锁存到第三个输入捕获寄存器(捕获信号必须是周期的并且可以由另一个定时器产生)。它也可以通过一个由实时时钟产生的DMA请求来读取它的值。
3例程
为了使用户更快捷地掌握和使用STM32F10x的正交编码器接口,该应用笔记 提供了一个应用例程。该例程基于学习板EK_STM32F,开发环境为IAR EWARM 4.42A。
3.1文件目录
例程的文件目录如下图所示。在安装完IAR EWARM 4.42A后,直接双击以下目 录 \example\project\EWARM\下的project Workspace文件,打开该例程。
在上图中:
z FWLib目录包含了STM32F10x的标准库文件;
z Project 目录中,source目录包含了例程的源文件,而头文件在include目录中。
3.2功能描述
正交编码器的输出信号A和B分别连接MCU的PA6和PA7管脚,这两个管脚复用为TIM3_CH1及TIM3_CH2。LCD可用于显示三类信息,分别为:TIM3的计数器值、马达转子的电角度值(即马达转子的位置,取值范围为-180度 ~ +180度,其单位为1度)及马达转动的电频率(其单位为0.1Hz)。由于学习板EK_STM32F 的LCD一次只能显示四个数值,因此该例程使用了KEY2键来切换LCD的显示内容。
3.3例程函数描述
该例程共有五个源文件,分别为:
z main.c:主程序
z lcd.c:LCD驱动程序
z stm32f10x_encoder.c:正交编码器的接口驱动程序
z stm32f10x_it.c:包含了定时器2的中断程序
z stm32f10x_Timebase.c:SysTick的时基程序
每个源文件包含的函数如下表所示。
表2 main.c包含的函数
函数名函数功能描述
RCC_Configuration 配置系统的时钟
无线通信系统GPIO_Configuration 配置GPIO
NVIC_Configuration 配置NVIC
LcdShow_Init 初始化LCD驱动,Timer2驱动LCD二苯甲酮腙
KEYS_Init 键盘接口初始化
KEYS_Read 键值的读取

本文发布于:2024-09-22 16:48:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/306158.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:编码器   计数器   接口
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议