基于单片机的智能小车设计

摘 要

当今社会,无人驾驶、人工智能、物机联网一直是热门话题,让人工智能小车在事先设定好相关指令的情况
下进行有效循迹避障代替人们去工作的一直是我们追求的目标。计算机技术的蓬勃快速发展,智能化的技术水平的日
益快速提升和现代人工智能技术手段的不断运用,势必需要我们在每一个环节保障万无一失,尤其是最具代表性的
工业机器人智能小车循迹和避障模块。因此设计出一种能够循迹避障的高效率的智能小车控制系统具有重要的科学
意义以及能使我们的日常工作生活更加安全方便也能创造出巨大的经济价值。
  本次设计设计出了一种可以实现自动循迹自动避路障和红外遥控功能的智能小车基于STC89C52RC单片式微型车
载计算机作为智能控制的核心,使用反射式光电传感器RPR220检测地面黑线来自动实现智能小车循迹,使用红外线感
应器来侦测到前方出现的各种障碍情况并自动作出最适当的反应来躲避各种障碍物,使用车载红外遥控功能来自动完
成对前方车辆前进、倒退、转向等相应操作。本设计设计的小车能实现小车检测地面黑线沿黑线行驶以及躲避障碍
物和能够进行遥控控制的功能,达到设计目标。
关键词:STC89C52单片机;红外避障;循迹;遥控

第一章 绪论

1.1 课题背景及研究意义
    从人类第一个大型工业机器人的出现开始至今,机器人技术的迅速发展目前已广泛渗透到机械、电气、冶
金、交通运输、宇航、军事科研等领域。近年来机器人们的科学智慧水准在日益地提升,它们已经飞速地在改变着了
我们人类未来的一种生存方式。人类生活在一个不断地探索、改变、认知着自然界规律的历史过程中,生产出能完全
取代一般人的劳动能力的智能机器将始终都是未来人们追求的理想[1]。在今天的社会中,人工智能的迅速发展、智
能水平的提升以及人工智能的广泛运用,我们一定能够保证所有的工作都是安全的。特别是工业机器人中最典型的
智能小车跟踪与避障控制模块,对技术和精度的要求也越来越高。目前,世界上许多国家都在努力开发智能机器人。相信,随着人工智能的广泛使用和推广,会大大提高我们的工业生产效率以及安全保障,提高人们生活水平

1.2 国内外发展现状
  我国国内最初对于智能小车的研究可以追溯到《国家中长期科学和技术发展规划纲要》,在国内,各研发机构和
企业对智能化小车也投入了非常大的心力开展研究,清华大学研究所最初在主动避障,车载微电脑,汽车导航等多
个领域中开展了有关研究。吉林大学从30年前开始研究开发智能小车,并顺利研发出图像识别全自动引导小车,这
类小车系统就是自动引导系统。在我国起到了带领引领作用。沈阳一家新松机器人公司推出一款嵌入式机器人产
品,该机器人在当时可以说已经非常智能化,具有很多种功能,例如具备教育、娱乐等。该机器人身高0.8米,体重
25公斤,不仅能行走还能躲避障碍物[3]。
  目前国外对于智能小车循迹避障的研究探索,应该要从美国开始,1954年美国的一家公司研发了第一台智能车辆
引导系统,从此就开始了对智能小车的研究,同时引起了他国对智能小车研发的浪潮。作为智能小车最显著的特点便
是智能不需要人为操控,1974年瑞典的Volvo公司发明了一个可以替代传统意义上的运输车辆,便是AGVS即自动判别
方向的搬运车系统,具备了智能小车本质特征没有人控制。现在国外发展最好的便是飞思卡尔公司,该公司举办的
智能小车比赛采用了非常先进的摄像头收集地面黑线信息,这也对芯片的运算速度要求十分高[4]。
1.3 课题的设计目的
    本设计的主要目的就是设计一个以单片机为核心的智能小车,主要实现循迹、避障及遥控功能。利用安装
固定在行驶车辆的前方位置的车载红外光电传感器,收集到道路黑色线路情况信息,传递到单片机中,然后再根据
车载单片机输出的控制状态信息,由电机驱动控制模块来驱动控制电机进行控制小车的循迹,并且能够在遇到监测
记录到的各种障碍物时,做出最适当有效的安全避障对策。同时,可以通过无线红外遥控控制小车做出相应指令。
1.4 设计的基本要求
  以单片机为核心,设计一种智能小车,它的主要功能是跟踪地面黑线行进和简单的障碍规避。该系统采用安装
