基于51单片机的红外遥控小车.doc

上传人:仙人指路1688 文档编号:4143004 上传时间:2023-04-07 格式:DOC 页数:31 大小:1.12MB
返回 下载 相关 举报
基于51单片机的红外遥控小车.doc_第1页
第1页 / 共31页
基于51单片机的红外遥控小车.doc_第2页
第2页 / 共31页
基于51单片机的红外遥控小车.doc_第3页
第3页 / 共31页
基于51单片机的红外遥控小车.doc_第4页
第4页 / 共31页
基于51单片机的红外遥控小车.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《基于51单片机的红外遥控小车.doc》由会员分享,可在线阅读,更多相关《基于51单片机的红外遥控小车.doc(31页珍藏版)》请在三一办公上搜索。

1、课程报告课程名称 基于51单片机的红外遥控小车 设计报告 学 院 信息学院 专 业 应用电子技术 班 级 11应电3+2 学 号 112030218 学生姓名 江宏 任课教师 潘世华 完成日期 2012/12/25 摘 要随着计算机、微电子、信息技术的快速进步,智能化技术的开发速度越来越快,智能度越来越高,应用范围也得到了极大的扩展。智能作为现代的新发明,是以后的发展方向,它可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理可应用于科学勘探等用途。智能电动小车就是其中的一个体现。设计者可以通过软件编程实现它的行进、循迹、停止的精确控制以及检测数据的存储、显示,无需人工干预。因此,智

2、能电动小车具有再编程的特性,是机器人的一种。本设计采用以AT89C51单片机为核心控制器,用L289驱动直流电机工作和红外遥控及循迹模块还有红外接收一体化传感器设计而成,采用模块化的设计方案, 软件采用C语言汇编。运用红外遥控器控制小车的前进、后退、左转、右转、启动、停止、加速和减速。关键字:AT89C52单片机;电机驱动;红外线遥控 目 录1任务分析52方案初步设计53产品详细设计63.1硬件设计63.1.1单片机最小系统设计63.1.2红外线接收模块73.1.3电机驱动模块83.1.4显示模块电路原理图93.1.5稳压电路原理图:103.2软件设计113.2.1系统软件流程框图113.2.

3、2红外遥控的编码和解码134调试和测试144.1系统硬件调试和测试144.2系统硬件调试和测试155总结16参考文献:17附照片18附近A:红外线遥控小车原理图18附件B:红外线遥控小车原理图19附件C:红外线遥控小车实物图20附件D:红外线遥控小车程序20引言项目来源:指导老师拟定主题,自己拟定方向。该设计项目的背景和意义:自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。 随着计算机、微电子、信息技术的快速进

4、步,智能化技术的开发速度越来越快,,智能度越来越高,应用范围也得到了极大的扩展。智能电动小车系统以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科。主要由路径识别、角度控制及车速控制等功能模块组成。而红外线遥控小车是机器人的雏形, 红外遥控车是集感知、规划决策、多等级辅助驾驶等功能于一体的综合系统。也是对红外遥控车的硬件系统,以及传感器等应用等相关技术进行研究,设计实现一个基于AT89C52处理器的红外遥控车运动控制硬件电路,来实现小车的前进,后退和左右转向等功能。红外遥控智能小车可以分为四大组成部分红外遥控部分、传感器检测部分、执行部分、CPU。智

5、能小车要实现循迹识别路线,选择正确的行进路线。该设计主要通过对系统硬件电路的设计,软件设计和程序的编写,然后根据硬件电路图和软件设计,在软件中仿真出系统设计结果。 随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子竞赛和省内电子竞赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究,经常举办这类比赛来培养学生对综合知识的应用能力。 它的控制系统的研制将有助于推动智能机器人控制系统的发展,同时为智能机器人的研制提供更有利的手段。1 任务分析在项目是以AT98C51单片机为核心编写红外接收程序,制作一款红外有关的控制电路,用红外接收一体头1838接收红外电路。实现红

