圆梦小车4_教小车“走路”
圆梦小车 StepbyStep 之四 www.embedream.com
第 1 页 共 6 页
圆梦小车 Step by Step 之四
—— 教小车“走路”
前一篇讲述了如何使小车“抬腿”,本篇该教小车“走路”了!
人学走路的第一步是“站立”,而圆梦小车有三条“腿”,这个问题就不存在了,但是要
想走好还是需要“学习”的。
我们都知道,如果将人的眼睛蒙起来,他很难走直线,因为人的两条腿不尽相同,略有
长短和粗细...
圆梦小车 StepbyStep 之四 www.embedream.com
第 1 页 共 6 页
圆梦小车 Step by Step 之四
—— 教小车“走路”
前一篇讲述了如何使小车“抬腿”,本篇该教小车“走路”了!
人学走路的第一步是“站立”,而圆梦小车有三条“腿”,这个问
就不存在了,但是要
想走好还是需要“学习”的。
我们都知道,如果将人的眼睛蒙起来,他很难走直线,因为人的两条腿不尽相同,略有
长短和粗细,导致步幅不同,要靠眼睛来纠正这个偏差,这也是人们常在雪地和森林中迷路
的原因,雪地和森林无法提供给眼睛可靠的参照系。
小车的两条“腿”也有同样的问题,即使是优质直流电机(步进电机可以)也难以做到
驱动特性相同,更何况我们所用的是最便宜的玩具电机!
那圆梦小车的“眼睛”是什么呢?
一、 小车的“眼睛”
能起此作用的“眼睛”最常见的是陀螺仪、电子罗盘,还有图像识别,可这些设备一是
较贵,二是对于初学者而言较难使用,且如果目的是学习而非竞赛的话,就有些不值了。
为了能起到“眼睛”的这个功能,小车
了一个简易的码盘,用它来监测“腿”的行
走,在一定程度上也能满足要求,当然,要受到诸多因素制约,如地面不平整、车轮直径差
异。车轮的不统一还可加以弥补,因为不可能在短时间内把轮子磨小了。地面不平就有些麻
烦了,所以这里所讨论的只是针对在较平整的地面上走直线。
本篇就是探讨这个“眼睛”如何帮助小车走好直线,至于那些高档的“眼睛”,也许在
后面文章中会有所涉及。
圆梦小车 StepbyStep 之四 www.embedream.com
第 2 页 共 6 页
首先
一下这个“眼睛”的组成。
它是由轮毂上的 50 齿码盘、遮断式光电采样器、采样电路组成,采样电路将光电信号
转换为脉冲后输入到MCU,MCU通过中断方式获取。
码盘、光电采样器的作用较直观,这里不作讨论,只分析一下采样电路:
上图为一路采样电路,其作用是构成一个“施密特触发器”,用较大的回差消除慢速变
化的光电信号在过门槛电压时产生的误信号(此部分原理请参阅运放教材中的“滞回比较器”
部分)。
从图中可以看出:
信号从低到高的比较电平为: ((R5//R7)/(R6 + R5//R7) ) * 5V
信号从高到低的比较电平为: ((R5/(R5 + R6//R7)) * 5V
(R5//R7 表示两个电阻并联)
读者可以分析一下是否如此,并计算出实际的比较电平。
为何需要这个采样电路?原因如下:
第一、这样可以改善输入到MCU的信号沿,使中断可靠。
第二,车轮在停止时,光电采样器有可能处于齿的边沿,使得光电信号正好处于门槛电
平上,如果没有上述回差处理,将会不断地发出错误信号,使得程序控制失效。
圆梦小车 StepbyStep 之四 www.embedream.com
第 3 页 共 6 页
至此,码盘采样的物理信号处理已完成,下面讨论其逻辑部分。
将上述脉冲信号引入 MCU 的外部中断口是最常见的选择,可是 51 单片机的外部中断
只能监测一个方向的跳变,也就是脉冲的下降沿。但为了提高码盘的分辨率,此处希望能够
实现上升、下降沿都能采到,从而使码盘的分辨率提升为 100 脉冲/圈。
正好 STC12LE5412AD的 PCA模块支持脉冲的正、负沿捕获功能:
利用这个功能,即可实现脉冲输入上升、下降沿均产生中断,所以将 PCA的通道 0、1
用于码盘采样,将它们设置为正、负沿捕获模式,允许中断,忽略其捕获的时间值,只需要
其产生的中断信号。
根据对中断信号的计数即可知道车轮的转动情况,即掌握了小车的“步幅”,从而可以
据此控制小车走直线。
圆梦小车 StepbyStep 之四 www.embedream.com
第 4 页 共 6 页
二、 如何实现走“直线”
控制的基本逻辑是根据小车左、右轮码盘计数的差值来调整相应电机的 PWM值,以达
到使两个码盘的计数值相同的目的。
最初级的方式是:启动时将左、右码盘计数值清“0”,两个电机提供同样的 PWM控制
值(PWM基值),当出现两者计数不同时,将快的那一侧电机置为惰行。恢复相同后,再置
挥 PWM基值。
这种模式形象的描述就像人的两条腿走路,左、右不断交替前进,只是转换速度很快,
步幅很小,所以看上去像是连续直行。
按这个逻辑设计的小车程序见附件。
为了避免调试时小车掉下桌子或撞墙,增加了行走距离控制,即设定行走脉冲定值,因
为现在做的是直线行走,所以只需控制一个轮子 —— 选择左轮,当左轮码盘计数达到定值
时使小车停止。
三、PC机侧程序的相应改进
为配合直线行走调试,PC机的程序增加了直线行走控制,扩充了一个命令:
小车直线行走命令
命令字 —— 0x04
数据域 —— 行走距离(2字节)PWM 基准值(2字节,先低后高)
其中行走距离为左侧车轮的脉冲计数值,按目前的几何尺寸,最大值 65535 应该可以
走 655 圈,约合 86 m。为“0" 时连续行走。
返回数据帧:
帧头 发送方地址 自己的地址 帧长 命令 校验和
圆梦小车 StepbyStep 之四 www.embedream.com
第 5 页 共 6 页
同时,为了便于检测小车中程序运行的状况,将读内存的部分作了改进。
首先,将数据地址改为 HEX(16 进制)输入,因为在 M51 文件中所得到的变量地址
均为 16 进制值,要通过手工转换为 10 进制,太麻烦。(注意:读不同区域的地址参见第二
篇的定义,地址最多输入 4 位)
其次,增加了读数据的类型选择,开始做 PC机读内存程序时为了简化,只做了读一字
节的功能,但是正常使用时,要读一个整形就极其不便了,为此,添加了数据类型选择,在
读时可根据数据类型确定读 1、2 或 4 个字节,显示时也根据数据类型确定是否显示符号。
这样我想读者可以体会一下,是否方便?(小车程序中的码盘计数器就是无符号整形,调试
时需要检查此变量,所以才做此修改。读者可以利用这个功能检查码盘是否可靠采样,通过
手工转动车轮,读取对应的码盘计数变量,看是否符合你所期望的?)
修改后的 PC机界面如下:
随着你的需求增加,会不断促使你学习VC的功能,逐步使你掌握VC编程,无疑会对
你的工作、学习带来极大的好处,PC机也将物尽其用。
圆梦小车 StepbyStep 之四 www.embedream.com
第 6 页 共 6 页
四、结语
本篇的主要目的是介绍如何使用码盘采样信号,以控制小车走直线为载体,所以只采用
了最简单的控制逻辑,有诸多不完善之处。
如何改进控制性能留待日后作为算法部分的讨论主题,用这种简单的控制是无法满足复
杂要求的,如让小车走半径一定的圆弧。读者如有兴趣,可自己先尝试一下,可能需要速度
测量及 PID 速度控制了。
下一篇将讨论小车的另一只“眼睛”—— 轨迹采样传感器,看它如何帮助小车“走好”。
附件:
1、增加了电机控制的单片机程序
2、增加了电机控制的 PC机程序
3、小车走直线视频片断
参考资料:
1、《电动机的单片机控制》ISBN 7 – 81077 – 175 – 2
2、STC12C5410AD数据手册
本文档为【圆梦小车4_教小车“走路”】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。