这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 圆梦小车 Step by Step 之四―― 教小车“走路”

共1条 1/1 1 跳转至

圆梦小车 Step by Step 之四―― 教小车“走路”

工程师
2011-03-15 14:34:06     打赏
圆梦小车 Step by Step 之四―― 教小车“走路”
写于: 星期三 18 七月 @ 01:16:13
 
智能机器人开发前一篇讲述了如何使小车“抬腿”,本篇该教小车“走路”。

 

圆梦小车 Step by Step 之四 ―― 教小车“走路” 作者:Hanker

 

前面的章节:

  1. 车的主体
  2. 控制部分中的电机驱动器设计
  3. 轨迹采样及逻辑控制部分硬件设计
  4. 开环控制功能
  5. 电机测速及转速控制
  6. 电机驱动部分调试
  7. 单MCU控制的程序设计
  8. 寻迹小车 FollowMe―― 之八:“圆梦”之旅
  9. 圆梦小车(寻迹小车 ) Step by Step 之一 ―― 第一个程序“Hello World”
  10. 圆梦小车(寻迹小车 ) Step by Step 之二 ―― 和小车“交流”
  11. 圆梦小车(寻迹小车 ) Step by Step 之三 ―― 让小车“动”起来”

前一篇讲述了如何使小车“抬腿”,本篇该教小车“走路”了!

人学走路的第一步是“站立”,而圆梦小车有三条“腿”,这个问题就不存在了,但是要想走好还是需要“学习”的。

我们都知道,如果将人的眼睛蒙起来,他很难走直线,因为人的两条腿不尽相同,略有长短和粗细,导致步幅不同,要靠眼睛来纠正这个偏差,这也是人们常在雪地和森林中迷路的原因,雪地和森林无法提供给眼睛可靠的参照系。

小车的两条“腿”也有同样的问题,即使是优质直流电机(步进电机可以)也难以做到驱动特性相同,更何况我们所用的是最便宜的玩具电机!

那圆梦小车的“眼睛”是什么呢?

一、 小车的“眼睛”

能起此作用的“眼睛”最常见的是陀螺仪、电子罗盘,还有图像识别,可这些设备一是较贵,二是对于初学者而言较难使用,且如果目的是学习而非竞赛的话,就有些不值了。

为了能起到“眼睛”的这个功能,小车设计了一个简易的码盘,用它来监测“腿”的行走,在一定程度上也能满足要求,当然,要受到诸多因素制约,如地面不平整、车轮直径差异。车轮的不统一还可加以弥补,因为不可能在短时间内把轮子磨小了。地面不平就有些麻烦了,所以这里所讨论的只是针对在较平整的地面上走直线。

本篇就是探讨这个“眼睛”如何帮助小车走好直线,至于那些高档的“眼睛”,也许在后面文章中会有所涉及。

首先分析一下这个“眼睛”的组成。

它是由轮毂上的50齿码盘、遮断式光电采样器、采样电路组成,采样电路将光电信号转换为脉冲后输入到MCU,MCU通过中断方式获取。

码盘、光电采样器的作用较直观,这里不作讨论,只分析一下采样电路:

上图为一路采样电路,其作用是构成一个“施密特触发器”,用较大的回差消除慢速变化的光电信号在过门槛电压时产生的误信号(此部分原理请参阅运放教材中的“滞回比较器”部分)。

