双轮载人平衡车设计完整教程之调校测试篇

双轮载人平衡车设计完整教程之调校测试篇

实验及路测结果
6.1 硬件测试
6.1.1车体与元件安装
车体采用的是精钢打造的船型包厢,车体机械部分的安装及重量分布,直接影响到小车的平衡性能。拿起螺丝准备安装的一刻,瞬间傻眼了,全是型号各异的六角螺丝,限于手上工具有限,只是草草把电机,电池固定住在相应的位置。载人平衡车使用的是电动车电瓶供电,组装成半成品时候已经不下30Kg质量了。如图6.1.1所示,车体只是组装了一部分,这样方便给系统上电及对电路板的测试,至此,组装告一段落。
在这里插入图片描述

图6.1.1 车体图片
6.1.2 STM32主控板测试
主控MCU选择的是STM32F103C8T6芯片,具有64Pin引脚,各个引脚之间的间隙为0.254mm,曾一度想采用工业PCB打样以提高电路板稳定性和具有更好的阻抗关系。受限于时间关系,最终决定使用手工腐蚀铜板印制PCB电路板,所以在焊接和测试上倍加专心。首先用万用表测量电源VCC3.3V与GND两端,看看是否处于短路、断路、通路状态,如果板子电源和地短路了,使用万用表测量时会发出滴滴滴的响声。此时要做的第一件事就是仔细观察板子的各个电源引脚与引线是否短接在一起,然后通过万用表的辅助逐个检查并修正。测试核心板无短路,无断路后,给它+3.3V供电,板子上的电源指示灯瞬间亮了,各元器件无发热、冒烟状态,说明电路供电系统正常。然后在MDK5.1软件编写好跑马灯程序,并在设置好J-LINK相关变量及芯片选型后将程序通过J-LINK下载进核心板测试GPIO是否正常工作。起初,过于激动,忘记将启动模式选择引脚BOOT0,BOOT1对地短接,导致下载程序失败,并提示无法检测到STM32芯片,将这俩引脚对地短接后,成功下载跑马灯测试程序,板子软硬件测试宣告成功。