于小车前端的红外反射型光电传感器,采集路面上的黑线位置信息,并将其输入到单片机中,然后再由单片机来传递
控制器信息,由电机驱动控制模块来驱动直流电机来完成车辆的全自主的沿地面黑线行驶,并且可以在前方道路左面
或者右面出现障碍物的情况下,采取相应程度的安全回避对策来躲避障碍物。在实现沿地面黑线行驶和躲避障碍物
等功能的基础上,可进一步加入遥控、蓝牙、图像处理等附加功能。小车主要组成结构及功能如下:
小车主要分为5个模块
1.主控制模块:基于STC89C52单片机实现各个模块传输的数据处理,输出指令等功能。
2.电机驱动模块:主要控制小车电机的启动和停止,使小车在电机的配合下达到小车行进,停止,转弯等动作。
3.循迹模块:利用智能小车前面的红外线反光感应器,实现追踪黑线,使车辆沿着黑线行驶。
4.避障模块:利用智能小车前面的红外线感应器,探测小车周围有没有障碍物,并将信号发送给单片机,使其
能够躲避障碍物。
5.遥控模块:用遥控器控制车辆向前、向后、向左、向右、向后移动。
6.电源模块:将4节1.5V的干电池串联起来,并将其电压降至5V,以供单片机和其它芯片使用。

第二章 总体方案设计与论证

2.1 主控系统设计与论证
  由于STC89C52单片机成本较低,市场资源丰富并且功能较为齐全,因此,整个小车系统中的控制单元核心部分是
通过一个STC89C52单片机模块来独立完成单片机对整个小车系统的控制功能,以达到满足本次系统设计开发的最基
本需求。STC89C52是由STC公司自主研发生产的具有一个8K可编程Flash存储器的超低功耗高性能CMOS八位微控制
器。它使用到了最经典的微处理器MCS-51内核,并且对系统进行了更大规模上的改良,使之完全具备了许多传统的51
微处理器内核所缺乏具备的特性。STC89C52具有8K字节闪存,可以存储512字节数据的存储器RAM,32位I/O口线,内
带一个4K字节可擦可编程只读存储器(EEPROM),拥有T0、T1两个16位通用定时器和一个16位高级定时T2,可以通
过串口进行下载。由于采用了STC89C52单片机,它和8051系列单片机指令控制系统完全兼容。该设计方案不仅简化
了软件设计,而且电路设计简单,价格比别的单片机低,而且本设计所需的计算速度与精度也与STC89C52单片机相
匹配[5]。因此,本设计以STC89C52单片机为主要控制单元。
2.2 电源模块设计与论证
  方案一:采用12V蓄电池,降压之前先给电动机进行供电,再将电压降压和稳压到5v推送到单片机中给单片机进
行供电。蓄电池容量大,可多次重复充电,输出电压也不会发生变化,但因蓄电池体积大、重量大,不宜用作本小车的电源模块。所以没有选择该方案。
  方案二:采用四节1.5v干电池,直流电机由四节1.5V的干电池驱动,由稳压芯片组成的稳压电路将电压降低到5V
,为微处理器和周边逻辑电路提供电源。由于四节干电池的体积和质量都很小,适合作为本次设计小车的驱动电
源。因此本方案是切实可行的,并将其作为小车的驱动电源。
2.3 遥控控制模块设计与论证
  目前市场上主要有两种远程控制方式,一种是红外遥控,另一种是无线电遥控。
  方案一:小车遥控采用无线电遥控。无线电远程遥控技术是一种利用几兆赫兹乃至几百兆赫兹频率的无线电波控
制远程物体远距离控制技术。其最大的特征是没有方向。它的信号辐射范围可以达到几十米,也可以达到上千米。
但它有容易受到电磁干扰的缺点。
  方案二:小车遥控采用红外遥控。红外线遥控利用遥控器内部的编码芯片,将遥控器按键上的信息转化为0、1二
进制编码,再采用红外线发射,最后由小车上的红外线接收头接收并将其解码,传送至STC89C52单片机。单片机对
所收到的编码信息进行识别,并对小车进行相应的控制。
  红外线遥控器利用红外线进行控制,是一种无接触的无线遥控技术,其抗干扰性能力强、传输可靠性高、能耗
低、成本低、易于实施等明显优点,在许多家用电器中得到了广泛的应
  以上两个方案都可以用作此次小车的远程遥控控制,尽管无线遥控的覆盖范围远超红外遥控,但红外遥控原理
更加简单,成本低,功耗低。本设计设计的小车通过红外遥控器即可达到设计要求,因此将其作为小车的远程遥控
控制模块。
2.4 电机驱动模块设计与论证
2.4.1 电机模块设计与论证
目前比较常用的小车驱动电机主要有两种选择:
  方案一:小车采用脉冲电机作为驱动装置。脉冲电机的转动角度可以精确地确定小车的运动距离、位置,脉冲电
机可以将收到的脉冲信号进行角、线位移的转化,通过对电脉冲信号的传播频率和脉冲数目控制进而控制电机的转
动速度和转子停留部位,与负载没有关系。另外,因为这种关联,脉冲电机只会产生周期性的误差范围,不会产生
累积的偏差。
  这就使其在转速、位置等方面的应用变得十分简便。与直流电动机相比,步进电动机可以实现小车的准确定位
