一、实验目的
通过STM32的TIM从模式控制器(Slave Mode Controller)实现编码器信号。
二、编码器接口原理
编码器简介
本次实验使用的是EC11增量式编码器
![]() | ![]() | ![]() |
A、B负责向外输出数据,D、E是一个按钮,在本次实验中不使用按钮功能。在轴进行转动时带动金属片一同进行顺时针或逆时针转动,A、B触电可以并联一个高电平上拉电阻,C引脚接地当触点在金属盘上是A、B输出低电平,当触点悬空时A、B输出高电平。在金属盘持续转动下A、B引脚会输出一个波形。


A、B的触点是有前后的,在金属盘顺时针转动的时候A先离开金属盘,B后离开金属盘,这样生成的两个波形A的波形会先出现上升沿,B的上升沿落后A。逆时针时B的上升沿领先于A。我们通过这种差异就能判断出金属盘的旋转方向。


实验原理
我们通过下面这个图来讲解实验原理

我们分别将A、B的信号对应发送到CH1和CH2通道,经过上升沿处理,CH1通道的波通过TI1FP1发送到从模式控制器,CH2通道的波通过TI2FP2发送到从模式控制器,由从模式控制器处理以时钟源(TRIC)的形式提供给时基单元。当轴顺时针或逆时针旋转时CNT会产生递增或递减。

三、硬件连接


四、STM32CubeMX配置
TIM设置
编码器设置

编码器模式选择

时基单元参数设置

通道参数设置
我们在选着沿边检测时一定要注意,选择上沿信号正常,选择下沿信号取反。



均选择上升沿
串口设置

五、代码编写
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1);//打开编码器通道1
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_2);//打开编码器通道2
while (1)
{
uint16_t cnt = __HAL_TIM_GET_COUNTER(&htim3);//获取CNT的值
UART_Printf("Enocoder = %u\r\n",cnt);//向串口发生格式化数据
HAL_Delay(200);
}
}
六、实验现象
顺时针转动轴时串口接收窗口的数值变大,逆时针数字变小





401

被折叠的 条评论
为什么被折叠?