6.1.3电机驱动板测试
电机驱动电路板实验测试。是硬件系统调试的最关键的一个方面,它决定了自平衡车带负载、过流过压、急刹急停这些重要的性能,电路板不允许有任何一个地方的失误,毫无疑问,笔者将画好的PCB文件发至工厂打样采用工业板并在VCC_36V,GND主干道,电机输出接口这几条线路进行镀锡处理。确认焊接的板子无误后,为了安全起见,只用了两个电瓶串联24V供电。在按下开关的一瞬间“啪”的一个元器件直接炸了。立马松开开关后发现是耐压值45V的反向保护二极管炸了,原来由于心急将其焊接反了,换上新的二极管重新上电,电源指示灯依旧没有亮。迅速的断开开关,触摸到电源通路前端的100Ω/5W的功率电阻发烫的厉害,上电时间也不过30秒,这要是实际工作起来,后果不堪设想。再次上电,用万用表测量其两端电压为33V之高,而LM317芯片15V输入端电压为2V左右。断电后对照着如图6.1.3分析其原因。如果二极管D1短路,那么36V电压进来会直接加在R1两端,换了新的D1上去后重新上电后电源指示灯亮起来了,说明现在电源是通路的。用万用表测试36V,15V,5V,3.3V各个电源接口,发现LM317芯片发热的厉害,而15V输出引脚,实际电压值为17V左右。这应该是压差过大导致的LM317芯片高发热,效能低,遂找了一个200Ω/2W的功率电阻替换掉之前100Ω/5W的电阻,重新上电测得15V输出引脚实际电压14.99V左右,LM317芯片几乎没有出现发热现象,非常完美。根据常识可知,如果电机两端一高一低有较大压差,则电机就会转动,但万用表测得两端分别对地电压为12.2V,两端压差为0.02V,显然这说明IR2101S芯片Vs引脚输出为高电平,查阅其数据手册得知该状态是正确的。把编写好的带死区互补PWM波电机测试程序烧写进核心板,连接好主控与驱动的线,上电发现电机并没有像自己预期的那样会转动起来,摸了下电机连接线,电源线并没有发热。测得电机输出两端状态依旧和没烧写程序前有任何变化。因为带死区互补PWM波电机测试程序是用示波器观察过的,波形很完美,可以排除软件的错误。百思不得其解,断电继续观察硬件电路设计,并查找相关资料,在原理上没有发现错误,但实际测试的时候却没有任何反应。这一阶段是最煎熬的时刻,一步步排查,电阻,电容,IR2101S芯片。两周过后,无果,此时已是4月下旬,我冒着风险做了一个大胆也是承上启下的关键决定——修改了电机驱动的方案。是的,我起初并不是很了解半桥驱动器与高端低端栅极驱动器之间的区别,都是驱动MOS管的栅极,所以之前图方便使用了手头上的IR2101S芯片。后面了解到IR2104S这款芯片内置了520纳秒的死区时间,超过600V的耐压值,专为驱动电机而生,于是对原有的H桥电路做了简单的元器件替换工作就再一次的发板到工厂打样,这一次还特地的加了光耦隔离器件做隔离,之前第一版并没有隔离。拿到第二次开发的板子焊接完毕检查电路系统后,迫不及待的把程序烧写进单片机,测得电机两端电平依旧相等,都为高。但是可以确定的是电路板是OK的了,两次结果一致。原因是IR2104S驱动芯片是不需要带死区PWM波控制的,用普通的PWM波控制即可,于是之前的4路带死区互补PWM波改为4路普通PWM波,烧写进单片机,电机瞬间转动起来,测得两端压差为24.2V,至此电机驱动终于告一段落。
在这里插入图片描述

图6.1.3 电源通路
6.1.4编码器电路测试
旋转正交磁编码器电路原理相对简单,但是在从原理到PCB板子调试完成过程中还是出现了不小波折。全英文的芯片数据手册,看了许久仍不明其理,刚开始凭着自己对这款芯片的理解,将Prog引脚直接连接到地,然后将VDD3V3与VDD5V连接在一起,A_LSB_U,B_Dir_V引脚用两个排针引出。对电源通路做简单测试确认无误后即安装在电机转轴上开启电机测试。打开串口助手,设置好波特率、奇偶校验位候并没有出现自己理想中的转动脉冲的数据,甚至连数据也没有。这款芯片笔者只用到了其中正交编码模式,不需要对其进行编程,没有任何数据输出,毫无疑问是硬件电路除了问题。于是倒回去啃读晦涩难懂的数据手册,查找芯片正常工作时各引脚的电平状态,发现在使用增量输出模式下Csn片选引脚应该给予一个500ns的低电平或者永久下拉到地来解锁增量输出模式。于是第二次做板时把Csn引脚直接接到GND引脚上,再次上电观察串口助手输出了如图6.1.5所示的一系列毫无规律的数据,很明显这并不能作为电机转轴实时转速的参考值。考虑到Csn从高电平到低电平的尖峰脉冲时间为500ns,遂将Csn片选引脚通过2.5KΩ的电阻下拉到地。再次上电,用示波器观察,波形完美,如图6.1.4所示,串口助手测得数据稳定、精确如图6.1.6所示。
在这里插入图片描述

图6.1.4 示波器测得波形
在这里插入图片描述

图6.1.5 未下拉前编码器数据 图6.1.6 下拉后编码器数据
6.2 软件测试
我们理想的情况是在倾角为0时刻,速度为零,并且车身保持直立,图6.2即为车模控制参数的整定。这些参数的调整需要遵循角度、速度、转向的顺序,在确定各参数极性正确下,才能进行下一个参数整定。
在这里插入图片描述