6、外遥控小车,小车具有手动驾驶功能。驾驶时,遥控控制小车前进、后退、左转、右转、加速等操作,用L298驱动小车马达。2 方案初步设计本系统由硬件和软件两部分组成。以AT89C51单片机为核心的控制电路,采用模块化的设计方案,利用红外遥控器代替开关按键控制小的启动和停止,能够轻松自如的实现小车的启动停止、左转、右转和前进后退等功能。硬件部分主要完成红外编码信号的发射和接受、直流电机运行的发生等功能。软件主要完成信号的检测和处理、设备的驱动及控制等功能。AT89S52单片机查询红外信号并解码,查询各个检测部分输入的信号,并进行相应处理,包括电机的正反转,加减速。每个模块都是相互独立又相互协调配合,实

7、现了小车的智能控制。系统结构框图如图1所示。AT89C51单片机红外遥控模块红外接收模块显示模块电机驱动电机1电机2图1 红外遥控小车系统结构框图主控系统:采用AT89C51单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。针对本设计特点关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的

8、小体积单片机,D/A、A/D 功能也不必选用。根据这些分析,我选定了AT89C51 单片机作为本设计的主控装置。电机驱动模块:采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的PWM 调速技术。现市面上有很多此种芯片,因此选用L298。 这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,

9、能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。显示模块:常用的数码显示器件主要有LED数码显示器和LCD液晶显示器。LCD显示器具有低功耗、散热小、浅薄轻巧、显示锐利、屏幕调节方便等特点,同时又是现在市场的主流产品,价格较以往也有大幅的下降。3 产品详细设计3.1 硬件设计3.1.1 单片机最小系统设计基于单片机的多功能数字钟由AT89C52单片机、时钟电路、复位电路和闹钟电路四部分组成,如图2所示。在这个系统中,单片机AT89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,时钟电路可以简单定义就是产生像时钟一样准确的振荡电路任何

10、工作都按时间顺序,用于产生这个时间的电路就是时钟电路。复位电路则使得单片机能够正常、有序、稳定可靠地工作。 图2最小单片机3.1.2 红外线接收模块红外接收电路通常被厂家集成在一个元件中,成为一体化红外接收头。内部电路包括红外监测二极管,放大器,限幅器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流 信号进入带通滤波器,带通滤波器可以通过30KHZ到60KHZ的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形。注意输出的高低电平和发射端是反

11、相的,这样的目的是为了提高接收的灵敏度。 该模块使用红外接收头1838,有三个引脚,包括供电脚,接地和信号输出脚。其电路如图3.7所示。瓷片电容104为去耦电容,滤除输出信号的干扰。1端是解调信号的输出端,直接与单片机的P3.2口相连。有红外编码信号发射时,经红外接头处理后,输出为检波整形后的方波信号,并直接提供给单片机,执行相应的操作来达到控制电机的目的图3接收模块3.1.3 电机驱动模块该模块主要芯片L298,其可以同时控制两个电机的正反转,以及改变电机的转速,足以满足设计要求。 L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298,内部同样包含4通道逻辑驱动电路

12、。可以方便的驱动两个直流电机,或一个两相步进电机。 L298芯片是一种高压、大电流双全桥式的驱动器。其中SENSEA、SENSEB分别为两个H桥的电流反馈脚,不用时可以直接接地。VCC,VS是接电源引脚,电压范围分别是4.57V、2.546V,设计中VCC端与单片机电源端共用5V工作电源,VS端接12V电源。ENA,ENB为使能端,低电平禁止输出。IN1,IN2,IN3, IN4为数据输入引脚,分别于单片机的P1.0、P1.1、P1.2、P1.3连接,从单片机内输入控制信号。OUT1、OUT2、OUT3、OUT4为数据输出引脚,分别接电动机MG1和MG2。通过调节IN1、IN2、IN3、IN4

13、之间输入的高低电平的变化来实现电动机MG1和MG2的正反转动,从而实现小车的前进、后退、左转和右转等功能。当IN1输入低电平时,电机MG1正转;当IN2输入低电平时,电机MG1反转;当IN3输入低电平时,电机MG2正转;当IN4输入低电平时,电机MG2反转。高电平输入时,电机不工作。D1D8是保护二极管IN5819,用于释放掉电机紧急制动停车时产生的反向尖峰电势,起到保护L298不被损坏的作用。如图4电机驱动原理图所示:图4 电机驱动原理图3.1.4 显示模块电路原理图本系统采用14脚的1602型号的A1(LCD)显示器。其电路原理图如图5所示,图中RP1是9个插针作为排阻封装的上拉电阻,主要

