My first Robot (Base on 8-bit AVR MCU)

演示

MyRobot-1


视频演示:http://v.youku.com/v_show/id_XMTk5NDIyNzMy.html


更多图片,见:http://www.kaixin001.com/photo/album.php?uid=105378&albumid=25366815&start=0

大家见笑了。

介绍

 

业余时间做的,纯属兴趣爱好,跟工作一点关系都没有。
算得上是最简单的一种机器人了,但是确实是一个真正意义上的机器人,执行机构、传感器/反馈系统、决策系统、人机交互系统都有。记得第一次给别人演示这个机器人的时候有人问我怎么没见我手上拿着遥控器,哈哈,这个小家伙不需要人遥控,不是市面上卖的遥控汽车,是一个真正意义上的机器人。


基于8位AVR单片机:ATmega1280-16AU
程序是用C语言实现的。没有操作系统,直接Bootloader加载编译好的C程序。
四个驱动轮的电机用的就是普通的直流电机,玩具车上的那种。采用PWM脉宽调制调速。
驱动轮的速度检测用的是红外对射光电传感器构成的编码器。起到负反馈的作用,实现闭环控制。
上面的传感器云台用的是比较廉价的舵机(伺服电机),接在单片机的PWM输出口,靠PWM信号来控制转角。
传感器用的是Sharp GP2D12 红外测距传感器。
人机交互:采用1602LCD液晶字符显示器,以及若干个数字按键。
两路供电:一路是6V镍氢电池组,藏在底盘里面,给所有的电机和传感器供电;另一路是9V叠层电池,给单片机供电。都用的是充电电池(反复使用,避免废旧电池造成环境污染),并且都有预留的充电孔以方便接入充电器插头。

所有零部件来自两个地方:一个是淘宝网,从上面买了小车的底盘机械部件和LCD显示模块;另一个是知春路的中发电子市场(离Sigma大厦最近的一个电子市场,我经常周末去那里淘电子器件。比如说小车上用来起连接和支撑用的铜柱,我跑了好几个柜台才确定下来用这样的零件这样的型号。)

 

原理

一、总体设计

采用ATmega1280单片机作为核心控制单元。采用红外光电传感器检测路面有限距离内的障碍物,使用红外传感器检测、判断障碍物的位置,利用PWM(脉宽调制)技术动态控制电动机的转动方向和转速。通过软件编程实现机器人行进、绕障、停止等动作。

1.1 移动装置选型

采用四轮差速转向机构。选择这种方式的主要原因是这种转向机构最容易组装,而且四轮小车稳定性比较好。

1.2 传感器选型

采用一个红外测距传感器来检测障碍物的存在。为了能够检测到两侧的障碍物距离以决定应该向哪个方向转向,使用一个云台装置,将红外测距传感器安装在云台上,随着云台的转动就可以检测出机器人前方、左侧、右侧是否有障碍物、距离障碍物的距离有多远。

1.3 微处理器选型

所以采用8位AVR单片机ATmega1280。这类单片机的优点是廉价、低功耗、外围电路并不复杂,而且不必编写针对传感器和电机的驱动程序,只需要控制相应I/O口的数字或模拟信号即可驱动电机或者得到传感器的反馈。

1.4 人机交互装置选型

采用市场上常见的16行双列LCD液晶显示屏作为信息输出装置,采用简单的数字按键作为输入装置。

1.5 系统总体框图

k1

 

1.6 实物图

z1 z2

 

二、各部分介绍

2.1 ATmega1280单片机介绍

单片机选用Arduino Mega ATmega1280-16AU系列。

1280-1

Arduino Mega是一块以ATmega1280为核心的微控制器最小系统,本身具有54组数字I/O input/output端(其中14组可做PWM输出),16组模拟比输入端,4组UART(hardware serial ports),使用 16 MHz Crystal Oscillator。能夠通过USB直接下载程序而不需经过其他外部烧写器。供电部份可选择由USB直接提供电源,或者使用AC-to-DC adapter及电池作为外部供电。