图6.2 车身控制参数
6.2.1角度环PD参数整定
角度控制包含P、D两个参数。比例相当于传统倒立摆的回复力,它所产生的效果必须大于重力加速度才能使得车身保持直立。首先,确定比例值的取值范围。考虑到控制电机所用的PWM波频率为20KHz,即3599代表满占空比。当P值为360的时候,说明车身倾角为10°时占空比为100%,显然实时不现实的,试想,驾驶人稍微倾斜一下身体,车子即高速的前进或者后退,即使车子能平衡,站在上面的人也难以适应这高速的响应。而过小的P值不能抵消重力场所带来的影响。所以,先假定一个值P=100,D=0;可以观察到车体短时间内在一个大约50cm范围内来回摆动随后倒下。因为车体没有出现往哪边倒,车轮就加速往哪边转动的情况,说明我们P值极性是正确的,只是这个比例值太小而不足以维持车身的直立。尝试着将设定P=200,理论上说,此时此时PWM波占空比已经超过55%了,足以抵消重力加速度所带来的影响。上电可观察到车身来回摆动的范围缩小了,且摆动频率加快,直立的趋势更加明显。继续增大比例值至300,此时车体发生了剧烈的抖动,在电机驱动下,比例值过大会导致系统发生共振现象。在确定使车体直立的最大比例值P=300情况下,我们引入微分控制来一直电机的抖动。微分控制就相当于单摆系统中单摆受到的阻尼力,可以有效的抑制车身的共振。通过串口助手观察MPU6050输出的陀螺仪原始数据,最大值不会超过4位数。设定D=0.1,旋转其中一个车轮,另一个车轮会以相同的速度、方向跟随旋转,说明D值极性是正确的。继续设定D=0.1,并将比例值设定为P=300,小车共振现象减小,并且来回摆动的范围进一步缩小至30cm,保持直立的时间加长。用手轻推车身,发现车体有些许轻微低频抖动现象。继续增大微分值到P=0.3,此时车体来回摆动的幅度在20cm之间,保持30秒左右的时间便往一个方向倒下。继续增大微分值为P=0.5,此时车身出现强烈的高频抖动,难以控制,但是其摆动的幅度则进一步缩小。为了减小对电机损伤,将角度闭环控制这一环节的比例微分参数分别设置为剧烈抖动时值的60%:P=180,D=0.3即可。表6.2.1为角度闭环控制参数整定过程中车身摆动的幅度范围,直立时间,以及相应的PD大致的参数值,因为测试次数较多,下表所列为系统变化较大时刻所选定的值,“/”代表抖动剧烈或者时间过长为了保护电机而没有做测试。

表6.2.1 角度闭环控制参数
第几次 比例值§ 微分值(D) 摆动范围(cm) 直立时间(s)
一 100 0.1 +50~-53 5
二 101 0.2 +48~-50 7
三 102 0.3 +47~-48 7
四 103 0.4 +45~-46 8
五 104 0.5 +42~-43 /

第几次 比例值§ 微分值(D) 摆动范围(cm) 直立时间(s)
一 181 0.1 +40~-43 20
二 182 0.2 +38~-30 25
三 183 0.3 +37~-38 35
四 184 0.4 +35~-36 /
五 185 0.5 +32~-33 /

第几次 比例值§ 微分值(D) 摆动范围(cm) 直立时间(s)
一 300 0.1 +30~-33 /
二 300 0.2 +28~-30 /
三 300 0.3 +27~-28 /
四 300 0.4 +25~-26 /
五 300 0.5 +22~-23 /

