寻迹小车报告五篇范文 时间:2019-05-12 12:01:26 收藏本文下载本文作者:会员上传 简介:写写帮文库小编为你整理了多篇相关的《寻迹小车报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《寻迹小车报告》。 第一篇:寻迹小车报告 智能寻迹小车组员:赵一鹏 艾博文 董羽曦寻迹小车设计报告指导教师:2011年6月12日13:30小组成员:智能寻迹小车组员:赵一鹏 艾博文 董羽曦C8051F单片机的智能寻迹小车本课题是基于C8051F单片机的智能小车的设计与应用,小车完成的主要功能是能够自主识别黑色引导线并根据黑色引线能快速自主稳定的寻线行驶。小车系统以单片机为系统控制处理器,对整个控制软件进行程序的设计和程序的调试,并最终完成软硬件的结合,完成小车的预期功能。一、实验目的:通过设计能进一步掌握单片机的原理、以及能刚好的运用编程实现对小车的控制。使小车能自主寻找路线,并且能够合理设计单片机的外围电路,并使之与单片机能构成整个 系统。二、设计方案:本组小车以单片机为控制处理器、以298为驱动器结合程序,通过芯片发出驱动命令,控制电机的驱动以实现对小车的控制。三、技术方案概要说明本模块车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块、人机界面。四、工作原理1、利用红外采集块中的红外发射接收对关检测路面上的轨迹2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦2、将轨迹信号传给单片机3、单片机采用模糊推理求出转向角度和行走速度,然后去控制行走部分4、最终完成智能小车可以按照路面上的轨迹运行五、报告内容安排第一部分为对整个报告的概括说明,第二部分为整个电路硬件的介绍和说明,第三部分为整个设计的软件程序设计的说明。硬件电路的设计一、寻迹模块寻迹共有8路,前后各4路,它通过TCRT5000是否接受到红外反射光来改变电压大小,从而使单片机发出指令,使小车进行前进、后退、停止、走正等一系列动作。1、寻迹电路图2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦焊接时,可用一个电位器来代替四个电位器,这样即省材料,也使电路板更加精巧。甚至还能将除TCRT5000以外的部件全部安放到车体板上面。TCRT5000实物图与内部结构(与地面距离0.2mm~0.8mm之间)LM393引脚图2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦2、检测将5V电源连接好,万用表与各组寻迹的GND与输出端相连,用白纸来使红外灯反射,当TCRT5000接收到反射红外光时输出低电平,未接收时输出高电平,最后通过改变电位器阻值来调节寻迹灵敏度。二、驱动模块驱动的核心部件是L298N,它通过单片机指令直接控制小车电机电机转速,从而来使小车行驶。驱动电路图5,7,10,12与P2.1,P2.2,P2.5,P2.6相连,使能1,2与P0.0,2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦P0.1相连,2,3,13,14与小车电机相连,驱动要加散热片,防止过热烧坏。L298n引脚分辨电机驱动的检测:连接好电源,将使能1,2都与电源5V相连,5,10与7,12两组,一组与5V相连,另一组与GND相连,用万用表分别测量2,3与13,14两组引脚,有12V电源输出,则驱动正常。三、电源模块电源主要是将12V电压降为5V,输给小车的各部分模块。电源电路图电源最好需由两组并联而成,以免7805过载而烧坏。J2与外电源12V2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦相连,需要两个引脚,5V引脚与GND引脚都需要多个,以满足对各模块的供电需求。LM7805电源模块的检测:将12V与GND连接好,输出端有稳定的5V电源输出,则电源正常。四、1602显示屏(主要用于显示小车运动时间)1602电路图2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦五、语音模块当小车完成所有指令动作到达终点时,蜂鸣器发出响声。蜂鸣器的电路图六、C8051F020单片机它是由Cygnal出的一种混合信号系统级单片机。片内含CIP-51的CPU内核,它的指令系统与MCS-51完全兼容。其中的C8051F020单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时器阵列、看门狗定时器、VDD监视器和温度传感器等部分。C8051F020单片机支持双时钟,其工作电压范围为2.7~3.6V(端口I/O,RST和JTAG引脚的耐压为5V)。与以前的51系列单片机相比,C8051F020增添了许多功能,同时其可靠性和速度也有了很大提高。2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦五、组装小车用适当大小的单孔电路板作为小车底板,在适当位置打上小孔,将各个模块安在上面,使小车质量分布均匀,以免小车走歪。六、焊接的注意事项1.呈圆焊接顺序,元器件装焊顺序依次为:电阻器、电容器、二极管、三极管、集成电路、大功率管,其它元器件为先小后大。2.芯片与底座都是有方向的,焊接时,要严格按照PCB板上的缺口所指的方向,使芯片,底座与PCB三者的缺口都对应。3.焊接时,要使焊点周围都有锡,将其牢牢焊住,防止虚焊。2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦4.在焊接圆形的极性电容器时(一般电容值都是比较大的),其电容器的引脚是分长短的,以长脚对应“+”号所在的孔。5.芯片在安装前最好先两边的针脚稍稍弯曲,使其有利于插入底座对应的插口中。6.电位器也是有方向的,其旋钮要与PCB板上凸出方向相对应。7.取电阻时,找到所需电阻后,拿剪刀剪下所需数目电阻,并写上电阻,以便查找。8.装完同一种规格后再装另一种规格,尽量使电阻器的高低一致。焊完后将露在印制电路板表面多余引脚齐根剪去。9.焊接集成电路时,先检查所用型号,引脚位置是否符合要求。焊接时先焊边沿对脚的二只引脚,以使其定位,然后再从左到右自上而下逐个焊接。10.对引脚过长的电器元件(如电容器,电阻等),焊接完后,要将其剪短。11.焊接后用放大镜查看焊点,检查是否有虚焊以及短路的情况的发生。12.当有连线接入时,要注意不要使连线深入过长,以至于将其旋在电线的橡胶皮上,出现断路的情况。13.当电路连接完后,最好用清洗剂对电路的表面进行清洗,以防电路板表面附着的铁屑使电路短路。2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦14.在多台仪器老化的时候,要注意电线的连接,零线对零线,火线对火线。15.当最后组转时,应将连线扎起,以防线路混乱交叉。16.要进行老化工艺,可发现很多问题,连线要接紧,螺丝要旋紧,当反复插拔多次后,要注意连线接头是否有破损。17.焊接上锡时,锡不宜过多,当焊点焊锡锥形时,即为最好。软件系统设计若小车偏左的时候,左轮将向右偏转;若小车偏右,车轮将向左偏转;若没有偏移,小车将继续向前;若完全偏离黑色轨迹,小车后退以寻找黑色轨迹。一、程序设计方法1、确定程序功能。根据机电硬件中的人机界面、电力电子器件和传感器件的物理特点和运行方式确定外围部件软件功能,根据控制系统设计方案确定控制软件功能,根据系统的功能结构确定前面没有提到的其他软件功能。2、划分任务。将各类软件功能划分成具体的任务。2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦3、确定任务的组合方式。通过分析任务的优先级和相互关系来确定组合方式。因为这个组合方式通常并不是唯一的,可以采取如前文所介绍的概念设计方法的方案排列和方案选择方法。4、确定编程方法。根据任务划分、任务的组合方式、软件开发能力和软件开发环境可以确定具体程序编制方法。在确定过程中,也可以采用如前文所介绍的概念设计方法的方案排列和方案选择方法。5、编程与调试。二、资源分配P0^0----电机1用的PWM输出信号(左轮)P0^1----电机2用的PWM输出信号(右轮)L_DIR1A=P3^6----左轮电机方向控制 L_DIR1B=P3^7----左轮电机方向控制 R_DIR1A=P3^4----右轮电机方向控制 R_DIR1B=P3^5----右轮电机方向控制 P3^1----蜂鸣器控制PCA0CPM0----电机1PWM输出,工作在8位定时器模式,允许比较器匹配中断,每次中断加载新的比较值,实现电机输出的脉宽、周期控制。2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦PCA0CPM1----电机2PWM输出,工作在8位定时器模式,允许比较器匹配中断,每次中断加载新的比较值,实现电机输出的脉宽、周期控制。P5.0-P5.7;传感器接口 lcdrw=P3^2;----读写控制5 lcdcs=P3^0;----E使能6 lcdrs=P3^3;命令数据选择控制4三、小车程序#include #include #include //包含头文件typedef unsigned char uchar;typedef unsigned long ulong;typedef unsigned int uint;//变量定义#define L_MOTO_BREAK L_DIR1A=L_DIR1B #define L_MOTO_BACK L_DIR1A=0;L_DIR1B=1 #define L_MOTO_FORD L_DIR1A=1;L_DIR1B=02011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦#define R_MOTO_BREAK R_DIR1A=R_DIR1B #define R_MOTO_BACK R_DIR1A=0;R_DIR1B=1 #define R_MOTO_FORD R_DIR1A=1;R_DIR1B=0 //前走与后走的定义 sbit L_DIR1A=P3^6;sbit L_DIR1B=P3^7;sbit R_DIR1A=P3^4;sbit R_DIR1B=P3^5;sbit P3_1=P3^1;sbit lcdrw=P3^2;//5 sbit lcdcs=P3^0;//6 sbit lcdrs=P3^3;//4int a=0;//定时器计数用 uchar minute=0,second=0,sign=0;uchar fb=0;//控制前后方向//全局变量的声明//1602液晶的管脚定义//I/O管脚的定义/********************************************/ /* 名称:config*/ /* 用途:初始化配置, 以保证单片机控制功能工作 */ /********************************************/ void config(void)2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦{WDTCN = 0x07;//看门狗禁止WDTCN = 0xde;WDTCN = 0xad;XBR0 = 0x50;XBR1 = 0x00;XBR2 = 0x40;//配置交叉开关,//交叉开关允许P0MDOUT=0x00;P1MDOUT=0x00;P2MDOUT=0x00;P3MDOUT=0xfd;//I/O口的推挽与漏极输出 P74OUT=0x00;//p4--p6 I/O口的推挽与漏极输出P5=0xff;OSCXCN = 0x00;OSCICN = 0x16;//采用内部晶振,频率为 8MHZ }2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦/********************************************/ /* 名称: delay1ms*/ /* 用途: 延时*/ /********************************************/ void delay(uint z){ uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void delay1(uint time){ uint ii;uint jj;for(ii=0;ii}//两个延迟子程序2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦/********************************************/ /* 名称: PCA_Init*/ /* 用途: PCA初始化*/ /********************************************/ void PCA_Init(){PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止PCA0CN=0x40;//启动PCA计数器} void PCA0_Init(){PCA0CPM0=0x42;//CEX0为8位PWM输出模式PCA0CPM1=0x42;//CEX1为8bit PWM输出模式}/********************************************/ /* 名称: PWM_Init/* */ /********************************************/ void PWM0_set(uchar val){ PCA0CPH0=~val+1;2011年6月12日13:30产*/ 生PWM脉宽调制用途://高电平占空比为val/256 智能寻迹小车组员:赵一鹏 艾博文 董羽曦} void PWM1_set(uchar val){}/********************************************/ /* 名称: L_Operation R_Operation/* */ /********************************************/ void L_FORD(uchar L_spe_ford){L_MOTO_FORD;PWM0_set(L_spe_ford);} void R_FORD(uchar R_spe_ford){R_MOTO_FORD;PWM1_set(R_spe_ford);} void L_BACK(uint L_spe_back){L_MOTO_BACK;PWM0_set(L_spe_back);}2011年6月12日13:30//高电平占空比为val/256 PCA0CPH1=~val+1;*/ 用途:电机正反转及速度的控制//电机速度 智能寻迹小车组员:赵一鹏 艾博文 董羽曦void R_BACK(uint R_spe_back){R_MOTO_BACK;PWM1_set(R_spe_back);} void L_BREAK(){L_MOTO_BREAK;} void R_BREAK(){R_MOTO_BREAK;}/********************************************/ /* 名称: 定时器_Init*/ /* 用途: 定时器初始化*/ /********************************************/ void time_init(){ CKCON=0X08;//12分频与原分频的选择。把定时器1选为系统时钟 TMOD=0X01;//定时器1的方式选择为,把定时器1选为16位定时功能2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦TH0=0X00;TL0=0X00;//定时器1重装初值 ET0=1;//使能定时器1 TR0=1;//开定时器1 } /********************************************/ /* 名称:lcddisplay显示函数*/ /* 用途:初始化*/ /********************************************/void sendc(uchar c)//给1602的lcd送命令 {} void sendd(uchar c)//给1602的lcd送数据2011年6月12日13:30 lcdrs=0;lcdrw=0;lcdcs=1;//E的高脉冲 P7=c;delay(10);lcdcs=0;//E的高脉冲智能寻迹小车组员:赵一鹏 艾博文 董羽曦{ lcdrs=1;lcdrw=0;lcdcs=1;P7=c;delay(10);lcdcs=0;}void lcd_pos(uchar pos){ sendc(pos|0x80);}//发送地址定位函数void lcd_init(void)//lcd初始化函数 { sendc(0x38);//8位,2行,5*7字体sendc(0x08);//显示开,光标关;不闪sendc(0x01);//清屏sendc(0x06);delay1(1);2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦sendc(0x0C);}/********************************************/ /* 名称:lcddisplay1*/ /* 用途:第一次显示*/ /********************************************/ void lcddisplay1(void)//显示主函数 {line1[5]=table[sign%10];line1[4]=table[sign/10];line1[11]=table[second%10];line1[10]=table[second/10];line1[8]=table[minute%10];line1[7]=table[minute/10];sendc(0x01);lcd_pos(0x00);2011年6月12日13:30 uchar table[]={“0123456789”};uchar line1[]={“time00/00:00”};uchar i=0;sign++;智能寻迹小车组员:赵一鹏 艾博文 董羽曦for(i=0;i<12;i++){sendd(line1[i]);delay(1);} }//时间显示void display()//最后的显示子函数,显示总时间,与结束标志。{ uchar table[]={“0123456789”};uchar i=0;uchar table1[]={“all_time:00:00”};uchar table2[]={“finish”};table1[13]=table[second%10];table1[12]=table[second/10];table1[10]=table[minute%10];table1[9]=table[minute/10];sendc(0x01);lcd_pos(0x00);while(table1[i]!=' '){ sendd(table1[i++]);delay(10);2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦} lcd_pos(0x40);i=0;while(table2[i]!=' ')}/********************************************/ /* 名称: Founding_Line*/ { sendd(table2[i++]);delay(10);}/* 用途: p6八路寻迹*/ /********************************************/void xun1()//循迹函数,实现小车的寻线行走,与遇黑线停止{ if(P5==0x00){ PWM0_set(230);PWM1_set(245);}2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦if(P5&0x04)//右{PWM0_set(170);PWM1_set(250);} if(P5&0x02)//左{PWM0_set(250);PWM1_set(170);} if(P5&0x08)//右{PWM0_set(1);PWM1_set(245);} if(P5&0x01)//左{PWM0_set(245);PWM1_set(1);}if(P5&0x01&&P5&0x02){2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦PWM0_set(255);PWM1_set(160);} if(P5&0x04&&P5&0x08){PWM0_set(255);PWM1_set(160);} }void xun2(){ if(P5==0x00){PWM0_set(230);PWM1_set(245);} if(P5&0x40)//右{PWM0_set(220);2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦PWM1_set(245);} if(P5&0x20)//左{PWM0_set(245);PWM1_set(180);} if(P5&0x80)//右{PWM0_set(1);PWM1_set(245);} if(P5&0x10)//左{PWM0_set(245);PWM1_set(1);} if(P5&0x10&&P5&0x20){PWM0_set(255);PWM1_set(160);}2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦if(P5&0x40&&P5&0x80){PWM0_set(160);PWM1_set(255);} }void Founding_Line(){ if(fb<=8){ if((P5&0x06)==0x06)//终点停{R_BREAK();L_BREAK();fb++;if(fb==1 ||fb==2){lcddisplay1();delay1(380);//延时4s R_FORD(230);2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦L_FORD(245);delay1(50);//延时0.5s}if(fb==3||fb==4){lcddisplay1();delay1(380);//延时4sR_FORD(185);L_FORD(245);delay1(80);//延时0.5s}if(fb==5){lcddisplay1();delay1(380);//延时4sR_FORD(185);L_FORD(245);delay1(80);//延时0.5s }if(fb==6){2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦lcddisplay1();delay1(380);//延时4sR_FORD(230);L_FORD(245);delay(1800);R_BACK(235);L_FORD(245);delay(6000);R_BREAK();L_BREAK();//前直角拐弯fb++;}if(fb==7){R_FORD(230);L_FORD(245);delay1(50);//延时0.5s}if(fb==8){P3_1=0;2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦lcddisplay1();fb++;delay1(350);//延时4sP3_1=1;} } else xun1();}if(fb>=9){ if((P5&0xf0)==0xf0)//终点停{R_BREAK();L_BREAK();fb++;if(fb==10){lcddisplay1();2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦delay1(350);//延时4sL_BACK(245);R_BACK(230);delay(1000);R_FORD(200);L_BACK(250);delay(6300);R_BREAK();L_BREAK();//后直角拐弯fb++;}if(fb==11){L_BACK(245);R_BACK(230);}if(fb==13){lcddisplay1();L_BACK(245);R_BACK(185);delay1(80);2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦}}}if(fb==12||fb==14||fb==15){lcddisplay1();L_BACK(245);R_BACK(230);delay1(50);}else{ xun2();} }/********************************************/ /* 名称:main*/ /* 用途:主程序,调用子程序进行电机控制和寻迹 */ /********************************************/ void main(){ config();//初始化函数2011年6月12日13:30//主函数 智能寻迹小车组员:赵一鹏 艾博文 董羽曦lcd_init();PCA_Init();//1602的初始化//PCA的初始化//PCA0和1的初始化//定时器的初始化//总中断打开,定时器开始计时,PCA开始PCA0_Init();time_init();EA=1;PWM输出P3_1=1;while(1){ if(fb==0){R_FORD(230);L_FORD(245);}if(fb==9){L_BACK(245);R_BACK(230);}2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦if(fb==16){P3_1=0;display();EA=0;PCON=0x02;while(1);} Founding_Line();} } void timer0()interrupt 1时钟提供定时。{ a++;TH0=0X00;TL0=0X00;if(a==145){ a=0;second++;if(second==60)//中断函数,实现定时器功能。为2011年6月12日13:30智能寻迹小车组员:赵一鹏 艾博文 董羽曦} { second=0;minute++;if(minute==60)} {minute=0;} }结论测试结果表明:本小组的智能小车能够很好的完成循迹功能,小车能够沿着如图所示的黑色路线行走。2011年6月12日13:30 智能寻迹小车组员:赵一鹏 艾博文 董羽曦在这次的制作过程中,虽然条件艰苦,但是经过我们的不懈努力终于把课题完成。在这个过程中,我们不仅学习了单片机的工作原理和使用方法,而且还增强了动手能力。本次课题的设计,一方面是对我们所学课本知识的考验,另一方面更是对我们自学能力和收集资料能力以及动手能力的考验。通过软硬件的结合让我们充分认识到硬件制作和软件结合的困难,以及C语言对我们课题编译的重要性。我们以后一定会更加努力的。2011年6月12日13:30第二篇:智能寻迹小车实训报告目录1、引言1.1智能小车的设计意义和作用………………………32、系统总体设计……………………………………………43、硬件设计3.1循线模块……………………………………………54、软件设计4.1软件调试平台………………………………………7 4.2系统软件流程………………………………………8 4.3系统软件程序………………………………………95、调试及性能分析………………………………………126、设计总结………………………………………………137、作品实物图……………………………………………148、参考文献………………………………………………151、引言1.1智能小车的设计意义和作用智能小车是移动式机器人的重要组成部分,介绍一种基于AT89S52单片机的智能小车。通过不断检测各个模块传感器的输入信号,根据内置的程序分别控制小车左右两个直流电机运转,实现小车自动识别路线,寻找光源,判断并避开障碍物,检测道路上的铁片、发出声光信息并计数显示,智能停车等功能。作为20世纪自动化领域的重大成就,机器人已经和人类社会的生产、生活密不可分。因此为了使智能小车工作在最佳状态,进一步研究及完善其速度和方向的控制是非常有必要的。智能小车要实现自动寻迹功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。避障控制系统是基于自动导引小车(avg—auto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。使用传感器感知路线和障碍并作出判断和相应的执行动作。该智能小车可以作为机器人的典型代表.它可以分为三大组成部分:传感器检测部分,,执行部分,cpu。机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。考虑使用价廉物美的红外反射式传感器来充当。智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。2、系统总体设计AT89S52单片机作为总的控制核心,利用传感器,在循线信号、寻光信号、检测障碍物信号等的输入作用下,控制电机采取相应的动作,从而调整小车做合适的选择。同时,如果有检测到金属片的信号,则将该信号以声光的形式表现出来并令数码管计数显示。主要有循线、寻光、避障、金属检测、数码显示、电机驱动、电源、单片机控制等8大模块,如2-1图所示。图2-1 功能模块图3、硬件设计3.1循线模块循线模块,循迹是指小车在白纸地板上循黑线行走通常采取的方法是红外探测法,红外探测法即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,可以根据黑带和白纸对光线的发射系数不同,可以利用车底接收到的发射光的强弱来判断“道路”黑带。采用四个红外光电管分别置于移动智能小车前板底座的两侧,确保沿着黑线行驶。红外光电管由一个发射管和一个接收管组成,安装在同一面上。红外光电管的工作原理是由发射管发射出的红外线,经检测面反射后被接收管吸收,由于检测面颜色的不同,对红外线的吸收程度也不同,从而反映在接收管的阻值变化上。这种阻值变化通过外接通路就能转换成单片机能够识别的信号。由于红外光电管发出的是红外线,日光对小车的检测不会产生影响,因而其抗干扰性能好,从而实现小车的循迹功能。但红外探测器探测距离有限,一般最大不应超过3cm。循迹功能如3-1,3-2图所示。图 3-1 循迹功能图图3-2循迹功能图本设计需要检测小车的运动状态,沿着路面黑线运动。采用发射取样式,单光束红外传感器接收信号,电路在5V电压下工作,根据该型号传感器红外发射管所需的工作降压(红外发射管的正向降压在1-1.3V)和工作电流(红外发射管的电流为2-10mA),选取负载电阻R=15千欧,红外发射管负载电阻R=220欧。4、软件设计4.1 软件调试平台Keil for C51是美国Keil Software公司出品的C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,Keil C51软件还提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率非常高,且容易理解。C51开发中除了必要的硬件外,同样离不开软件,我们写的源程序要变为C51可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,但现在已极少使用手工汇编。Keil提供了包括C编译器、宏汇编、连接线、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision2)将这些部分组合在一起。如图4-1所示。图4-1 Keil for C51开发平台4.2系统软件流程系统软件流程图如图4-2所示图4-2系统流程图4.3系统软件程序#include #define LED P1 //定义数据显示端口sbit D1=P2^0;//定义前方左侧指示灯端口 sbit D2=P0^7;//定义前方侧右指示灯端口 sbit ZIR=P3^5;//定义前方左侧红外探头端口 sbit YIR=P3^6;//定义前方右侧红外探头端口 sbit QIR=P3^7;//定义前方正前方红外探头端口 sbit M1A=P0^0;//定义左侧电机驱动A端 sbit M1B=P0^1;//定义左侧电机驱动B端 sbit M2A=P0^2;//定义右侧电机驱动A端 sbit M2B=P0^3;//定义右侧电机驱动B端 sbit SB1=P0^4;//定义语音识别传感器端口 sbit MIC=P0^6;//定义蜂鸣器端口 void delay(unsigned int z){ while(z--);SB1=!SB1;return;} void car(unsigned char a){ M1A=0;M2A=0;M1B=0;M2B=0;switch(a){ case 1:{M1A=1;M2A=1;break;};case 2:{M1B=1;M2B=1;D1=0;D2=0;break;};case 3:{M1B=1;M2A=1;D2=0;break;};case 4:{M1A=1;M2B=1;D1=0;break;};} } void main(){ car(1);while(1);{ D1=1;D2=1;LED=0x00;if(QIR==0){ car(2);delay(15000);car(1);} if(YIR==0&&ZIR==1){ car(3);delay(15000);if(YIR==0&&ZIR==1){ car(1);} } if(ZIR==0){ car(4);delay(15000);if(YIR==0&&ZIR==1){ car(1);} } if(YIR==0&&ZIR==0){ car(2);delay(30000);} } }5、调试及性能分析整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。首先写入电机控制小程序,控制其正反转,停机均正常。加入避障子程序,小车运转正常,调整灵敏度达最佳效果。加入显示时间子程序,显示正常。铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。趋光电路主要由三个光敏电阻构成,调 整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。整机综合调试,上电后对系统进行初始化,接着控制电机使小车向前行驶,突然发现系统即刻进入外部中断1,重复多次测试,结果都是自动进入该中断。推断是由刚上电时电机起动所引起,为了避免上电瞬间的影响,在启动小车后延时几毫秒,再开外部中断,结果问题解决。允许的话应采用双电源供电,即电机和电路应分开供电,L293D与单片机之间采用隔离信号控制。这样就不会出现小车启动时程序出错和数码管显示闪动的问题。在计程精度上,可用红外线原理获 得较高精度。6、设计总结通过本次实训设计,不仅是对我们课本所学知识的考查,更是对我们的自学能力和收集资料能力及动手能力的考验,本次实训使我们对一个项目整体设计有了初步认识。再有对电路板的制作有了一定的了解。并学会了使用keil软件设计。本次实训使我们意识到实验的更重要性,在硬件制作和软件调试过程中,出现了很多问题,最终都是通过实验的方法来解决的。还有以前对程序只是一个模糊的概念。通过这次实训极大的锻炼了我们的思考和分析问题能力。并对单片机有利益更深的认识。总之,实训过程中,无论是对学习方法还是理论知识,我们都有了新的认识。受益匪浅。这将激励我们今后再接再励,不断完善自己的理论知识提高实践运作能力。8、作品实物图9、参考文献1)、《单片机应用技术》 2)、《周立功单片机》 3)、《单片机原理与应用》4)、《8051单片机程序设计与实例》 5)、《MCS-51单片机实验指导》第三篇:智能小车的自动寻迹实验智能小车的自动寻迹实验【实验目的】 熟悉光敏电阻的性质 熟悉ICCAVR 编译环境进一步熟悉单片机各端口的特性和作用 能够编写程序,利用光敏电阻的性质对小车进行控制【实验器材】小车一辆 导线五根 下载线一根【实验原理】(一)光敏电阻当光照射在物体上,物体内部的原子释放出电子并不逸出物体表面,而仍留在内部,使 物体的电阻率1/R 发生变化的效应称为光电导效应。光敏电阻是一种光电导效应半导体器 件。由于光敏电阻没有极性,工作是可加直流偏压或交流电压。当无光照时,光敏电阻的阻 值(暗电阻)很大,电路中电流很小。当它受到一定波长范围的光照射时,其阻值(亮电阻)急剧减小,电路中电流迅速增加,用电流表可以测量出电流。本实验所采用的光敏电阻是硫化镉光敏电阻,下图是硫化镉光敏电阻的光照特光敏电阻的检测1. 用黑纸片将光敏电阻的透光窗口遮住,此时万用表的指针基本保持不动,阻值接近无穷 大。此值越大说明光敏电阻性能越好。若此值很小或接近为零,说明光敏电阻已烧穿损坏,不能再继续使用。2. 用一光源对准光敏电阻的透光窗口,此时万用表的指针应有较大幅度的摆动,阻值明显 减小。此值越小说明光敏电阻性能越好。若此值很大甚至无穷大,表明光敏电阻内部开路损坏,也不能再继续使用。3. 将光敏电阻透光窗口对准入射光线,用小黑纸片在光敏电阻的遮光窗上部晃动,使其间 断受光,此时万用表指针应随黑纸片的晃动而左右摆动。如果万用表指针始终停在某一位置不随纸片晃动而摆动,说明光敏电阻的光敏材料已经损坏。(二)Atmega8515的端口特性由于本实验主要用到I/O输入输出的PA端口,因此主要介绍PA端口的特性。端口 A(PA7..PA0)端口A为8位双向I/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称 的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外 部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。作为通用数字I/O使用时,所有AVRI/O端口都具有真正的读-修改-写功能。这意味着用 SBI或CBI指令改变某些管脚的方向(或者是端口电平、禁止/使能上拉电阻)时不会无意地改 变其他管脚的方向(或者是端口电平、禁止/使能上拉电阻)。输出缓冲器具有对称的驱动能 力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与VCC和地相连。每个端口都有三个I/O存储器地址:数据寄存器–PORTx、数据方向寄存器–DDRx和端 口输入引脚–PINx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚为只读 寄存器。当寄存器SFIOR 的上拉禁止位PUD置位时所有端口的全部引脚的上拉电阻都被禁 止。不论如何配置DDxn,都可以通过读取PINxn寄存器来获得引脚电平。PINxn寄存器的各 个位与其前面的锁存器组成了一个同步器。这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。本实验主要应用PA端口的输入引脚PINA。因此当我们把与光敏电阻的输出电压相连的 五个数据线连接到PA端口时可以通过读取寄存器PINAx来获得光探测装置输出的电平,在 AVR中PA端口的反转电压是2.1V为高电平。即当外部输入电压高于2.1V时,PINAx读取的输 入逻辑电平值为“1”,当外部输入电压低于2.1V时,PINAx读取的输入逻辑电平值为“0”。根据PINA寄存器放置的五个数据来判断小车的走向。(三)本实验实现原理当电路接通电源时,由小车主板的稳压电源电路稳定输出5 伏电压为小车下部的光探测 电路提供电源使二极管发光,当路面是白色时,二极管发出的光大部分被反射,光敏电阻就 接收到比较强的光照射,阻值变小,流过光敏电阻的电流变大。由于电阻的分压作用,使得 光敏电阻的输出电压较小,约为1.5V 左右。当路面是黑色时,由于黑色对光有吸收作用,使得二极管发出的光大部分被吸收,只有小部分被反射,光敏电阻接收到的光照就比较小,阻值变大,流过光敏电阻的电流变小,光敏电阻的输出电压变大,约为2.5V 左右。共有五个 光敏电阻也就是有五个数据输出。这五个信号通过数据线与单片机的PA 口相连,最左边的电阻连接PA 口的最低位PA0,依次类推,一直连到PA4 口。【实验步骤】(1)连接好电路,把导线,下载线连接好,打开电源(2)进入ICCAVR 编译环境,编写并调试程序直至没有错误,编译环境简介请参见附录一(3)下载,烧录进单片机,看实验结果(4)反复修改调试程序,逐渐增强其功能(5)写好实验报告,实验心得体会【实验电路】 小车的硬件连接图小车轮子的驱动详见实验一【程序示例】由于在实验中黑线的宽度不同,寻迹中所用到的光敏电阻的部位也不同。下面程序的例子是黑线的宽度只能覆盖一个光敏电阻时对小车的驱动程序#include #include //定义t 为中间变量unsigned char t;//******************系统自动生成的初始化程序**********************void port_init(void){PORTA = 0x00;DDRA = 0x00;PORTB = 0x00;DDRB = 0x00;PORTC = 0x00;DDRC = 0x00;PORTD = 0x00;DDRD = 0xFF;PORTE = 0x00;DDRE = 0x04;} //call this routine to initialize all peripheralsvoid init_devices(void){//stop errant interrupts until set upCLI();//disable all interruptsport_init();MCUCR = 0x00;EMCUCR = 0x00;GICR = 0x00;TIMSK = 0x00;SEI();//re-enable interrupts //all peripherals are now initialized} //****************小车前进的子程序*********************void runforth(void){PORTE=0x04;PORTD=0x70;} //*****************小车左转的子程序*********************void zuozhuan(void){PORTE=0x00;PORTD=0X70;} //****************小车右转的子程序*********************void youzhuan(void){PORTE=0x04;PORTD=0x50;} //***************小车停止不动的子程序****************void stop(void){PORTE=0x00;PORTD=0x00;} //****************主程序***************************void main(void){ while(1)//设置一个死循环,不断读取PA口的输入逻辑电平{init_devices();//调用初始化函数t=PINA&0x1f;//屏蔽掉PA口的高三位数据位if(t==0x00){stop();} else { switch(t){ case 0x01:zuozhuan();break;case 0x07:zuozhuan();break;case 0x02:zuozhuan();break;case 0x03:zuozhuan();break;case 0x04:runforth();break;case 0x0e:runforth();break;case 0x06:zuozhuan();break;case 0x08:youzhuan();break;case 0x10:youzhuan();break;case 0x0c:youzhuan();break;case 0x18:youzhuan();break;case 0x1c:youzhuan();break;} } } }第四篇:智能小车设计报告机器人控制技术实验设计报告书题目:基于STC89C52的智能小车的设计 姓名:李如发 学号:073321032 专业:电气工程及其自动化 指导老师:李东京 设计时间:2010年 6 月目录1.引 言..............................................1 1.1.设计意义......................................1 1.2.系统功能要求..................................1 1.3.本组成员所做的工作............................1 2.方案设计...........................................1 3.硬件设计...........................................2 4.软件设计...........................................7 5.系统调试...........................................7 6.设计总结...........................................8 7.附 录A;源程序.....................................8 8.附 录B;作品实物图片...............................10 9.参考文献..........................................1116×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计基于STC89C52的智能小车的设计1.引 言1.1.设计意义本智能小车的设计,首先针对大学所有学习的知识是一个很好的回顾和总结。此智能小车是基于单片机所设计的,具有自动寻迹能力,在实际的很多方面有应用。当我们进一步的改进机器人系统时,可实现更重要的功能,如可设计出自动扑火机器人等。1.2.系统功能要求此智能小车是基于STC89C52设计的具有自动寻迹能力的小车。系统可实现跟随黑色引导线行走的能力,在行驶过程中,并能用测速传感器和光电码盘对小车速度实现实时监测。小车在行驶过程中并能实现播放美妙的音乐。1.3.本组成员所做的工作本组成员有李如发,汪航,黄建安,韩文龙,罗莹,明菲菲,邹珊,江锐,邵进。李如发:驱动 073321032 汪航: 电源 073522036 黄建安:最小统 073521013 韩文龙:源程序 073522007 罗莹: 传感器 073522038 明飞菲:调试 073522012 邹芬 : 数码显示 073521025 邵琎 : 焊接 073522017 江锐 : 蜂鸣器 0735220322.方案设计智能小车主要分为传感器部分,最小系统部分,电机驱动部分,电源部分。根据功能要求,提出合理的设计方案,画出方案方框图,并对系统工作原理进行阐述。原理,本系统的重要部分是传感器,它对整个小车的定位起到很重要的作用,由传感器检测黑线的位置,其中黑线对光能吸收,白线对光反射。利用此原16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计理将红外线传感器采集到的信号转换为数字信号并送入单片机,单片机根据收到的信号实时的控制小车的方向。控制小车的方向主要是运用pwm原理来控制电机的平均电压,从而来控制电机的转速,实现小车对黑线的实时跟踪。3.硬件设计硬件设计各模块电路图及原理描述 传感器模块方案1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。但是这种方案受光照影响很大,不能够稳定的工作。因此我们考虑其他更加稳定的方案。方案2:用RPR220型光电对管。RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。方案3:用红外发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。我们选择了此方案。传感器是整个系统的眼睛,这部分主要运用红外线传感器采集信号送给单片机处理。由于黑色车道对红外线传感器发出的光有吸收能力,白色地方对发出的光反射,从而当传感器在不同的地方产生不同的信号,传送个单片机。单片机根据采集的信号做出实时的处理。16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计最小系统最小系统是整个系统的心脏,我们采用的是AT89C52芯片。80C52单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上[2]。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。驱动模块方案1:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。方案2:对于直流电机用分立元件构成驱动电路。由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。但是这种电路工作性能不够稳定。因此我们选用了方案1。由于最小系统和电机驱动部分的电压幅值不一样,而且电机是感性负载,在制动时可能反馈电流,因此要在最小系统和驱动模块之间采用光电隔离,所以用到了光电隔离芯片,TPL521-4由于光耦芯片的引脚不够所以在之后采用了一片反相器74HCT14,反相器图如下L298是双H桥高电压大电流功率集成电路,直接采用TTL逻辑电平控制,可用来驱动继电器、线圈、直流电动机、步进电动机等电感性负载。它的驱动电压可达46V,直流电流总和可达4A。其内部具有2个完全相同的PWM功率放大回路。由L298构成的PWM功率放大器的工作形式为单极可逆模式。12个H桥的下侧桥晶体管发射极连在一起,其输出脚(1和15)用来连接电流检测电阻。第9脚接逻辑控制部分的电源,常用+5V,第4脚为电机驱动电源,本系统中为40V,第5,7,10,12脚输入标准TTL逻辑电平,用来控制H桥的开和关,16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计第6,II脚则为使能控制端。当Vs=40V时,最高输出电压可达35V,连续电流可达2A。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动两台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。电动 机的转速由单片机调节PWM信号的占空比来实现。L298驱动电路图16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计PWM调速器的硬件组成在整个PWM调速器中,CPU既是运算处理中心,又是控制中心,是最关键的器件。本系统中选用与MCS-51系列完全兼容的AT89C52单片机,它是一种低功耗、高性能、CMOS八位微处理器。片内具有8K字节的在线可重复编程快擦快写程序存储器,128x8位内部RAM,AT89C52可构成真正的单片机最小应用系统,缩小系统体积,提高系统可靠性,降低系统成本。电源模块电源中我们采用LM7805稳压芯片将12v直流电源稳压成5v直流源。方案1: 采用10节1.5V干电池供电,电压达到15V,经7812稳压后给支流电机供电,然后将12V电压再次降压、稳压后给单片机系统和其他芯片供电。但干电池电量有限,使用大量的干电池给系统调试带来很大的不便,因此,我们放弃了这种方案。方案2:采用3节4.2V可充电式锂电池串联共12.6V给直流电机供电,经过7812的电压变换后给支流电机供电,然后将12V电压再次降压、稳压后给单片机系统和其他芯片供电。锂电池的电量比较足,并且可以充电,重复利用,因此,这种方案比较可行。但锂电池的价格过于昂贵,使用锂电池会大大超出我们的预算,因此,我们放弃了这种方案。方案3:采用12V蓄电池为直流电机供电,将12V电压降压、稳压后给单片机系统和其他芯片供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。虽然蓄电池的体积过于庞大,在小型电动车上使用极为不方便,但由于我们的车体设计时留出了足够的空间,并且蓄电池的价格比较低。因此我们选择了此方案。下:16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计4.软件设计程序流程图5.系统调试本系统的设计是首先完成每一小部分的设计,因此我们在没完成一个模块时就回检测调试该模块。在初次调试时我们采用的电源是又单片机开发板所带的的电源来调试的。调试过程中我们就发现了很重要的问题,由于对本设计的很多模块的没有共同的接地使得很多模块无法工作,我们的解决办法是12v的直流源稳压来供给所以的模块,然后将所以的模块连接共同的地。在驱动模块的调试中发现当光耦芯片给定信号时对lm298的输出没有反应。我们在检验时发现是由于在光耦芯片后部焊接没有焊好,出现了虚焊。在重新焊接好后,芯片正常工作。分16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计块调试传感器时,我们将传感器导通,用黑色物体将传感器发射部分盖住检测输出,在将黑色物体移开,再检测输出。6.设计总结本文是关于基于单片机的智能小车的设计,在共同的努力下,各部分的设计均成功,在调试过程中都无误。本次设计最终实现了直流电机的动态调压,电源正常输出供电,数码管动态显示数据,蜂鸣器播放美妙的音乐,小车实现简单的转弯功能。由于本次设计中尚存在些缺陷和对寻迹程序编写困难,实现的功能不是很完美,但要求的所有功能基本实现。本次设计中,从中的体会很多1、本次的设计可以说设计到大学所学到的所有专业知识,是对大学所学知识的一个整体的回顾。2、在设计中,不能一气呵成,因为所有的电路图都是自己设计的,图中尚存在不足,所以要反复的琢磨和修改。3、设计中要注意对每焊完一部分,都要独立的进行检查调试,及时的发现错误,及时的修改4、本次最重要的收获是从中我们看到了团队合作的重要性,任何事都不是一个人所能完成的,需要大家的共同努力才能获得最后的成功。7.附 录A;源程序源程序代码(主要语句要有注释)。循迹的程序 #include #define uint unsigned int void delay(uint);sbit R=P2^0;//右边传感器 sbit L=P2^1;//左边传感器 sbit RM1=P1^1;sbit RM2=P1^2;//右边电机 sbit LM1=P1^3;sbit LM2=P1^4;//左边电机 void main(){16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计RM1=1;RM2=0;LM1=1;LM2=0;delay(5);while(1){if((L==1)&&(R==1))//小车前进 {RM1=1;RM2=0;LM1=1;LM2=0;delay(5);}else if((L==1)&&(R==0))//小车右偏{RM1=1;RM2=0;LM1=0;LM2=1;//左边的电机停止转动,右边的电机转动,这样就实现了左转delay(10);}else if((L==0)&&(R==1))//小车左偏{RM1=0;RM2=1;LM1=1;LM2=0;//右边的电机停止转动,左边的电机转动,这样就实现了右转delay(10);}else if((L==0)&&(R==0))//小车停车{RM1=0;RM2=1;LM1=0;LM2=1;delay(5);}16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计else//左右两个电机同时启动,直线前进{RM1=1;RM2=0;LM1=1;LM2=0;}}delay(10);}void delay(uint z){uint a,b;for(a=z;a>0;a--)for(b=120;b>0;b--);}8.附 录B;作品实物图片16×16点阵LED室内电子显示屏的设计单片机原理及应用课程设计9.参考文献[1] Mark Nelson著.潇湘工作室译.串行通信开发指南[M].中国水利水电出版社,2002.[2] 王宜怀.单片机原理及其嵌入式应用教程[M].北京希望电子出版社,2002.[3] 张毅刚.单片机原理及应用.高等教育出版社,2009 [4] 康华光.电子技术基础(模拟部分).高等教育出版社.2006第五篇:智能小车设计报告智能小车设计报告魏旭峰、孔凡明、陈梦洋(河北科技大学 电气信息学院)摘要:AT89S52单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评。该设计是结合科研项目而确定的设计类课题。本系统以设计题目的要求为目的,采用89S52单片机为控制核心,利用红外线传感器检测道路上的黑线,控制电动小汽车的自动寻路,快慢速行驶。整个系统的电路结构简单,可靠性能高。实验测试结果满足要求,本文着重介绍了该系统的硬件设计方法及测试结果分析。采用的技术主要有:通过编程来控制小车的速度及方向; 传感器的有效应用; 1602液晶显示的应用;关键词: 89S52单片机、光电检测器、PWM调速、电动小车第一章 方案设计与论证一 供电系统二 光电检测系统三 单片机最小应用系统设计四 液晶显示1602的应用五 电机驱动第二章 软件设计第二章 方案设计与论证根据要求,小车应在规定的赛道上行驶,赛道中央黑线宽为25MM,确定如下方案: 在现有玩具电动车的基础上,加装光电检测器,实现对电动车的位置的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的转向和速度的智能控制.这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。一 供电系统本模块使用LM2940芯片输出+5V的电压,为89S52单片机光电检测电路供电,采用LM1117可控变压芯片输出+6V电压为舵机供电.而电机则由单片机来控制,当单片机输出的电压不同时,电机的转速不同,以此来达到控制小车速度的目的.电路如图:二 光电检测系统本模块采用七对红外线发射和接收对管,来检测小车前方黑线位置和模拟车站停车位置.发射管发射管出红外线,当对管正下方为白色跑道时,发射管发射出去的红外线会被反射回来, 接收因接收到红外线而导通,两端电压为零,当对管正下方为黑色线时,黑线将吸收红外线,接收管因接收不到红外线而无法导通,两端电压为+4V左右,将接收管端电压与一个给定电压经LM324比较后输出0和+5V两固定个值,当对管正下方为白色时输出+5V电压,当对管正下方为黑线时输出0V,输出的电压交给单片机,以此来确定黑线的位置.电路如图:三 单片机最小应用系统设计89S52单片机是本系统的核心所在,自动寻迹和调速都是它控制, 七对光电对管经比较器输出的电压输入单片机,单片机根据电压的高低来判断黑线位置,进而调整速度和方向,电路如下:四 舵机的应用舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。其工作原理是:单片机放的控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。五 电机驱动电机驱动电路是根据单片机的控制型号来控制电机的转动的,电路如下:第二章 软件设计 #include sbit moto=P2^0;//舵机位定义 sbit in1=P2^1;////电机位定义 sbit in2=P2^2;////电机位定义 sbit L1=P1^7;////光电管位定义 sbit L2=P1^1;sbit L3=P1^2;sbit L4=P1^3;sbit L5=P1^4;sbit L6=P1^5;sbit L7=P1^6;#define uchar unsigned char//宏定义 uchar duoj,dianj,time0=0,time1=0,L=0,e=30;void timer0()interrupt 1 //定时器零 控制舵机 { time0++;if(time0==duoj)moto=0;if(time0==80){ time0=0;moto=1;} TH0=(65536-313)/256;TL0=(65536-313)%256;} void timer1()interrupt 3 ///定时器一 控制电机 { time1++;if(time1==dianj)in1=1;if(time1==80){time1=0;in1=0;} TH1=(65536-340)/256;TL1=(65536-340)%256;}void main()/////主函数开始 { TMOD=0x11;TH0=(65536-313)/256;TL0=(65536-313)%256;TH1=(65536-340)/256;TL1=(65536-340)%256;EA=1;ET0=1;ET1=1;in1=0;moto=1;TR0=1;TR1=1;while(1)//////检测黑线位置{while(1){if(P1==0xff){duoj=8;dianj=55;break;} 全白时缓进if(L1==0){duoj=10;dianj=37;L=1;break;} //L1if(L7==0){duoj=6;dianj=37;L=7;break;} //L7if(L2==0){duoj=10;dianj=22;L=2;break;} //L2if(L6==0){duoj=6;dianj=22;L=6;break;} //L6//if(L3==0){duoj=9;dianj=27;L=3;break;} //L3if(L5==0){duoj=7;dianj=27;L=5;break;}//L5if(L4==0){duoj=8;dianj=70;L=4;break;}//l4//else {duoj=8;dianj=17;break;}}while(P1==0xff)当检测不到信号时保持最后的状态{switch(L){case 1:duoj=10;dianj=39;break;case 2:duoj=10;dianj=22;break;// case 3:duoj=9;dianj=25;break;// case 4:duoj=8;dianj=70;break;// case 5:duoj=7;dianj=25;break;case 6:duoj=6;dianj=22;break;case 7:duoj=6;dianj=39;break;}} } }////////主函数结束