超声波智能小车邹威.docx
- 文档编号:27991171
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:19
- 大小:275.32KB
超声波智能小车邹威.docx
《超声波智能小车邹威.docx》由会员分享,可在线阅读,更多相关《超声波智能小车邹威.docx(19页珍藏版)》请在冰豆网上搜索。
超声波智能小车邹威
机器人技术实训
学院(系):
计算机学院
专业:
计算机控制技术
姓名:
邹威
指导老师:
赵鹏举
完成时间:
2013-11-20
一、实训任务ﻩ3
二、整体设计方案ﻩ3
三、硬件部分ﻩ5
1、硬件部分的整体框架图5
2、电机驱动模块6
3、超声波模块ﻩ9
(1)、程序流程图ﻩ13
五、结果分析与调试(附图)ﻩ22
六、体会与心得ﻩ22
一、实训任务
经过一学期的《机器人技术》的学习,我们打算做一个简易的超声波小车。
这个超声波小车要能够躲避障碍物,或者能够按照程序的控制来完成相应的任务。
在硬件部分,要求按照电路板焊接完成电机驱动电路,以及用万用板搭出单片机最小系统。
软件部分,要求能够熟练的使用keil软件进行C编程,然后通过单片机开发板把程序下载到我们的单片机上面,反复调试,使之能够按照我们的程序完成相应的动作。
二、整体设计方案
系统整体框架:
图一
系统的大致工作原理就是:
传感器把外部信号,转换为电信号,然后被单片机识别,当单片机识别出信号之后,会对信号进行运算处理,然后会得出判断,再吧判断的结果传给执行器,让执行器去驱动电机完成我们要实现的动作。
照实训的要求,完成的小车必须要在碰到障碍物的时候,做出相应的反应。
那么机器怎么来实现对客观事物的反应呢?
这就需要用到传感器,传感器是根据一定的物理定律做出来的一种将物理信号转换成电信号的装置,只有电信号才能够被单片机系统识别。
在这次实训中我们用的传感器是HC-SR04超声波模块。
执行器主要就是对单片机的命令进行解释执行。
就像人的手和脚,根据大脑的命令完成相应的动作一样,执行器可以根据单片机发出的电平命令,来实现电机的正反转和调速。
在我们这个系统中由于用的是小功率的直流电机,所以我们采用L298电机驱动模块作为本系统
的执行器。
三、硬件部分
1、硬件部分的整体框架图
图二
整个系统的电源由一块12V、800mAH的锂离子电池提供,这块电池一方面为电机驱动器提供电源,用于驱动L298,另一方面接入到7805转5V的电压模块里面。
超声波模块为了方便和单片机进行数据通信,采用TTL电平,所以超声波模块需要5V电源。
单片机也是标准的TTL电平,所以也是5V电源供电。
在电机驱动板的信号控制端,我们加了光耦隔离驱动,所以在信号控制端也必须有5V供电,用于让光耦工作起来。
特别要说明的是:
在L289电机驱动模块的信号输入端,一定要讲信号地线引出来,像我们这个系统采用一个电源供电还好,所有的电平都在一个参考电压下,如果信号电路和驱动电路采用的不是一个电源供电,而信号地线又没有接出来,那么就会导致,你输入的高低电平不会被驱动模块识别,因为两个电路没有共同的参考电压,那么就不知道多少伏是低电平多少伏是高电平了。
2、电机驱动模块
(1)模块简介
这个电机驱动模块的核心部分就是有一块L298N电机驱动芯片。
L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。
可以方便的驱动两个直流电机,或一个两相步进电机
L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。
4脚VS接电源电压,VS电压范围VIH为+2.5~46V。
输出电流可达2.5A,可驱动电感性负载。
1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。
L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。
5,7,10,12脚接输入控制电平,控制电机的正反转。
EnA,EnB接控制使能端,控制电机的停转。
为了防止电机突然转向和骤停产生的冲击电流对单片机和L298本身的伤害,我们在电路板的输入和输出端分别加了光耦隔离和续流二极管。
(2)电路图的工作原理
图三
A、电路中的元件:
图中的P1是用于连接杜邦线的插针,D1-D4为发光二极管,U1为光电隔离器,U2为L298电机驱动芯片,S1为散热片,C1-C2为去耦电容,C3-C4为滤波电容,D5-D12为续流二极管,J1-J3为插座。
B、电路的工作原理:
由L298的芯片资料可以得知,这个芯片只有在ENA和ENB都为高电平时,对方向控制端控制才会有电流输出。
当方向控制端收到高电平时有效。
在这个前提下进行分析如下:
如果IN1输入的是低电平,那么2-1-2-3对应的那条线路就会通过排阻1导通,这样光耦内部的发光二极管就会发光,光耦内部的感光三极管,接收到光信号也会导通,这样6-16-15-5这条电路导通,那么L298N处的IN1就会呈现高电平,那么这时电机就会正转。
其他的输入端IN2、IN3、IN4也是同样的道理。
图中有两处电容,而且是一大一小。
一处电容是为用于12V电源,一处是用于5V电源。
大电容主要是起蓄能的作用,当电机在高速旋转或者突然转向的时候,会产生大量的高次谐波,会阻碍电流的流动,这时候会出现电机转速急剧下降的情况。
所以要加一个大的电容,当电机运转正常时,电源对电容充电,当电机转速下降时,电容放电,作为电机的铺助电源。
这样不断的充电、放电不间断进行,电机就会连续的转动了。
那个小电容主要是滤除电源本身的高次谐波和电机转动产生的高次谐波。
D5-D12为续流二极管,所有的感性负载都会连接上续流二极管,为的是保护驱动电路。
(3)模块的控制
图四
从L298的芯片手册可以知道,当ENA、ENB片选端为高电平的时候,L298才可以工作,
当IN1=0,IN2=1时,正转;
当IN1=0,IN2=1时,反转;
当IN1=1,IN2=1时,刹车;
当IN1=0,IN2=0时,停止;
3、超声波模块
(1)、模块简介
HC-SR04超声波测距模块课提供2CM-400CM的非接触式距离感测功能,测距精度可达3mm;模块包括超声波发射器、接收器与控制电路。
基本工作原理:
(1)才有IO口TRIG触发测距,至少10uS高电平信号;
(2)模块自动发送8个40Khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试的距离=(高电平时间*声速(340m/s)/2。
(2)、电气参数:
图五
(3)、模块的控制:
超声模块时序图:
图六
由模块的时序图可以知道,要驱动这个模块,只需要给一个10u以上的高电平信号,该模块内部将自动发送8个40K是方波信号,并自动检测回波。
一旦检测有回波信号,就立刻输出回响信号。
回响信号的脉冲宽度和测量距离成正比。
4、单片机最小系统
(1)、复位电路
图七
看上电复位的情况:
通电瞬间电容可以当短路(别问我为什么)所以RST脚为高电平。
随着时间的飞逝(电容充电),稳定后VCC的电压实际上是加在电容上的。
电容下极板也就是RST脚最终为0V。
这样RST持续一段时间高电平后最终稳定在低电平,高电平持续时间由RC时间常数决定。
这就是上电高电平复位。
低电平复位也类似。
判断是什么复位,你要看上电瞬间,RST是什么电平,是高电平就是高电平复位,是低电平就是低电平复位(电容在充电的一瞬间是看成短路的,至于这是什么原因,可以去看看电容充电曲线图,在充电一瞬间电容两端的电压是非常低的,所以可以看成等电势,也就是短路。
大电容旁边那个小电容一般是稳定电源电压滤波用的。
(2)、晶振电路
图八
晶振电路的作用是在电路产生震荡电流,发出时钟信号。
它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,就会容易出现问题。
(3)整个最小系统电路
图九
四、软件部分
(1)、程序流程图
图十
(2)、程序内容
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitTlrg=P2^0;//触发信号
sbitEcho=P2^1;//回响信号
//电机驱动引脚定义
sbitIN1=P2^2;
sbitIN2=P2^3;
sbitIN3=P2^4;
sbitIN4=P2^5;
/***********************
*函数名称:
delay_nms
*函数功能:
延时
*函数调用:
ﻩ无
*入口参数:
m
*出口参数:
ﻩ无
************************/
voiddelay_nms(int m)
{
uinti,j;
for(i=m;i>0;i--)
ﻩ for(j=110;j>0;j--);
}
/***********************
*函数名称:
init()
*函数功能:
ﻩ设定定时器,初始化接收口
*函数调用:
ﻩdelay_nms()
*入口参数:
无ﻩ
*出口参数:
ﻩ 无
************************/
void init()
{
TMOD=0x01; //定时器0,工作用内部TR0控制计数,而处于16位计数模式
TH0=0;
TL0=0;
Echo=0;
delay_nms(3);
Echo=1;
}
/***********************
*函数名称:
ﻩUlt_send()
*函数功能:
ﻩ超声波脉冲发射
*函数调用:
delay_nms()
*入口参数:
ﻩ无
*出口参数:
ﻩ 无
************************/
voidUlt_send()
{
Tlrg=0;
delay_nms(3);
Tlrg=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Tlrg=0;ﻩﻩﻩﻩ
}
/***********************
*函数名称:
Ult_receive()
*函数功能:
接收超声波,并计算距离
*函数调用:
无
*入口参数:
无
*出口参数:
distance
************************/
uintUlt_receive()
{
uintnum,a,b,distance;
while(Echo==0);//等待接收位变高,一变高,就开定时器,且定时器清零
ﻩTH0=0;
ﻩTL0=0;
TR0=1;
while(Echo==1);//等待接收位变低,一变低,就开
TR0=0;
ﻩa=TH0;
ﻩb=TL0;
num=a*256+b;
ﻩdistance=num*0.172;
return distance;
}
/**************
*函数名称:
go
*函数功能:
前进
*函数调用:
无
*入口参数:
无ﻩ
*出口参数:
ﻩ无
*************/
void go()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
/**************
*函数名称:
back
*函数功能:
后退
*函数调用:
无
*入口参数:
ﻩ无ﻩ
*出口参数:
无
*************/
voidback()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
/**************
*函数名称:
left
*函数功能:
左转
*函数调用:
无
*入口参数:
ﻩ无
*出口参数:
ﻩ无
*************/
voidleft()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
/**************
*函数名称:
right
*函数功能:
右转
*函数调用:
无
*入口参数:
ﻩ无
*出口参数:
无
*************/
voidright()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//主函数
void main()
{
uintk;
init();
while
(1)
{
Ult_send();
k=Ult_receive();
if(k<200)//判断前方障碍,是否小于20cm
ﻩ{
delay_nms(50);
ﻩback();//如果有障碍,先退后
delay_nms(100);//延时
right();//再右转
ﻩdelay_nms(100);//延时
if(k<200)//如果前方障碍,还是小于20cm,
{
ﻩdelay_nms(50);
ﻩ left(); //那么就左转
ﻩ delay_nms(100);
ﻩ}
else
ﻩ{
go();
ﻩ}
}
else
{
ﻩgo();
ﻩ}
}
}
五、结果分析与调试(附图)
(1)、L298N调试
在L298N的调试过程用,焊接好以后,可以先采取硬件测试的方式,找一块电源板,在上面取出12V和5V的电压,把12V接到电机驱板上面,把两个电机也接到电机驱动板上面,然后把ENA和ENB分别置为高电平,再在IN1-IN4端口输入高低电平看输入端口的LED是否点亮,如果量且电机可以转动起来,就表明这个模块已经焊接完成。
(2)、超声波模块调试
在触发端给10us以上的高电平以后,用示波器打回响信号端,看是否出现40K的方波,如果出现,这表明这个模块已经驱动完成。
(3)、最小系统的调试
在最小系统焊接完成以后,最简单的方法就是烧录一个点亮LED的程序进去,然后把一个LED灯接到单片机相应的IO口上,看LED是否点亮,如果LED亮,表明最小系统已经可以工作。
如果不能工作,那么首先检查焊接是否有虚焊、漏焊的情况。
如果没有以上情况,就用示波器打晶振电路,看是否有方波,如果有,表明没有问题,晶振电路已经起振。
如果晶振电路工作正常,那么再用示波器检测复位电路,在打开电源的瞬间,看低电平时间是否持续在10ms以上,如果是,那么表明复位电路也是正常的。
如果这时候,最小系统还是不能工作,那就说明单片机芯片出了故障。
六、体会与心得
经过两天的机器人技术实训,使我对机器人的认识发生了根本性的变化。
原来机器人不只是指外型像人类,而是指一类能够按照设置程序自动运行的机器,比如我们这次实训的超声波小车就是一个简单的机器人,还有生活中的自动售货机也可以称作机器人。
在制作超声波的过程中,我们要自己焊接电机驱动板和最小系统板。
在焊接的过程中常常出现,电路原理图都是一样的,但是焊接完成以后,有的可以工作有点却不可以工作的情况,后来和同学们商量讨论,再自己用万用表测试发现,是在焊接的过程中,焊点不牢固导致了虚焊,所以才会出现有的同学焊接的电路板无法工作的情况。
通过这次实训,我深刻的认识到,如果要从事单片机方面的工作,一定要对电路有很深的理解,并且要具备很好的焊接技术。
在程序的编写过程中,驱动超声波模块的时候遇到了很多问题。
刚开始的时候,我完全按照时序图去写延时的时间,却发现干不起,后来我把时间延长原理的30%以后就可以了,这说明我们在写时序的时候不要完全照搬时序要在原来的基础上面留有一定的裕度。
在调节超声波时序的时候,要用示波器去打你单片机上面的触发端,看出来的方波是否满足时序,如果满足,再用示波器打回响信号是否是40k的方波,如果是就表示此模块已经驱动起来了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波 智能 小车