简单易懂:从零开始学习AB相编码器的使用技巧
MultiMCU EDU 2023-07-12

(背景介绍:
进行到上一篇已经能让遥控车听话了。
已走过的路线是:让马达转->遥控器与车无线收发信息->发让马达转的信息。
其中:“发让马达转的信息”这里就有两种方法了。
上一篇Sugar用的是开环控制方法。通俗讲就是:单片机输出固定 pwm 让马达转,不管马达转速是多少,更不管转速是否一致。
从本篇起,开始初涉闭环控制方法。通俗讲就是: 不只管让马达转,还要负责让各个马达能够维持指定的转速。

凭什么维持指定的转速

想维持指定的转速,就要知道:

  1. 当前的转速是多少;

  2. 离指定转速差多少。


    本节主要解决第 1 个问题。

简而言之:凭ab相编码器反馈数据换算出当前转速,从而进行闭环控制来维持指定转速。

那么啥是”ab相编码器”呢?看看下面的视频就知道了。

下面用一张图圈个重点:

stm32 与 ab 相编码器

通过上面的视频,已经知道怎么用stm32连接ab相编码器了。
这里说一些细节的东西。

1、30线ab相编码器
什么叫“30线”:30线就是码盘转一圈会产生 30 个脉冲以供计数。

2、怎么验证“一圈计30个数”

按图中方法,结合上面视频中的在线调试方法,可以验证将码盘转一圈计数变动 30 个。

3、stm32定时器的作用
(1) 定时器一经开启,自动计数,CPU只要在需要时管定时器要数就行了。
(2) 自动通过 ab 相判断转向,按方向不同自动对计数进行加减。

stm32 软件上要注意的问题

处理这个问题的方法是:

代码开源地址是:
https://github.com/SuWeipeng/4wd

如何换算速度

这里说下思路,详细处理都在代码里(上面有代码地址)。
处理问题:思路决定方向,耐心保障细节。思路很重要。

1、速度从何而来?
这里不区分线速度和角速度,笼统地用“速度”俩字概括。
速度表示“单位时间内的变动量”,这里提到一个重要的数据:时间
所以想换算出速度,代码里要有个地方计算“时间增量”。
本次训练为了简单,代码里就用固定时间差(50Hz)的圈数差代表速度了。


2、速度的常用单位
(1) m/s 表示“米每秒”,是线速度单位;
(2) rpm 表示“转每分”,是转数单位;
(3) rad/s 表示“弧度每秒”,是转速单位。
做速度换算一定要注意“单位”(也叫“量纲”),有单位的数据才是有意义的,不然都是瞎算。

3、马达转数与轮子的转数
相差一个减速箱的“减速比”。

4、轮子的转速与轮子的线速度
线速度 = 转速(角速度)* 轮子半径

5、小车速度与轮子的线速度
麦轮小车有专门的运动学分析,本文不做深入研究。
有兴趣的读者可以看代码里的 Doc 目录,里面有文章专门讲这个。

当前进展与下一步安排

到目前为止,已经可以通过ab相编码器得到速度了。
本次训练力求简单,目标速度是一个常量(确定值)。
剩下就是:写个控制算法,让编码器得到的“检测速度”能够达到并维持在“目标速度”附近。
这里的控制算法 Sugar 直接用 ArduPilot 目前最新升级的 pid 算法下一篇单独讲这个(爱好飞控的朋友们会喜欢这个)


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 硬件
  • 原理图
  • 信号完整性
  • EMI
下载排行榜
更多
评测报告
更多
广告