stm32cubeide外部中断_使用STM32CubeIDE编写EC11 定时器中断方式

本文详细介绍了如何使用STM32的定时器捕获功能,结合EC11编码器的特性来判断旋转方向。通过配置定时器TIM3的捕获模式,连接EC11的A、B相,当A相上升沿时,根据B相电平变化确定是顺时针还是逆时针转动。在中断回调函数中,通过比较A、B相电平更新计数器,实现稳定且无丢步的旋转检测。
摘要由CSDN通过智能技术生成

0x01 > 授权信息

0x02 >EC11 特性

b7d87820458e

EC11 特性

从上图可以看出旋转EC11时,A相上升沿时,B相高电平为顺时针转动,B相低电平则为逆时针转动。所以我们利用这一特性,使用STM32的定时器捕获功能对A相进行电平捕获,然后与B相电平进行比较从而判断旋转方向。

0x03 > 图形化配置

b7d87820458e

IO配置

我们设定定时器TIM3_CH1通道为捕获模式连接EC11的A相CLK引脚,PA7设置为IO输入模式,连接EC11的B相DT引脚,PA5我设置为中断模式连接SW引脚(如果不需要按下功能这个可以不进行配置),

b7d87820458e

设置定时器通道——捕获模式

b7d87820458e

配置定时器延时时间

配置一个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 > 测试

b7d87820458e

测试成功

经测试通过串口打印数据,EC11非常稳定,也没有出现丢步和乱跳的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值