14、是对器件1602注入电流,把不确定信号通过电路钳位在高电平,时也起同到限流的作用。1602LCD显示器的D0D8分别接在单片机的P0口,RS引脚高电平输入时输入数据,低电平输入时输入指令,接在单片机的p2.0口(lcd rs)。RW引脚低电平输入时向LCD写入指令或数据,高电平输入时从LCD读取信息,接在单片机的P2.1口(lcd r/w)。E引脚使能信号,高电平输入时读取信息,高电平向低电平转换时执行指令,接在单片机的P2.2(lcd e)口图5系统显示模块3.1.5 稳压电路原理图:由于单片机的工作电压是+5V但是直流电机使用却是+12V电压因此要为电源设计一个电路使得从+12V电压中分出

15、一个+5V电压提供单片机工作。这样就使得不仅可以单片机正常工作同时直流电机也能够正常使用。经过对电路的整体探究我决定基于一个稳压管来设计电源电路。用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少电路内部还有过流、过热及调整管的保护电路使用起来可靠、方便而且价格便宜。我决定选用7805稳压管。而在实际电路设计上我做了一点改变下面就是我的电路设计,如图6图6稳压电路设计3.2 软件设计本系统的软件用C语言编写,分为主程序,外部中断解码子程序、自动驾驶子程序、手动驾驶子程序、定时器1中断调速子程序等。主程序完成系统硬件的初始化、子程序调用等功能。解码子程序、主程序如图4、图5所示。3.2

16、.1 系统软件流程框图图6 主程序流程如图7图4 解码程序流程图本软件设计过程中主要实现利用按键来控制不同信号的输出当红外遥控器按上时,小车向前,当红外遥控器按下时,小车向后倒退,当红外遥控器按左时,小车就向左;当红外遥控器按右时,小车就向右。当红外遥控器按中间时,小车停止。同时在换档时LED指示灯会亮,给予提示。如图6、7。3.2.2 红外遥控的编码和解码 红外遥控采用PWM串行码的高低电平如图4所示,低电平“0”采用0.565ms的低电平加上0.56ms的高电平组成一个周期为1.125ms的脉冲信号,高电平“1”采用0.565ms的低电平加上1.685ms的高电平组成一个周期为2.25ms

17、的脉冲号。调制解调信号,采用输入一个时钟脉冲信号,用一个38kHz的载波信号进行调制,有38kHz的为低电平,无38kHz的为高电平,最后输出的波形为如图8所示。图8时钟脉冲信号输出波形4 调试和测试4.1 系统硬件调试和测试该系统的硬件调试主要是排查单片机印刷电路板的问题和连接上的一些问题。在该系统中首先通过了仔细地推敲系统原理确认无误,其次对照设计图纸查印制电路板,看是否有粘接等工艺现象。最后,检查外围连接是否有误,通过这几个方面的反复调试,可确保电路板的无误性。 在本系统的硬件调试过程中,出现了下列三种情况 :电压不稳定而导致程序无法写入的情况,使电压稳定的方法是改用新的电池,或者是再次

18、设计电源方案,在这里是用电源接通教学实验板,然后再把教学实验板与本系统相连接这样,就可以得到稳定的电压了。还出现的一个问题是LED不亮,检查后是焊接上出现了一点的失误。 小车在一切都正常的情况下,不能够启动。经检查之后才发现是电量不足的而导致,经检测,电池在充足电以后可以使小车正常运行20分钟。之后就需充电,才能使小车运行。图9是测试时的实物图。 图9测试事物图4.2 系统硬件调试和测试本系统在软件调试方面也没有规律可循,调试时更多的是凭经验。软件调试的主要任务是排查错误。通过在Keil编译器下调试程序,有两种错误,一种逻辑错误,也就是语法错误,是很容易被发现的,另一种是功能错误,是指在没有语

19、法错误的基础上,由于设计思想或算法的问题导致不能实现软件功能的一种错误。调试过程中出现的问题主要有以下两个方面: 1)用其它串口调试软件能够很好的实现两者之间的接受与发射串行连接,成功的接收和发送数据,但使用我们的汇编程序却不能实现,要么只能实现接收功能,要么只能实现发送功能。之后通过对C程序做多次的改动与测试才达到理想的结果。 2)在一次小车方向的调试过程中,左右方向出现了按键相反的现象。肯定是在程序的编译上出现了问题,通过仔细的检查,找到的问题并且顺利的解决,往往小小的一个符号或者字母大小写问题就可以完全改变小车的一些性能,而且检查起来不是非常的方便。所以在写程序的时候一定要细心。4.3系

