单片机应用-智能小车设计.._第1页
单片机应用-智能小车设计.._第2页
单片机应用-智能小车设计.._第3页
单片机应用-智能小车设计.._第4页
单片机应用-智能小车设计.._第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、智能小车设计所谓智能系统,应该是在没有人为因素干预下,能够完全的或者部分的对外部刺激因素 做出适当响应的系统。通常这种系统无论复杂还是简单,其硬件结构都可以分为传感、控制 以及执行三个部分,好比人的各种感官、大脑以及四肢。下面就从这三个方面进行智能小车 的设计,该小车具备自动循迹能力(非人为控制下按照指定路线行走),并且随着不同传感器的加入,能够完成更多的功能,比如壁障、走迷宫、寻光、通过电脑及手机等上位机控制等、控制部分:Wd 2一亠幸Ir-IrJdflHE二r.ifr-r-0足王V】 巧EJ=_ *星 nV) 2Z- rl&3_vl nL-5 - (唱fEL 宀凶Fed rnyE -Ei-

2、Ed LUU亠 - g宀 业 aKsnv) 旺呂MN- nE-s- (ISHRXD USBRXD RF无钱模块揍口可以与APC220 ZK-07无域蓝牙* 口相連埒无找甩城辻 按时时绪单冲机F裁USB转串口电路功能1: STC单片机下載程序电略功能2: USB口供电与通信TXD USBTD4IT2qprxpc2DTK0S( IRIPLLJTEVDQ(rND ARXDNGRJ_XLD_MwbTRlJiNCCiNDLfeR NxrcdctF mNCCTSjdCWsinnX1H3E BO PUJOB2Dil3005I)B6DI17PsKMCRST VOGT !4DK21436587109Mt)SlR

3、ESETSCKM1S()图 5 DS18B20 /1838 体化接口及 ISP 接口该智能小车整个控制部分电路原理如以上5个图所示,可分为主控芯片最小系统、控制信号输入、电源以及各类接口四个部分。1. 主控芯片最小系统:在本设计中所使用的主控芯片为 51系列单片机,为保证其正常工作所必需的外围电路包 括晶振电路、复位电路以及P0 口上拉电阻。当然以上三个部分只能保证单片机正常运转,但 若只是这样基本没有什么实际意义,根据不同的任务要求,需要让单片机在适当的引脚上连 接相应的设备。这里结合智能小车所需的功能以及未来方便扩展的需要,除了设置4个3头插针连接红外光电开关、舵机(距离探测时会用到)以及

4、给其他传感器供电外,还将单片机 PO、P1、P2、P3 口用排针引出,其中P1使用双排针,一排与8个LED灯相连,可在日后测 试时方便观察信号变化。具体连接如图1所示。2. 控制信号输入部分:51系列单片机接收外部信号无非通过两个渠道,一个是其 4个并行的I/O 口,另一个就 是其自带的串口,相较之下,串行口的拓展能力更强一些。如图 2所示,在本设计中,利用 单片机的I/O 口设置了 4个按键进行人机交互,同时在其串口上连接了一块 USB/串口转换芯 片 PL2303。PL2303:是Prolific公司生产的一种高度集成的 RS232-USB接口转换器,可提供一个RS232全 双工异步串行通

5、信装置与 USB功能接口便利联接的解决方案。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接几只电容就可实现USB信号与RS232信号的转换,能够方便嵌入到各种设备,该器件作为USB/RS232 双向转换器,一方面从主机接收USB数据并将其转换为 RS232信息流格式发送给外设;另一方面从RS232外设接收数据转换为 USB数据格式传送回主机。这些工作全部由器件 自动完成,开发者无需考虑固件设计。PL2303的高兼容驱动可在大多操作系统上模拟成传统COM端口,并允许基于COM端口应用可方便地转换成 USB接口应用,通讯波特率高 达 6 Mb/s。

6、该器件具有以下特征:完全兼容 USB1.1协议;可调节的35 V输出电压,满足3V、 3.3V和5V不同应用需求;支持完整的RS232接口,可编程设置的波特率:75b/s6 Mb/s, 并为外部串行接口提供电源; 512字节可调的双向数据缓存;支持默认的ROM和外部EEPROM存储设备配置信息,具有I2C总线接口,支持从外部 MODEM信号远程唤醒;支持 Windows98. Windows2000,WindowsXP 等操作系统;28 引脚的 SOIC 封装。PL2303引脚功能列表:引脚名字类型引脚描述1TXD输出数据输出到串口;2DTR N输出数据终端准备好,低电平有效;3RST N输出

7、发送请求,低电平有效;4VDD_325电源RS232的电源,为串行端口信号的电源引脚;当 串口为3.3V,这应该是3.3;当串行端口是2.5V,这应该是2.5V ;5RXD输入串口数据输入;6RI N输入/输出串行端口(环指示器);7GND电源接地;8NC无连接9DSR N输入/输出串行端口(数据集就绪)10DCD N输入/输出串行端口(数据载波检测)11CTS N输入/输出串行端口(清除发送)12SHTD N输出控制RS232收发器关机13EE CLK输入/输出串行EEPROM时钟14EE DATA输入/输出串行EEPROM数据15 :DP 输入/输出USB端口 D+信号16DM输入/输出U

8、SB端口 D-信号17VO 33常规3.3V电源输出18 :GND接地19NC无连接20VDD 5电源USB端口的5V电压电源21 1GND :接地22GP0输入/输出通用I/O引脚023GP1输入/输出通用I/O引脚124 :NC无连接25GND A模拟地锁相环26PLL TEST输入PLL锁相环测试模式控制27 :OSC1输入晶体振荡器输入28OSC2输入/输出晶体振荡器输出SSOP28封装以上是PL2303芯片的基本介绍,通俗的讲就是该芯片通过驱动可以在 PC机上虚拟出一 个COM 口,使USB接口模拟串口的功能,一般使用情况下主要关心 1、5、15、16四个引 脚,具体连接参看图2。3

9、. 电源部分:电源部分设计为双供电方式,从图3中可以看到,当切换开关上方闭合时,控制板通过电源接头供电,当切换开关下方闭合时,控制板通过USB接口供电。4各类接口部分:这里所提供的接口分别为 1602、12864LCD标准接口、DS18B20/1838 一体化接口、ISP接口 以及图2中所示的由PL2303芯片扩展的USB接口,保证了基本的输出扩展及传感器信号源扩展。由于已将单片机的I/O 口引出,不必担心接口是否够用的问题, 日后根据需要通过杜邦线可以随时扩展新的接口。二、执行部分:这里所说的执行部分指的是智能小车上能够表现出其对外部条件作出的反应的部分,这 种反应可以是运动,也可以是声或者

10、光。33图6 LED数码管显示匕仁LED数码管显示:图6所示为4位共阳极LED数码管显示电路,该部分可用于实时显示有关智能小车当 前运行状态,比如速度、前方障碍物距离等等。如果根据实际需要进行相应的扩展,则可以 用于显示更多类型的信息,比如加入 AD转换器可以显示当前电池的电压情况,加入温度传 感器可以显示当前的工作温度等等。2蜂鸣器图7所示为简单的蜂鸣器电路,该蜂鸣器可用于对智能小车运行时的一些特定状况进行 声音提示,如距离某物太近、转向、脱离轨道、电量过低等等,不同的状况可以使用不同的 声音组合进行区分。3运动部分:该智能小车的运动执行部分由减速直流电机、轮胎以及相应的驱动电路组成,具体如

11、图8 9所示。该部分负责实时的执行小车所需的各种运动(左右转、前进、后退等),若将轮胎部分换成履带或者其它专用轮胎,则可以执行翻越等更为复杂的运动。下面就该部分原理 做较为详尽的介绍。图8直流减速电机及轮胎me74uh区TI23 W SEN skJ LaQ 1-1J fl- fi 5 13 1 J -J 1卜;e蕊惹2 QwXIOLTIM2OUT?r c彳订2基G &1rxK u u M S,JIirssc图9双L298N驱动电路直流减速电机:直流减速电机相较于普通直流电机的最大区别就是加入了减速齿轮组,通过调整齿轮比 可以在转速与扭矩之间进行权衡,降低转速则可以获得较大扭矩,带动更重的设备,

12、反之扭 矩则减少。本设计中整个小车质量相对于普通 5V直流电机来说比较重,若选用较大功率的 电机,则耗电量与驱动电路的负载将会增加,况且并不需要太高的速度,所以选用减速电机,在同样的功率下通过降低转速获得足够的扭矩。轮胎:最常见的轮胎如图8中所示的圆形轮胎,也是本设计中所使用的轮胎,其对于一般硬质 平地来说非常适用,除此之外还有履带,适用于较软并且凹凸不平路面以及专门用于攀爬楼 梯等特殊障碍物的异形轮胎等。驱动电路:小车直流电机工作电流一般是 200-400mA有些更大,该设计中是四个轮子,那么总的 电流在800-1600mA左右,这些电机轮子都是要接受单片机指令执行相应的动作,而单片机 I/

13、O 口一般只能提供5mA到10mA的电流,直接驱动不了电机,所以需要一个驱动模块, 该驱动模块的作用就是根据单片机的指令提供足够的电流。对于工作电压12V以下,功耗25W 以内的设备可以选用专业的 L298N,L293D驱动芯片。这里我们选用 L298N驱动芯片,该芯片可以同时驱动两个电机,所以采用双L298N方案L298N:图10 L298N内部结构图L298N是ST公司的L298系列的一款常见的15功能引脚Multiwatt15或PoweSO20封装 的产品,如图11所示,内部包含4通道逻辑驱动电路,即内含两个 H桥的高电压大电流双 全桥式驱动器,如图10所示,可以方便的驱动两个直流电机,

14、或一个四相步进电机。L298N可接受标准TTL逻辑电平信号,输入电压范围为+ 2.546 V,输出电压最高可达50V,可以 直接通过电源来调节输出电压,输出电流可达2.5 A,可驱动电感性负载,可接入电流采样电阻形成电流传感信号,可以直接用单片机的IO 口提供信号,而且应用电路简单,使用比较方 便。L298N引脚功能表:引脚(MW15)引脚(PSO20)名称功能1;152;19Sense A; Sense B在该引脚与地之间连接一个用于电流米样的电 阻,形成电流传感信号来控制负载电流。2;34;5Out 1; Out 2A桥的输出,并且这两端之间的负载电流受到1号管脚的监测。46VS供电电压输

15、入端口,该端口的输入电压与桥的输 出电压一致,范围为+2.5+46V,使用时必须在 其与地之间接上一个100nF的无感电容。5;77;9Input 1; I nput 2A桥TTL逻辑电平输入端,与对应 A桥输出一 致(逻辑高则输出,低则停止输出)。6;118;14En able A; En able B逻辑电平使能端,为高则对应桥按照逻辑电平正 常输出,为低时则停止。81;10;11;20GND接地912VSS逻辑参考电平输入端,使用时必须在其与地之间 接上一个100nF的无感电容。10;1213;15Input 3; I nput 4B桥TTL逻辑电平输入端,与对应 A桥输出一 致(逻辑高

16、则输出,低则停止输出)。13;1416;17Out 3; Out 4B桥的输出,并且这两端之间的负载电流受到15 号管脚的监测。3;18N.C.悬空CURRENT SENSING BOUTPUT*OUTPUT 3INPUT 4ENABLE BINPUT 3LOGIC SUFPLY VOLTAGE V:GNDinput 1ENABLE AINPUT 1SUPPLY VOLTAGE VsOUTPUT 2OUTPUT 1CURRENIT SENSING A2巨= = = = =DAr12-1A2D rt rt ban3 1ft4 ir5 PowerSO20 托1514131211Input 3VSS

17、BGND图11 L298N芯片封装在该驱动电路中,除了 L298N驱动芯片外还包括LM2596S降压稳压芯片以及ULN2003L 集成达林顿管,具体连接如图9所示。其作用分别为:LM2596S降压稳压芯片:该芯片可以稳定输出5V (可调)电压,用于给控制板以及传感器等较小功率设备提供一个稳定的电压, 保证其的正常工作。ULN2003L集成达林顿管:将其所有管脚用排针引出,为了日后方便扩展更大功率器件。IN4AA7IN 40071N40Q7在图9中的16只二极管起到稳压保护作用,当输出电压过高或过低时,可以将其稳定在 合理的范围之内。若在4个OUT之间加入发光二极管,则可以直观的看出当前驱动器的

18、输出 状态,即电机的工作状态,如图12所示OUT1OUT2OUT3OUT4图12驱动状态指示电路下面给出一路电机的控制逻辑表,其他三路电机逻辑类同。从表中可以更为直观的看出L298N驱动芯片几个关键引脚的功能,IN1和IN2之间高低电平切换可控制电机正反转,EN端高低变换可控制 L298N输出端是否按照输入信号执行。用两个L298N连接前后左右4个电机,参照表中的逻辑给不同的IN输入逻辑电平,就可使小车完成前进、 后退、左转、右转等动作,比如一块L298N芯片的OUT1、OUT2、OUT3、 OUT4分别连接左侧前后电机的正极、负极、正极、负极,另一块L298N芯片的OUT1、OUT2、OUT

19、3、OUT4分别连接右侧前后电机的正极、负极、正极、负极,此时两块L298N的IN端输入逻辑电平1010、1010则所有电机正转,小城前进;输入1010、0101则小车左侧前进,右侧后退实现右转等。当然此逻辑会随着实际的连接而改变,但原理相同。这里可以看到L298N中的EN端负责控制OUT端是否执行IN端的输入,使其在 0、1之间按一定周期切换则可以实现小车的PWM控制,若想使小车全速运行,则需将EN端与逻辑高电位始终相连。电机控制逻辑表:IN1IN2EN A电机000不转010不转100不转110不转001不转101正转011反转111不转三、传感器部分:若要使小车智能化,就必须使其能够对外

20、界环境的变化自行做出适当地反映,在这个过 程中最为关键的因素就是如何感知外界的环境,完成这一任务的就是传感器。不同的传感器 可以感知不同的环境因素,传感器越丰富,小车可获取到的因素种类就越多,这里将介绍几 个常用的传感器。1. 四路红外线探测系统:如图13所示该系统是为智能小车、机器人等自动化机械装置提供一种多用途的红外线探 测系统。使用红外线发射和接收管等分立元器件组成探头,并使用LM339电压比较器(加入迟滞电路),防止临界输出抖动做为核心器件构成中控电路。此系统具有的多种探测功能能极大的满足各种自动化、智能化的小型系统的应用。图13四路红外线探测系统应用范围:1. 智能化轮式车和智能化履

21、带车循迹、避障、防跌落;2. 智能化小型机械人和智能化小型机械手物料检测、色相检测灰度检测。 特性:1易于安装,使用简便;2. 四路分别独立工作,工作时不受数量限制中控板与探头分开;3安装位置不受限制模块高度W 4厘米;4安全工作电压范围在4伏特至6伏特之间4路全开工作电流30毫安至40毫安之间;5.带校正调节功能,R17、R18、R19、R20对应比较电压调节输出端为集电极开路,板 载4.7千欧上拉电阻。端口:+5、GND:电源接线端IN (1 4);OUT :探头与中控板连接端;OUT1、OUT2、OUT3、OUT4:对应输出端;LED3、LED4、LED6、LED7:对应输出指示;原理:

22、图14所示为四路红外线探测系统中的一路原理图,其他三路与其一致,图中左半部份 为发射,右半部份为接收,R17负责调整基准电压,加入迟滞电路,防止临界输出抖动。测试方法:如图15所示,左侧为传感器测试电路,右侧为传感器安装位置。1测试探头:移开探头前面的所有物体,且探头不要指向阳光的方向。将探头板接上电源后用万用表 测最输出端电压。此时的电压应当在 1伏特左右。用白纸挡在探头前。用万用表测输出端电 压应当接近电源电压。2测试中探板:将测试好的探头按板上所标示的接入输入端子,移开探头前面的所有物体,且探头不要 指向阳光的方向,将中探板接上电源后用万用表测输出端子,此时输出端输出的电压应当接 近电源

23、电压,用白纸挡在探头前,万用表测输出端电压应当接近 0伏特,调整所在通道的电 位器可以改变探测的距离。D4,调节灵敏度电位器 R18;D5,调节灵敏度电位器 R19;D6,调节灵敏度电位器 R20。A A 4、4-图14 一路红外线探测系统原理图调试灵敏度:1.调节其四路寻迹的的电位器(调节其灵敏度以适合其环境)具体调试方法如下:先用手握住小车离地,左右晃动,从左到右第一对红外对管离开黑线时,中控板指示 D3 灯应会亮。当红外对管进入黑线时,中控板指示D3红灯应会灭,调节中控板R17使其工作 在上述状态。同理,调节其它三对探头,使其正常工作。2.对应顺序:第二对红外对应灵敏度对应指示灯为中控板

24、 第三对红外对应灵敏度对应指示灯为中控板 第四对红外对应灵敏度对应指示灯为中控板图15探头测试2. US-100超声波测距模块:US-100超声波测距模块可实现 04.5m的非接触测距功能,拥有2.45.5V的宽电压输入范 围,静态功耗低于2mA,自带温度传感器对测距结果进行校正(温度会影响超声波的测距精 度),同时具有GPI0,串口等多种通信方式,内带看门狗,工作稳定可靠。外观如图16所 示,左图为正面,右图为背面,模块的尺寸为45mm*20mm*1.6mm。板上有两个半径为1mm 的机械孔。图16 US-100超声波测距模块主要技术参数:工作电压:DC 2.4V5.5V ;静态电流:2mA

25、 ;工作温度:-20+70度;输出方式:电平或UART (跳线帽选择);感应角度:小于15度;探测距离:2cm-450cm;探测精度:0.3cm+1%;UART模式下串口配置:波特率9600,起始位1位,停止位1位,数据位8位,无奇 偶校验,无流控制。接口说明本模块共有两个接口,即模式选择跳线(背面与电路板面垂直的两个引脚)和 5 Pin接 口(正面图中向下的5个引脚)。模式选择跳线接口:间距为2.54mm,当插上跳线帽时为 UART (串口)模式,拔掉时为电平触发模式5 Pin 接口:正面图中从左到右依次编号 1、2、3、4、5,功能如下表所示:1 号 Pin接VCC电源(供电范围 2.4V

26、5.5V)2 号 Pin当为UART模式时,接外部电路 UART的TX端;当为电平触发模式时,接外 部电路的Trig端。3 号 Pin当为UART模式时,接外部电路 UART的RX端; 当为电平触发模式时,接外部电路的Echo端。4 号 Pin接外部电路的地。5 号 Pin接外部电路的地。电平触发测距工作原理:在模块上电前,首先去掉模式选择跳线上的跳线帽,使模块处于电平触发模式。图17表明:只需要在Trig/TX管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声 波脉冲,然后检测回波信号。当检测到回波信号后,模块还要进行温度值的测量,然后根据 当前温度对测距结果进行校正,将校正

27、后的结果通过Echo/RX管脚输出。在此模式下,模块将距离值转化为 340m/s时的时间值的2倍,通过Echo端输出一高电 平,可根据此高电平的持续时间来计算距离值。即距离值为:(高电平时间*340m/s)/2。注:因为距离值已经经过温度校正,此时无需再根据环境温度对超声波声速进行校正,即不管温度多少,声速选择340m/s即可触发信号L号高电平循坏发出X个40k 11 Z脉冲模块获匍发肘崎接收的时间差療始的测距结果发射探头发测环境温度值模块启动温度传感器葛温输出回响信号根据坏境温度对测量结果进打校正输出;距离更准确温度校正,冋响电平宽度只与 距离有关与环境温度无关。图17 US-100电平触发

28、测距时序图串口触发测距工作原理:串口通信协议:波待率9临乩 起始位1悅 停止位叽数据位用/无济偶校验,无流押制触发信弓通过1、发送值5专发射探头发出仿弓IUH 1循环发!刖个4(IRH2脉冲模块获得发射号接收的时冊差模块蚪功温度传感器测温|聞最为前环境湿度值输出阿响信号I根据坏境隘度对测載結果进行校疋, 距离更准确I然后通过串口RMft出温度校止KL诃响电平宽度只坷距离有关,与环境温度无关。图18 US-100串口出发测距时序在模块上电前,首先插上模式选择跳线上的跳线帽,使模块处于串口触发模式。串口触发测距的时序如图18所示:在此模式下只需要在 Trig/TX管脚输入0X55(波特 率9600

29、),系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。当检测到回波信 号后,模块还要进行温度值的测量,然后根据当前温度对测距结果进行校正,将校正后的结 果通过Echo/RX管脚输出。输出的距离值共两个字节,第一个字节是距离的高 8位(HDate),第二个字节为距离的低8位(LData),单位为毫米。即距离值为(HData*256 +LData) mm。串口触发测温工作原理:串II通侑协议:波特率9600,起始位I位停止检1位I数拥位锻无奇偶校验无流控制触发信号模块启动温度 转感器测温输出回响信号图19 US-100串口测温时序在模块上电前,首先插上模式选择跳线上的跳线帽,使模块处于串口

30、触发模式。串口触发测温的时序如图19所示:在此模式下只需要在 Trig/TX管脚输入0X50(波特 率9600),系统便启动温度传感器对当前温度进行测量,然后将温度值通过Echo/RX管脚输出。测量完成温度后,本模块会返回一个字节的温度值(TData),实际的温度值为TData-45。 例如通过TX发送完0X50后,在RX端收到0X45,则此时的温度值为(0X45的10进制值) -45= 24 度。超声波测距模块主要用于实现智能小车及机器人壁障这一功能,其型号有很多,但从原 理上和使用方法上来讲大同小异,这我们的设计中采用US-100这个型号的超声波测距模块,主要是因为该模块本身具备温度校正功

31、能,在编写程序时较为方便。为了充分发挥超声波模块的作用,可给其配上一台舵机,使其能够实现多个方向的距离 感应。舵机:在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系 统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接 口。舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的 控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使 用得比较普遍。舵机是一种俗称,其实是一种伺服马达。图20舵机1)工作原理:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电 路,产生周

32、期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比 较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机 转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。2)舵机的控制:舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为 0.5ms2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这 样的:0.5ms0度;1.0ms45度;1.5ms90度;2.0ms135度;2.5ms180度;3)用单片机作为舵机的控制单元:用单片机可以使PWM信号的脉冲宽度实现微秒级的变化,