单片机近图

 

2.2 底盘

底盘由机械部分、电路部分构成,机械部分主要是一个可差速转向的四轮小车底盘,电路部分主要是一块电机驱动板和两个红外对射光电传感器。

当底盘左侧的电动机组和右侧的电动机组转速不一致时,底盘就会向转速低的一边转向。(将电机转速视为矢量,向前转动时转速为正值,向后转动时转速为负值。)如果左右两侧的电机组转速方向相反、大小(绝对值)相等,则此时底盘会原地打转。这种转向机制和履带式坦克的转向机制是一样的。如果采用履带机构则效果更好。

每个直流减速电机配有一个减速箱。

实物图如下图所示:

dp-0 dp-1

 

底盘后端的两个电动机减速箱的轮轴上各装配了一个码盘,以便编码器进行脉冲计数。码盘上刻有均匀的齿状间隙,当轮轴转动时,编码器的红外发射管发出的红外光束经过码盘产生通断的效果,从而使编码器的红外接受管接受到的红外光束为周期性的脉冲信号,通过在单位时间内对脉冲信号计数即可得知轮轴的角速度。

dp-3

 

2.3 电机驱动电路

相对单片机控制电路而言,由于直流电机工作时需要较强的电流、较大的输出功率,并且会在电路中产生很大的电涌,因此不能直接用单片机的I/O端口控制直流电机。因此我们采用DF-MD V1.3 2A大功率H桥L298N双路直流电机驱动电路(以下简称“电机驱动电路”)来控制底盘左右两侧的电动机组。电机驱动电路可以接受来自单片机的控制信号,驱动直流电动机,实现转速、转向的控制。

clip_image002

H桥式电机驱动电路的原理

 

上图所示即“H桥式电机驱动电路”的示意图,因为它的形状酷似字母“H”,因而得名。当处于对角线上的一对三极管(例如Q1和Q4、Q3和Q2)导通时,电机便可转动。当Q1与Q4导通时电机顺时针旋转,当Q3与Q2导通时电机逆时针旋转。

 
 clip_image001

在这种H桥式电路中,必须保证同侧的三机管不会同时导通,否则电流将达到极大值,很可能烧坏三极管。因此,为保证同侧三机管不会同时导通,上述H桥式电路改进如下:

如上图所示,电机的运转需要三个信号控制:两个方向信号和一个使能信号。如果DIR-L为0,DIR-R为1,并且使能信号为1,那么三极管Q1与Q4导通,电机顺时针转动;如果使能信号仍为1,而DIR-L=1、DIR-R=0,则Q2和Q3导通,电机逆时针旋转。

本设计中采用的电机驱动电路,其核心部件为一个L298N集成电路芯片。L298N集成电路中包含了两组H桥电机驱动电路,可同时驱动两组电机。

2.4 电机驱动电路的接口

clip_image002[4]

以下为电机驱动电路的图片以及说明:

clip_image004

 
 clip_image006

如上图所示,底盘左右两侧的电动机组分别接在电机驱动电路左右两侧的接线柱上,VD接控制芯片的电源正极,VS接电机驱动电源的正极,GND为控制芯片与电机驱动电源的公共地线。E1、M1、E2、M2接单片机对电机的控制信号,具体定义为:

E1 接左侧电动机组的转速控制信号

M1 接左侧电动机组的转向控制信号

E2 接右侧电动机组的转速控制信号

M2 接右侧电动机组的转向控制信号

3.3 PWM脉宽调制在电机调速方面的应用

H桥电路允许通过高速地对三极管导通、断开,从而实现电机的速度控制。电机获得的能量,取决于三极管导通与断开的时间的比值,也就是占空比。这种技术被称为脉宽调制技术(PWM)。

脉宽调制技术并非对电机进行速度控制的唯一途径,但却是单片机系统最常见的电机调速技术。

以下为脉宽调制信号的示例:

clip_image008

脉宽调制技术的优点是线性非常好,而且适应的频段很广,从50Hz到1KHz均工作良好。因此非常适应于单片机对电机进行调速的场合。

 