和停车,步进电机也可以方便地控制车辆的速度和位置,通过输入不同的脉冲信号即可控制车辆的速度,同时制动
性能也很好。然而,脉冲电机不同于一般的直流电机。一般来说,它需要双环脉冲信号和功率驱动电路,涉及多方
面的知识,所以很难很好地利用脉冲电机[7]。经过综合分析比较决定放弃此方案。
  方案二:小车的动力驱动选择了直流电机。直流电机可以实现电能和机械能的转化。固定部件(定子)和旋转部
件(转子)是直流电机两大组成部分,固定部件(定子)主要的功能是形成磁场。当电机工作时,旋转部件产生旋
转力矩和感应电动势,同时该部件是直流电机电能转为机械能的关键部件,当直流电通过转子线圈时会带来安培
力,直流电机内部有一个永磁体,当转子转动到与磁场方向平行时进行下一次转动时受到的磁场方向将会改变,此
时转子线圈由于电流方向改变但受到的洛伦兹力不变从而可以控制电机可以一直朝一个方向旋转。
  在小车驱动中,使用直流电机来驱动小车行驶,其主要原因是直流电机的动力大于脉冲电机,根本原因在于直
流电机体积小、重量轻更容易装在小车上同时使用简便。而且,使用直流电机更加容易,转速的调整仅需要电机内
部的减速齿轮控制,所以它的正、反转、停止操作都是由单片机控制驱动芯片来实现的[8]。
经过对比选择方案二的直流电机作为小车的驱动电机。
2.4.2 电机驱动芯片设计与论证
  方案一:利用继电器来给电动机开关进行切换控制,利用继电器给电机开关之间的信号切换控制而自动调节驱动
小车电机的额定转速。这种检测方法所用的检测电路结构相对也比较紧凑简单,但由于继电器的响应速度慢,使用时
寿命较短,易老化引起机械损伤,安全性相对不高。所以该方案不可行。
  方案二:L298N是一种高压、高电流、双全桥驱动器,每片L298N可以同时控制两台直流减速电机,在4.5V到46V
的电压范围内,可以达到为2A的额定电流,同时具备过热自动关闭及电流回馈式检测。L298N采用主控制器的I/O输
入端,通过电源直接调整输出电压,实现电机的正向、反向转动以及停转。由于L298N具有结构简单、操作简便、驱
动能力强、输出电流大、发热量低、抗干扰能力强、可靠性高、工作性能好等优点。
因此,在综合考虑后,选用L298N型驱动芯片作为小车的驱动芯片。
2.5 循迹模块设计与论证
  方案一:用光敏电阻来检测地面黑线。光敏电阻的阻值会随着外界光线的明暗变化进行相应改变。因此,小车在
探测到黑线时和小车在白色地面上行驶时,光敏电阻的阻值是有很大区别的。通过比较器对光敏电阻阻值的变化实
现高低电压信号的输出,当单片机收到比较器传来的电平信号时,便会调用相关转向子程序即可控制小车行驶方向
的改变,使小车进行相应转向、前进以及停止的操作,最终达到小车沿着黑线行驶的目的。不过,该方案并没有太
好的效果,因为光敏电阻有很高的误判几率,并且会被外界的光线和周围的环境所干扰,变得非常不稳定。因此,
放弃这个方案。
  方案二:利用红外反射型光电检测器检测地面黑线来实现对黑线的循迹。RPR220是由高发射功率的红外线光电二
极管和高灵敏的光电晶体管构成的集成反射式光电检测器,它的发射器为砷化镓红外LED(发光二极管),接收器为
高灵敏的硅片光电三极管。它是根据光的反射折射原理,当红外线照射在白色的纸张上,会有更多的反射,而红外
线照射在黑色的物体上,反射量会相应减少,因为黑色会吸收光线。因此,可以判断地面黑线轨道的走向。该方法
采用红外线探测,这样外部可见光对接收信号的影响较小,利用红外反射型光电探测器对黑线的边缘进行红外探测
,然后用比较器将探测到的信号进行比较和反相,然后送入到单片机主控系统进行处理。该探测电路结构简单,工
作性能稳定,而且具有良好的应用前景[9]。
经过测试分析,方案二可以在任何环境下稳定运行,可以适应各种强光或者黑暗环境。因此选择方案二。
2.6 避障模块设计与论证
  方案一:采用超声波避障。利用超声波原理对小车前面的障碍物进行探测。首先,超声波发射机将超声波发射到
小车前面,当超声波在小车前面传播的时候,如果前方碰到障碍物,超声波就会反射回来,而超声波采集设备采集
到的超声波时,采集设备就会产生一种电信号并将其转化为高、低电平,高电平则表示前方有障碍物,单片机则会
启动相应的避障程序,控制电机驱动模块驱动电机进行相应运转,最终使小车躲避前方的障碍物。但是,超声波容
易被周围环境所干扰,并且搭建线路也比较复杂,再加上地面对超声波的反射,会影响到整个系统对前方障碍物的
识别。
  方案二:采用红外线避障。在小车前方两侧装上红外避障传感器,用以检测前方的障碍物。通过红外LED发出的
