[开发工具] HAL库驱动EC11 利用STM32encode解码 编码器中断

[复制链接]
 楼主| hehhehee 发表于 2022-7-27 18:46 | 显示全部楼层 |阅读模式
关于EC11的原理就不说了,网上有很多资料,但是大都采用轮询去调用,有的除了开了编码器TIMER外还开了一个TIMER去轮询,工程大了之后很浪费资源,但是编码器其实也是基于TIMER的,那么编码器中断也是基于定时器的中断,本篇博客利用编码器的定时器溢出中断,相当于只在EC11动作的时候触发中断,具体HAL库配置如下:

 楼主| hehhehee 发表于 2022-7-27 18:48 | 显示全部楼层
第一步开启外部晶振:
2231762e117ee389ea.png
 楼主| hehhehee 发表于 2022-7-27 18:50 | 显示全部楼层
第二步设置调试方式,这里我用的STLINK。
616662e1182e98d65.png
 楼主| hehhehee 发表于 2022-7-27 18:50 | 显示全部楼层
第三步设置TIM2Encode编码器,这里注意只能是ch1ch2才有硬件解码功能。
1648262e11880324e7.png
 楼主| hehhehee 发表于 2022-7-27 18:51 | 显示全部楼层
分频值之所以设置为2,是因为下图中的边沿极性设置的是上升沿,以为着捕获到两个上升沿认为是一个脉冲(ch1和ch2的上升沿)。计数值设为1的意思就是捕获到1个脉冲就触发溢出中断。

 楼主| hehhehee 发表于 2022-7-27 18:51 | 显示全部楼层
 楼主| hehhehee 发表于 2022-7-27 18:52 | 显示全部楼层
配置好Encode之后做两个工作,首先将ch1和ch2对应的引脚设置为上拉(pull-up),因为我的EC11没有接上拉引脚。
 楼主| hehhehee 发表于 2022-7-27 18:54 | 显示全部楼层
 楼主| hehhehee 发表于 2022-7-27 18:56 | 显示全部楼层
然后设置TIM2的中断:
1853362e119d7a2b52.png
 楼主| hehhehee 发表于 2022-7-27 18:57 | 显示全部楼层
同时注意TIM2的NVIC设置中要使能:
5725462e119e8c9369.png
 楼主| hehhehee 发表于 2022-7-27 18:57 | 显示全部楼层
这样就全部设置好了,生成文件之后需要在主函数中添加:
6048862e11a2b8d78e.png
 楼主| hehhehee 发表于 2022-7-27 19:03 | 显示全部楼层
while中没有任何函数,处理程序放在回调函数中实现:

2544362e11b6410427.png
 楼主| hehhehee 发表于 2022-7-27 19:12 | 显示全部楼层
这个函数可以放在任意位置。全部设置好之后run在单片机上试一试吧!

 楼主| hehhehee 发表于 2022-7-27 19:14 | 显示全部楼层
Bblythe 发表于 2022-10-4 08:22 | 显示全部楼层

许多开发人员从来没有前进到更合适的分支策略
Uriah 发表于 2022-10-4 18:22 | 显示全部楼层

程序开发人员做项目版本管理时的首选
soodesyt 发表于 2022-10-11 21:14 | 显示全部楼层

STM32定时器编码器模式怎么使用
jtracy3 发表于 2022-10-11 21:41 | 显示全部楼层
stm32控制编码器可以采用Timer的编码器模式,Tim1~8的CH1和CH2分别对应A相和B相
aspoke 发表于 2022-10-11 22:08 | 显示全部楼层
stm32怎么测量电机编码器转速  
abotomson 发表于 2022-10-12 10:07 | 显示全部楼层
stm32的编码器模式的正反转怎么判断的  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

1252

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

89

主题

1252

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部