教程小车部分_第1页
教程小车部分_第2页
教程小车部分_第3页
教程小车部分_第4页
教程小车部分_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、目录第九章、基于51单片机的红外循迹小车 11、 制作要求12、 制作目的13、制作方案(硬件方面) 13.1系统概述13.2单片机模块 23.3指示灯原理图 33.4红外对管原理图33.5电机驱动模块 44、制作方案(软件方面) 64、 附录85.1实物和效果展示85.2 参考程序:85.3 基于C51控制红外循迹小车原理图 13第九章、基于51单片机的红外循迹小车随着电子科技的迅猛发展,人们对技术也提出了更高的要求。汽车的智能化在提高汽 车的行驶安全性,操作性等方面都有巨大的优势,在一些特殊的场合下也能满足一些特殊 的需要。智能小车系统涉及到自动控制,车辆工程,计算机等多个领域,是未来汽车

2、智能 化是一个不可避免的大趋势。本次红外寻迹小车采用了C51单片机作为控制核心,利用红外对管传感器检测黑线达到循迹目的,自动寻迹,整体系统的电路结构简单,可靠性能高。1、制作要求使用51单片机作为控制芯片,自制一台可自行检测道路并行驶的简易智能小车。在这 一次的制作活动中将会接触到51单片机、红外对管、电机驱动模块、简单的C语言编程,要求学会使用51单片机进行编程,入门单片机,能够独立的搭出单片机最小系统;了解红 外对管的工作原理、电路图,掌握电压比较器的使用方法,学会调试红外对管;了解电机 驱动的作用、工作原理;能够进行简单的C语言编程,给单片机编写程序使其能够正常工作。2、制作目的1、入门

3、51单片机,进行简单的 C语言编程;2、掌握51单片机最小系统,中断,定时器 /计数器等;3、了解传感器的种类和原理,掌握红外传感器并学会调试;4、学习C语言的基本语句,用 C语言编写程序。3、制作方案(硬件方面)3.1系统概述智能循迹小车主要由单片机模块、红外检测模块、电机驱动模块组成。单片机为主控模块,接受并判断各种信号,控制电机驱动。在智能循迹小车系统设计过程中,用L293驱动两个电机,产生信号驱动小车前进时,是通过循迹模块里的红外对管ST188是否检测到黑线产生的电平信号通过 LM339在返回到单片机,单片机再根据程序设计的要求作出相应 的判断送给电机驱动模块,以实现小车自动循迹的功能

4、(可对应附录里的系统原理图)。图9-3-1小车工作图3.2单片机模块单片机模块为此次小车系统的核心,是作为系统信号采集和输出控制的重要部分。51单片机的种类繁多,通常使用的是AT51单片机和STC51单片机,其中STC12单片机自带PWM,可以直接使用。单片机模块为核心模块,其它由时钟、电源、串口MAX232与程序烧录、I/O接口等组成。通过各结构的工作加上丰富的I/O接口,实现数据处理,进而对外部模块进行控制。我们队设计方案主要分为两种:设计一个包含电源、串口与程序烧录、外接I/O 口组成,实现现场的小车调试程序烧录。本次制作智能循迹小车所需提供9V电源,一方面9V电源直接供给电机驱动,驱动

5、电机直接转停,另一方面 9V经过稳压芯片,将9V电压稳压到5V直接给单片机模块、红外、 指示灯工作,才能使小车正常工作。稳压芯片7805输出为+5V稳定电压,最高输入极限电压 36,最低输入电压7V集成稳压 块的最佳工作状态是输入电压与输出电压间的压差在34V左右。压差太大可在输入前端串联几个二极管降压,这样稳压块就不会很烫了。J7下下U3C5103VTG (iND GND GND GND匸Ti图9-3-2电源供应图9-3-3程序下载口下下下下P下V C C MOSIVTG _2二P15“一5 NC5 RES GNDRST sCK GNDMOSIGNDP16J1ISP_GNDMCU876543

6、21下下U11P1.0(T2)3P1.1(T2EX)一3P1.24P1.3P156P1.4P67 P1.5(MOSI) P177 P1.6(MISO) Pl/8 P1.7(SCK)13 1312 12P3.3(INT1)P3.2(INT0)pFXTAIC2XTALClP3.5(T1)P3.4(T0)EA/VPP半 XTAL1XTAL2RST_9RST(AD0)P0.039(AD1)P0.138(AD2)P0.236(AD3)P0.336(AD4)P0.435 (AD5)P0.534(AD6)P0.633(AD7)P0.732 (A8)P2.021(A9)P2.1 22(A10)P2.223(A

7、11)P2.324(A12)P2.425(A13)P2.526(A14)P2.627(A15)P2.728VCCGNDJ3V C CJ下下678VCC仃仃P3.7(RD)16 16P3.6(WR)(RXD)P30 L11ALED)P0pFVCC10uF24334251J6下下下下下下GNDVCCR101K图9-3-4单片机最小模块单片机系统作为循迹小车的核心控制器,起着控制小车所有运行状态的作用。控制方法有许多,大部分采用单片机来控制。单片机将红外对管采集的道路信息进行处理。小车进入循迹模式后,即不停的扫描与循迹模块相连接的I/O 口,一旦检测到某个I/O 口有信号变化,程序进入判断程序,把相