2.5 电机速度检测

本设计采用的是对射式旋转编码器。

实物图如下所示:

 
 clip_image002[6]

对射式旋转编码器的工作原理是:被测转轴上装有码盘(不透光的圆盘,圆盘周边均匀地刻有可让光线通过的齿孔)。码盘被安装在对射式光电传感器的适当的位置,当它随着转轴一起转动时,从发射器发出的光线从齿孔穿过到达接收器,然后又被齿孔周围不透光的部分遮挡,然后又在下一个齿孔经过时到达接收器,如此往复。连接到接收器上的硬件电路便形成了光脉冲信号,单位时间内光脉冲信号的个数与转轴的转速成正比。借助软件对此光脉冲信号进行计数便可得知转轴的转速。

以下是接收器(红外接收管)的原理图:

clip_image004

为了获得旋转编码器的数据,首先需要一段能够检测传感器输出值的程序,该程序段的作用就是寻找表明码盘已经转过了一个齿孔的上升沿和下降沿。程序检测传感器输出值越频繁,则跟踪码盘状态变化的效果越好。如果码盘齿孔状态变化的速度大于程序检测上升沿和下降沿的速度,那么程序将会丢掉若干齿孔经过时的状态,导致跟踪转轴转动失败。

在本设计中,程序在每个主循环中都检测码盘状态的变化,这个检测频率远远高于码盘的变化频率,因此不会导致丢失齿孔状态的情况。

2.6 底盘与单片机的集成

除了电源接口以外,单片机I/O口需要和底盘子系统相连并参与编程的接口如下:

数字输出 D13 ---- M1 电机驱动电路左侧电机组方向控制

PWM输出 D12 ---- E1 电机驱动电路左侧电机组转速控制(PWM)

数字输出 D11 ---- M2 电机驱动电路右侧电机组方向控制

PWM输出 D10 ---- E2 电机驱动电路右侧电机组转速控制(PWM)

数字输入 D26 ---- Enc1 左侧编码器数字输出口

数字输入 D27 ---- Enc2 右侧编码器数字输出口

 

用于电机控制的类定义

 

 

<!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 9]><![endif]--><!-- [if gte mso 10]>

 

用于编码器控制的类定义

 

 

用于编码器和电动机组的集成(负反馈控制)的类定义

 

 

 

 

电机控制总结:

 

1. C语言源代码在上位机进行编译,生成ATmega1280单片机的目标代码和二进制可执行程序。(本例中最终生成的二进制可执行程序大小为10k,未经优化。)
2. 把二进制可执行程序通过数据线下载/烧写到单片机的EEPROM(电可擦写只读存储器)中。
到此为止,单片机就跟上位机完全脱离关系了,可以独立地运行写入的程序了。即使单片机复位或断电,写入的二进制可执行程序也仍然存在。
3. 单片机加电后,最先执行固化在ROM中特定地址的loader程序,loader从CPU的Flash中把Bootloader加载到RAM里面,执行Bootloader。
4. Bootloader进行硬件的初始化工作,然后加载我们在步骤2中写入的二进制可执行程序到RAM中,然后CPU开始执行这个二进制可执行程序。
下面以电机驱动程序为例说明CPU执行的指令如何影响到机电系统的动作:
5. CPU执行到电机驱动程序时,向相应的数字输出端口输出高电平或者低电平。在这里决定电动机动作的信号有2个:
E - 使能信号。它就是单纯的高电平或低电平的输出;
M - 脉宽调制信号。它是呈一定占空比的周期性的方波。

