智能小车控制系统设计报告_第1页
智能小车控制系统设计报告_第2页
智能小车控制系统设计报告_第3页
智能小车控制系统设计报告_第4页
智能小车控制系统设计报告_第5页
已阅读5页,还剩14页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 智能小车控制系统一、 方案论证比较1. 车体模型的比较与选择2. 驱动电机的比较与选择3. 传感器的比较与选择4. 电源的比较与选择二、 系统设计三、 系统调试四、 系统功能五、 设计总结六、 小车程序摘要:本系统采用AT89S52作为核心芯片,控制智能车的一系列动作。小车采用ULN2803A芯片驱动两步进电机,能精确控制小车的转弯,前进,后退等动作;结合两个红外对射管,对边界黑线进行检测,从而判断小车的位置,然后对红外对管输出的信号处理后控制小车做出各种动作。关键词: 超声波传感器 红外线传感器一、方案论证比较1.车体模型的比较与选择方案一、购买玩具电动车:购买的玩具电动车具有组装完整的车

2、架车轮。依靠电机与相关齿轮一起驱动,装配紧凑,使得各种所需电路的安装十分方便,看起来也比较美观,但是市面上多是用于飞思卡尔之类的车,较难找到完全符合比赛要求,在大小,前轮可转向以及价格方面都兼顾的车。方案二、自己组装车:一般的说来,自己制作的车体比较粗糙简陋,主要由几块基板组成,但胜在适合改造,基板表面对称着钻有许多孔,方便安装电路板、电源、车轮以及固定电机,还可以根据需要进行钻孔、拼接,而且价格比较便宜。通过比较,选用方案二。2.驱动电机的比较与选择方案一、直流电机+转向舵机:直流电机应用了“通电导体在磁场中受力的作用”的原理,励磁线圈两个端线同有相反方向的电流,使整个线圈产生绕轴的扭力,使

3、线圈转动。直流电动机的调速范围宽广,调速特性平滑。起动力矩大。可以均匀而经济地实现转速调节。但是由于使用直流电机难以控制左右速度差实现转弯 ,必须加上转向舵机使小车实现转弯,这使小车的结构制造复杂,价格较高。方案二、步进电机+万向轮:步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。由于每步的精度在 3%-5%,而且不会将一步的误差积累到下一步因而有较好的位置精

4、度和运动的重复性;优秀的起停和反转响应;仅仅将负载直接连接到电机的转轴上也可以极低速的同步旋转。由于速度正比于脉冲频率,因而有比较宽的转速范围。采用两个万向轮+两个步进电机驱动小车,可以通过左右两个电机的转速差容易实现左右原地转弯。并且由于步进电机转动角度可以精确控制,使得小车能够精确控制左右转弯的角度以及前进后退的距离。这给小车各种功能的实现带来了极大的方便。基于以上分析,我们采用了方案二。3.传感器的比较与选择:方案一、发光二极管+光敏电阻:采用发光二极管发光,用光敏光敏电阻配合判断。当发光二极管发出的可见光照射到黑带时,光线被黑带吸收,光敏电阻没受到光照,呈现高阻态,输出端为低电平信号给

5、单片机;当发光二极管发出的可见光照射到白底时,光线反射,光敏电阻受到光照,呈现低阻态,输出端为高电平信号给单片机。通过这种方法来判断是否遇到黑线。但是光敏电阻极易受环境影响,稳定性也很差。方案二、红外对管:利用红外线发射管发射红外线,红外线二极管进行接收。采用四组红外对管发射和接受红外信号,外面可见光对接收信号的影响较小,接收的红外信号经LM324进行比较转换为电压信号,产生高电平或低电平返回给单片机。同方案一的远离一样,当遇到黑线时,红外线被吸收,信号经过处理返回低电平给单片机;当遇到白底时,红外线被反射,信号经过处理返回高电平给单片机;此方案最大的优点是受外界环境干扰小。通过比较,我们采用