红外线能够被障碍物反射来检测障碍物,光敏三极管吸收被障碍物反射的红外线从而导通进而输出一个低电平信号
给单片机,当单片机收到传来的低电平信号时便会调用避障子程序控制电机驱动,使小车进行左转、右转、停止、
前进的动作避开遇到的障碍物达到避障目的。反之,没有障碍物时光敏三级管便不会导通输出一个高电平信号给单
片机,单片机便会调用前进子程序使小车往前行驶[10]。
  红外避障相较于超声波避障,就是可以通过调节可调电阻来调节检测障碍物的距离,并且红外避障不易受到外
界环境的干扰,而且其线路也相对简单,因此在本设计中采用了方案二来实现小车的避障功能。
2.7 系统总体方案及框图
  本次设计小车的控制核心采用STC89C52单片机,小车整体由红外遥控部分和小车主体各模块组成。控制各模块
运转的单片机核心,用于接收红外线信息的红外接收头,用来检测地面黑线使小车沿地面黑线行驶的循迹模块,用
来躲避小车前方两侧障碍物的避障模块以及用来驱动小车行驶的电机驱动模块构成了小车的主体部分。红外遥控部
分则由一个遥控器组成,该遥控器包含了按键、对按键信息进行编码的编码芯片和一个发射脉冲编码的红外LED。系
统总体设计框图如下图2.7所示:
在这里插入图片描述

图2.7 系统总体设计框图

第三章 各模块硬件电路设计

本设计的小车的硬件部分主要有:红外遥控模块、循迹模块、避障模块。红外遥控和单片机控制核心以及电机
驱动模块。各模块设计如下。
3.1 红外遥控发射器模块
3.1.1 红外遥控模块的工作原理
     红外遥控是一种利用红外线传递控制信号的远程控制设备。红外遥控占用空间小,价格低廉,操作方便在
日常生活中十分常见,各种家用电器的遥控板都用到了红外遥控原理。不过红外遥控也有相应不足,就是传播距离
短,会受到空间的限制,最多只能在7米之内控制,而且不能被物体阻挡。但是,本次设计的小车遥控装置使用红外
遥控便足以满足工作要求。
  小车的红外遥控系统分为两块,分别是红外发射和红外接收。红外发射便是遥控器内的编码芯片将按键信息编
码后通过红外LED发射出去;红外接收则是红外接收头将接收到的编码信息解码并传输给单片机,其中对接收到的编
码进行解调这一步骤尤为关键。其原理图如图3.1所示。在这里插入图片描述

图3.1 红外遥控系统原理图
  HT6221编码芯片将对按下的键位信息进行编码并通过遥控器上的红外发光二极管将编码后的信息发送给红外接
收头,红外接收装置对键位信息进行解译后传输到单片机中,单片机对这些解译的码位信息进行识别并判断是“0”
还是“1”,根据接收到的不同的码位信息,最终单片机便会使用对应的转向、前进、停止子程序对小车进行控制,
达到按键功能对应的小车操作最终实现对小车的遥控控制[11]。
3.1.2 HT6221编码芯片简介
    HT6221是遥控器内部的编码键位信息的编码芯片,是Holtek公司生产的可以在低电压的环境下进行工作的
遥控编码芯片,该芯片采用了PPM编码方式对按键信息的地址码和数据码进行编码,最多可以对32个按键(K1~K32)
信息进行相应编码。
HT6221的各引脚说明如下表3-1所示。
表3-1 HT6221引脚说明
  
引脚号 引脚名称 描述
0 AIN 低8位地址码输入
1-8 C1-C8 键盘列控制
9 LED 按键指示灯
10-13 R1-R4 键盘行控制,高电平有效
14 DOUT 串行数据输出引脚,38KHz发射频率
15 VDD 1.8V-3.5V
16 DT 最重要数据位(DT)代码设置
17、18 X2、X1 455KHz振荡器输出,455KHz振荡器输入
19 VSS 接地
  编码芯片编码按键信息主要是依靠对于位“0”和位“1”的识别,由于“0”和“1”只有高电平时候的脉冲宽
度不相同,所以编码“0”和“1”的串行信息码便需要根据高电平的脉冲宽度进行编码,把脉冲宽度为0.565ms、高
低电平脉冲宽度间隔0.56ms、周期为1.125ms的波形表示“0”;把脉冲宽度为0.565ms、高低电平脉冲宽度间隔
1.685ms、周期2.25ms的波形表示“1”。波形图如图3.3所示:在这里插入图片描述

图3.3 遥控码的“0”和“1”波形图
3.1.3 红外遥控发射器
在本次设计的编码芯片为HT6221编码芯片。电路原理图如图3.4所示。
在这里插入图片描述

图3.4 HT6221电路原理图
如图3.4中所示当LED指示灯(D1)发光时便代表遥控器上有键位按下,此时HT6221编码芯片对该键位信息进行编码
并调制后通过红外发光二极管(D2)将脉冲信号发送给小车上的红外接收头。
按下的按键不同代表的对小车的控制命令不相同发出的脉冲编码也不相同
3.2 单片机控制模块
3.2.1 单片机模块电路
    本次设计采用了以STC89C52单片机来作为小车的控制模块,STC89C52单片机是一种损耗低、工作效率良好