8、应的信号传给减速电机控制器L293从而纠正小车的状态。单片机最小系统调试步骤:方法一:1. 用万用表确定是否正常供电。2. 用示波器确定晶振是否起振。3. 单片机是否工作。比如,单片机一上电,它的有些管脚ALE引脚会输出脉冲,可以通过示波器查看。方法二:1. 查看是否可以烧录程序。2. 可以结合图上的指示灯电路点亮一个发光二级管。参考程序在右边。3.3指示灯原理图本模块是用4个发光二极管作为指示灯显示模块,通过红外对管对道路进行检测后传 输信号给单片机,由单片机处理信号后,控制P2 口的LED1、LED2 LED3 LED4 (小车总原理图上)的输出高、低电平,控制NPN极管的通断,来控制指示

9、灯的亮、灭。即以此来显示小车对道路的检测情况。4 / 15VCCDOLEDQ4 NPN1GND图9-3-5指示灯电路3.4红外对管原理图能够用来采集赛道数据的传感器有很多种,比如红外传感器、黑白线检测传感器、光 电传感器和摄像头等;但综合价格、性能、使用三方面来看,红外传感器是较为理想的。 黑白线传感器如tk-20虽然性能优秀,但价格较高;光电传感器则受环境的影响太大,摄 像头能很好的采集赛道数据,但使用起来不如前面几种传感器简单,且价格较贵;因此这 次的小车采用的是 ST188红外传感器,其检测距离可调整的范围大,4-10mm均可使用。如图所示为ER210KIR4625LR65KVC C丄M

10、3:U2A2 SIGNAL1ST188ReSap12GND图9-3-6红外对管外型图9-3-7红外对管电路图在焊接st188时应该注意其引脚的位置,不要弄错了;同时在使用时也要小心,因为 st188很容易烧掉,其价格在 2-3元不等。焊接完成后,检测st188是否正常工作可以使用手机的照相功能,若通过手机的照相功能能够观察到红光,则说明st188已经可以正常工作了。接下来要调整可调电阻以达到一个合适的比较电压,可以使用示波器进行调整。如图9-3-7所示,当有电流经过 R4时,红外发射管发射红外线到轨道上,光线经过道 路反射,红外接收管接收到红外线C和E引脚就有电流通过,此时C引脚的电压近似为0

11、V。若发射管发射的红外被黑线吸收,接收管接收不到,此时C和E之间可视为断开,此时C脚的电压为5V。红外对管的道路的检测越清楚,传输给单片机的信息越稳定,小车就能更好地循迹。而 红外循迹模块的调试首先要判定自己的红外对管用没有用,而红外对管的检测方案有:1):通过测量红外发光二极管的正反向电阻,还可以在很大程度上推测其性能的优劣。 把万用表拨在R X 10(或 R X 1挡,黑表笔接红外发光二极管正极,红表笔接负极,测得正向电阻应在20-40K黑表笔接红外发光二极管负极,红表笔接正极,测得反向电阻应大于 500K以上。2):先给红外对管通电,采用手机摄像功能查看红外发射管是否是好的。Outpd

12、J . i-炳阿i* Inpjfl 2 丁Insut41 Ol!Juj GWI * Inptl 4图9-3-8LM339内部结构图7所示当同相输入端的7脚输出为5v;若反相输入端的电压大于同相LM339电压比较器芯片内部装有四个独立的电压比较器,如图 电压大于反相输入端时,输出正最大,此时 输入端。3.5电机驱动模块本次循迹小车的制作采用直流减速电机,直流减速电机转动力矩大,体积小、重量轻、 装配简单、使用方便。其内部由高速电机提供原动力,带动变速(减速)此轮组,产生较 大扭力。驱动模块采用芯片 L293为电机驱动芯片,L293是一个具有高电压高电流的全桥驱动芯 片,响应频率很高。可以直流带动