20、统测试结果分析数字万用表主要用来测试分立元件的电阻、压降、漏电流、截止/导通状态等参数秒表主要用于测试达到最大距离所用的时间,算出速度,就可以间接知道红外线路接受,发射电路的情况。MCS51仿真机用于测试软件直流稳压电源在测试期间为各待测系统供电秒表用于产品测试,按照任务书的基本要求对制成的电动车进行产品测试。 测试数据及测试结果分析: 表1小车测试结果 在达到这些任务功能的同时发现小车可以在一定范围内实现遥控到达想要到的位置。这样小车的现实意义就更大了。 5 总结经实践表明,本文所设计的红外线遥控小车运行稳定、遥控灵敏、占用系统硬件资源少。通过本文电路的制作与设计大大增加了我的应用电子知识。

21、对于AT89C52单片机有了进一步的了解定时器与中断的应用等、对于一体化红外接收头1838的应用有了初步的认识红外接收的频率范围与工作方式、对于L298的引脚关系与应用方法有了进一步的了解能给电机提供稳定的工作状态且能很有效的控制电机的各种转动状态。这种综合的工程让我们学到了很多怎样把分别学到的东西应用到一起,产生意想不到的效果。参考文献:1 陈权昌,李兴富.单片机原理及应用M.广州:华南理工大学出版社,20072 孙育才、王荣兴、孙华芳.ATMEL新型AT89S52系列单片机及其应用M.北京:清华大学出版社, 2005 3 郝建国,郑燕.单片机在电子电路设计中的应用M.北京:清华大学出版社,

22、2006 4 余家春. Protel99SE电路设计实用教程M.北京:中国铁道出版社,20035 谢自美.电子线路设计.实验.测试M.武汉:华中科技大学出版社,20006 陈汝全等.电子技术常用器件应用手册M. 北京:机械工业出版社,1994.07 7 康华光.电子技术基础 数字部分(第四版)M.武汉:高等教育出版社,2008 8 张毅坤,陈善久,裘雪红.单片微型计算机原理及应用M.西安:西安电子科技大学出版社,2000 附照片附近A:红外线遥控小车原理图附件B:红外线遥控小车原理图附件C:红外线遥控小车实物图附件D:红外线遥控小车程序#include#include#include/#def

23、ine TURE 1#define FALSE 0/sbit IR=P32;/红外接口标志sbit LCD_RS = P22;sbit LCD_RW = P21; sbit LCD_E = P20;sbit IN1 = P24; /马达端口 前后sbit IN2 = P25;sbit IN3 = P37; /左右sbit IN4 = P36;sbit ENA= P33; /马达使能端 EN_A高电平 IN_1 IN_2有效控制前后sbit ENB= P23;sbit LED=P10; /0:ONsbit BUZZ=P11; /0:ON#define Data P0 /数据端口/#define

24、PWM 3#define PWM_max 10 unsigned int hour,minute,second,count,one;unsigned char a_time1,word;unsigned char PWM=3;char code Tab16=0123456789ABCDEF;char data TimeNum= ;char data Test1= ;/char data Test2= ;void warn(unsigned char _t);/unsigned char irtime;/红外用全局变量bit irpro_ok,irok,x;unsigned char IRcor

25、d4;unsigned char irdata33;void ShowString (unsigned char line,char *ptr);/void Delay(unsigned char mS);void Ir_work(void);void Ircordpro(void);/ void tim0_isr (void) interrupt 1 using 1/定时器0中断服务函数 irtime+;/void ex0_isr (void) interrupt 0 using 0/外部中断0服务函数 static unsigned char i; static bit startflag

26、; if(startflag) if(irtime=33)/引导码 TC9012的头码低电平,高电平4.5ms /0、1均以0.56ms的低电平开始,不同的是高电平的宽度不同, /0为0.56ms,1为1.68ms /63: 16.168ms /33: 8.448ms i=0; irdatai=irtime; irtime=0; i+; if(i=33)/最多32个数,前16位为识别码,后18位既为8位数据码和8位数据反码 irok=1; i=0; elseirtime=0;startflag=1;/void TIM0init(void)/定时器0初始化 TMOD=0x12;/定时器0工作方式

