声光寻迹小车报告_第1页
声光寻迹小车报告_第2页
声光寻迹小车报告_第3页
声光寻迹小车报告_第4页
声光寻迹小车报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、. . . . 摘要本设计采用STC89C52RC单片机作为智能小车的控制中心,主要包括光源检测模块、电机驱动模块、时间距离显示模块、红外线检测模块、电源装置等。小车可以实现寻找光源、显示小车的行驶时间和路程。寻光源装置采用自制的光电传感器,时间距离显示模块采用自制的反射红外传感器和LCD1602。电机驱动模块采用L298N电机驱动芯片来控制直流电机,电源装置采用单片机与电机单独供电的方式,避免了电源的相互干扰。关键词:单片机,智能小车,PWM脉宽调制,直流电机。设计任务与要求在半径为5米的圆形,在任意地方放置一声源,要求小车在最短时间自动走到声源处。实现此功能的基础上,在任意地方放置一光源,

2、要求小车在最短时间自动走到光源处。要求:圆形区域用黑线做标记,小车运动不能超出圆形围。声源用频率为1KHz的正弦波信号。光源为50瓦的电灯泡。一.方案比较与论证:1.主控系统方案一:采用高性能的嵌入式系统,比如ARM可以很好地解决数据处理和控制功能,但是ARM价格昂贵且很少接触,在短时间完成困难较大。方案二:采用STC89C52来实现。C51系列单片机接触较多,且其能够很好地提供我们所需的功能。 考虑到方案的可行性和性价比,我们采用STC89C52单片机。2.车体的设计方案一:自己制作一个车体。自制的车体总的来说是比较粗糙的,而且车体的机械强度不高,车身的重量和平衡都要有精确的测量。方案二:购

3、买车体模型。现成的车体由于装配紧凑,使得各种电路的安装十分方便,且比较美观。车体是依靠直流电机与相关齿轮一起驱动,能适应题目中小车准确前进、后退、转弯的要求,而且这种电动车一般都价格适中。鉴于以上分析,我们选择了方案二。3电机驱动模块方案一:通过晶体三极管等分立元件搭建H桥。优点是价格便宜,结构简单,但由于晶体三极管的承载电流比较小,驱动能力受到限制,且稳定性得不到保证。方案二:采用集成芯片。L298N款单片集成的高电压、高电流、双路全桥式电机驱动,设计用于连接标准TTL逻辑电平,驱动电感负载(诸如继电器、线圈、DC和步进电机)。L298N供两个使能输入端,可以在不依赖于输入信号的情况下,使能

4、或禁用L298N件。L298N输出电压高达46V,输出电流为2A,具有过温保护功能。其输入端可以与单片机直接相联,从而很方便地受单片机控制。当驱动小型直流电机时,可以直接控制两路电机,并可以实现电机正转与反转,实现此功能只需改变输入端的逻辑电平。 基于L298N优点,我们选择L298N电机控制芯片。4电机模块方案一: 采用步进电机作为该系统的驱动电机。由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。经综合比较考虑,我们放弃了此方

5、案。方案二:直流电机:直流电机的控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。PWM调速就是使加在直流电机两端的电压为方波形式,通过改变方波的占空比实现对电机转速的调节。基于以上分析,我们选择了方案二,使用直流电机作为电动车的驱动电机。5. 时间距离显示模块方案一:使用霍尔传感器获得脉冲信号。其机械结构较为简单,只要在转轴的圆周上粘上一粒磁钢,让霍尔开关靠近磁钢,就有信号输出,转轴旋转时,就会不断产生脉冲信号输出,如果在圆周上粘多粒磁钢,就可以实现旋转一周就获得锁个脉冲输

6、出,测速精度比较高。但对于本设计,由于小车的车轮距离车体较近,不适合安装霍尔传感器。方案二:使用自制红外线传感器获得脉冲信号。此时需要在小车车轮的侧贴上黑白相隔的线条圆盘,当小车车轮旋转时,红外线传感器就就会输出相应的脉冲,旋转一周时,会产生多个脉冲,其测速精度也比较高。对于显示部分,我们采用液晶显示屏。因此我们采用方案二。系统框图二系统的硬件设计与实现1.单片机最小系统STC89C52与外围电路构成的单片机最小系统。2.电机驱动模块电机驱动模块采用L298N来作为驱动芯片,L298N可以驱动两个两相电机,OUT1,OUT2和OUT3,OUT4之间分别接两个直流电机,在电机端接入了保护二极管,