33、从而提高舵机的转角精度。 单片机完成控制算法,再将计算结果转化为 PWM信号输出到舵机,由于单片机系统是一个 数字系统,其控制信号的变化完全依靠硬件计数,所以受外界干扰较小,整个系统工作可靠。单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:首先是产生基本的 PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟 PWM 信号的输出,并且调整占空比。当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断 的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。这样既节省了硬 件电路,也减少了软件开销,控制系统工作效率和控制精度都

34、很高。开定时中斷改变定时时间输出曾脚取反运行就他中斷程序(中斷返回图21单片机控制舵机基本流程具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。用修改定时器中断初值的方法巧妙形成了脉冲信号,调 整时间段的宽度便可使伺服机灵活运动。为保证软件在定时中断里采集其他信号,并且使发生PWM

35、信号的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的 后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执 行一次这些程序,执行的周期还是 20ms。具体流程如图21所示。以上介绍的传感器可以保证智能小车完成循迹、壁障、走迷宫等功能,若想完成更为复 杂的功能,可以通过添加适当的传感器来实现,具体细节在未来系统扩展的在做介绍。前面,我们从硬件结构方面对智能小车做了一个较为全面的分析,但是以上所包括的所 有器件电路只能算作一个运行平台,其包含了要实现功能所需的所有物质实体,却缺少智能 系统所需的一个必要要素一“思想

36、”,没有“思想”谈何智能。这里所指的“思想”在电子方 面指的就是程序,要想让小车真正实现智能化,通过合理的程序来调动其各个部分协调工作 是必不可少的。下面我们就来谈谈程序方面的设计。四、程序部分:对于51系列单片机来说,程序设计一般使用汇编和 C两种语言。汇编语言接近底层, 在时序控制方面可以做到十分精确,但缺点是可读性差,不容易实现模块化;C语言虽然精确度上稍稍不及汇编,但在其他方面均优于汇编语言,所以目前除了时序要求非常严格的接 口驱动喜欢用汇编语言编写外,其余大部分越来越多的喜欢使用C语言。下面就以C语言作为程序编写语言,用模块化的思想设计智能小车各部分的程序。1小车基本运动程序设计:顾

37、名思义,该部分程序负责让主控部分协调小车各部分完成前进、后退、左右转向等基 本动作。这里要说明一下,一个模块可以理解为一项任务,大任务可以分解为若干个小任务,也就是模块可分模块,一个任务包含若干功能,一个功能在C语言中我们习惯用一个子函数来描述,所以可以这样理解,一个模块就是由若干个子函数构成的,整个系统也可以理解为 一个项目中最大的模块。硬件的连接方式会影响程序的编写,一般这种影响只局限于I/O 口的变动,也就是说改变硬件连接后一般只需要将程序中的 I/O 口变量做适当的调整就可以实现原先的功能。下面 我们参照图9,按照以下方式连接对小车基本运动程序进行设计,其他连接方式程序雷同。根据前面描

38、述,EN1 EN2为驱动使能端,若给其PWM输入,则可以通过一起一停,调 整起停所占时间比例的方式控制小车的运动速度。若要全速运行,只需直将使能端通过跳线 帽接在+5V上即可。下面的程序只是基本运动,所以采用全速方式。然后P1_0 P1_1接IN1IN2 P1_2 P1_3 接 IN3 IN4 P1_4 P1_5 接 P1_6 P1_7 接 IN7 IN8 IN5 IN6 ;左上电机接 驱动板子输出端(蓝色端子OUT1 OUT2 )、左下电机接驱动板子输出端(蓝色端子 OUT3OUT4 )、右上电机接驱动板子输出端(蓝色端子 OUT5 OUT6 )、右下电机接驱动板子输出端 (蓝色端子OUT7

39、 OUT8 )。则4个电机转向与单片机I/O 口输出关系如下表所示:单片机I/O 口输出电机运行状态P1 0=1,P1 仁0左上电机正转P1 0=0,P1 仁1左上电机反转P1_0=0,P1_ 仁0左上电机停转P1_0=1,P1_ 仁1左上电机刹停P1 2=1,P1 3=0左下电机正转P1_2=0,P1_3=1左下电机反转P1_2=0,P1_3=0左下电机停转P1_2=1,P1_3=1左下电机刹停P1_4=1,P1_5=0右上电机正转P1_4=0,P1_5=1右上电机反转P1_4=0,P1_5=0右上电机停转P1_4=1,P1_5=1右上电机刹停P1_6=1,P1_7=0右下电机正转P1_6=

40、0,P1_7=1右下电机反转P1_6=0,P1_7=0右下电机停转P1_6=1,P1_7=1右下电机刹停根据上表,做以下宏定义,方便后面程序的编写,具体如下表所示:宏命令功能#defi ne Left_moto_goP1_0=1,P1_1=0,P1_2=1,P1_3=0;左边两个电机正转(智能小车 左半部分前进)#define Left_moto_back P1_0=0,P1_仁 1,P1_2=0,P1_3=1;左边两个电机反转(智能小车 左半部分后退)#define Left_moto_Stop P1_0=0,P1_仁0,P1_2=0,P1_3=0;左边两个电机停转(智能小车 左半部分停止)

41、#define Right_moto_go P1_4=1,P1_5=0,P1_6=1,P1_7=0;右边两个电机正转(智能小车 右半部分前进)#define Right_moto_back P1_4=0,P1_5=1,P1_6=0,P1_7=1;右边两个电机反转(智能小车 右半部分后退)#define Right_moto_Stop P1_4=0,P1_5=0,P1_6=0,P1_7=0;右边两个电机停转(智能小车 右半部分停止)如此一来就不难给出智能小车的4个基本运动函数的流程及代码:1)流程:左侧电机正转; 右侧电机正转左侧电机反转; 右侧电机正转小车右转小车前进小车后退小车左转图22小车

42、基本运动流程图2) 代码:全速前进:void run(void)Left_moto_go ;Right_moto_go ;全速后退:void backrun(void)Left_moto_back ;Right_moto_back ;左转:void leftrun(void)Left_moto_back ;Right_moto_go ;右转:void rightrun(void)Left_moto_go ;Right_moto_back ;若要让小车完成某个动作,只需在主函数 MAIN 中循环调用相应的运动子函数即可,比 如让小车全速前进可实现如下:void main(void)while(1

43、)run();2.小车 PWM 运行程序设计:PWM 运行,简而言之就是通过让电机一转一停, 调整转停比来控制小车速度的运行方式。 通过前面的介绍可以知道可以通过向 L298N 芯片的 ENA 、ENB 端输入 PWM 信号来实现,缺点是会占用单片机的I/O 口。另一种方法是直接向IN端输出PWM的方法,比如结合前面的单片机I/O输出与电机运 行状态关系表,驱动端IN仁1 IN2=0时全速前进IN1=1,IN2=1时电机刹停,由此可以看出 先使小车处于某个运行状态,然后给 4个电机的其中一端输入一个 PWM信号,小车就会按 照占空比实现PWM运行。此方法的好处就是节省I/O 口资源,下面的程序

