智能搬运小车.docx
- 文档编号:5816669
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:22
- 大小:815.84KB
智能搬运小车.docx
《智能搬运小车.docx》由会员分享,可在线阅读,更多相关《智能搬运小车.docx(22页珍藏版)》请在冰豆网上搜索。
智能搬运小车
《智能搬运小车-清华大学二队》
目录
引言3
系统总体结构设计及说明4
电机驱动调速系统5
循迹系统6
超声波模块电路7
电源模块设计9
单片机最小系统设计9
小车软件设计10
小车夹紧装置11
步进电机驱动模块12
PROTUES仿真结果13
程序15
智能搬运小车
车辆与我们的社会生活息息相关,然而当今车辆的智能化发展还不是很迅速,特别是在安全性、智能化、车与路之间交互信息等方面。
今天的车辆技术与未来的智能车辆技术还存在着巨大的差距。
今天的汽车工程师正面临着巨大的挑战,需要在新旧技术之间建立一座桥梁,通过应用先进的电子技术、信息技术、电子通讯技术推动车辆技术的进步,可解决人类大量的体力劳动。
本设计采用AT89S52单片机为简易智能小车的核心器件。
循迹模块由若干个光电管组成,通过反射红外线的变化判断黑线的有无以达到循迹的功能,电源模块采用电池两路供电,单片机与大电流器件分开供电,避免大电流器件对单片机造成干扰,电机驱动模块选用常用的H桥驱动芯片L298N结合单片机来控制电机工作,舵机转向模块是智能小车程序设计的重要模块,采用PWM波,控制舵机的转向和电机转速。
根据设计的要求,确定如下方案:
自己设计小车模型,加装一些模块,实现对电动小车的速度和方向的控制,自动循迹,由单片机根据所检测的各种信息实现对小车的智能控制。
这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
智能小车系统主要包括以下模块:
C52单片机模块、电机驱动模块、步进电机夹紧模块、循迹模块、超声波蔽障模块和电源模块一共六个模块。
系统总体结构设计及说明
电机驱动调速系统
采用直流电机驱动芯片L298N,驱动电流总和可达到4A,它可以驱动二相和四相步进电机的专用芯片,我们利用它内部的双H(如图1)桥式电路来驱动直流电机,这种驱动电路可以很方便实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动。
控制比较简单,电路也很简单。
是广泛采用的PWM调速技术。
由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。
根据以上综合比较,以及本设计中受控电机的容量和直流电机调速的发展方向,本设计采用了H型单极型可逆PWM变换器进行调速。
脉宽调速系统的主电路采用脉宽调制式变换器,简称PWM变换器。
脉宽调速也可通过单片机控制继电器的闭合来实现,但是驱动能力有限。
为顺利实现电动小汽车的前行与倒车,本设计采用了可逆PWM变换器。
可逆PWM变换器主电路的结构式有H型、T型等类型。
我们在设计中采用了常用的双极式H型变换器,它是由4个三极电力晶体管和4个续流二极管组成的桥式电路。
PWM调速主要是针对功率较小的低惯量电机,具有高的定位速度和精度,低速性能好,稳速精度高,调速范围宽,系统频带宽,动态响应好,抗干扰能力强,且经济可靠,因而有很大的使用价值。
调压调速主要是针对饶线式电机,通过串电阻调压调速。
价格便宜。
在一些精度要求不高,低电压时力矩小,调速范围小的场合。
循迹系统
本系统采用反射式红外线光电传感器用于检测路面的起始、终点(2cm宽的黑线),玩具车底盘上沿黑线放置一套,以适应起始的记数开始和终点的停车的需要。
利用超声波传感器检测障碍。
超声波模块电路
光线跟踪,采用光敏三极管接收灯泡发出的光线,当感受到光线照射时,其c-e间的阻值下降,检测电路输出高电平,经LM393电压比较器送单片机控制。
红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。
单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
红外探测器探测距离有限,一般最大不应超过15cm。
对于发射和接收红外线的红外探头,可以自己制作或直接采用集成式红外探头。
红外光的发送接收选用型号为ST168的对管。
当小车在白色地面行驶时,装在车下的红外发射管发射红外线信号,经白色反射后,被接收管接收,一旦接收管接收到信号,那么图中光敏三极管将导通,比较器输出为低电平;当小车行驶到黑色引导线时,红外线信号被黑色吸收后,光敏三极管截止,比较器输出高电平,从而实现了通过红外线检测信号的功能。
将检测到的信号送到单片机I/O口,当I/O口检测到的信号为高电平时,表明红外光被地上的黑色引导线吸收了,表明小车处在黑色的引导线上;同理,当I/O口检测到的信号为低电平时,表明小车行驶在白色地面上。
此种方法简单,价格便宜,灵敏度可调,但是容易受到周围环境的影响,特别是在较强的日光灯下,对检测到的信号有一定的影响。
八对反射式红外发射—接收管的组合使用。
它们分别安装在小车底两侧,正常行进中,检测线应在其间。
只要有一侧检测到黑线信号,立即转向信号方向,保证了小车能沿黑方向行进。
使用接近开关:
它即有行程开关、微动开关的特性,同时具有传感性能,其动作可靠,性能稳定,频率响应快,应用寿命长,抗干扰能力强等、并具有防水、防震、耐腐蚀等特点。
当金属检测体接近开关的感应区域,开关就能无接触,无压力、无火花、迅速发出电气指令,准确反应出运动机构的位置和行程,即使用于一般的行程控制,其定位精度、操作频率、使用寿命、安装调整的方便性和对恶劣环境的适用能力,是一般机械式行程开关所不能相比的。
电源模块设计
电源模块为系统其它各个模块提供所需要的电源,设计中,除了要考虑到电压范围和电流容量等基本参数之外,还要在电源转换效率、降低噪声、防止干扰和电路简单等方面进行优化。
可靠的电源方案是整个硬件电路稳定可靠运行的基础。
随着微电子技术的不断进步,系统电源的设计在单片机应用系统设计中显得越来越重要,它对单片机系统是否正常工作起着至关重要的作用。
根据系统要求,选择7805稳压管将直流12V电压转成5V输出。
7805直流稳压电路图:
单片机最小系统设计
单片机是小车的控制中心,单片机最小系统的合理设计是小车平稳运行的前提,图3.2为52单片机最小系统的几个部分:
有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。
所以本设计中,振荡晶体选择6MHZ,电容选择65pF。
在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。
为了提高温度稳定性,应采用NPO电容。
2、复位电路
80C51的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
时钟频率用6MHZ时C取22uF,R取1KΩ。
除了上电复位外,有时还需要按键手动复位。
本设计就是用的按键手动复位。
按键手动复位有电平方式和脉冲方式两种。
其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。
按键手动复位电路见图3.2。
时钟频率选用6MHZ时,C取22uF,Rs取200Ω,RK取1KΩ。
小车软件设计
系统软件设计说明
在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。
因此,软件设计在微机控制系统设计中占重要地位。
对于本系统,软件更为重要。
为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。
所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。
模块程序设计法的主要优点是:
单个模块比起一个完整的程序易编写及调试;
模块可以共存,一个模块可以被多个任务在不同条件下调用;
模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
本系统软件采用模块化结构,由主程序﹑定时子程序、避障子程序﹑中断子程序显示子程序﹑调速子程序﹑算法子程序构成。
本作品的核心电路是一片AT89C52。
它是整个控制部分的核心,负责车速控制、电动机驱动、舵机转向、黑线检测等功能。
小车夹紧装置
步进电机驱动模块
步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗
地说:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
常见的步进电机分三种:
永磁式(PM),反应式(VR)和混合式(HB),永磁式步进
一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。
在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。
它又分为两相和五相:
两相步进角一般为1.8度而五相步进角一般为0.72度。
这种步进电机的应用最为广泛。
PROTUES仿真结果
向右校正
向左校正
直行
附录:
程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitTriq=P0^0;
sbitEcho=P0^1;
bitflag=0;
uinttime;
unsignedlongs=0;
#defineucharunsignedchar
#defineuintunsignedint
#definem01//黑线m1,白线m0
#definem10
#definefull_speed_left50//方便调节各个状态的占空比,可用参数组:
(30,35,6,25,30,68000,27000,500);
#definefull_speed_right50//(40,45,6,25,30,68000,27000,500);
#definecorrect_speed6//校正时的低速轮的占空比
#defineturn_speed_left25
#defineturn_speed_right25
#definelenth68000//测试数据:
10000--》100--》500--》2000--80000--76000--68000
#definewidth27000//500--》10-->2000--》60000--30000---》27000
#definecheck_right500//2000--》20--》200--》500
#definemidlleft1
#definemidrright5
ucharDuty_left,Duty_right,i=0,j=0;//左右占空比标志,取1--100
sbitmov=P2^4;
sbitIN1=P2^0;
sbitIN2=P2^1;
sbitIN3=P2^2;
sbitIN4=P2^3;
sbitENA=P1^0;
sbitENB=P1^1;
//循迹口五组红外对管,依次对应从左往右第1,2,3,4,5五组
sbitleft1=P1^6;
sbitleft2=P1^5;
sbitmid3=P1^4;
sbitright4=P1^3;
sbitright5=P1^2;
inta[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
voidline_left();
voidline_right();
voidline_straight()reentrant;
//----------------------------------------
voiddelay(longintDelay_time)//延时函数
{
uintt=Delay_time;
while(t--);
}
//-----------------------------------------
voidinit()//定时器初始化
{
left1=m0;//初始化
left2=m0;//白线位置
mid3=m1;//黑线位置
right4=m0;
right5=m0;
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
TH1=0;
TL1=0;
TH0=(65536-66)/256;
TL0=(65536-66)%256;
TR0=1;
}
//--------------------------------------------
voidtime0(void)interrupt1//中断程序
{
time++;
if(time>=50)
{
time=0;
Triq=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Triq=0;
}
i++;//调速在中断中执行
j++;
if(i<=Duty_left)
ENA=1;
elseENA=0;
if(i>100)
{ENA=1;i=0;}
if(j<=Duty_right)
ENB=1;
elseENB=0;
if(j>100)
{ENB=1;j=0;}
TH0=(65536-66)/256;//取约150HZ,12M晶振,每次定时66us,分100次,这样开头定义的变量正好直接表示占空比的数值
TL0=(65536-66)%256;
}
//-----------------------------------------------
voidcorrect_left()//向左校正,赋值
{
Duty_left=correct_speed;
Duty_right=full_speed_right;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//------------------------------------------------
voidcorrect_right()//向右校正,赋值
{
Duty_left=full_speed_left;
Duty_right=correct_speed;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//--------------------------------------------------
voidturn_left()//左转,赋值
{
Duty_left=turn_speed_left;
Duty_right=turn_speed_right;
IN1=0;//转弯时一个正转,一个反转,
IN2=1;
IN3=1;
IN4=0;
}
//---------------------------------------------------
voidturn_right()//右转,赋值
{
Duty_left=turn_speed_left;
Duty_right=turn_speed_right;
IN1=1;//转弯时一个正转,一个反转,
IN2=0;
IN3=0;
IN4=1;
}
//-----------------------------------------------------
voidstraight()//直走,赋值
{
Duty_left=full_speed_left;//左右电机占空比初始化,调节直线运动速度
Duty_right=full_speed_right;//鉴于左右轮电机内部阻力不同,故占空比取不同值,这组值需要单独写程序取值
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
//-----------------------------------------------------
voidline_straight()reentrant//函数名后加reentrant可以递归调用,//一直走黑直线时
{
straight();
if(right5==m1){line_right();}
else
if(left1==m1){line_left();}
else
if(left2==m1)//防止校正时,小车冲出过大,导致2,4号检测管屏蔽了两端检测管的检测,避免其走直线时出轨
while(left2==m1)
{correct_left();
if(right5==m1)
{
line_right();
gotolabel3;
}
elseif(left1==m1)
{line_left();
gotolabel3;}
}
else
if(right4==m1)//防止校正时,小车冲出过大,导致2,4号检测管屏蔽了两端检测管的检测,避免其走直线时出轨
while(right4==m1)
{correct_right();
if(right5==m1)
{line_right();gotolabel3;}
elseif(left1==m1)
{line_left();gotolabel3;}
}
else
if((left1==m0)&&(left2==m0)&&(mid3==m0)&&(right4==m0)&&(right5==m0))
{
straight();
//delay(lenth);
while(right4==m0)//本来应该是用mid3,但是为了提高灵敏度,选择right4;向左时,可取left2对管
{turn_right();}
if(mid3==m1)
{line_straight();}
}
label3:
;//什么都不做
}
//-------------------------------------------------------------------------
voidline_right()//右边有黑线时
{
straight();//这里的直走是在不管红外检测结果的直行
delay(lenth);
if(mid3==m1)
{
turn_right();//执行向右转的赋值
label:
delay(width);//由width值决定转弯时mid3经过黑线宽度时所需要的时间
if(mid3==m0)
while(right4==m0)
{}
else
gotolabel;
}
else
if(mid3==m0)
{
turn_right();
while(right4==m0)
{}
if(midr==m1)
{line_straight();}
}
}
//-----------------------------------------------------------------
voidline_left()//左边出现黑线时
{turn_left();
while(left1==m1)
{
if(right5==m1)
{
line_right();
gotolabel2;
}
}
delay(check_right);//左边遇到黑线时,左边出了黑线之后,继续延时一段时间,判断右边是否遇到黑线,
//若遇到黑线,执行line_right()函数
if(right5==m1)
{
line_right();
gotolabel2;
}
if((mid3==m1)||(left2==m1)||(right4==m1)){line_straight();}
else
{
while(left2==m0)
{turn_left();}
if(midl==m1)
line_straight();
}
label2:
;
}
//--------------------------------------------------------------------
voiddetect_infrared()//循迹,红外检测
{
if(right5==m1){line_right();}
else
if(left1==m1){line_left();}
else
if(left2==m1){correct_left();}
else
if(right4==m1){correct_right();}
else
line_straight();
}
//--------------------------------------
voidmain(void)//主程序部分
{
init();
while
(1)//循环检测红外对管采集的电平信号
{detect_infrared();
while(!
Echo);
TR1=1;
while(Echo);
TR1=0;
i=(TH1*256+TL1);
TH1=0;
TL1=0;
s=(0.17*i);
if(mov==0)
{intm;
intn;
for(m=5;m>0;m--)
{
for(n=0;n<8;n++)
{
P1=a[i];
delay(50);
}
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 搬运 小车