6、了受外界环境干扰小的方案二。4.电源的比较与选择方案一、采用双电源为了确保单片机控制部分和后轮电机驱动的部分的电压不会互相影响,要把单片机的供电和驱动电路分开来,即:12v来驱动步进电机,同时用7805稳压管将电压来稳成5V供给单片机,这样有助于消除电机干扰,提高系统的稳定性。但采用双电源实现起来比较麻烦。方案二、采用5v单电源用10.8V的锂电池通过7805稳压到5v同时给单片机及步进电机供电。这种接法比较简单,但小车的电路功耗过大会导致后轮电机动力不足。由于我们的小车质量不大,而且速度要求不高,通过综合分析,我们采用了方案二。二、系统设计1.总体设计本系统利用单片机AT89S52单片机作为

7、本系统的控制核心,该单片机可以将从传感器的输出信号得到外界的信息,判断小车是否到达边界,然后在程序中控制步进电机转动的角度精确控制,从而实现电动车的前进距离的精确控制以及左右轮差速转动实现转弯等。 开始前进到达起点?入库流程到达终点?结束否是否是2.单元电路设计2.1传感器模块利用光的反射原理,当光线照射在白纸上,反射量比较大,反之,照在黑色物体上,由于黑色对光的吸收,反射回去的量比较少,这样就可以判断是否遇到黑带。采用红外线发射,外面可见光对接收信号的影响较小,利用红外对管对黑线边界进行检测,再用LM324对检测信号进行比较,取反,送单片机进行处理。 电路原理如下所示2.2单片机控制模块本系

8、统采用AT89S52单片机系统控制电路,主要由:电源电路、晶振电路、复位电路,电路结构简单,性能稳定,是单片机系统控制普遍采用的硬件电路。电路原理如下图2.3步进电机驱动模块本系统采用两个步进电机作为后轮驱动力。两个步进电机通过ULN2803A芯片对单片机送来的脉冲信号进行取反放大,然后送到步进电机处,保证通过电机的电流足够大,使电机正常工作。电路原理图如下电路原理图如下2.4电源模块电源模块采用10.8V锂电池组对单片机控制部分和电机驱动部分进行供电。电源经7805稳压成5V稳定电压后给单片机控制部分及步进电机供电。电路原理图如下2.5倒车、刹车灯模块为了使我们的小车更加接近现实,更加逼真,

9、我们特意在小车后部加了六个LED灯,小车处在不同状态下,有不同的信号灯亮,比如前进的时候两个绿灯亮,后退的时候两个黄灯亮,前进过程中小于安全距离就亮红灯,左转、右转过程中小于安全距离就亮黄灯等等。原理图如下:3.各单元模块的联接步进电机驱动mcuAT89S52电源传感器(红外对管)各种信号灯整个智能小车系统主要由四大模块组成,以AT89S52为核心的控制模块,传感器模块,电源模块以及步进电机模块。四大模块构成了小车的主要框架。附带一个提醒灯模块,主要是增加小车的真实性。步进电机模块通过ULN2803A驱动芯片与单片机连接起来,驱动芯片主要功能是将单片机发送的脉冲指令放大取反。传感器模块通过LM

10、324电平比较芯片与单片机连接起来,芯片主要将红外对管采集到的模拟信号转换为数字信号发送给单片机,让单片机进行判断并执行相应的动作。电源模块通过7805芯片将一个10.8V的锂电池組稳压到5V给单片机及步进电机供电。三、系统调试根据题目要求,我们对各要求进行排序并逐个设计制作和调试,我们通过多次试验,对比,调试,通过软硬件调试和磨合后,效果良好。四、系统功能1、模式1:利用无线模块实现简单的遥控车,按A键为前进,按B键为右转,按C键为左转,按D键为后退,其中还用到超声波传感器来进行测距,从而使得小车不发生碰撞;2、模式2:实现自动入库3、模式3:按A键为走圆弧,按B键为走梯形,按C键为走S形,