6.2.2速度环PI参数整定
由于姿态传感器机械安装的误差以及信号的漂移,经过上述角度闭环控制调节后的车身不会精确的停留在某个位置上,它会朝着前进或者后退的某个方向加速倒下。在这个过程中,对于车体重力加速度和陀螺仪的零点参数(通常我们称之为机械中值,一般在-2~2之间)进行多次调整,可以逐渐消除车体往某一个方向加速倒下的现象。但是,随着陀螺仪积分数据的漂移,车体经过多次调试后还是会发生加速移动的现象,那就需要速度闭环控制来达到在倾斜角为0°时候,车体不会朝着某一方向加速倒下并且能长时间保持直立的效果。速度控制采用的是常用的速度闭环PI控制器。我们是利用STM32正交编码模式对编码器进行四倍频M法测速的,通过串口助手打印的数据可知左编码器与又编码器速度相加的绝对最大值为1000左右,出于对整车系统反应速度的考虑,我们假定当速度偏差达到最大速度60%的时候输出电机的最快速度,而3599代表满占空比,可以大致估算比例值:P=3599/(1000*60%)=6。为了测试P值的极性,先把上述调试好的角度闭环控制先屏蔽掉,设定P=1,D=1/200,尝试着旋转其中一个轮子,另一个轮子会以相同方向加速转动直至到最大速度。这正是我们所想要的正反馈效果,说明P值极性是正确的。之前我非常困扰,在学习自动控制原理的时候,对于偏差我们一般使用负反馈来减少或消除以达到尽可能的小偏差的目的。但日常生活中我们随处可见一种现象,当我们用一手指顶着雨伞或者棍子尖端时,我们总是需要不断的移动手指,并且方向与物体倒下的方向一致才能勉强保持直立,如果以反方向而行,那将会加速物体的倒下。所以整车系统中,我们采用的是速度正反馈。接下来我们将之前调试好的角度闭环控制打开,并将速度闭环控制的参数设置为:P=1,I=1/200;小车的速度控制很弱,根本无法让速度恒定下来。设定P=3,I=3/200,这时候小车的速度没有出现理论中速度响应提升的情况,变化与之前相比没有多大变化。进一步的设定为P=5,I=5/200,因为比例值已经接近理论计算值的84%,以为小车摆动频率应该会很快甚至高频抖动。上电观察发现并没有出现这类情况,倒是速度响应确实加快,而且摆动幅度很小已经接近能长时间直立的状态了。于是,便大胆的将比例值P提高到15,完美!上电后车身直接不动了!关键是车身并没有倒下也没有朝着任何一个方向行进。直勾勾的立在地板上,尝试用手轻推车身,在很小的摆幅下车身很快恢复了平衡直立,几乎达到静止的状态。至此,先暂定角度闭环参数为P=180,D=0.3,速度闭环参数P=15,I=15/200为理想值。表6.2.2为速度闭环控制P,I参数整定的大致实测结果(“/”代表抖动剧烈或者时间过长为了保护电机而没有做测试)。

表6.2.2 速度环参数整定及结果
第几次 比例值§ 微分值(D) 摆动范围(cm) 直立时间(s)
一 1 1/200 +30~-33 30
二 3 3/200 +28~-30 32
三 5 5/200 +22~-24 45
四 15 15/200 +3~-3 /
五 20 20/200 +1~-1 /

6.2.3转向环PD参数整定
控制方向这一方面,使用的是通过单片机ADC采集单圈10K电位器上时刻变化的模拟值作为参考值传入Bias=gyro-(Volt-50)中。利用陀螺仪的Z轴补偿,将电位器实时变化的模拟值作为转向偏差,构成简单的比例-微分控制器。当10K电位器位于中间值时,Volt即为50,因为设定转向偏差(Bias)为0;所以此时刻小车不做旋转方向。这里对比例及微分值参数不是很明显,所以在P,D参数整定上有比较大的范围可以选取,实测效果都比较不错。但是经测试发现,如果将Volt值放大10倍来控制,那么小车的旋转灵敏度会有所提升,并且控制精确度也有所提高。平衡车的直立,速度,转向测试皆已告一段路,只有实际的上路测试,才能对PID参数值更好的优化修改。

