




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于stc89c52单片机控制的智能超声波壁障小车设计【摘要】本文介绍一个基于stc89c52单片机控制的智能超声波壁障小车设计。本次设计采用stc89c52单片机作为小车的检测和控制核心;采用lcd1602显示行驶路程、剩余路程、行驶时间、模式设置、壁障参数等信息;采用3144霍尔传感器测量行驶路程;采用tdl-9915无线遥控发送、接受模块遥控小车;采用m325sp-7np型5轴步进电机带动超声波探头转动;采用l298n电机专用驱动芯片驱动小车电机行驶。实现了集自动壁障、测距、定时定路程控制功能为一体的智能小车设计。 关键词:超声波;单片机;壁障;测距;遥控 目 录1 设计要求 32 总体设计方案 32.1系统控制模块设计方案论证 32.2 超声波壁障设计方案论证 32.3 显示模块设计方案论证 43 元器件介绍 43.1 l298n电机专用驱动芯片 43.2 cx20106a超声波接收芯片53.3 3144霍尔传感器73.4 uln2003达林顿驱动器 74 系统硬件电路 94.1 超声波发送接收电路 94.2 步进电机驱动电路 94.3 串口下载电路104.4 整体系统硬件电路104.5系统pcb图 115 系统软件设计115.1 设计思路115.2步进电机带动探头测距壁障流程图125.3主程序流程图135.4系统总程序 14 6 总结与体会147设计实物图 14 参考文献15附录15 一、设计要求1、自动壁障,且壁障距离可调;2、测距精度为1cm;3、可遥控小车行驶;4、可测小车行驶路程5、可以定时、定路程控制小车停止或启动二、设计方案2.1系统控制模块设计方案论证方案一:采用stc12c5410单片机控制系统。stc12c5410单片机带有pwm脉宽调制输出端口,可直接用来控制电机转速,且其运行速度是8051单片机的812倍;但其i/o口少,即使是32管脚的芯片也只有27个,不够用时需要扩展i/o口,比较麻烦。方案二:采用stc89c52单片机控制系统。主要是通用i/o口多,一般不需要扩展,而且控制指令简单。由于对8051系列单片机应用比较熟悉,且系统需要用到的i/o口较多,而控制电机转速的pwm信号用1个定时器即可模拟。所以此次设计选择采用stc89c52单片机来控制。2.2超声波壁障设计方案论证方案一:采用多方向超声波测距分析来实现壁障。分别在小车的左、中、右三方向放置超声波探头,通过对三个方向超声波的测距数据分析对比确定障碍物位置,再通过调节小车左右电机转速差控制小车行驶方向实现壁障。方案二:通过步进电机带动一对超声波探头旋转进行各方向测距,将各方向测得数据通过单片机对比分析可得到障碍物方向,然后也是通过调节小车左右电机转速差控制小车行驶方向实现壁障。方案一需要3对的超声波探头,为了防止信号相互干扰各个超声波发送信号要相互间隔,显得繁杂,而且当障碍物与左右侧的超声波探头大于一定角度时将不能接收到超声波信号,方案二通过180度扫描可以很好地检测到各个方向的障碍物,障碍物判断更可靠,壁障效果更好。因此选用方案二设计。2.3 显示模块设计方案论证方案一:采用七段led数码管显示相关数据。数码管显示具有高亮、可视距离远、寿命长的优点,但是一位数码管只能显示一位数据,要想同时显示多个数据,只能增加数码管数目来实现,而且数码管的pcb布线繁杂,数目越多布线越困难。方案二:采用lcd1602液晶显示。液晶显示具有耗能少、可同时显示数据多、控制指令简单、pcb布线简单等优点。通过对比两种显示方案的优缺点,本次设计决定采用方案二。3、 元器件介绍3.1 l298n电机专用驱动芯片:l298是sgs(通标标准技术服务有限公司)公司的产品,比较常见的是15脚multiwatt封装的l298n,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个h桥的高电压大电流双全桥式驱动器,接收标准ttl逻辑电平信号,可驱动46v、2a以下的电机。其引脚排列如上图中所示。l298n的引脚9为logic supply voltage vss,即逻辑供应电压。引脚4为supply voltage vs,即驱动部分输入电压。vss电压要求输入最小电压为4.5v,最大可达36v;vs电压最大值也是36v,但经过我的实验,vs电压应该比vss电压高,否则有时会出现失控现象。它的引脚2,3,13,14为l298n芯片输入到电动机的输出端,其中引脚2和3能控制两相电机,对于直流电动机,即可控制一个电动机。同理,引脚13和14也可控制一个直流电动机。引脚6和11脚为电动机的使能接线脚。引脚5,7,10,12为单片机输入到l298n芯片的输入引脚。下表是其使能、输入引脚和输出引脚的逻辑关系:en a(b)in1(in3)in2(in4)电机运行情况hhl正转hlh反转h同in2(in4)同in1(in3)快速停止lxx停止 控制使能引脚ena或者enb就可以实现pwm脉宽速度调整。1脚和15脚可单独引出连接电流采样电阻器,形成电流传感信号,也可以直接接地。在可设计中就将它们直接接地。引脚8为芯片的接地引脚,它与l298n芯片的散热片连接在一起。由于本芯片的工作电流比较大,发热量也比较大,所以在本芯片的散热片上又连接了一块铝合金,以增大它的散热面积。该芯片的一些参数如下:(1) 逻辑部分输入电压:67v(2) 驱动部分输入电压vs:4.846v(3) 逻辑部分工作电流iss:36ma(4) 驱动部分工作电流io:2a(5) 最大耗散功率:25w(t=75)(6) 控制信号输入电平:高电平:2.3vvinvss,低电平:-0.3vvin1.5v(7) 工作温度:-25130(8) 驱动形式:双路大功率h桥驱动3.2 cx20106a超声波接收芯片(1)cx20106a内部结构图:(2)管脚说明:3.3 3144霍尔传感器3端输出需要接上拉电阻。当有磁铁靠近时,霍尔传感器输出低电平。3.4 uln2003达林顿驱动器uln2003是大电流驱动阵列,多用于单片机、智能仪表、plc、数字量输出卡等控制电路中。可直接驱动继电器等负载。 输入5vttl电平,输出可达500ma/50v。uln2003是高耐压、大电流达林顿陈列,由七个硅npn达林顿管组成。 uln2003的每一对达林顿都串联一个2.7k的基极电阻,在5v的工作电压下它能与ttl和cmos电路直接相连,可以直接处理原先需要标准逻辑缓冲器。uln2003具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。 uln2003芯片引脚图uln2003芯片引脚介绍引脚1:cpu脉冲输入端,端口对应一个信号输出端。 引脚2:cpu脉冲输入端。 引脚3:cpu脉冲输入端。 引脚4:cpu脉冲输入端。 引脚5:cpu脉冲输入端。 引脚6:cpu脉冲输入端。 引脚7:cpu脉冲输入端。 引脚8:接地。 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。 参考电路接法引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。 引脚15:脉冲信号输出端,对应2脚信号输入端。 引脚16:脉冲信号输出端,对应1脚信号输入端。四、硬件设计4.1 超声波发送接收电路4.2 步进电机驱动电路4.3 串口下载电路4.4 系统整体硬件电路4.5系统pcb图五、软件设计5.1设计思路 本次设计软件部分主要包括测距壁障程序、遥控参数设置程序、显示程序、定时器及相关中断程序。本次设计采用外部中断0接收超声波信号,外部中断1接收霍尔传感器信号测行驶路程,定时器0结合外部中断0为超声波发送接收计时进行测距,定时器1用来产生pwm信号控制小车转速,定时器2为小车行驶计时。为了避免中断冲突造成错误处理,应该对某些中断设为高优先级,且中断执行程序不应过长。为了提高壁障灵敏度,步进电机带动超声波探头进行180度来回旋转,且对于占用时间的显示程序能少的应尽量少。遥控要能实现对小车左右轮控制、定路程停止点调节、定时停止及启动点调节,以及对壁障距离调节。5.2步进电机带动探头旋转测距壁障流程图开始发送第i个步进电机脉冲信号发射超声波信号延时读定时器t0值,计算障碍物距离,并记录到ai中i+i=48i=0比较ai,取得最小值以及对应i值(记为j)=dis障碍物超过设定的距离,两轮全速行驶0=j=24(左半边)左灯亮,左轮加速,右轮减速右灯亮,右轮减速,左轮加速ynynnyy24=j=2num=5步进电机停止、小车停止、计时停止num=0num=0num=1;num=3;num1=4kk=0;右灯亮左灯亮zkb1=0zkb1=0keyc按下,zkb1-=10keyd按下,zkb1+=10zkb2=0zkb2=99999all+=100all=0fen1=59?miao1=59?fen2=59?miao2=59?keyc按下:num1=0, fen1+;num1=1,miao1+;num1=2,fen2+;num1=3,miao2+keyd按下:num1=0, fen1-;num1=1,miao1-;num1=2,fen2-;num1=3,miao2-num1=0,fen1=0;num1=1,miao1=0;num1=2,fen2=0;num1=3,miao2=0dis=99dis=0keyc按下:dis+keyd按下:dis-nynyyynynkeya按下ynnnnkeyb按下nny小车启动、计时启动步进电机启动、小车启动、计时开始yynum=1步进停nnum=3num=1nkk=kknynum1=0ykeyc或keyd按下nynum1+num=1num=2num=3num=4nyzkb1=40zkb1=40nynyzkb2=40zkb2=40ynynynyny5.3 主程序流程图5.4 系统总程序:见附录六、总结体会本次电子系统设计前期实现定时器控制pwm输出编程,步进电机驱动控制,超声波发送接收模块;设计后期画原理图和pcb图,然后腐蚀、焊接电路板;最后程序整合及改善以及调试,同时发现调试出现的问题并寻找解决办法。经过不断的努力,提前完成了设计任务,并且各个预期功能基本实现。前期通过观看网上壁障小车相关视频,有了用步进电机带动超声波探头转动的构思。但是网上视频基本上都是超声波探头横着放的,我通过调试发现探头竖着放效果更好,准确度更高。遥控模块直接采用tdl-9915*rf和tdl-9915*tf,遥控发射模块tdl-9915*rf按键后,接收模块tdl-9915*tf对应输出高电平,没按键时输出低电平。这样可方便控制小车各种模式。整个系统设计进行了半个多月,主要在编程和调试上花了很长时间,从中积累了许多编程经验,同时提高了自己的编程能力。由于对51单片机及lcd1602液晶都比较熟悉,所以调试在这两模块问题不大。而对于l298n电机驱动芯片和超声波模块以前都没接触过,因此调试时出现的问题较多,特别是超声波模块,网上相关资料对cx20106a的2脚电阻取值都在10欧姆以下,而自己设计的超声波模块最少也要120欧姆才能有效接收信号,否则小了会有自激信号。这个问题最后是在网站解决的,许多网友也遇到了同样的问题。这次的成功,极大地提高了自己电子设计的兴趣。同时,要感谢赖老师的多番指导和提供意见,以及08电本班其他同学的帮助。七、设计实物图八、参考文献1、郭天祥.新概念51单片机c语言教程.电子工业出版社.2、严桂兰.c语言程序设计与应用教程.厦门大学出版社.3、陆应华.电子系统设计教程.国防工业出版社.4、李刚、林凌、姜苇单片机系统设计与应用技巧.北京航空航天大学出版社.附录:#include #include intrins.h#define uchar unsigned char#define ulong unsigned long #define uint unsigned intint zkb1=2,zkb2=2;sbit p13=p24;sbit p14=p21;sbit csout=p16; sbit rs = p26; sbit en = p27;sbit ledl=p14;sbit ledr=p31;sbit bell=p15;sbit test=p30;sbit keyd=p34;sbit keyc=p35;sbit keyb=p36;sbit keya=p37;sbit kk=p30;long int all=0,aa=0,an;ulong data,cc,bb; xdata uchar num=0,num1=0,miao1=0,fen1=0,miao2=0,fen2=0,yy1=0,yy2=0,dis=50,i,d,t,jj,h,mod,u,fen=0,miao=0,sj=0,g,j,temp=0,avg=0,j0=0,j1=0,j2=0,j3=0,k,m=0,click=0,a48,b4,bcd_dis4,acd_dis6,ccd_dis3;uchar code ffw8=0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6; /反转uchar code ffz8=0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe; /正转uchar code table1=mode2-state set;uchar code table3=mode3-time set ;uchar code table5=mode4-distance ;uchar code table2=stop at: cm ;uchar code table4=off - on - ;uchar code table6=from: cm ;uchar code table7=mode1-speed set;uchar code table8=left: right: ;uchar code table9=s d w ;uchar code table0=a t - m0;void ccout(void) th0=0; tl0=0; tr0=1;/40khz csout=0;/1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); csout=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); csout=0;/2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); csout=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); csout=0;/3 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_(); csout=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); csout=0;/4 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); csout=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();void delayns(uint xms) uint a,b; for(a=0;axms;a+) for(b=0;b100)click=0; if(click=zkb1)p13=0; else p13=1; if(click=zkb2)p14=0; else p14=1; th1=0xff; tl1=0xf6; tr1=1;void int1() interrupt 2 bb+;void t2() interrupt 5 tf2=0; sj+; if(sj=20) sj=0;miao+; if(miao=60) miao=0; fen+; if(fen=60)fen=0; void beled() bell=ledl=ledr=0; delayns(150); bell=ledl=ledr=1;void beled1() bell=ledl=ledr=0; delayns(1000); bell=ledl=ledr=1; void motor_ffw() for (d=0; d6; d+) /转1*n圈 for (t=0; t8; t+) /一个周期转30度 if(keya=1)goto d; if(k=1) p1=ffwt; /取数据 if(k=2) p1=ffzt; if(keya=1)goto d; ccout(); ex0=1; delayns(30); /地方。 if(keya=1)goto d; data=(th08)|tl0; data=data*172/10000; data-=7; am=data; m+; if(m=48)m=0; while(keya=1)|(num!=0) if(keya=1) d: delayns(10); if(keya=1) beled();writecom(0x01); num+; if(num=5) num=0; writecom(0x80); for(i=0;i16;i+) writedata(table9i); for(j=0;j50;j+); ; writecom(0xc0); for(i=0;i16;i+) writedata(table0i); for(j=0;j=2)p2=0xd2;tr2=0; else p2=0xf3;tr2=1; while(keya=1); if(keyb=1) delayns(10); if(keyb=1) beled();switch(num) case 1:kk=kk;break; case 3:num1+;if(num1=4)num1=0;break; default:break; while(keyb=1); if(keyc=1) delayns(10); if(keyc=1) beled(); switch(num) case 1:if(kk=0)ledl=1;ledr=0;if(zkb1=0)zkb1=0;beled1();else zkb1-=10; else ledl=0;ledr=1;if(zkb2=99999)all=0;else all+=500;break; case 3:yy1=1;miao=fen=0; if(num1=0)if(fen1=59)fen1=0;else fen1+; if(num1=1)if(miao1=59)miao1=0;else miao1+; if(num1=2)if(fen2=59)fen2=0;else fen2+; if(num1=3)if(miao2=59)miao2=0;else miao2+; break; case 4:if(dis=99)dis=0;dis+;break; default:break; while(keyc=1); if(keyd=1) if(keyd=1) beled(); switch(num) case 1:if(kk=0)ledl=0;ledr=1;if(zkb1=40)zkb1=40;beled1(); else zkb1+=10; else ledl=1;ledr=0;if(zkb2=40)zkb2=40;beled1(); else zkb2+=10;break; case 2:yy2=1;bb=0;if(all0)all=99999;else all-=500;break; case 3:yy1=1;miao=fen=0; if(num1=1)if(miao1=0)miao1=59;else miao1-; if(num1=0)if(fen1=0)fen1=59;else fen1-; if(num1=2)if(fen2=0)fen2=59;else fen2-; if(num1=3)if(miao2=0)miao2=59;else miao2-; break; case 4:if(dis=0)dis=99;dis-;break; default:break; while(keyd=1); switch(num) case 1: writecom(0x80); for(i=0;i16;i+) writedata(table7i); for(j=0;j50;j+); ; writecom(0xc0); for(i=0;i16;i+) writedata(table8i); for(j=0;j50;j+); ; writecom(0xc5); ccd(zkb1); lcd_disp(ccd_dis); writecom(0xce); ccd(zkb2); lcd_disp(ccd_dis); break; case 2: writecom(0x80); for(i=0;i16;i+) writedata(table1i); for(j=0;j50;j+); ; writecom(0xc0); for(i=0;i15;i+) writedata(table2i); for(j=0;j50;j+); ; writecom(0xc8); acd(all); lcd_disp(acd_dis); break; case 3: writecom(0x80); for(i=0;i15;i+) writedata(table3i); for(j=0;j50;j+); ; writecom(0xc0); for(i=0;i15;i+) writedata(table4i); for(j=0;j50;j+); ; break; case 4: writecom(0x80); for(i=0;i15;i+) writedata(table5i); for(j=0;j50;j+); ; writecom(0xc0); for(i=0;i9;i+) writedata(table6i); for(j=0;j=aa)an=all-aa; else an=0; writecom(0xc1); acd(an); lcd_disp(acd_dis); if(an=0) p2=0xd2; beled1(); yy2=0; while(keyb=0&(fen2!=fen|miao2!=miao); delayns(10); if(keyb=1|(fen2=fen&miao2=miao) if(fen2=fen&miao2=miao) miao=fen=0; bb=0; yy2=1; p2=0xf3;beled(); if(k=2) j=0;for(i=0;iai)j=i; j=48-j; jj=48-j; if(ajj=dis) zkb1=zkb2=0; ledl=1; ledr=1; else if(ajjdis) if(j44) zkb1=zkb2=0;ledl=1;ledr=1; if(j=4)&(j0)zkb2=0; zkb1=40;ledl=0;ledr=1; if(j24)&(j0)zkb1=0; zkb2=40;ledr=0;ledl=1; writecom(0x88);bcd(ajj);lcd_disp(bcd_dis); writecom(0x8e);ccd(j);lcd_disp(ccd_dis); aa=(ulong)bb*15.70795; writecom(0x81); acd(aa); lcd_disp(acd_dis); if(all=aa)an=all-aa; else an=0; writecom(0xc1); acd(an); lcd_disp(acd_dis); writecom(0xc8); ccd(fen); lcd_disp(ccd_dis); writecom(0xcb); ccd(miao); lcd_disp(ccd_dis); void main() initlcd(); writecom(0x80); for(i=0;i16;i+) writedata(table9i); for(j=0;j50;j+); ; writecom(0xc0); for(i=0;i16;i+) writedata(table0i);for(j=0;j50;j+); ; init(); ledl=1; ledr=1; bell=1; p2=0xf3; bell=1; while(1) k=1; motor_ffw(); k=2; motor_ffw(); ag an employment tribunal clai emloyment tribunals sort out disagreements between employers and employees. you may need to make a claim to an employment tribunal if: you dont agree with the disciplinary action your employer has taken against you your employer dismisses you and you think that you have been dismissed unfairly. for more informu, take advice from one of the organisations listed underfur ther help. employment tribunals are less formal than some other courts, but it is still a legal process and you will need to give evidence under an oath or affirmation. most people find making a claim to an employment tribunal challenging. if you are thinking about making a claim to an employment tribunal, you should get help straight away from one of the organisations listed underfurther help. ation about dismissal and unfair dismissal, seedismissal. you can make a claim to an employment tribunal, even if you haventappealedagainst the disciplinary action your employer has taken against you. however, if you win your case, the tribunal may reduce any compensation awarded to you as a r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国4-哌啶基哌啶数据监测报告
- 2025年中国1,4-环己二酮数据监测报告
- 2025至2030年中国高光模压板市场分析及竞争策略研究报告
- 2025至2030年中国酒店桌裙市场分析及竞争策略研究报告
- 2025至2030年中国螺旋重质除渣器市场分析及竞争策略研究报告
- 2025至2030年中国空气健康剂市场分析及竞争策略研究报告
- 2025至2030年中国电气测试设备市场分析及竞争策略研究报告
- 2025至2030年中国热熔反光型标线涂料市场分析及竞争策略研究报告
- 2025至2030年中国波形护栏市场分析及竞争策略研究报告
- 2025至2030年中国循环水真空抽气泵市场分析及竞争策略研究报告
- 2024年全民(人口和计划生育)知识试题与答案
- 《键盘指法练习》课件
- 丙肝防治培训课件
- 大学生创新创业刘建华课后参考答案
- 用工情况说明格式及范文
- JCT587-2012 玻璃纤维缠绕增强热固性树脂耐腐蚀立式贮罐
- 网络安全策略优化
- 国开大学2023年01月11282《社会学概论(本)》期末考试答案
- 中特第五讲社会建设天津大学
- 密封条范文模板(A4打印版)
- 施工现场安全交底15篇
评论
0/150
提交评论