6. E信号和M信号都是从单片机输出的控制信号,它们非常微弱,并不足以直接驱动电动机。而且它们也不应该直接和电动机这样大电流、强电涌的器件相连接,否则会烧坏CPU。那么怎样驱动电动机呢?通过专门的电机驱动电路。
7. 我采用的电机驱动电路,其核心元器件是一块叫做L298N的集成电路。微弱的CPU控制信号经放大后输入到L298N的双桥电路中。
8、E信号和M信号经上述L298N的双桥电路转换为驱动电机的电机驱动电流。其中:
E信号决定电机的转向,正转或者反转。它是通过导致H电路不同对角线上的三极管从而决定电机的转向的。
M信号决定电机的转速。通过不同占空比的PWM脉宽调制信号,使电机在单位时间内获得的能量不同,从而达到不同的转速。
9. 电机不同的转向和转速,决定了机器人的前进、后退、左转、右转。
当两侧的电机都同速正转或者反转时,机器人前进或者后退。
当两侧的电机转速不同时,会在机器人底盘上产生侧向的应力。这个和类似于履带式坦克车的差速转向机构道理是完全一样的。有关这里面的机械原理请查阅“差速转向机构”。
当两侧的电机速度相同但是转向相反时,机器人则原地打转。
10. 如何通过编码器得到的转速信号对电机进行闭环控制呢?
原理框图如下:

详细的解释:
在这个系统中对应关系为:
a) 指令输入:程序中设置的期望角速度
b) 参考输入元件:单片机的PWM输出端口
c) 控制器:电机驱动电路
d) 执行元件:直流减速电机
e) 控制对象:轮子
f) 被控变量输出信号:轮子的转速
g) 测量元件:编码器(码盘、红外对射传感器构成)
描述:系统接收一个代表输出信号期望的角速度信号,电机驱动电路将输入信号与代表输出的实际角速度的反馈信号进行比较,并得到一个误差信号去控制电机驱动电路驱动轮子。电机上都有一个内置的齿轮减速器,它的输出才是电机的最终输出。测量元件就是编码器返回代表实际速度的反馈信号。

 

2.7 云台

云台是由舵机和若干支架构成。

clip_image002[1]

 

产品参数:

1.云台水平旋转角度:约175度
2.云台垂直旋转角度:约150度
3.云台尺寸:长宽高 60x60x85mm
4.舵机工作电压:4.8V-6.0V
5.舵机使用温度:-20~~+60摄 氏度
6.舵机速度:0.19秒/60度(4.8V);0.15秒/60度(6.0V)
7.舵机扭矩:3.0kg·cm(4.8V);4.5kg·cm(6.0V)
8.舵机死区设定:5微秒
9.云台重量:90g

舵机工作原理

舵机的工作原理如图4-1-3所示。其中,舵机控制器一般采用PID控制,以满足舵机动静态指标要求;伺服功率放大器一般由脉冲宽度调制器(PWM)和开关控制电路组成;直流伺服电机是舵机的执行元件,可采用有刷或无刷直流电机;减速机构一般采用蜗轮蜗杆或 丝缸减速机构。

clip_image002

2.8 红外测距传感器

图4-1-3 舵机工作原理示意图

具体介绍及程序实现待补充。

1.2 红外测距传感器

选型:GP2D12 红外测据传感器,实物图如下:

clip_image002[3]

图1-2-1红外测距实物图

技术规格:
探测距离:10-80cm
工作电压:4-5.5V
标准电流消耗:33-50 mA
输出量:模拟量输 出,输出电压和探测距离成反比例

clip_image004[1]

 

2.9 人机交互系统

由LCD液晶显示屏和数字按键构成。

将机器人当前的状态以简单明了的方式显示出来,并且让人能够通过按键很方便地操作机器人。

选型:LCD Keypad Shield

clip_image002[5]

LCD Keypad Shield输入输出扩展板使用2行16个字符液晶,具有对比度调节和背光灯,使用1个模拟口便完成5个按键的输入,1个复位按键,未使用的IO口都扩展出来备用,充分利用IO口。占用数字端口:PIN4(DB4),5(DB5),6(DB6),7(DB7),8(RS),9(E),10(背光控制),模拟按键端口A0。(LCD蓝底白字)

引脚:

clip_image004[3]

 

此文写得很仓促,如有纰漏请赐教。大体上就是这样了,欢迎讨论。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值