0x01 > 授权信息
0x02 >EC11 特性
EC11 特性
从上图可以看出旋转EC11时,A相上升沿时,B相高电平为顺时针转动,B相低电平则为逆时针转动。所以我们利用这一特性,使用STM32的定时器捕获功能对A相进行电平捕获,然后与B相电平进行比较从而判断旋转方向。
0x03 > 图形化配置
IO配置
我们设定定时器TIM3_CH1通道为捕获模式连接EC11的A相CLK引脚,PA7设置为IO输入模式,连接EC11的B相DT引脚,PA5我设置为中断模式连接SW引脚(如果不需要按下功能这个可以不进行配置),
设置定时器通道——捕获模式
配置定时器延时时间
配置一个1ms定时器,并设置为自动清零模式,配置好后记得打开定时器中断。
0x04 > 代码
首先要开启定时器TIM3,我们使用这个 HAL_TIM_IC_Start_IT(htim, Channel);启动定时器。
MX_TIM3_Init();
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);
使用定时器回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
在里面编写上面的程序,因为我们将B相接在PA7引脚,所以我们使用switch case语句进行判断引脚电平,如果单片机检测到A相为高电平就会进入这个中断判断B相电平,低电平为反转,高电平极为正转(程序中的cnt为计数作用)。
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(hitm == &htim3)
{
switch()
{
case 0:
cnt-- ;//反转 计数器减一
break;
case 1:
cnt++ ;//正转 计数器加一
break;
}
}
}
0x05 > 测试
测试成功
经测试通过串口打印数据,EC11非常稳定,也没有出现丢步和乱跳的情况。