简易智能电动车设计报告吴奇攀(河北,石家庄)摘要:本设计采用两块单片机(AT89S51)做为智能小车的检测和控制核心,实现小车运动并自动躲避障碍,语音播报运动状态,显示当前温度,运动状态及测距结果等功能。障碍判断采用超声波传感器,驱动电机采用直流电机,电机控制方式为单向PMW控制。电机控制核心采用AT89C51单片机,状态显示采用1602LCD,语音播报采用1420芯片,测量温度采用DS18B20。控制上采用分时复用技术对系统进行优化。关键词:智能控制,PWM脉宽调制,电动车。1、系统方案选择1.1设计要求设计要求主要是用超声波传感器来测距控制小车的前进与后退,用DS18B20检测温度,并用1602显示距离与温度,ISD2560报读距离与温度。1.2系统基本方案根据题目要求,系统可以划分为控制部分与数据检测部分。其中数据检测部分包括:超声波测距模块,温度测量模块,显示模块。控制部分包括:电机驱动模块,语音报读模块,计时模块。模块框图如图所示。2、系统的硬件设计与实现2.1系统硬件的基本组成部分本题是一个声、机、电一体的综合设计,在设计中运用了检测技术、自动控制技术和电子技术。系统可分为传感器检测部分和智能控制部分。传感器检测部分:系统利用超声波传感器、温度传感器等不同类型的传感器将检测到的一系列的外部信息转化为可控制的电信号。智能控制部分:系统中控制器件根据由传感器变换输出的电信号进行逻辑判断,控制小车的电机、LCD,完成了小车的躲避障碍物、显示距离与温度等各项任务。控制部分包括4个主要单元电路:单片机控制电路、前后轮电机驱动电路、LCD的显示电路、语音报读电路。2.2主要单元电路的设计2.2.1数据检测部分的单元电路设计(1)障碍物检测电路的设计在小车行驶的线路中,放置几个障碍物,要求小车绕着障碍物行驶,避免与障碍物相撞,当与障碍物的距离小于20超声波测距模块温度测量模块小车驱动模块LCD显示模块语音报读模块数据检测部分控制部分厘米时后退,大于20厘米时前进,在小车的前部安置了两个超声波传感器,一个用于发射,一个用于接收。如图2.2.1所示,该传感器可发射频率为40KHZ的脉冲超声波信号(该信号由P3.0发出),传感器向某一方向发射脉冲超声波信号,并以34cm/ms的速度在空气中传播。同时,检测系统开始计时。如果超声波在传播中碰到障碍物就会反射回来,超声波接收器受到反射声波就会通过P3.2下降沿外部中断0使得计时器T1停止计时,并计算出时间与距离。图2.2.1超声波发射电路图2.2.1超声波接收电路(2)温度测量电路的设计本模块主要采用DS18B20在小车运动过程中对温度进行测量,DS18B20传感器只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理如图2所示,图2中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。DS18B20有4个主要的数据部件:光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位,这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。斜率累加器比较预置计数器1低温度系数晶振预置温度寄存器=0计数器2=0高温度系数晶振加1停止置位清除图2DS18B20测温原理框图2.2.2智能控制部分的单元电路的设计(1)控制电路的设计图2.2.2AT89S51最小系统单片机接收从传感器检测电路输入的逻辑信号和脉冲信号,并将输入的信号进行处理运算,以控制电流或控制电压的形式输出给被控制的单元电路,完成各项任务。通过对障碍物的探测和温度的探测产生的传感器信号进行检测,单片机AT89S51完成控制电机的前转后转等功能。(2)电机驱动电路的设计电机驱动电路部分分为前轮部分和后轮部分,前轮负责小车的导向,后轮负责小车的前后驱动。PWM调制实现车速控制。单片机的输入输出口P2.0输出高电平,P2.1输出低电平,这时小车前进。当P2.0输出低电平,P2.1输出高电平时,小车后退。(3)LCD显示电路的设计在本系统中采用LCD1602显示方式,用来显示障碍物的距离与外部的温度。市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,定义如下表所示:字符型LCD的引脚定义HD44780内置了DDRAM、CGROM和CGRAM。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:对DDRAM的内容和地址进行具体操作要按照HD44780的指令集及其设置说明。LCD的数据端接到S51的P1口,控制端接到P2.4、P2.5、P2.6口。(4)语音报读电路的设计语音电路的主要是应用ISD2560芯片,此芯片只能存储60s的模拟信号,通过对不断的寻址进行录放。ISD2560有10个地址输入端A0~A9,寻址能力可达1024位,地址空间为0~1023。其分配情况是:地址0~299作为分段用,地址600~767未使用,地址768~1023为工作模式选择(即A8、A9均为高)。ISD2560的地址线有两种用途,一是作为工作模式控制,二是作为分段录放音的起始段地址。当最高位地址(MSB)A8、A9都为高电平时(即地址768~1023),地址端A0~A6就作为工作模式选择端M0~M6,对应7种工作模式。当A8、A9任一位为低或都为低时(即地址0~599),只要在分段录/放音操作前(不少于300ns)给地址A0~A9赋值,操作就从该地址开始。3、系统主程序流程图参考文献小车前进小车后退Yes距离d20Noyes延时测温测距完成显示温度与距离Sword=0开始开始测距1.全国大学生电子设计竞赛组委会。全国大学生电子设计竞赛获奖作品选编。北京:北京理工大学出版社,2002年2.凌阳单片机在大学生电子竞赛中的应用。凌阳科技大学计划。北京:北京航空航天大学出版社,2005年3.全国大学生电子设计竞赛单片机应用技能精解。北京:电子工业出版社,2009年程序代码1.驱动模块的程序#includeAT89X51.Hunsignedcharn=30;//发送30个脉冲unsignedinta=0,b=0,c=0,d=0;unsignedcharsword=1;voiddelay()//延时函数{unsignedchari,j;for(i=0;i10;i++)for(j=0;j10;j++);}voiddelay1()//延时函数{unsignedchari,j;for(i=0;i255;i++)for(j=0;j255;j++);}staticvoidtimer0_isr(void)interruptTF0_VECTORusing1//计时器0{if(n0){TR0=0;TL0=0XF2;//1us为一个机器周期,持续15个周期TH0=0Xff;TR0=1;n--;P3_0=~P3_0;}if(n==0)//发送完毕{TR0=0;//关闭计时器0delay();//防止硬件干扰EX0=1;//开启外部中断0IT0=1;}}//优先级为1staticvoidtimer1_isr(void)interruptTF1_VECTORusing2//计时器1{TR0=0;//溢出时停止T0,准备重新发射TR1=0;TL1=0X77;//恢复初值TH1=0Xec;sword=1;d=255;}//准备完成,可以开始下一次测距staticvoidxint0_isr(void)interruptIE0_VECTOR//外部中断0{TR1=0;//停止计时a=TH1-0xec;//传参b=TL1-0x77;c=a*256+b;//将高8位低8位合并d=c*0.0172;delay();sword=1;}staticvoidxint1_isr(void)interruptIE1_VECTOR{sword=0;}voidceju()//显示函数{while(sword==1){if(d==0){P0=0x00;delay1();}if(0d&&d=20){P0=d;delay1();delay1();}if(d20){P0=d;delay1();delay1();}}if(sword==0)//开始测量{sword=1;P3_0=0;P3_2=1;n=30;EA=0;TR0=0;TR1=0;TMOD=0X11;TL0=0XF2;TH0=0Xff;TH1=0Xec;TL1=0X77;ET0=1;ET1=1;EX1=1;IT1=1;TR0=1;TR1=1;EA=1;}}温度检测模块#includeAT89X51.HsbitDQ=P2^0;//ds18b20与单片机连接口unsignedinttemperature;unsignedcharzhengfu;//温度正负标志inttemperatureH;inttemperatureL;charth=32;//设定初始高温值chartl=12;//设定初始低温值/****************************ds18b20程序***************************/voiddelay2ms(unsignedinti)//延时1微秒{while(i--);}voidfuwei_ds18b20()//ds18b20复位{unsignedcharx=0;DQ=1;//DQ复位delay2ms(4);//延时DQ=0;delay2ms(100);//精确延时大于480usDQ=1;delay2ms(40);}unsignedcharread_ds18b20()//读数据{unsignedchari=0;unsignedchardat=0;for(i=8;i0;i--){DQ=0;//给脉冲信号dat=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay2ms(10);}return(dat);}voidwrite_ds18b20(unsignedcharwdata)//写数据{unsignedchari