南京师范大学电气与自动化学院 李彦伦 吴启宇 吴奕之 沈世斌
智能车以技术先进、功能强大、成本低廉、适用面广等优点,在多个行业、场合都得到了很好的应用;受道路、环境等多种因素影响,小车在爬坡、转弯等环节方面还有众多问题需要研究和解决。本文根据大学生电子竞赛“坡道行驶电动小车”的题目要求,设计了基于MSP430单片机为核心控制器的智能小车,可使小车根据图像信息和光电传感器数据,由线阵CCD传感器检测路径,自动检测弯道和终点线,由单片机处理后向舵机输出PWM波形,实现小车转向与停止;由编码器检测速度并反馈到单片机,经运算后进行速度控制,从而对行驶时间进行设定。通过实验,小车运行符合预期设想,较好的实现了自动循迹运行等功能,具有较好的实际应用价值。
随着计算机、电子等技术的迅猛发展,智能产品的研究与开发愈发受到人们的重视,智能化程度越来越高,智能车技术发展日新月异,在国防军工、工业生产、民用生活等领域有着重要的作用。智能小车,即常说的轮式机器人,它以电子技术为背景,综合了计算机、机械、传感器等多学科技术,在众多领域得到了广泛应用。能够替代人类在一些特定环境下工作,例如美国的“勇气”和“机遇”号火星探测机器人为人类探索火星做出了极大的贡献;智能车也应用于无人驾驶、自动货运等场合。
世界各国都高度重视智能车技术的研究,智能车技术也能反映一个国家综合技术的高低,我国在这方面也作了大量的研究和应用,并取得了相当不错的成绩,其应用正逐步渗入到工业和生活的各个层面,有利于提高生产效率、提升生活品质、减少人为失误。
实际应用中,路况、环境等情况多样,如坡度不同、转弯角度不同等,受其影响,小车在此类环节方面还有众多问题需要研究和解决。针对实际路况,开发自适应、自主循迹运行智能车很有必要,大学生电子竞赛“坡道行驶电动小车”的题目正切合了这一主题,本文为此作了一定的尝试。
大学生电子竞赛“坡道行驶电动小车”的题目要求设计制作一个四轮电动小车(含电池小车重量小于1.5kg),要求小车能沿着指定路线在坡道上自动循迹骑线行驶,小车必须独立运行,车外不能使用任何设备(包括电源),在指定带弯道、可变坡度的行驶线路上完成精确定点启/停;同时要求能够设定行驶时间,并自动控制小车匀速通过一定长度的行驶线路。
本文根据要求设计并制作了由光学传感器探测的坡道行驶电动小车。传感器包括线阵CCD、光电传感器、编码器,由线阵CCD传感器检测路径,经由MSP430单片机处理,运用经典PID控制,通过串口传输给驱动电路,输出PWM波,驱动电机运行,实现小车前进与运动,做到循线行驶。根据图像信息和光电传感器数据,检测弯道和终点线,由单片机处理后,向舵机输出PWM波形,实现小车转向与停止。由编码器检测速度并反馈到单片机,运算后进行速度控制,从而对行驶时间进行设定。
循迹小车系统采用MSP430单片机作为控制核心,连接的外围电路有TPS7333、TPS7350供电电路,TSL1401线阵CCD,ST188漫反射开关,mini1024绝对式编码器,PWM波控制的S3010舵机、380电机、130电机组成的这样一个系统。硬件设计的主要部分框图见图1所示。
图1 硬件设计框图
在完善硬件系统设计后,通过设计软件框架协调每个硬件模块,使其正常工作并实现既定的功能。软件设计主要包含循迹程序、速度控制程序、时间控制程序、PWM波程序等。
智能循迹小车的硬件系统主要包括以下部分:单片机MSP430、电源模块、电机驱动模块、传感器模块、电机等。
循迹小车车模整体分为两大部分,包括后轮驱动模块和前轮转向模块。底板使用亚克力板进行连接。底板需打孔固定其他部件,增加PCB钢板以增加强度并降低重心。后轮驱动模块采用3D打印构件,给轮轴、减速齿轮、电机、悬挂编码器设计合理安装位置和螺丝过孔;前轮转向模块由舵机、连杆组成;舵机采用立式安装。目前舵机安装主要有卧式安装和立式安装两种安装方式,卧式安装方式会使左右两边轮子连杆不等长,易造成舵机对左右两边转向响应时间不一样,所以使用较少;而立式安装方式具有负载力矩大,响应区间广,控制精度高的特点,故采用此方式。同时对前轮进行外倾和前向处理,以增加轮胎与地面接触面积,增加稳定性。
根据系统需求,需要配置3.3V、5V、7.2V、12V的直流稳压电源,其中3.3V给编码器、蜂鸣器供电,5V给线性CCD和光电管供电,7.2V给舵机供电,12V和5V共同给IR2104供电。电池电压(7.2V)经过一个稳压二极管给舵机供电,且舵机电压越高,反应越灵敏。每个稳压模块由一个TPS7333或TPS7350芯片、一个大小为10uf的电容与一个0.1uf的电容组成。
稳压模块具有过流、过压、电压反接保护功能,可以将7.2V的电池电压稳定到3.3V和5V。采用TPS系列稳压芯片可以固定输出3V、3.3V、5V等电压,内置集成的精密电源电压监控器可对稳压器的输出电压进行监控。该芯片低电平有效的复位信号脉冲宽度为200ms,在温度范围内固定输出型器件的误差范围为2%,输出电流最大500mA。电源模块图见图2所示。
图2 电源模块图
本设计采用四轮后驱小车,左后轮单电机驱动,前轮处舵机转向;右后轮的电机仅输出恒值PWM波,使电机无法反转,保证小车在坡道上不下滑。系统选用直流电机,直流电机力量大、调速范围广、动态特性好、传递函数较为简单,一个电机足以驱动小车运动。舵机具有较高的稳定性、控制简单、扭力大,根据杠杆原理,将转向传动杆连接在加长的输出盘的末端,可以在舵机输出较小的转角下,取得更大的前轮转角,提高舵机的响应的速度;但缺点是舵机转角有限,在车长较长、前后轮相距较远的情况下,转弯半径过大;故前后轮距离应尽可能缩短,并在底部加装PCB板提高车体强度,以减小转弯半径。
电机驱动电路设计使用了N沟道MOSFET LR7843和专用栅极驱动芯片IR2104组成的驱动电路。用LR7843 MOS管搭建H桥电路,配合使用IR2104控制MOSFET栅极导通,构成直流电动机可逆双极型桥式驱动电路。
LR7843导通时最大内阻仅为3.3mΩ,通过电流较大。由于流过电机的电流相对较大,在绘制驱动电路PCB时,通过MOS管的电路会做开窗处理,进行加粗。防止电流过大烧毁。驱动电路原理见图3所示。
图3 驱动电路原理图
单片机P3.5~P3.8给出PWM波,控制电机正转、反转与速度变化;P1.9给出PWM波,控制舵机,转弯时舵机采用PID控制,主要使用以下两个公式:
(1)err=target-measure(偏差=设定值-实际值)。
(2)out(控制量)=P*err+I*err的累积+D*(err-pre_err)。
在舵机中,err就是摄像头计算的中线与中线的偏差值,控制量则是舵机引脚的电压值,也就是舵机打角角度大小。比如都是单纯的P(比例)控制,假设target(设定值)不变,measure(实际值)小于target的情况下,舵机的P输出会使得err逐渐减小,并随之时间的推移趋近于0,理论上单纯的P控制是不会达到target的,然而现实中的系统是个连续的,但程序上控制是一个差分系统。
舵机会在保持上一个时间的状态直到下一个状态的输出,假设小车一开始是直线行驶,但中线在小车右侧,那么P输出会让舵机向右打角,越接近中线,舵机打角越小直到达到中心线。
直流电动机控制相对比较简单,对直流电动机而言,只需通过控制其两条电源线的电压就能实现对其旋转方式的控制。对直流电动机的调速也可直接通过调整其工作电压或者通过调节PWM波占空比实现。左后轮使用130直流电机驱动。电机转速可在200rpm至300rpm间稳定调节,电机加入压敏电阻抗干扰电路,可以过滤电机启动瞬间的尖峰电压,降低对控制器的电源干扰。配备1 : 48减速齿轮箱,速度控制更加稳定,适用于本实验的低速场景。并且增加1 : 4的传动齿轮,进一步降低速度,提高控制精度。
右后轮使用380直流电机。电机空载转速可达15000rpm,最大功率可达20W,动力强劲,在坡上可以提供足够的动力。缺点是转速过高,小车速度过快,易导致传感器误判丢线。所以仅用于避免反转,防止滑落。
本实验采用的传感器主要包括两个TSL1401线阵CCD和一个ST188漫反射开关,以及一个mini 1024绝对式编码器。
TSL1401CL线性传感器阵列由一个128x1的光电二极管阵列,相关的电荷放大器电路和一个内部的像素数据保持功能组成,提供了同时集成起始和停止时间的所有像素。该阵列128PPI,其中一个具有光敏面积3524.3μm2。像素的间距是8μm。操作简化,内部控制逻辑简单,只需要一个串行输入端(SI)的信号和时钟CLK。两个CCD的SI分别接单片机P0.8和P3.1,CLK分别接P1.6和P3.7。
两个CCD并排放置,镜头中心相距约1cm。线阵CCD一帧图像包含128位数据,每位数据是0-4095之间的值,表示当前像素的亮度值,颜色越暗,其像素值越低。首先对数据滤波,消除偏离过大的离散数据点,得到纯净的CCD数据。然后使用大津法动态计算阈值,进行二值化处理。然后搜索黑白交界线,计算黑色方块相对于传感器中心的位置。两个CCD前后放置,其中一个CCD位于黑块中间的白块时,使用另一个CCD的数据。两者均无有效数据的情况仅发生在黑白方块交替的间隔处,其持续时间相对于车辆运行速度而言可以忽略,因此延续上一次计算的黑块位置,以此获得连续的黑块位置信息,如此,可以做到循线行驶。
ST188漫反射开关由两个独立的器件发光二极管和光敏三极管组成,两个部件分别相当于反射模块和接收模块。ST188光电传感器循迹原理就是利用不同的颜色对红外线的反射能力不同,发光二极管发出光线,遇到不同颜色的物体,返回来的红外线光线强弱也不同。光电传感器接单片机普通IO口,主要用于检测终点线,既一条宽1cm,长5cm的黑线。
当舵机打角先增大超过阈值,后减小低于阈值,说明小车已经通过90°。之后,开启终点标志线检测。当线阵CCD计算出的黑线宽度大于阈值,或位于车身前端的光电传感器
检测到黑线,则发出运行终止信号,进入终止程序。由于线阵CCD位于光电传感器前方1cm左右,因此线阵CCD检测到终点标志线时,需要延迟一定时间再停止。两个传感器其中任一检测到终点线,则进入停止程序。
mini 1024绝对式编码器分辨率高。AB相正交输出256线、步进+方向输出512线、绝对式输出1024线;采用霍尔检测技术,抗扰性好。此外绝对式编码器抗抖动性好。增量式编码器存在抗抖动性差的问题,而绝对式编码器能够克服这个问题。
由于路程是固定的,所以可以通过控制车辆速度来控制小车运行时间,根据设定时间计算出所需速度,然后通过旋转编码器数据计算得出小车当前速度,然后通过经典增量式PID控制器调整电机PWM值,使小车运行在恒定的速度下,达到定时运行的效果。
本系统软件设计采用模块化结构,由循迹程序、速度控制程序、时间控制程序等组成。本文简要介绍主程序的设计思路,主程序流程图见图4所示。
图4 主程序流程图
开启MCU电源,系统各I/O口和外设初始化,随后进入定时和坡度设置界面,等待开始按键按下。按下按键后,开启总中断。
50ms一次的总中断分为3个时间片,时间片1读取线阵ccd、光电管、旋转编码器等传感器的数值,时间片2进行PID控制计算转向偏差、速度偏差及电机和舵机PWM输出。时间片3进行终点线检测。若检测到终点线,则立即停车,同时蜂鸣器鸣响1s。
小车实物图如图5所示,总共分为6个模块。1处为线阵CCD模块,用于检测路面信息;2处为漫反射开关模块,用于检测终点线;3处为舵机模块,用于小车转向;4处为编码器测速模块,用于检测小车速度;5处为电机驱动模块;6处为单片机控制模块。
图5 小车实物图
调试中,在设定不同时间的情况下调整坡道角度下,记录实际运行时间和小车运行情况,结果如表1所示。
表1 小车运行结果
本文设计并实现了基于MSP430单片机和光电传感器的智能循迹小车,该系统结构简单、功耗低、可靠性高,解决了循线行驶的问题,能够在一定坡度的情况下稳定运行,可以手动设定时间,误差在0.5s以内且能够匀速行驶。
结束语:智能车正逐步进入我们的生活,对人们的工作、生活产生了极大的影响,不断改进和完善智能车技术意义重大。本文设计的智能循迹爬坡小车基本实现了预期功能,虽不尽完善,但总体设计方案简单、运行可靠,具有一定的参考价值,为进一步探索智能车设计和应用提供了一定的研究基础。