13、两个12V的直流电机。L293内部的原理图如下:图9-3-9 L293内部原理图OUT1与OUT2与小车的一个电机的正负极相连, OUT3与OUT4与小车的另一个电机的正 负极相连,单片机通过控制 IN1与IN2,IN3与IN4分别控制电机的正反转。 ENA与ENB分 别控制两个电机的使能(控制电机停转)。表9-3-1L293控制表IN1IN2ENA电机状态xx0停止101顺时针011逆时针001停止111停止EH4 *t 1 卜1】嗨5tE】HPUOUTPUT 1JOUTPJT 4&MQ|4sw3N05111 ONCOUTI 611r OLlTPLJ 1irwn iID! INPUT 7怪I

14、eBi f2图9-3-10 L293N引脚图EN1EN2U2IN1IN2IN3IN4*1VCCVCC 16 _T VC _83 OUT1+9VOUT1 0UT2 6OUT20UT3 一11 0UT3OUI3 1车_ 0UT4OUT! 14 OUI -OUT2MotorGND GND GND GND512130UT4MotorGND L293B图9-3-11电机驱动电路L293有两路电源分别为逻辑电源和动力电源,上图中6V为逻辑电源,12V为动力电源。J4接入逻辑电源,J6接入动力电源,J1与J2分别为单片机控制两个电机的输入端,J3与J5分别与两个电极的正负极相连。ENA与 ENB直接接入6V

15、逻辑电源也就是说两个电机时刻都工作在使能状态,控制电机的运行状态只有通过J1与J2两个接口。由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针 状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进 行泄流,保护芯片的安全。4、制作方案(软件方面)本次小车制作系统主控芯片为 AT89S52程序主要分为以下几个模块:1、主函数;作为整个程序的开始,与结束。Check_Load() Deal_Message_of_Load作为子程序可在后调用。例:void mai n(void)Timernit();while(1)Check_Loa

16、d();Deal_Message_ofLoad();2、赛道信息采集函数;对地面信号进行一个采集后,具体地对Load_Size进行赋值,以便赛道处理按函数,对信号进行处理。例:void Deal_Message_of_Load(void)switch(Load&0 XOF)case0X01:Load_Size =0X01; break;/0001case0x02:Load_Size =0X02; break;/0010case0X03:Load_Size =0X03; break;/0011case0x04:Load_Size =0X04; break;/0100case0X06:Load_S

17、ize =0X05; break;/0110case0x08:Load_Size =0X06; break;/1000case0X0C:Load_Size =0X07; break;/1100case0X00:Load_Size =0X08; break;/0000case0x0f:Load_Size =0X09; break;/1111default: break;P2 = Load&0X0F;/点亮指示灯3、赛道处理函数;通过对赛道信息采集后,进行判断,并做出相应的指令控制电机转动。 例:void Con trol_Wheels(void)if(Load_Size = 0x01)IN1 =

18、 !IN1;Time_Cou nt1+;if(Time_Cou nt1/20 = 0)IN3 = 1;elseIN3 = 0;if(Time_Cou nt1 = 255)Time_Cou nt1 = 0;4、定时器初始化函数;顾名思义就是对时间进行计数,以方便中断的执行。void Timernit(void)TMOD = 0x11;/设定定时器T0和T1为工作方式1,为16位定时器/计数器,TH0 = (65536-60000)/256;TL0 = (65536-60000)%256;TRO = 1;IE = OX8A;IN1 = 1;IN2 = O;IN3 = 1;IN4 = O;ENA =

19、 1;ENB = 1;5、延时函数;对时间进行控制,使在一定时间后执行需要执行的指令。例:void Delay(uchar Time)uchar i=O,j=O;for(i=Time;i0;i-)for(j=100;j0;j-);6、定时器中断TO服务函数;暂停当前程序的执行,优先执行中断函数里的程序。例:void TimerO() in terrupt 1Time_Cou nt2+;ENA = O;ENB = O;if(Time_Cou nt2=2)ENA = 1;ENB = 1;THO = (65536-60000)/256;TLO = (65536-60000)%256;Con trol

20、_Wheels();Time_Cou nt2 = 0;4、附录5.1实物和效果展示图9-5-1实物图图9-5-2效果图5.2参考程序:这里为主程序:#in clude#in clude#in clude#defi ne uchar un sig ned char#defi ne uint un sig ned int#defi ne uint un sig ned int全局变量声明*/uchar Load=0; /赛道信息存储变量 uchar Load_Size=0; /赛道类型存储变量*void mai n(void)Timerni t();/ 定时器初始化配置while(1)Check_