从图中可以看出:
信号从低到高的比较电平为: ((R5//R7)/(R6 + R5//R7) ) * 5V
信号从高到低的比较电平为: ((R5/(R5 + R6//R7)) * 5V
(R5//R7 表示两个电阻并联)
读者可以分析一下是否如此,并计算出实际的比较电平。

为何需要这个采样电路?原因如下:
第一、这样可以改善输入到MCU的信号沿,使中断可靠。
第二,车轮在停止时,光电采样器有可能处于齿的边沿,使得光电信号正好处于门槛电平上,如果没有上述回差处理,将会不断地发出错误信号,使得程序控制失效。
至此,码盘采样的物理信号处理已完成,下面讨论其逻辑部分。

将上述脉冲信号引入MCU的外部中断口是最常见的选择,可是51单片机的外部中断只能监测一个方向的跳变,也就是脉冲的下降沿。但为了提高码盘的分辨率,此处希望能够实现上升、下降沿都能采到,从而使码盘的分辨率提升为100脉冲/圈。

正好STC12LE5412AD的PCA模块支持脉冲的正、负沿捕获功能:

利用这个功能,即可实现脉冲输入上升、下降沿均产生中断,所以将PCA的通道0、1用于码盘采样,将它们设置为正、负沿捕获模式,允许中断,忽略其捕获的时间值,只需要其产生的中断信号。

根据对中断信号的计数即可知道车轮的转动情况,即掌握了小车的“步幅”,从而可以据此控制小车走直线。

二、 如何实现走“直线”

控制的基本逻辑是根据小车左、右轮码盘计数的差值来调整相应电机的PWM值,以达到使两个码盘的计数值相同的目的。

最初级的方式是:启动时将左、右码盘计数值清“0”,两个电机提供同样的PWM控制值(PWM基值),当出现两者计数不同时,将快的那一侧电机置为惰行。恢复相同后,再置挥PWM基值。

这种模式形象的描述就像人的两条腿走路,左、右不断交替前进,只是转换速度很快,步幅很小,所以看上去像是连续直行。

按这个逻辑设计的小车程序见附件。

为了避免调试时小车掉下桌子或撞墙,增加了行走距离控制,即设定行走脉冲定值,因为现在做的是直线行走,所以只需控制一个轮子 ―― 选择左轮,当左轮码盘计数达到定值时使小车停止。

三、PC机侧程序的相应改进

为配合直线行走调试,PC机的程序增加了直线行走控制,扩充了一个命令:

小车直线行走命令
命令字 ―― 0x04
数据域 ―― 行走距离(2字节)PWM 基准值(2字节,先低后高)
其中行走距离为左侧车轮的脉冲计数值,按目前的几何尺寸,最大值65535 应该可以走 655圈,约合86 m。为“0" 时连续行走。

返回数据帧:

帧头 发送方地址 自己的地址 帧长 命令 校验和


同时,为了便于检测小车中程序运行的状况,将读内存的部分作了改进。

首先,将数据地址改为 HEX(16进制)输入,因为在M51 文件中所得到的变量地址均为16进制值,要通过手工转换为10进制,太麻烦。(注意:读不同区域的地址参见第二篇的定义,地址最多输入 4位)

其次,增加了读数据的类型选择,开始做PC机读内存程序时为了简化,只做了读一字节的功能,但是正常使用时,要读一个整形就极其不便了,为此,添加了数据类型选择,在读时可根据数据类型确定读1、2或4个字节,显示时也根据数据类型确定是否显示符号。这样我想读者可以体会一下,是否方便?(小车程序中的码盘计数器就是无符号整形,调试时需要检查此变量,所以才做此修改。读者可以利用这个功能检查码盘是否可靠采样,通过手工转动车轮,读取对应的码盘计数变量,看是否符合你所期望的?)

修改后的PC机界面如下:


随着你的需求增加,会不断促使你学习VC的功能,逐步使你掌握VC编程,无疑会对你的工作、学习带来极大的好处,PC机也将物尽其用。

四、结语

本篇的主要目的是介绍如何使用码盘采样信号,以控制小车走直线为载体,所以只采用了最简单的控制逻辑,有诸多不完善之处。

如何改进控制性能留待日后作为算法部分的讨论主题,用这种简单的控制是无法满足复杂要求的,如让小车走半径一定的圆弧。读者如有兴趣,可自己先尝试一下,可能需要速度测量及PID速度控制了。

下一篇将讨论小车的另一只“眼睛”―― 轨迹采样传感器,看它如何帮助小车“走好”。


附件:
1、增加了电机控制的单片机程序
2、增加了电机控制的PC机程序
3、小车走直线视频片断

参考资料:

1、《电动机的单片机控制》ISBN 7




关键词: 圆梦     小车     之四     走路     控制     电机     采样     眼睛         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]