7、是为了防止电机换向时电流过大烧坏电机。单片机的P1.6,P1.7分别接电机的使能端ENA,ENB;P1.2P1.5分别接IN1IN4用于控制两电机的转向。L298N有两个电源输入端,一个是VSS是芯片的工作电压,另一个是VS是电机的工作电压,VSS、单片机与其他模块的电源和VS是独立供电的,这样可以避免电机工作时对控制电路部分的影响。在电源的输入端接电容C1、C2、C3、C4来做电源的去耦(旁路)电容。下面是L298N的功能逻辑图:1298N的逻辑功能ENA(B) INl(IN3) IN2(IN4) 电机运行情况 H H L 正转 H L H 反转 H 同IN2(IN4) 同INl(IN3)

8、快速停止 L X X 停止 3.液晶显示屏采用LCD1602显示小车行驶的时间和路程。电位器用于调节显示屏的对比度。4.电源模块采用两片L7805稳压芯片产生两个5V电压,分别供给单片机与其他电路和电机电源,保证电机电源和其他电源是独立的。5.光源检测模块方案一:在小车前面装两个光电二极管,一左一右。通过不同方向的光照使光敏二极管工作,从而对小车行驶方向进行控制,根据光敏二极管的特性,只有当光达到一定强度时才能够导通,导通后光敏二极管将光信号转化为电信号,电信号经电压比较器将模拟量转化为数字量送下单片机,经判别I/O口的数字量,再控制小车。灵敏度还是可以的。 方案二:在小车前面装上参数一致的光

9、敏二极管,光敏二极管将光信号转化为电信号,电信号经电压比较器将模拟量转化为数字量送下单片机,单片机再对读入的几路数据进行存储,比较,然后发出命令以外围进行操作方案二硬件很复杂,但方案一灵敏度还不错,故用方案一。硬件电路图:光敏二极管也叫光电二极管。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的PN结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN结时,可以使PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向

10、电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。我们再经过LM311电压比较器电路处理后得到高低电平输出,高低电平再加以软件加以控制,从而达到要求。6.红外线行走距离检测模块方案一:采用TCRT5000自制红外反射式光电传感器。TCRT5000的核心部分为红外光电对管,红外光波长比可见光波长长,受可见光影响小,红外系统还具有尺寸小,质量轻等优点。这种方案简单,价格便宜,灵敏度可调,抗干扰能力比较强,而且这个电路电池供电的压降较小。 方案二:采用发光二极管发光,用光敏二极管接收。但光敏二极管受可见光的影响比较大,稳定性差。不适宜用于寻迹。 考虑到可靠性,我们选择方案一。 硬件

11、电路图:TCRT5000是一个红外发射管和一个红外接收管。当发射管的戏外信号经反射被接收管接收后,接收管的电阻会发生变化,在电路上一般以电压的形式体现出来。TCRT5000电阻的变化取决于接收管所接收的戏外信号强度,学表现在反射面的颜色和距离二方面。反射面的颜色我们用黑胶布线和地面做对比,接收的距离可以通过电位器调灵敏度。我们再经过LM311电压比较器电路处理后得到高低电平输出,高低电平再加以软件加以控制,从而达到要求。7.红外线检测模块黑线就是围区,小车检测到黑线就停止行走,避免小车走出黑圈。原理,电路和红外线行走距离检测模块是一样的。但是放在车头底下左右各一个,这样更能保证小车不会走出黑圈

12、。8.避障模块避障就是当小车走到光源处,为了防止小车撞上光源,而设置的电路模块让小车差不多走到的时候自动停止。方案一:用光敏二极管,做一个和检测光源的电路一样的电路来检测是否到过光源处。但是光敏二极管对光的感应太灵敏了,不好调节电位器来确定所要设置的距离。方案二:用光敏电阻,用LM358做一个比较器电路,由于光敏电阻对光的感应没有那么灵敏,比较好调节要设置的距离。电路图如下:光敏电阻又称光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料在一定光强度照射下,其阻值迅速减小的特性。我们再经过LM358电压比较器电路处理后得到高低电平输出,高低电平再加以软件加以控

