STM32F407ZGT6定时器编码器模式浅谈

本文详细介绍了STM32的编码器模式,探讨了如何使用编码器模式进行电机转速和角位置的精确测量。文章以实际项目背景——中国机器人大赛中医疗机器人导航为例,阐述了编码器模式在机器人定位导航中的应用。通过对比外部中断模式,编码器模式不仅简化了代码,还提供了更多关于电机状态的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

故事发生在一个月黑风高的夜晚,男主正在焦急的用外部中断模式读取电机编码器输出的脉冲个数并进行处理,企图用这种方式求得电机的转速和转过的角位置。终于他用这种最直接的方式赢得了女主的芳心,他们在一起了!故事本该是两人从此过上了幸福的生活(撒花~~),然而五天后另一个男人出现了,他并不健谈长得也不是很帅,但是他包装的很好,男主做了三天才成功解决的问题,他只用一句话就解决了!我们暂且称他为编码男,编码男果然名不虚传,很快男主就变成了绿灯侠,自此他又开始孤单一个人苦逼敲代码了…(真实故事改编,如有雷同,纯属偶然)。
啊啊啊啊啊不扯淡了,今天俺来给大家稍微介绍一下STM32的编码器模式,考虑到对应不同版型开发版的程序会有细微差异,这里着重强调一下博主本人是在STM32F407ZGT6核心板上做的开发;故事的真实背景是这样的,在备赛中国机器人大赛的过程中,我们的机器人遇到了一个棘手的问题,那就是实时了解自己在一个固定地图中的位置。由于缺乏机器人定位导航的的经验和基础知识,大家开始自行摸索,后来给出了激光雷达SLAM的导航方案和惯性导航模块直接导航两种方案。考虑到SLAM多用于动态地图环境构建且其开发很大程度上需要依赖于开发板上携带的操作系统以便进行任务调度,我们放弃了这一成本较高的方案(后来发现赛场上很多队伍都用的激光雷达做SLAM但是效果都很一般的时候,大家内心会心一笑)。惯性导航是一种比较成熟的导航方式,主要用于固定地图情境下的机器人导航,现成的惯导模块简易好用,但是成本较高,考虑到我们当时的机械结构已经不太能安装,我们放弃了直接购买模块的方案,于是一场闹剧开始上演了…基于电机编码器和车载陀螺仪的自制惯性导航模块登场了。下面我们就来讲讲编码器模式究竟是何方神圣以及如何去使用。

真实背景…

暑假期间参加中国机器人大赛,我们队参与的是医疗机器人送药巡诊项目,项目的大致内容如下在这里插入图片描述
在这里插入图片描述
要求机器人从出发区出发,按照预先抽签决定好的顺序分别到bed1和bed3处,扫描床头柜上固定区域粘贴的二维码并显示条码信息,之后打开自身自带的封闭药箱(此次我们使用舵机控制两个药盒的开闭)并进行语音播报提醒病人取药,之后自行回到出发区,每一步各自得分。显然由于场景中没有巡线的条件(该项目2018年的比赛中,出发区到病人床头的路是有白线指引的,只需灰度进行巡线即可,但是在其他方面要求更高些),主办方的说法是为了尽可能的模仿医院场景,机器人需具备自主导航能力。基于此,为了保证机器人出发后能够清楚自己所在的位置,导航功能已是不可或缺的了。由于经费有限,我们没能买现成的惯导模块,于是就考虑自己用陀螺仪和编码器来进行自制惯导;一方面,编码器用来记录轮子走过的直线距离,通过一定的关系将其转化为小车实际位移,另一方面陀螺仪的存在保证车子在行进过程中始终保持自己的姿态尽量不发生偏移。

实现

1、编码器简介

增量型:

每转过单位的角度就发出一个脉冲信号,通常为A相、B相(某些包括Z相)输出。A相、B相为相互延迟1/4周期的脉冲输出(即正交信号),根据延迟关系可以区别正反转,而且通过取A相、B相的上升和下降沿可以进行2或4倍频。Z相为单圈脉冲,即每圈发出一个脉冲,常用于校正累计误差。

绝对值型:

对应一圈,每个基准的角度发出一个唯一与该角度对应二进制的数值,通过外部记圈器件可以进行多个位置的记录和测量。

2、编码器中常见术语含义

参考:百度文库

3、编码器工作原理

在这里插入图片描述
上图表征出了编码器在工作时的脉冲输出特性以及其表达的含义,当我们将编码器的A B两相接在MCU上时,对应的TI1和TI2分别响应输出脉冲,进而得到我们所需要的信息。

信号特性 包含信息
脉冲相位关系 电机转向
脉冲个数 电机角位移

到了这里大家就不难发现,所谓编码器模式并不止是代替掉了我们之前的外部中断模式,它在统计脉冲数的基础上,还能得到轮子转向的相关信息,因此在使用时确实相当方便。

4、代码实现以及注解

下面给出在STM32F407ZGT6板上成功运行的编码器模式初始化程序,由于当时所用为四轮驱动,我们对四个定时器均进行了初始化,但是对每个定时器来说区别不大,由于每个定时器独立工作,因此彼此之间互不干扰。这里给出其中一个定时器的初始化过程࿱

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值