王慧+华成
摘要:针对小车运行中因路面摩擦、机械结构等外界因素影响,运动路线出现偏移的问题,提出了闭环调节车轮转速的设计方法。系统使用Arduino控制板采集左右车轮转速,经过比例调节计算后对一侧车轮驱动进行修正,小车能实现两侧车轮同速运行,结果表明:基于Arduino控制的车速采集与反馈调节系统开发灵活,成本低,对基于算法的运动控制系统研究有一定推广价值。
关键词:Arduino;直流电机;PWM;PID
中图分类号:TP23 文献标识码:A 文章编号:1007-9416(2017)05-0196-02
An Arduino Car Design by Proportional Adjustable Speed Difference
Wang Hui,Hua Cheng
(JiangYin Polytechnic College,JiangSu JiangYin 214400)
Abstract:For the problem of the movement route offset which because of road friction、mechanical structure and other external factors during the car running,the design method of closed - loop wheel speed is proposed. The system uses Arduino to collect the left and right wheel speeds,after the proportional adjustment calculation, one side wheel drive is modified,car can achieve both sides of the wheel at the same speed,the results show that the speed acquisition and feedback control system based on Arduino control is flexible and the cost is low,It is of great value to study the motion control system based on algorithm.
Key Words:Arduino;DC motor;PWM;PID;
開环控制是简易小车常采用的运动控制模式,其优点是软件与硬件设计都较为简单,只需要由单片机产生驱动信号,再经H桥驱动电路即可实现小车运行,但缺点是在实际运行过程中小车不能根据外在因素变化及时对小车的运行姿态进行调整。如两侧电机传动差异性、车轮摩擦阻力、路面平整度等因素都会影响小车的运动姿态,小车不能及时修正偏差导致偏离预定轨道。
闭环控制是自动控制系统中另一种控制方式,是将输出量直接或间接反馈到输入端形成闭环、参与控制的控制方式,系统利用负反馈产生的偏差所取得的控制作用再去消除偏差,具有较强的抗干扰能力。无需人工干预便可以完成预期所要达到的目标,是一个集环境感知、规划决策、自动行驶等功能于一体的综合系统[1-4]。
本设计采用闭环控制方式,在传统小车驱动基础上增加了测速反馈装置,采用比例调节算法对小车驱动信号进行PID调节,使小车左右轮的转速一致,实现小车受外部因素影响产生的偏差能实时被修正,小车能有效的减少外部环境因素的干扰[5-6]。
1 系统整体设计
本系统设计基于Arduino核心控制,通过外部中断方式对编码器脉冲计数并计算出左右两侧车轮转速,单片机根据两侧转速差实时调节输出转速控制信号。系统设计框图如图1所示。
2 硬件设计
系统硬件主要包括核心控制电路Arduino板、小车电机驱动电路、车轮测速传感器模块。系统由7.2V大容量锂电池经各稳压模块向相应电路提供电源。
2.1 核心控制电路
Arduino是源自意大利的一个人机互动产品开发平台,它的出现大大降低了交互设计的门槛。Arduino的硬件平台包括基于AVR单片机的主控板及各种功能扩展板,扩展板利用主控板的I/O口实现数据的获取及输出。功能扩展模块包括按键模块、超声测距传感器模块、温度湿度传感器模块、RF无线传输模块及各类显示输出模块等[7],本设计中使用了电机驱动模块及测速模块。
Arduino较传统单片机开发优势明显,如本小车转速控制使用的PWM信号可由带有模拟输出功能的特殊数字口直接输出、车轮转速编码器脉冲易于采集等。本设计采用的是Arduino家族中性价比最高的UNO版本,该控制板数字口2、3脚是外部中断口,数字口5、6脚可直接输出占空比可调的PWM信号。
2.2 电机驱动电路
由于电机工作时电流远高于Arduino开发板I/O口输出电流,设计中采用驱动芯片L298N的双H桥电机驱动控制模块,该模块驱动电压范围为:+5V~+35V,驱动电流峰值可达2A。L298N驱动模块既可以用来驱动直流电机,实现直流电机的正反转控制及调速功能,还可以用来控制步进电机[8]。本设计用L298N驱动小车左右两个轮子的直流电机,通过小车左右直流电机状态组合实现小车的前进、后退、停止及左右转弯。L298N用于直流电机驱动的引脚逻辑关系如表1所示。
2.3 光电编码测速电路
为了实现小车的闭环控制,需要对小车左右两侧车轮的转速实时跟踪检测,光电脉冲编码器凭借其在价格和性能方面的优势一直是转速检测电路的常用器件[9]。光电脉冲编码器主要由码盘和光电检测装置构成,测速时码盘的透光区、不透光区分别用1和0表示。设定测量时间为1S,计取转速传感器发生的脉冲个数M(即频率),脉冲发生器每转输出P个脉冲,被测电机转速为V(r/min),则电机的实际转速值V=60M/P,由此可见电机转速的快慢和脉冲的频率成线性关系。设计中采用的单路槽型光电编码测速模块如下图2所示,测速模块的输出信号OUT经调整电路后输出至Arduino开发板,形成闭环系统。endprint
3 程序设计
程序设计的任务是按下小车前进、后退、停止键,使小车通过L298P直流电机驱动板驱动直流减速电机按照设定的PWM值运行。Arduino采集左右两车轮电机内侧编码器脉冲信号,并处理成电机转速信息,计算出两电机的转速差,根据转速差,进行PID比例调节以增大或减小右车轮电机驱动PWM值,从而达到左右车轮转速一致,左右两车轮转速值通过小车上数码管显示。
3.1 外部中断测量转速
为程序编写方便,且不占用CPU資源,设计时将左右两侧车轮的光电编码脉冲作为外部中断输入。在中断函数编写时,考虑到光电信号有可能受到外界干扰,因此在当2次中断之间的时间大于5ms时,才认为是一次有效计数,而当计时时间达到1s时,暂时关闭中断计数。本小车使用的光电编码盘是12个光栅,以左轮为例,计算速度及送数码管显示程序如下。
rpm1 =(float)count1*60/12;//小车左车轮电机转速
rpm1_HIGH=rpm1/256;//把转速值分解为高字节和低字节送显示
rpm1_LOW=rpm1%256;
3.2 比例调节算法
程序设计中的核心部分就是小车车速的PID比例调节算法,设左轮转速为rpm1,右轮转速为rpm2,右轮电机驱动PWM值为PWM_right,经过多次测试,比例系数在0.4较为合适,调节公式如表达式1所示。
PWM_right=(float)PWM_right+(rpm1-rpm2)*0.4 (1)
左右电机的转速差乘以比例因子0.4叠加到上一次PID计算得到的PWM_right,就得到了当前右电机PWM功率值PWM_right。如果左电机转速rpm1比右电机转速rpm2要低,则从算式中可以看到,会自动减小右电机功率值PWM_right,通过循环执行Arduino程序中PID调节,可以使两电机转速达到一致。
4 小车运行分析
实验用的是5V的直流电机,驱动电路L298n采用7.5V电源供电,当PWM=255(占空比=100%)时,测得电机转速(最大值)为264R/S,其他PWM参数条件下实验数据如表2所示。
通过对小车的调试运行,验证了本设计的比例调节控制算法运行达到预计要求,实现了自动调速功能。
参考文献
[1]张传真.Arduino无线视频监控小车设计[J].电子测量技术,2013,36(10):19-22.
[2]周赛赛.基于Wifi的无线视频监控系统研究与设计[D].西安:西安工业大学,2014:79-85.
[3]徐璐.智能小车设计[J].哈尔滨师范大学自然科学学报,2013,29(6):43-46.
[4]Richard Blum.Arduino 程序设计指南[M].北京:电子工业出版社,2015:203-208.
[5]姚汉.Arduino 开发实战指南--STM32篇[M].北京:机械工业出版社,2014:99-102.
[6]黄文凯.Arduino 开发实战指南--机卷器人[M].北京:机械工业出版社,2014:222-229.
[7]左义海创客从0到--基于Arduino设计[M].北京:北京航空航天大学出版社,2016:93-98.
[8]朱志强.基于MATLAB_Simulink闭环小车控制系统设计[J].现代计算机(专业版),2016,(28);49-52.
[9]吕云芳,等.基于C51高级语言程序控制的智能循迹小车设计与实现[J]实验室研究与探索,2015,34(3);142-145.endprint