11、按D键为停止。五、设计总结通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化,可能出现失误的就是受光线影响致使小车有时会检测不到黑线而跑出界或者接线不良导致的失误。在本次设计过程中,我们深刻体会到共同协作的重要性。通过对此课题的研究,我们体验到在实践中学习的显著效果,提高了自己解决问题的能力。这次的比赛,我们从不懂地去摸索,到有了一点方向地去了解,学到了很多东西。不管这次的成绩如何,这次比赛对我们有着特殊的意义,而在电子方面的启蒙将是我们最大的收获与成功。附2:小车程序#include<reg51.h>#include<intrins.h>#

12、define uchar unsigned char /定义一下方便使用#define uint unsignedint#define ulong unsigned longsbitTx = P33; /产生脉冲引脚sbit Rx = P32; /回波引脚sbit K1 = P14;sbit K2 = P15;sbit K3 = P16;sbit K4 = P17;sbit led1 = P30; /红灯sbit led2 = P31; /红灯sbit led3 = P34; /黄灯sbit led4 = P35; /黄灯sbit led5 = P36;/绿灯sbit led6 = P37;

13、/绿灯sbit g1=P24;sbit g2=P25;uint distance4; /测距接收缓冲区uintdistance_data;uchartemp,flag,outcomeH,outcomeL; /自定义寄存器bit succeed_flag; /测量成功标志bitt_flag=0;uchar code FFW8=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9;/正转uchar code REV8=0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1;/反转uchar code CIRCLE16=0xf1,0xf1,0xf3,

14、0xf3,0xf2,0xf2,0xf6,0xf6,0xf4,0xf4,0xfc,0xfc,0xf8,0xf8,0xf9,0xf9;void delay1ms(uint i)uchar j;while(i-)for(j=0;j<245;j+) /1ms基准延时程序 void motor_ffw(int n) /两步进电机正转 uchar i;uint j; for (j=0; j<n; j+) /转1*n圈 for (i=0; i<8; i+) /一个周期转45度P0= REVi; /取数据P2= FFWi; /取数据delay1ms(1); /调节转速void motor_r

15、ev(int n) /两步进电机反转 uchar i;uint j; for (j=0; j<n; j+) /转1*n圈 for (i=0; i<8; i+) /一个周期转45度P0= FFWi; /取数据P2= REVi; /取数据delay1ms(1); /调节转速void turn_left(int n) /左转uchar i;uint j;for(j=0;j<n;j+)for (i=0; i<8; i+) /一个周期转45度 P0=REVi; /取数据delay1ms(1); /调节转速 void turn_right(int n) /右转uchar i;uin

16、t j;for(j=0;j<n;j+)for (i=0; i<8; i+) /一个周期转45度 P2=FFWi; /取数据 delay1ms(1); /调节转速 voidtui_you(int n)uchar i;uint j;for(j=0;j<n;j+)for (i=0; i<8; i+) /一个周期转45度 P2=REVi; /取数据 delay1ms(1); /调节转速voidtui_zuo(int n)uchar i;uint j;for(j=0;j<n;j+)for (i=0; i<8; i+) /一个周期转45度 P0=FFWi; /取数据 d

17、elay1ms(1); /调节转速void Syou(int n)/走S型向左 uchar j,k1=0,z;for (j=0; j<n; j+) /转1*n圈 for (z=0; z<8; z+) /一个周期转45度P0= REVz; /取数据P2= CIRCLEk1; /取数据delay1ms(1); /调节转速k1+;if(k1 > 15)k1=0;void Szuo(int n)/走S型向右uchar j,k2=0,z;for (j=0; j<n; j+) /转1*n圈 for (z=0; z<8; z+) /一个周期转45度P0= CIRCLE15-k2