的半导体8位微处理器,生产于宏晶科技公司。该单片机的内核为MCS-51内核但却不同于常见的51-MCU,在该基础上
做了很多创新,拥有常见的51-MCU许多没有的功能,并且它和8051产品引脚完全兼容,该单片机功耗低、性能优
越、价格低廉、无法解密为众多控制应用系统提供了高效的解决方案。具有以下功能标准:拥有8K 字节闪存和可以
存储512字节数据的存储器RAM,并且内带4K字节可擦可编程只读存储器(EEPROM),拥有T0、T1两个16位通用定时
器和一个T216位高级定时器三个16位定时器和INT0、INT1外部中断,拥有通用I/O口32个。单片机本身、复位电路以
及振荡电路等部分构成了STC89C52单片微控制器的最小系统[12]。原理图如下图3.5所示。在这里插入图片描述

单片机引脚功能分配表如下表3-3所示。
表3-3 单片机引脚功能分配表
  
引脚 功能分配
P0.0-P0.7 外接上拉电阻
P1.2-P1.5 控制电机驱动
VCC 接+5v电源
GND 接地
P3.4-P3.5 接左,右两侧避障电路
P3.6-P3.7 接循迹电路
RST 复位电路
3.2.2 复位电路
    为了在单片机程序出现故障时恢复单片机的初始化设置了单片机的复位电路。当程序运行故障时单片机会
处于锁定状态,该情况下通过上电复位使单片机恢复初始状态重新工作。单片机的复位引脚为RST脚,当单片机的复
位引脚脚保持两个CPU周期以上的高电压然后再从高电压转为低电压便可以实现单片机的恢复初始化的操作。本次小
车单片机使用的是高电平复位也就是上电复位,在单片机接上电池打开开关后单片机便会直接恢复到初始状态。电
阻在下接GND,电容在上直接接电源高电压便是上电复位电路。当单片机通电的一瞬间,电路中电容由于电流经过对
电容充电造成电路短路,使单片机的RST脚电压极巨升高,之后电源通过电阻接地以及电容充电充满后便没有电流通
过电路畅通,使单片机的RST电压开始降低到低电平,达到单片机的复位功能。
  如图所示,当打开电源一瞬间,电流进入到电容给电容充电,此时因为大电流通过使电容两端电路短路,因此
复位端为较高电压导致单片机恢复初始化,之后随着电池电压不断进入电容,充满后因为达到电池的电压,电容内
部没有电流流过,电容两端不会短路,单片机RST端的电压降低到低电压,单片机恢复正常工作。
3.2.3 振荡电路
    STC89C52微控制器(单片机)通过外部接入为单片机提供时钟信号的定时元件晶振和两个电容器,构成了
微控制器的振荡电路,XTAL1,XTAL2作为单片机振荡电路的输入引脚和输出引脚。通过利用外接的晶振产生的压电
效应在振荡电路中产生自激振荡。晶振一般都为石英晶片构成,微控制器的振荡电路由两个外接时钟引脚与外部晶
振和两个微调电容构成。
  本设计采用了11.0592MHZ双脚无源晶振,2个30 pF电容。双脚无源晶振主要用于提供STC89C52微处理器系统中
的基本时钟信号,两个30 pF的电容具有并联共振的功能,若该振荡电路没有电容并联共振便会由于无回路停振,使
电路无法正常工作。
3.3 红外接收器及解码
     红外线接收器其内部构造一般包括红外检测晶体二极管、光电放大器、削波器、比较电路、滤波电路等。
检测和接收红外线的晶体二极管收到红外线后会把信号传给光电放大器和削波器,削波器控制它的振动幅度在相应
的范围内,之后通过滤波电路对信号进行滤波,最后由比较电路将该信号恢复到原始波形输出给单片机。通常市面
上常见的红外接收装置都包括输入端、输出端、导地端。通过使用VS1838B来遥控器发送的编码信号。
  为了避免信号干扰,在红外接收头的电源一端加入一个电容,该电容通常大于22μf,通过加入滤波电容可以使
信号不受红外接收头内的光电放大器产生的增益影响,可以使收到的信号不会失真。
  VS1838B为红外接收头,接收电路里有一个滤波电容C用过滤信号,P3.3引脚为接收头的输出引脚也是单片机的
输入引脚,接收头收到信息解码后便从该引脚输入到单片机中,该引脚直接接入单片机的INT1脚。
  红外线接收头解码的重点在于如何鉴别位"1"及位"0",从前文可知位"0"和位"1"都在低电平0.56 ms处起始,只
有高电平的宽度不一样。因此,我们依靠判断高电平宽度来识别位"0"和位"1"。从0.56ms低电平延时后读到的电平
若为低电平则为“0”,若为高电平则为“1”。因为"0"的高电平脉宽为1.12ms,它们的低电平脉宽为0.56ms所以延
时必须取在高电平脉宽和低电平脉宽之间,这样才能确保读到的码位为"0,所以延时取高电平脉宽和低电平脉宽相
加的一半0.84ms,否则就会读到下一位码的高电平导致码位判断错误。
  在按下按键的瞬间,键位信息被进行编码后通过红外发光二极管发射出去,之后VS1838B红外接收装置对收到的