27、2,TH0是重装值,TL0是初值, TH0=0x00;/reload value256微秒 TL0=0x00;/initial value ET0=1;/开中断 TR0=1;void TIME1init(void)/定时器1初始化 TMOD=0x12; /定时器1工作方式1 TH1=(65536-100)/256; TL1=(65536-100)%256;/初值 ET1=1; EA=1;/void EX0init(void) IT0 = 1; / Configure interrupt 0 for falling edge on /INT0 (P3.2) EX0 = 1; / Enable E

28、X0 Interrupt EA = 1; /*/*/ void Ir_work(void)/红外键值散转程序 /1:0D 0D 00 FF 2:0D 0D 01 FE 3:0D 0D 02 FD TimeNum5 = TabIRcord0/16; TimeNum6 = TabIRcord0%16; TimeNum7 = ; TimeNum8 = TabIRcord1/16; TimeNum9 = TabIRcord1%16; TimeNum10 = ; TimeNum11 = TabIRcord2/16; TimeNum12 = TabIRcord2%16; TimeNum13 = ; Tim

29、eNum14 = TabIRcord3/16; TimeNum15 = TabIRcord3%16;/ ShowString(1,TimeNum);/ warn(1); irpro_ok=0;/ if(IRcord2=14&IRcord3=0xeb)/成立进入设置 /*/void Ircordpro(void)/红外码值处理函数 unsigned char i, j, k; unsigned char cord,value; k=1; for(i=0;i4;i+)/处理4个字节 for(j=1;j7)/大于某值为1 7*256=1792us=1.792ms,6*256= 1.526ms val

30、ue=value|0x80; else value=value; if(j1; k+; IRcordi=value; value=0; irpro_ok=1;/处理完毕标志位置1 /*/void DelayUs(unsigned char us)/delay us unsigned char uscnt; uscnt=us1;/* Crystal frequency in 12MHz*/ while(-uscnt);/*/void DelayMs(unsigned char ms)/delay Ms while(-ms) DelayUs(250); DelayUs(250); DelayUs(

31、250); DelayUs(250); void warn(unsigned char _t) unsigned char i; for(i=0;i=0x10) p=pos+0xb0; /是第二行则命令代码高4位为0xc else p=pos+0x80; /是第二行则命令代码高4位为0x8 WriteCommand (p);/write command WriteData (c); /write data/*/void ShowString (unsigned char line,char *ptr) unsigned char l,i; l=line4; for (i=0;i=PWM_max

32、) a_time1=0;if(word)if(a_time1PWM)IN1=1; /马达(前进1=1 2=0)elseIN1=0; elseif(a_time1PWM)IN1=0; /马达(前进1=1 2=0)elseIN1=1; /*马达前后、左右转*/void turnforward(void)if(one) word=1; IN1=0; IN2=0; ENA=1; TR1=1; sprintf(Test1,Turn For! );/the second line ShowString(1,Test1); one=0; / warn(1);void turnbackward(void)if

33、(one) word=0; IN1=1; IN2=1; ENA=1; TR1=1; sprintf(Test1,Turn Back! );/the second line ShowString(1,Test1); one=0; /warn(1);void turnstop(void)if(one) TR1=0; IN1=1; /马达停止 IN2=1; IN3=1; IN4=1; ENA=0; ENB=0; sprintf(Test1,Turn Stop! );/the second line ShowString(1,Test1); /warn(3);void turnleft(void)if

34、(one) IN3=1; /马达左转 马达左右转 IN4=0; ENB=1; DelayMs(250); ENB=0; sprintf(Test1,Turn left! ); ShowString(1,Test1); one=0;void turnright(void) if(one) IN3=0; /马达右转 IN4=1; ENB=1; DelayMs(250); ENB=0; sprintf(Test1,Turn right! ); ShowString(1,Test1); one=0; void jiasu() if(one&PWM=10) PWM+; Test110= ; Test111=V; Test112=; Test113=TabPWM/10; Test114=TabPWM%10;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号