6.3 实况路测
鉴于载人平衡车已经能做到直立,转向的控制,但是骡子是马,总得拉出来溜溜。只有真正的上路测试,才能真实的了解车身实时运行状态,以便对其作出更佳的优化。如图6.3所示,开机后,我们先踏出一只脚在脚踏板上来回的感受平衡车的回复力,再换另一只脚在另一边做上述操作。熟悉它的恢复力度之后在有辅助的情况下尝试着双脚踩踏上去,人们心态比较激动,往往刚站上去就开始倾斜身体来操纵车身前进后退,这是非常危险的。正确的做法应该是站上去的时候,我们要尽可能的保持自身的平衡与车身平衡的协调性,当站立一两分钟后逐渐找到感觉,便可以尝试着向前轻微倾斜一点角度,感受车子的扭力。切勿脚动人不动,而应与车身高度的协调统一。行进过程中,每当倾斜一定的角度之后,车体几乎是在同时间就做出了相应的响应,但是总感觉速度跟上去了,力量却稍有不足。通俗的说就是反应速度与电机扭矩不在同一水平线上,这回造成人身体往前倒,而车子却无法跟上来的节奏。以往的工程经验来看,很明显这是角度闭环中的比例值参数设置过低导致的最终电机输出的扭矩不足。笔者尝试着将P值从180增大到200,重新上电测试发觉依旧没什么改观,还是很软;大胆的将P值继续增大到240,结果依旧,找来周围伙伴来试车大家感觉一致。这不得不引起笔者的重视,如果将P值设置超过260,那么理论上估计电机此时应该会发生强烈的震动,而车体也会随之共振,更严重者甚至会造成电机与驱动的烧毁等不可逆的损害。好奇心的驱使下,我将P值进一步提高到260,上电的一瞬间,电机即产生剧烈的抖动,迅速的将开关断开,但还是晚了一步,电机驱动板上其中有一路4根MOS管烧毁了。这无疑是当头棒喝,80V,80A,10mΩ的大功率MOS管居然一瞬间烧毁,理论上说这搭建的H桥驱动力应该是绰绰有余的,更谈不上会烧管子。至此,实测阶段暂时搁浅并寻找解决方法。
在这里插入图片描述

图6.3 实况测试
6.4 硬件电路改进
电机回复力软弱,这绝对不是电机的原因,350W的带金属减速齿轮的大扭矩有刷电机,足以载重200Kg的质量。首先可以将电机自身扭矩不足这个因素排除。查阅多方书籍并与同学探讨之后,可以确定以下几点相关信息:电压决定电机的速度,电流决定电机的扭矩大小,而电池作为一种储能元件,决定的是续航。那么针对上述电机软弱无力而响应速度却迅速的问题,可以把原因锁定在是由于电流不足导致的电机输出扭矩不足的情况。因为实测之前已将电池充满电,可以排除是电池输出电流不足的原因,那只能是电机驱动的问题了。在同学的帮助下,做出了以下几点分析:
(1) STM32主控板输出的PWM方波信号上升沿与下降沿变化是否处于零延迟状态,是否有较多毛刺;
(2) 此PWM信号经过光耦隔离出来后衰减多少,波形是否依旧完美;
(3) 经过光耦隔离出来后的PWM波通过半桥驱动器IR2104S放大后流经滤波电容出来的方波信号是否还完美;
(4) 没有给大功率MOS管安装散热片。
之前笔者因为实验条件的原因并没有用示波器观测过其真实波形,而是匆忙焊接好板子就开始驱动电机转动,这是不可行的。针对以上问题,逐步检查。用示波器测得STM32主控板子出来的PWM波信号是非常完美的,高低电平之间的跳变几乎是零延迟的直线上升或者下降;经过高速光耦隔离后的PWM方波信号,因为光耦隔离电路输入与输出IO口经过300R的上拉电阻引出,所以信号衰减的非常微小,几乎可以忽略不计。很明显,问题应该是出现在IR2104S半桥驱动器放大这里。示波器实测后观察到经过放大后的波形毛刺较多,且矩形脉冲波类似于斜坡上升、下降的趋势,这会导致MOS管无法完全导通,内阻急剧增大,发热量上升,对MOS管的损耗非常大,这也是为什么很多人把MOS管一而再再而三的换成更高级的MOS管之后依然烧管的原因。另外,这一批IR2104S是从某宝网址购买的货源,不敢保证其是否原装正品,其次在自举升压电容选取上不应该选择使用钽电容。钽电容的漏电率比陶瓷电容大,这也是造成波形具有较多毛刺的主要原因。把10uF钽电容换成1uF高压陶瓷贴片电容后,用示波器观测器波形,毛刺明显减少,且波形较之前更加接近于完美的方波信号;尝试着将高压陶瓷贴片电容换成1uF的CBB快速恢复电容,测得H桥在工作时的自举升压电压值非常稳定,放大后输出的方波非常标准。MOS管的性能得以有效的发挥,电机输出的扭矩较之前提升好几个档次,完全做到随动随到的效果。小小的几颗电容在人们印象中更多的是隔直流通交流、滤波、去耦、旁路等作用,殊不知器件的选型也同样重要,可以帮助我们设计出更加严谨,使用的电路。