44、设计也基于此法。由于左右转向无需以PMW方式运行,与之前基本运动程序一样,所以该部分程序主要 针对小车的前进与后退进行设计,其均可分为三个部分:前进/后退函数;左右电机调速函数; 定时器0中断函数,具体如下:前进/后退函数:1)流程:确定左侧电机占空比; 确定右侧电机占空比确定左侧电机占空比; 确定右侧电机占空比开始左侧电机反转; 右侧电机反转结束左侧电机正转; 右侧电机正转结束图23小车PWM运行中前进/后退函数流程2)代码:前进:void run(v oid) push_val_left=7;/占空比调节变量0-9。9最小,0最大push_val_right=7;Left_moto_go

45、; Right_moto_go ; 一 一后退:void backr un(v oid) push_val_left=3;/占空比调节变量0-9。0最小,9最大push_val_right=3;Left_moto_back ; Right_moto_back ; 一 一该函数的功能主要是确定小车的当前运行进本状态,类似于初始化函数,不循环调用, 旨在给后面的PWM运行函数做运行前准备工作。左右电机调速函数:1)流程:开始N左侧电机是、否允许运行?开始右侧电机是 否允许运行?十右侧占空比变N 量 =预设值?左侧占空比变N量 =io ?结束j右侧PWM输入端输出1图24左右电机调速函数流程2)代码