信号码进行解译,随后便将解译后的码位信息传送到微控制器中,STC89C52微控制器的 P3.3管脚接收后完成码信息
的判断从而使用对应子程序实现遥控控制。解码流程图如图3.11所示。在这里插入图片描述

图3.11 红外遥控器解码流程图
3.4 电机驱动模块
  小车的驱动模块使用的L298N驱动芯片控制两个直流电机。直流电机通过其内部的定子和转子来实现能量的转
化,将电池提供的电能转化为使小车运动的机械能。
     驱动直流电机工作的芯片为美国ST公司生产的一款驱动芯片L298N。现在市面上最常见的L298N封装形式为
15脚的15-Multiwalt封装,该驱动芯片是一种可以接收较高输出电压的驱动芯片,当它在高电压的工作电压下可以输出2A以上的电流。一片L298N芯片就可以同时驱动控制两个直流电机进行工作。在芯片过热时会自动切断停止工
作,还可以进行温度的反馈和检测。本设计用的L298N的芯片本身就有5V电源,因此无需额外的5V电压输入。L298N
内部的5V电源将会L298N供电,以确保L298N供电稳定不会导致芯片烧毁。L298N可直接控制直流电机,使其能进行正
向反向旋转,操作简便、稳定,也能提供驱动直流电机的大电流。
  L298N芯片内部含有两组H桥,可以接受TTL逻辑电平信号VSS,直接接入单片机管脚,VSS端通常接入电压为4.5
v~7v。同时L298N芯片内部逻辑电源可以使部分内部逻辑电路在低电压的环境下工作[13]。

L298N各引脚的编号及功能和内部逻辑如下表3-4和图3.13所示。
表3-4 L298N引脚编号与功能
  
引脚编号 名称 功能
1 电流传感器A 在该引脚和地之间接小阻值电阻可用来检测电流
2 输出引脚1 内置驱动器A的输入端1,接至电机A
3 输出引脚2 内置驱动器A的输入端2,接至电机A
4 电机电源端 电机供电输入端,电压可达46V
5 输入引脚1 内置驱动器A的逻辑控制输入端1
6 使能端A 内置驱动器A的使能端
7 输入引脚2 内置驱动器A的逻辑控制输入端2
8 逻辑地 逻辑地
9 逻辑电源端 逻辑控制电路的电源输入端为5V
10 输入引脚3 内置驱动器B的逻辑控制输入端1
11 使能端B 内置驱动器B的使能端
12 输入引脚4 内置驱动器B的逻辑控制输入端2
13 输出引脚3 内置驱动器B的输出端1,接至电机B
14 输出引脚4 内置驱动器B的输出端2,接至电机B
15 电流传感器B 在该引脚和地之间接小阻值电阻可用来检测电流

调试驱动程序时依照下表3-5,用程序输入各部分功能所对应的值,即可实先相应的操作。
表3-5 电机驱动A/B的控制逻辑
  
输入信号 电机运动方式
使能端A/B 输入引脚1/3 输入引脚2/4
1 1 0 前进
1 0 1 后退
1 1 1 紧急停车
1 0 O 紧急停车
0 X X 自由转动
  L298N的IN1、IN2、IN3、IN4四个输入引脚分别接STC98C52单片机的P12、P13、P14、P15引脚来接收单片机
的控制命令。L298N驱动芯片VS引脚接经过稳压器稳压过的电压提供电机电源。OUT1、OUT2、OUT3、OUT4四个输出引
脚分别接入两个直流减速电机来直接控制电机的运转。L298N芯片的VSS脚必须接5V的逻辑电平。通过接入单片机的
P12、P13脚控制左边直流电机转动方向,P14、P15脚控制右边电机的正反转。
3.5 循迹模块
  主要通过小车前方RPR220红外反射型光电传感器来检测地面的黑线。当小车前方的红外探测器位于地面黑线上
时,红外LED发出的红外线被地面上的黑线吸收,因此反射不了红外线不能被探测器给探到,此时,接收端的光电三
极管不能导通,电压为零,将输出一个高电平信号给相连的比较器同相端比较,之后输入到单片机中一个低电平,
此时单片机控制模块会对输入的低电压信号进行判断,从而进行处理调用相关子程序驱动电机转动,实现小车的转
弯移动,使小车中部位于黑线上;当小车中部位于黑线上时,循迹模块两侧的红外LED发出的红外线便会被白色地面
反射,被探测器检测到时,三极管便会导通输出一个低电平,通过比较电路输出一个高电压信号给单片机微控制
器,此时单片机便会调用子程序对电机进行正转控制,小车便会一直直行。循环下去,小车便会沿着地面上画的黑
线一直前进而不会跑出黑线轨道[14]。
  为了减少外界环境对循迹探测地面黑线的干扰,在传感器的基础上还加入了比较器电路,通过调节比较器上的