13、制,从而达到要求。三.系统软件设计1.程序流程图:(1)主程序流程图:(2)中断程序流程图:2.软件程序:/*- 名称:声光寻迹小车 编写:勤 日期:2010.8 修改:无 容:通过标准程序静态显示计时时间与行程;通过光电二极管与红外二极管控制电机的PWM输出改变寻迹小车的方向-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<stdio.h> /标准输入输出#include<intrins.h>/*/* 定义端口 */*/sbit P35 = P35; /行程计数输入sbit STOP

14、 = P30;/光敏电阻sbit RS = P24;/1602控制字sbit RW = P25; sbit E = P26; sbit P10 = P10;/光电1sbit P11 = P11;/光电2sbit PWM1 = P12; /电机1PWM输出sbit IN2 = P13;sbit PWM2 = P14;/电机2PWM输出sbit IN4 = P15;sbit ENA = P16;/电机使能sbit ENB = P17;sbit RED1 = P33; /红外1sbit RED2 = P34; /红外2#define Data P0 /数据端口/*/* 全局变量 */*/char d

15、ata Time=" "char data journey=" " unsigned chart=0,tencnt=0,oldms=0,olds=0,count1=0,count2=0,PWM1_ON=0,PWM2_ON,CYCLE=50,road1=0;unsigned int s=0,min=0,count_new,count_old=1;/*/* 定时器0中断 */*/void timer0() interrupt 1 TH0=(65535-1000)/256; TL0=(65535-1000)%256; cnt+; oldms=cnt; if (

16、RED1|RED2) /红外信号判断 PWM1_ON=0;PWM2_ON=0;ENA=0;ENB=0;TR0=0; else /光电信号判断 if (P10&&P11) PWM1_ON=50;PWM2_ON=50; if (P10&&!P11) PWM1_ON=20;PWM2_ON=40; if (!P10&&P11) PWM1_ON=40;PWM2_ON=20;if (!P10&&!P11) PWM1_ON=20;PWM2_ON=40; if (count1=PWM1_ON) /电机1的PWM输出 PWM1 = 0; count

17、1+; if (count1 = CYCLE) count1=1;if (PWM1_ON!=0) /如果左右时间是0 保持原来状态 PWM1 = 1; if (count2=PWM2_ON)/电机2的PWM输出 PWM2 = 0; count2+; if (count2 = CYCLE) count2=1;if (PWM2_ON!=0) /如果左右时间是0 保持原来状态 PWM2 = 1; while (cnt=50)/50毫秒计时 tencnt+; cnt=0;if (P35!=count_old) /脉冲计数 count_new+;count_old=P35; while (tencnt=

18、20)/20个50毫秒到,秒加1 s+; tencnt=0; olds=s; while (s=60) /60秒到,分加1 min+; s=0;/*/* 毫秒级延时 */*/void DelayMs(unsigned char denyms) unsigned char j,newms;for(j=0;j<denyms;) while(newms!=oldms) newms=oldms;j+;/*/* 写入命令函数 */*/void WriteCommand(unsigned char c) DelayMs(3);/操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop

19、_(); E=1; Data=c; E=0;/*/* 写入数据函数 */*/void WriteData(unsigned char c) DelayMs(3); /操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0;/*/* 写入字节函数 */*/void ShowChar(unsigned char pos,unsigned char c) unsigned char p; if (pos>=0x10) p=pos+0xb0; /是第二行则命令代码高4位为0xc else p=pos+0x80; /是第二行则

20、命令代码高4位为0x8 WriteCommand (p);/写命令 WriteData (c); /写数据/*/* 写入字符串函数 */*/void ShowString (unsigned char line,char *ptr) unsigned char l,i; l=line<<4; for(i=0;i<16;i+) ShowChar(l+,*(ptr+i);/循环显示16个字符/*/* 初始化函数 */*/void InitLcd() DelayMs(5); WriteCommand(0x38); /display mode WriteCommand(0x38);

21、/display mode WriteCommand(0x38); /display mode WriteCommand(0x06); /显示光标移动位置 WriteCommand(0x0c); /显示开与光标设置 WriteCommand(0x01); /显示清屏/*/* 主函数 */*/void main(void)unsigned char news=1;ENA=1; /电机使能置1ENB=1;IN4=0; /PWM一端置0IN2=0;STOP=0;/光敏电阻置0TMOD=0x01; /定时器初始化TH0=(65535-1000)/256;TL0=(65535-1000)%256;EA=

22、1;ET0=1;TR0=1;InitLcd(); /初始化LCDDelayMs(5); /延时保证信号稳定while(1) while(news!=olds) sprintf(Time,"time: %d:%d ",min,s); /打印输出时间信息ShowString(0,Time);sprintf(journey,"road: %d cm ",2*count_new); /打印输出行程信息ShowString(1,journey);news=olds;if(STOP) /光敏二极管停止单片机运行TR0=0;PWM1=0;PWM2=0;else TR0=1; 四. 光源寻迹小车元件清单元件名称数量元件名称数

温馨提示

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

评论

0/150

提交评论