46、:左电机调速:void pwm_out_left_moto(void) - if(Left_moto_stop) /左侧电机起停变量 一 一if(pwm_val_left=10) pwm_val_left=0; 一 一elseLeft_moto_pwm=0;Left_moto_pwm1=0; 一 一右电机调速:void pwm_out_right_moto(void)if(Right_moto_stop) /右侧电机起停变量 if(pwm_val_right=10)pwm_val_right=0; 一 一elseRight_moto_pwm=0;Right_moto_pwm1=0; 一 一该函

47、数负责给4个电机一端按照预设占空比进行PWM信号输出。定时器0中断函数:1)流程:图25定时器0中断函数流程2)代码:void timer。()in terrupt 1using 2TH0=0XFc; 1Ms 定时TL0=0X18;time+;pwm_val_left+;pwm_val_right+;pwm_out_left_moto();pwm_out_right_moto();该中断函数负责 PWM 信号输出所需的时间控制使用以上 3 个子函数便可完成小车前进与后退的 PWM 运行,通过占空比变量的不同取 值可以调整小车的运行速度。这里需要注意的是,在本设计中,前进时占空比变量越大,则 小

48、车向前跑的越慢,后退时则相反;运行停止变量在小车前进时只能起到预备停止的作用, 若要使小车完全停止需在一开始调用停止函数,而在后退时则可以仅通过停止变量使小车停 止。下面以小车 PWM 前进为例看看以上几个子程序是如何协调工作的。void main(void)TMOD=0X01;TH0= 0XFc; /1ms 定时TL0= 0X18;TR0= 1;ET0= 1;EA = 1;run(); /PWM ,调速前进while(1) /*无限循环 */ 3. 小车循迹程序设计: 所谓小车循迹,就是让小车自行顺着预先设置好运动轨迹前进,效果好像小车自己跟人 一样能够看到预设路线似的,但实际上有一部分小车

49、是和人一样用“眼”看,而另一部分小 车则是像蝙蝠一样用其它感官去“看” 。上面提到的“眼”实际就是摄像头,俗称电子眼,通常使用的是 CCD 光学传感器件;其 它感官则如我们前面提到的四路红外探测系统。电子眼的优点是定位精确,但后续数据处理 工作量较为庞大,为保持实时性,需要配套类似于 DSP 等高速运算型 MCU ,整体成本较高, 所以只应用于对精度有特殊要求的领域; 四路红外探测系统在精度上无法和电子眼相提并论, 但贵在其后续数据处理简单, 51 系列单片机就可以轻松胜任,整体成本低,能够胜任于一般 精度要求的系统。在本设计中循迹过程中的“眼”采用的就是四路红外探测系统,有关该系统的原理前面 已经做了详细介绍,下面主要进行小车循迹部分的程序设计。按照惯例,在做程序设计之前首先要将硬件部分连接确定下来。完成循迹功能首先要使 小车具备运动能力,这部分仍按照之前的接法,不用 PWM 运行方式,除此之外就是四路红 外探测系统了,这部分的接法如下(

温馨提示

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

评论

0/150

提交评论