滑动变阻器可以使循迹模块探测黑线时更加稳定,当微弱外界光被光电三级管吸收时,只变阻器的阻值够大,仍然
会输出低电平信号,这样就可以避免使循迹模块受到外界光线的干扰,但检测黑线的灵敏度也会随阻值的增大而降
低。
循迹过程中小车的信号采集与电机工作状态如下表3-6所示。
表3-6 信号采集与电机工作状态
  
左灯 右灯 电机1A 电机1B 电机2A 电机2B
左转 1 0 0 1 1 0
右转 0 1 1 0 0 1
前进 0 0 1 0 1 0
停车 1 1 0 0 0 0
3.6 避障模块
    避障模块的红外避障原理与跟踪器的基本原理一致。两个红外障碍物检测电路分别置于小车前左侧和前右
侧。当红外障碍物检测电路发出的红外线被障碍物反射回来时,输出端输出一低电平信号,再将信号传给比较器进
行比较。如果低于设定的电压,则将高电平的信号输出到单片机。单片机通过前方左右两个红外障碍物检测电路输
出的信号来判断障碍物从而调用避障程序来控制电机运转,当左边出现障碍物,小车会右转弯,当右边出现障碍物
小车会左转弯。红外线避障可以利用调节比较器的可调电阻来调节小车躲避障碍物的灵敏度[15]。
障碍物检测电路如下图3.18所示。在这里插入图片描述

图3.18 障碍物检测电路

第四章 系统软件设计

本次设计主要是利用STC89C52单片机来控制小车各模块的工作运转,对于本次设计的智能小车,除了设计小车
的硬件部分,便是编写控制各模块工作的软件程序,件编译准确才能实现循迹、避障、遥控三个功能。软件设计时
将整个程序分成了数个小程序模块并将其联系起来,使程序设计简单明了。
主要包含了综合程序、电机驱动程序、循迹子程序、避障子程序、遥控子程序。
4.1 系统总体程序流程图
  本次设计的智能小车系统的综合程序流程图如下图4.1所示。
在这里插入图片描述

图4.1 小车主程序流程图
    在图4-1的程序流程图中,可以看到一开始单片机先进行初始化,包括中断初始化以及各个功能模块的初始
化,随后数码管显示1单片机调用循迹子程序进入到循迹模式,沿地面黑线循迹行驶,之后判断数码管是否显示为
2,当显示为2时,单片机调用避障子程序,但小车前方出现障碍物是进行检测,控制小车进行左转或右转躲避障碍
物。如果数码管显示为3,则单片机调用遥控子程序,小车进入遥控模式,用遥控器控制小车。若出现错误则进行开
关电源进行复位,最后关闭电源结束小车运转。具体程序见附录1。
4.2 电机驱动程序设计
电机驱动程序流程图如下图4.2所示:在这里插入图片描述

图4.2 电机驱动程序流程图
  如图4.2所示,通过L298N来控制左右两个电机的转动方向进而控制小车的转向。当两个电机都正方向旋转的时
候,小车将会直行前进;当左电机和右电机都反向转动时,小车将会后退行驶;右电机的正向转动,左电机反向转
动时,小车将会向左转弯;左电机正方向旋转,右电机反向转动可使小车右;当需要小车停止的时候,便会调用停止子程序控制小车两个电机停转使小车停止运行[16]。具体程序见附
4.3 循迹模块程序设计
程序流程图见下图4.3。在这里插入图片描述

图4.3 小车循迹程序流程图
  小车循迹流程图如上图所示,通过在小车车前底部安装的RPR220光电传感器来检测地面上的黑线,使小车沿着
地面黑线行驶。通过对地面黑线的检测,小车底部的传感器会将检测到的黑线信息输入到单片机中,之后单片机调
用相应子程序来驱动电机控制小车驶向地面黑线。当左右灯都有信号时,代表发出的红外光被白色地面反射,此时
小车中心位于黑线上,单片机便会调用前进子程序控制电机驱动使小车前进;当左灯有信号右灯无信号时,代表右
边检测到黑线红外线被吸收,便会调用右转子程序控制小车右转;当左灯无信号右灯有信号代表小车左面检测到黑
线,便会调用左转子程序控制小车左转;当小车左右两个灯都没有信号时代表小车前面都碰到黑线红外线被吸收,
便会调用停止子程序使小车停下来[17]。具体程序见附录3。
4.4 避障模块程序设计
在这里插入图片描述

图4.4 避障模块程序流程图
  如上图4.4所示是小车的避障程序流程图,小车通过前左和前右侧的两个红外障碍物检测传感器检测障碍物。若