21、Load();/ 获取当前赛道信息Deal_Message_of_Load(); 小车只能转弯下面为程序中的 Check_Load.h文件 函数,作为子程序起到解释作用。#ifndef _CHECK_LOAD_H_#defi ne _CHECK_LOAD_H_#in clude#defi ne uchar un sig ned char*函数功能:提取赛道信息 入口参数:无出口参数:无*void Check_Load(void)P1 = OXFF;/ 释放 P1 端口,此语句可以省略Load = P1;/ 读取 P1 端口,初步提取赛道信息/*函数功能:处理赛道信息入口参数:Loadsbit

22、IN2=P0A1;sbit IN3=P0A2;sbit IN4=P0A3;sbit ENA=P0A4;sbit ENB=P0A5;uchar Time_Co un t1=0;uchar Time_Co un t2=0;出口参数:无备注:誰誰2012 2 17*/void Deal_Message_of_Load(void)switch(Load&0 X0F)case 0X01:Load_Size=0X01;break;/0001case 0x02:Load_Size=0X02;break;/0010case 0X03:Load_Size=0X03;break;0011case 0x04:Loa

23、d_Size=0X04;break;/0100case 0X06:Load_Size=0X05;break;0110case 0x08:Load_Size=0X06;break;/1000case 0X0C:Load_Size=0X07;break;1100case 0X00:Load_Size=0X08;break;/0000case 0x0f:Load_Size=0X09;break;1111default: break;void Delay(uchar Time);/*函数功能:控制左右车轮的转动,实现小车的智能循迹控制思想:当 Load_Size = 0x01时,说明小车最右边的光电对

24、管采到黑线,故 小车应该往右边转,应使得小车的左轮 转得比右轮多,依此类推入口参数:无出口参数:无*/void Con trol_Wheels(void)/*按照赛道处理的结果(Load_Size)对 应的处理左右轮子的转速实现转弯*/if(Load_Size = 0x01)IN1 = !IN1;P2 = Load&0 X0F;/点亮指示灯Time_Cou nt1+; if(Time_Cou nt1/20 200)#en difIN3 = 1;/下面为chang_direction.h头文件也和 上面的Check_Load.h文件一样,作 为子程序。#ifndef _CHANGE_DERECT

25、ION_H_ #defi ne _CHANGE_DERECTION_H_ sbit IN仁 P0A0; elseIN3 = 0;if(Time_Cou nt1 = 255) Time_Cou nt1 = 0;位定义else if(Load_Size = 0x02)IN1 = !IN1;Time_Cou nt1+;if(Time_Co un t1/1010IN3 = 1;elseIN3 = 0;if(Time_Cou nt1 = 255)Time_Cou nt1 = 0; else if(Load_Size = 0x03)IN1 = !IN1;Time_Cou nt1+;if(Time_Co u

26、n t1/1515IN3 = 1;elseIN3 = 0;if(Time_Cou nt1 = 255)Time_Cou nt1 = 0; else if(Load_Size = 0x04) IN3 = !IN3;Time_Cou nt1+;if(Time_Cou nt1/10 = 0) IN1 = 1;else0)IN1 = 0; if(Time_Cou nt1 = 255) Time_Coun t1 = 0;else if(Load_Size = 0x06)IN3 = !IN3;Time_Cou nt1+; if(Time_Cou nt1/10 = 0) IN1 = 1;elseIN1 =

27、0;0) if(Time_Cou nt1 = 255) Time_Coun t1 = 0;else if(Load_Size = 0x07)IN3 = !IN3;Time_Cou nt1+; if(Time_Cou nt1/15 = 0) IN1 = 1;elseIN1 = 0;if(Time_Cou nt1 = 255) Time_Cou nt1 = 0;else if(Load_Size = 0x05)|(Load_Size =0x08)IN1 = !IN1;IN3 = !IN3;else;/*函数功能:定时器初始化 入口参数:无出口参数:无*void Timer_I nit(void)

28、TMOD = 0x11;/设定定时器T0和T1为工作方式1,为16位定时器/计数器TH0 = (65536-60000)/256;/初始化疋时器咼8位TL0 = (65536-60000)%256;/初始化定时器低8位TR0 = 1;/启动定时器T0IE = 0X8A;/开定时器T0中断,开总中断IN1 = 1;/初始化L293的IN1IN4引脚。IN2 = 0;IN3 = 1;IN4 = 0;ENA = 1;/使能OUT1、OUT2ENB = 1;/ 使能OUT3、OUT4/*函数功能:延时入口参数:Time出口参数:无备注:誰誰 2012 2 18*/void Delay(uchar Time)uchar i=0,j=0;for(i=Time;i0;i-) for(j=100;j0;j-);/*函数功能:定时器T0中断服务函数(已 验证)入口参数:无出口参数:无备注:誰誰 2012 2 18*/void Timer0() in terrupt 1Time_Cou nt2+;ENA

温馨提示

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

评论

0/150

提交评论