18、; /取数据P2= FFWz; /取数据delay1ms(1); /调节转速k2+;if(k2 > 15)k2=0;void stop()P0=0xf0;/P2口设置为输入状态先全部写0P2=0xf0; /P3口设置为输入状态先全部写0 void delay_20us() ucharbt ;for(bt=0;bt<60;bt+); voidpai_xu() uint t;if (distance0>distance1) t=distance0;distance0=distance1;distance1=t; if(distance0>distance2) t=dista

19、nce2;distance2=distance0;distance0=t; if(distance1>distance2) t=distance1;distance1=distance2;distance2=t; voidcejuinit()flag=0;Tx=0; /首先拉低脉冲输入引脚TMOD=0x11; /定时器0,定时器1,16位工作方式TR0=1; /启动定时器0 IT0=0; /由高电平变低电平,触发外部中断EX0=0; /关闭外部中断EA=1; /打开总中断0 voidceju() int i; i=0; EA=0;Tx=1; delay_20us();Tx=0; /产生一

20、个20us的脉冲,在Tx引脚 while(Rx=0); /等待Rx回波引脚变高电平succeed_flag=0; /清测量成功标志 EX0=1; /打开外部中断 TH1=0; /定时器1清零 TL1=0; /定时器1清零 TF1=0; / TR1=1; /启动定时器1 EA=1; while(TH1 < 30);/等待测量的结果,周期65.535毫秒(可用中断实现) TR1=0; /关闭定时器1 EX0=0; /关闭外部中断if(succeed_flag=1) distance_data=outcomeH; /测量结果的高8位distance_data<<=8; /放入16位

21、的高8位distance_data=distance_data|outcomeL;/与低8位合并成为16位结果数据distance_data*=12; /因为定时器默认为12分频distance_data/=58; /微秒的单位除以58等于厘米 /为什么除以58等于厘米, Y米=(X秒*344)/2/ X秒=( 2*Y米)/344 =X秒=0.0058*Y米 =厘米=微秒/58 if(succeed_flag=0) distance_data=300; /没有回波则清零 void main()while(1) led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;

22、stop();cejuinit();P1=0xff;while(K1 = 0)/模式1uchar i;ceju();stop();P1=0xff; /P1口设置为输入状态先全部写1 i=P1;/赋值给临时存贮变量i=i&0x0f; /和0x0f相与屏蔽高四位,读取无线遥控码if (i=0x04)/如果是0x04,则代表无线遥控器的按键A按下,执行显示if(distance_data>= 80)motor_ffw(8); /前进led5=0;led6=0;led1=1;led2=1;led3=1;led4=1;elsestop();led5=1;led6=1;led1=0;led2

23、=0;led3=1;led4=1; if (i=0x01)/如果是0x01,则代表无线遥控器的按键b按下,执行显示if(distance_data>= 100)turn_right(8); /右转led5=1;led6=0;led3=1;led4=1;led1=1;led2=1;elseled3=0;led4=0;led5=1;led6=1;led1=1;led2=1;stop();if (i=0x08)/如果是0x08,则代表无线遥控器的按键C按下,执行显示 if(distance_data>= 100)turn_left(8); /左转led5=0;led6=1;led3=1;

24、led4=1;led1=1;led2=1;elseled3=0;led4=0;led5=1;led6=1;led1=1;led2=1;stop();if (i=0x02)/如果是0x02,则代表无线遥控器的按键d按下,执行显示motor_rev(8); /后退led3=0;led4=0;led1=1;led2=1;led5=1;led6=1;while(K2 = 0)/模式2ceju();led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;tui_you(384);stop();delay1ms(50);while(g2 != 0) /基础部分motor_rev(1);stop();led1=0;led2=0;delay1ms(500);led1=1;led2=1;tui_you(384);while(distance_data>= 100)motor_rev(1);ceju();while(distance_data< 100)stop();led1=0;led2=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论