智能小车实训报告_第1页
智能小车实训报告_第2页
智能小车实训报告_第3页
智能小车实训报告_第4页
智能小车实训报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

智能小车实验报告目录1.1项目概述……………………11.2项目要求……………………11.3实训目的……………………11.4系统设计……………………11.4.1框图设计………………11.4.2知识点…………………11.5硬件设计……………………1.5.1总体设计……………1.5.2原件清单……………1.5.3元器件介绍…………1.6软件设计……………………1.6.1程序流程图…………1.6.2程序清单……………1.6.3程序下载调试………………………1.7智能小车运行效果图………………………1.8总结…………………………1.9参考文献……………………1.1项目概述本次实训是基于单片机(STC89C51)智能小车的设计与开发,开发中涉及控制、程序设计、模式识别、传感技术、电子、计算机、机械等。开发智能小车的学习与发展,对促进学习综合运用所学的嵌入式知识以及电子技术的知识提高,具有良好的推动作用。1.2项目要求(1)理解程序、硬件电路图,查阅相关资料;(2)焊接电路板;(3)软硬件调试;(4)完成循迹,避障,遥控等功能。1.3实训目的(1)理解并掌握单片机控制小车的循迹,遥控、避障的原理;(2)了解电子路的布局、PCB板的设计;(3)掌握电路板焊接技术,如何用万用表线判断元器件的好坏;(4)掌握单片机C语言的编程及软硬件调试。1.4系统设计1.4.1框图设计基于STC89C52单片机智能小车系统设计由STC89C52单片机、电机驱动、晶振电路、按键电路、数码管显示电路、红外感应电路几部分组成,系统框图如图1-1所示。图1-1基于STC89C52单片机智能小车系统框图1.4.2知识点该项目需要了解以下知识点。(1)+5V电源原理及设计。(2)单片机复位电路工作原理及设计。(3)单片机晶振电路工作原理及设计。(4)案件电路的设计。(5)数码管的特性及应用。(6)电路板焊接技术。(7)STC89C52单片机引脚。(8)单片机C语言程序设计(9)红外线感应原理。1.5硬件设计1.5.1总体设计智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。循迹光电对管分别装在车体下的左右。当车身下左边的传感器检测到黑线为主控芯片控制左轮电机停止,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机停止,车向右修正。如图1-2所示图1-2智能小车循迹光电对管图避障的原理和循线一样,在车身右边装一个光电对管,当其检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。如图1-3所示。图1-3智能小车避障光电对管图1.5.2原件清单:基于单片机STC89C51元器件如表1-4所示。表1-4基于STC89C51智能小车原件清单1.5.3元器件介绍1)STC89C52单片机管脚图及功能如图1-5为STC89C51的引脚功能图,其各个引脚功能概述如下: VCC:供电电压。 GND:接地图1-5STC89C52引脚功能图P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚备选功能 P3.0RXD(串行输入口) P3.1TXD(串行输出口) P3.2/INT0(外部中断0) P3.3/INT1(外部中断1) P3.4T0(记时器0外部输入) P3.5T1(记时器1外部输入) P3.6/WR(外部数据存储器写选通) P3.7/RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。2)L293D驱动引脚原理图图1-6L293D驱动与电机相连原理图图1-6为L293D采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成n型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D将2个H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。每1个电机需要3个控制信号EN12、IN1、IN2,其中EN12是使能信号,IN1、IN2为电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。选择一路I/O口,经反向器74HC14分别接IN1和IN2引脚,控制电机的正反转。L293D驱动器管脚赋值表表1-7为L293D驱动器小车电机转动的管脚图赋值表:表1-7L293D驱动管脚赋值表行进引脚停止左转右转前进后退原路返回Out1(P2.0)0011001Out2(P2.1)0000110Out3(P2.2)0101010Out4(P2.3)0000101电机驱动一般采用H桥式驱动电路,L293N内部集成了H桥式驱动电路,从而可以采用L293N电路来驱动电机。通过单片机给予L293N电路PWM信号来控制小车的速度,起停。驱动原理图如图1-8所示。图1-8L298N引脚图1.6软件设计1.6.1程序流程图智能循迹避障小车程序流程图如图1-9所示。1.6.2程序清单智能小车程序清单如下所示:#include<reg52.h>#define ucharunsignedchar#defineuintunsignedintsbitK1=P1^0; //P1.0到P1.4为寻线检测端sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitK5=P1^4;sbitKIN1=P1^5; //P1.5P1.6是避障检测端sbitKIN2=P1^6;sbitout1=P2^0; //P2.0到P2.3是电机驱动输出控制端sbitout2=P2^1;sbitout3=P2^2;sbitout4=P2^3;sbitbeem=P3^7; //蜂鸣器控制引脚unsignedlongxdatarec_code;unsignedlongxdatatime_us;unsignedcharxdatarec_cnt;unsignedcharxdatakbuf;ucharsdata,flag; //sdata是红外遥控接收键值变量flag是启动小车或停止小车变量bitrec_b;bitkey_save;bitkeyp;ucharcounter=0;sbitSET1=P2^4 ;sbitSET2=P2^5;sbitSET3=P2^6;sbitSET4=P2^7;ucharcodeseg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddelay1(uchart)//延时程序1{ ucharj;while(t--) {for(j=50;j>0;j--);}}voiddisplay(uchari){ P2=P2|0XF0; P0=~seg7code[i/100]; SET1=0; delay1(10); P2=P2|0XF0; P0=~seg7code[(i/10)%10]; SET2=0; delay1(10); P2=P2|0XF0; P0=~seg7code[i%10]; SET3=0; delay1(10); P2=P2|0XF0; P0=~seg7code[(i+3)%10]; SET4=0; delay1(10); P2=P2|0XF0;}voiddelay(uintt)//延时程序1{ ucharj;while(t--) {for(j=5;j>0;j--);}}voidbeep() //蜂鸣器提示音{ beem=0; delay(1000); beem=1; delay(1000); beem=0; delay(1000); beem=1; delay(1000); }voidInit() //初始化{ TMOD=0x09; //T/C1采用16位定时器/计数器 ET1=1; //定时器1开中断TH0=0x00;TL0=0x00;ET0=0;TR0 =1; //定时计数器启动计数 EX0 =1; //外部中断0关中断 EX1 =0; //外中断1关中断 EA =1; //CPU开中断}//左转voidcomeleft(){ uchari; out1=0; out2=0; out3=1; out4=0; for(i=0;i<10;i++) { out1=!out1; delay(1); }}//左微转voidsleft(){ uchari; out1=0; out2=0; out3=1; out4=0; for(i=0;i<5;i++) { out1=!out1; delay(1); }}//右微转voidsright(){ uchari; out1=1; out2=0; out3=0; out4=0; for(i=0;i<5;i++) { out3=!out3; delay(1); }}//右转voidcomeright(){ uchari; out1=1; out2=0; out3=0; out4=0; for(i=0;i<10;i++) { out3=!out3; delay(1); }}//前进加速;voidcomeon(){ out2=0; out4=0; out1=1; out3=1;}voidstop() //停止{ out1=0; out2=0; out3=0; out4=0;}voidinter_x0()interrupt0{TR0=0;time_us=(unsignedlong)(TH0<<8)+TL0;TH0=0;TL0=0;TR0=1;if(time_us>3800&&time_us<4500){rec_cnt=0;rec_code=0;}elseif(time_us>300&&time_us<700){rec_cnt++;rec_code=rec_code<<1;//rec_code=rec_code&0x00000000;}elseif(time_us>1300&&time_us<1750){rec_cnt++;rec_code=rec_code<<1;rec_code=rec_code|0x00000001;//IO_buzz=0;}elseif(time_us>1800&&time_us<2200){rec_code=rec_code;rec_cnt++;//if(rec_cnt>1){rec_cnt=0;key_save=1;}}if(rec_cnt==32){rec_b=1;key_save=0;rec_cnt=0;}}voidGetKeyValue() //红外遥控键值取值{if(rec_b){unsignedcharda;rec_b=0;kbuf=(rec_code&0x0000ff00)>>8;da=rec_code&0x000000ff;if(kbuf==~da){ sdata=da;}}}//避障原路返回voidshunback(){ if(!KIN1) { out1=0; out2=1; out3=1; out4=0; delay(1000); while(K1&&K2&&K3&&K4&&K5); } elseif(!KIN2) { out1=1; out2=0; out3=0; out4=1; delay(1000); while(K1&&K2&&K3&&K4&&K5); } else{;}}//循迹voidscanline(){ P1=0XFF; if(!(K1||K2||K3||K4||K5)) {counter++; if(counter==5)stop(); } if(K5==0){comeleft();} elseif(!K1){ comeright();} elseif(!K4){ sleft();comeon(); } elseif(!K2){ sright();comeon(); } elseif(!K3){ comeon();comeon(); } else{P2=P2;}}voidmain(void){ P1=0XFF; P2=0XFF; P3=0XFF; P0=0XFF; Init(); while(1) {display(counter); GetKeyValue();//红外遥控键值取值 if(sdata==221) //按221键则小车停止运行 { flag=0; //小车停止变量 beep(); //蜂鸣器叫两声 stop(); //小车停止 sdata=0; //红外遥控键变量归零 } elseif(sdata==93)//按93键则小车启动 { flag=1; //小车启动变量 beep(); //蜂鸣器叫两声 comeon(); //小车启动 sdata=0; //红外遥控键变量归零 } else{;} if(flag==1) // //小车启动,则进行寻线避障操作 { shunback(); //避障 scanline(); //寻线 } }}1.6.3程序下载调试图1-10程序下载软件界面如图1-10是STC89C51单片机程序下载软件STC-ISP.exe。下载方式步骤如下:(1)首先像2-5连接串口,安装硬件驱动。右击“我的电脑”,点击“属性”,选择“硬件/设备管理器”单击“端口”查看串口是否被连接。连接成功则显示com端口号。(2)首先点击STC-ISP.exe快捷方式进入图2-4界面。点击“OpenFile”按钮选择要下载的程序确定,在选择下载点串口COM,下一步点击“Download/下载”,按“Download/下载”之前小车处于断电状态,按下瞬间必须给小车供电。1.7智能小车运行效果图1.8总结经过为期两周的实训让我有如下几点的感想和收获,首先让

温馨提示

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

评论

0/150

提交评论