第六章 编码器接口
6.1 编码器接口¶
6.1.1 编码器接口介绍¶
- (Encoder Interface )编码器接口
- 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
- 每个高级定时器和通用定时器都拥有1个编码器接口(用于编码器接口的定时器无法再做其他事)
- 定时器的通道 1 和通道 2 作为编码器接口
如下图,为正交编码器(A相与B相相差90°),通过观察A相高低电平时B相的电平判断正反转,同时脉冲频率即体现电机的转速。
6.1.2 编码器接口结构¶
Note
说明一下极性选择,选择“上升沿”则正常波形,选择“下降沿”则需要经过一个“非门”(逻辑)
6.1.3 编码器接口口工作模式¶
编码器接口工作模式分三种:
- 仅在A相上升沿和下降沿计数
- 仅在B相上升沿和下降沿计数
- 在AB相都计数(精度最高,一些资料会称为四倍频)
工作模式表格要对应 6.1.1编码器接口介绍 的表格看,即通过看A相B相对应电平判断正反转。
6.1.4 #四倍频法¶
四倍频是通过程序提升我们的编码器的精度的一种数据处理方法, 可以有效的最大化我们的编码器的精度和测量精度。
上图是一个我们编码器输出的波形图, 正常我们一般的处理方式是通过 A 相去计数, B 相去判断目前的转动方向。 具体实现比如: A 相的上升沿计数或者下降沿计数, 同时在 A 相的上升沿或者下降沿来根据 B 相此时的电平状态来判断转向。四倍频则是同时计算 AB 两相的每个跳边沿, 这样子原本在 A 相计数的一个脉冲周期内就实现了四次计数, 从而实现了精度的提升。
6.1.5 计数示例(极性选择)¶
- 正常不反相,正转自增,反转自减。
- TI1极性反转(需要将TI1的**高低电平反转**,在对应表格找正反转)
6.2 STM32CubeMX参数¶
以TIM3
为例,找到Combined Channels ,选择Encoder Mode编码器接口模式
关于其他参数介绍
- PWM Input on CH1 ,输入捕获,就是自动配置CH1为直接捕获CH2为间接捕获以及从模式,与上一节手动配置的单通道效果一样,选择该模式后,需要进一步配置的参数如下:
- PWM Input on CH2 ,仅输入信号通道改成CH2引脚,其他与上一个模式原理一致。
- XOR ON / Hall Sensor Mode ,用于处理三相霍尔传感器信号,主要在BLDC 电机控制时使用,且需要配置XOR Activation模式,即霍尔传感器模式。
6.3 工程配置¶
6.3.1 编码器模式配置¶
选择TIM3
配置为编码器接口模式
6.3.2 定时中断配置¶
用TIM2
创建一个定时中断,每隔一段时间读取一下定时器的计数值即为转动的速度
6.3.3 代码编写¶
main.c
中,定义速度变量
main.c
中,重写定时中断,读取编码器速度
C
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim == (&htim2)) {
speed = __HAL_TIM_GET_COUNTER(&htim3);
__HAL_TIM_SET_COUNTER(&htim3, 0);
}
}
/* USER CODE END 4 */
添加OLED显示