遇到障碍物单片机便会收到传感器传来的信号使用相应子程序控制小车躲避障碍物。当左右信号灯都不亮时代表没
有碰到障碍物,此时调用前进子程序;当左灯亮右灯不亮时,单片机使用右转子程序控制小车躲避左侧障碍物;当
右灯亮左灯不亮时,单片机调用左转子程序控制小车躲避右侧障碍物;当小车左右灯都亮的时候,单片机会先调用
停止子程序再调用后退子程序最后调用右转子程序控制小车绕过障碍物。具体程序见附录4。
4.5 遥控模块程序设计
如下图4.5所示,是小车遥控模块程序流程图。
图4.5 遥控模块程序流程图在这里插入图片描述

如图4.5所示是小车的遥控模块程序流程图,小车由遥控器控制小车行驶。遥控器上设立了五个按键分别可以控
制小车前行、倒车、左拐、右拐、停止五个操作,当用户按下前进键位的时候,单片机接收到遥控器发来的指令信
号从而调用前行子程序控制电机驱动模块驱动电机,控制小车前行;当用户按下后退键位的时候,单片机调用后退
子程序控制小车进行后退;当用户按下右转键位的时候,单片机调用右转子程序控制小车向右转;当用户按下左转
键位的时候,单片机调用左转子程序进而控制小车向左转;当用户按下停止键位时,单片机调用停止子程序控制小
车停止[18]。具体程序见附录5。

第五章 开发环境及系统调试

5.1 开发环境
    目前,主要用汇编语言和C语言对单片机进行开发,在本次设计中采用C语言来编译程序。使用模块化的程
序设计使系统的软件调试和优化更加方便,同时也更好理解本系统的程序设计。运用模块化的程序设计结构是程序
变得更加直观易懂。程序的主要模块有:主程序、驱动程序。
    C语言在程序设计中也被称作模块式编程。为有效地完成任务,必须把任务分解成独立的、相互关联的单元
模块,以简化任务使程序更加容易编写、检测和阅读识别。
    随着单片微控制器技术的不断开发,相应编程语言也在不断地发展,从最初的汇编语言发展到现在的高级
语言,开发单片机的编程软件层出不穷。Keil便是51系列单片机最方便也最为人所知的编程软件,Keil拥有C语言编
译界面,宏汇编界面等等,并且还能进行程序的仿真调试,这都依赖于Keil拥有一个一体化的开发环境uVision。掌
握Keil对单片机进行开发是十分重要的,Keil可以使用汇报语言编译程序,即使使用者不会C语言也能利用Keil的强
大的开发平台和功能齐全的编译工具编写程序[19]。
如图5.1所示便是Keil的软件编写界面。
图5.1 keil软件编写界面在这里插入图片描述

5.1.1 小车系统原理图设计
   在制作小车之前先用Altium Designer软件进行小车的原理图绘制,然后按照原理图制作电路板最后组装小车
各部分硬件以及连接电路。
  Altium Designer是澳大利亚的奥腾公司的制作的元件设计软件,Altium Designer拥有制作原理图、设计电路
板等等功能,使设计人员能够很容易地完成设计工作,从而极大地提高使用者电路设计的工作效率。利用 Altium
Designer软件对小车的原理图进行制作以及最终设计出小车十分关键[20]。本次小车的原理图便是依靠Altium
Designer软件进行绘制的,最终做出小车的成品。
如图5.1.1所示便是利用Altium Designer软件设计的小车单片机主控系统原理图。
在这里插入图片描述

图5.1.1  小车主控系统原理图
  小车其余模块的电路原理图设计如遥控模块、循迹模块以及避障模块都是用Altium Designer进行绘制的,具体
各模块电路原理图在上文第三章各模块硬件电路设计可以看到。
5.1.2 软件烧录
在软件烧录之前需要先往电脑上下载CH340驱动才可以往单片机里烧录程序。
  软件烧录第一步:先将下载器的TXD接单片机RXD、RXD接单片机TXD、GND接GND之后通过USB口连接到电脑上,然
后在电脑上安装并运行STC-ISP烧录软件;第二步:选择单片机型号以及选择下载线串口,之后打开写好的程序文件
进行下载;第三步:下载程序的时候将单片机上的开关关闭后再打开,之后程序便会下入单片机中[21]。
如图5.1.2所示便是STC-ISP程序烧录界面。在这里插入图片描述

图5.1.2 STC-ISP烧录界面
5.2 系统调试
  当把程序烧录进小车后,运行小车出现了一些问题。经过多次修改一步步完善程序解决出现的问题。在调试小
车的过程中主要发现了如下问题:
1.在调试小车运行的过程中,发现小车有时会跑出轨道。
  解决:小车跑出轨道可能是循迹探头的灵敏度过高,首先通过调节小车前方底部的循迹探头的电位器来调节探
头的灵敏度,当把电位器往顺时针方向转动时,灵敏度会降低,调完后发现小车运行正常了。
2.在调试过程中发现小车电机有时会不转动
解决:检查小车电机电路看是否有连接不紧密的情况,将线路连接紧密后,小车电机恢复正常运转。
  经过多次调试,小车烧录完程序后运转正常,可以沿地面黑线行驶,当前方碰到障碍物时会进行转弯避障,当
使用遥控器控制小车的时候,可以完成前进、后退、左转、右转、停止五个功能,基本实现本设计的设计任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值