7 结论与展望
生活无处不智能,平衡车是当今智能时代的产物。人们赋予它另一个名称:思维车,确实,当人体大脑发送向前后倾斜的指令时候,我们的肢体便会做出相应的动作去完成这个指令操作;思维车亦是如此,当姿态传感器感应到人体重心发生变化时刻,内置中央处理即迅速的做出相应判断并输出控制指令去驱动执行机构完成相应的动作来维持系统的平衡。在这点看来,我们称之为摄位车,智能车也不为过。在当今人口爆炸,交通堵塞的社会,人们的出行方式必将发生质的变化。更加迷你型、便捷、炫酷实用、无污染的平衡车既可以健身娱乐,又能切实的解决中短距离的交通问题,也由此得到了广大群众的拥护和喜好。在理论研究方面,自平衡车作为高度灵敏、强耦合、非线性的不稳定物体,具备深远的研究价值和意义。是学习、研究和验证自动控制原理的绝佳选择。经过三个月的马拉松式学习与实践,双轮载人平衡车系统相对于传统的自动控制实验实现了以下基本功能和创新点:
(1) 可实现基本的原地平衡站立、前进后退;
(2) 平坦道路上可安全、平稳行驶;
(3) 低速行驶状态下可安全通过路面减速带;
(4) 最大爬坡20°;
(5) 最大负载80KG以上,续航20KM,最高时速10KM/H;
(6) 高亮前后车灯,方便晚上行驶;
(7) OLED实时倾角、编码器、主板温度信息显示;
(8) 超速自动报警;
(9) 倾角过大,转速过高或失控等,发出相对应声光提示;
(10) 自适应多种路面变化、重心变化,自动调整车体姿态,具有良好的鲁棒性和抗干扰能力。
自动控制系统的研究任重道远,双轮载人平衡车设计目前只是实现了其作为一辆思维车最基本的功能。基于无线控制、机器视觉的最佳路径规划等方面的研究还未能来得及学习和探索。未来朝着智慧化发展,平衡车也是如此,用“镜”看世界,透“芯”来学习。

版权声明:本文为CSDN博主「gujunquan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gujunquan/article/details/121601166

生成海报
点赞 0

gujunquan

我还没有学会写个人说明!

暂无评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配

stm32cubemx+HAL+串口接收中断

stm32cubemxHAL串口接收中断 在cubemx配置完串口和global interrupt后需要在keil中添加如下代码。 第一步:在main函数中添加接收中断标志位开启函数 HAL_UART_Receive_IT