目录
一:前言
二:调参过程
三:总结
一:前言
发现少了一节调参,今天补上,关于这个项目先说两句吧。
参数调节最好自己做个实物出来,慢慢调节。根据前面的PID理论部分的知识,慢慢体会一下各个参数在实际项目中的作用,这样才能真正学会PID。
关于平衡小车这个项目到这应该是最后一节教程了,后面会更新加入蓝牙的代码,有时间会画一版PCB,直接引出引脚,模块即插即用,比较方便。关于PCB教程就不出了,网上很多软件学习的视频,跟着画个板子就行了。这也不涉及到高频信号,所以比较简单。
另外下一个项目准备继续围绕平衡小车,做一个遥控手柄。遥控手柄也是为了下下个项目做准备。
其他不多说,开始调参。
二:调参过程
首先单独调节直立环,直立环调完之后调节速度环,最后转向环。每一环调节都是先调P,把其他项系数设置为0,找到P参数的合适值之后再调节其他参数。
1.先确定机械中值,上节已说过:
测量机械中值的方法(手动):
关闭输出,不让电机旋转,只采集角度值,并显示在屏幕上,观察其值的变化
将oled和mpu6050都连接好并调试通过之后,将采样的Pitch值显示在oled上。之后让小车轮子固定不动,用手沿电机旋转方向先逆时针(顺时针)慢慢推动小车上方,让小车直立,当小车从直立状态向逆时针方向倾斜时,看看屏幕上显示的角度是多少,之后同样的方法测顺时针,看看角度是多少,之后两值相加/2,得出的值就是机械中值。
2.直立环Kp:
作用:Kp增加回复力的响应速度,Kp过小,响应太慢,不能达到直立。Kp过大,会出现大幅度低频振荡。
只打开直立环输出(调节直立环需要将其他环都屏蔽掉,单独调节直立环)如果用的我的程序,你可以这样:
Balance_Pwm =balance(Pitch,gyroy); //===角度环//Velocity_Pwm=velocity(Encoder_Left,Encoder_Right); //===速度环PID控制 记住,速度反馈是正反馈,就是小车快的时候要慢下来就需要再跑快一点//Turn_Pwm =turn(Encoder_Left,Encoder_Right,gyroz); //===转向环PID控制 PWM_out=Balance_Pwm - Balance_Kp*Velocity_Pwm;//最终输出
1.先确定极性直立环极性很好确认,你只需要拿起小车观察两个轮子转向,沿电机轴倾斜小车,如果轮子也往那个方向转,不让小车倒下,说明极性是正确的,反之错误。
2.再确认大小Kp的值慢慢增大,直到小车左右摆动来回摆动,出现低频震荡(只有P参与作用时,摆动的频率不大)。
注意:在调节直立环的时候如果你的编码器反向或者是电机转向和程序不匹配的话,可能会和上面说的情况不一致,比如一个电机正转一个电机反转,这种情况一看就是电机方向和程序不一致,可以试试将控制正反转的两个引脚IN1和IN2调换下方向。或者是更改程序中的IN1和IN2的高低电平也行。如下图:
/**************************************************************************函数功能:赋值给PWM寄存器入口参数:左轮PWM、右轮PWM返回 值:无**************************************************************************/void Set_Pwm(int moto1,int moto2){ if(moto1>0) AIN2=0, AIN1=1; else AIN2=1, AIN1=0; PWMA=myabs(moto1); if(moto2>0) BIN1=1, BIN2=0; else BIN1=0, BIN2=1; PWMB=myabs(moto2); }
3.直立环Kd:
作用:Kd消除Kp过大带来的低频振荡。Kd过大,会出现高频抖动。
1.先确定极性将Kp = 0,调节Kd极性,提起小车观察两个轮子转向,沿电机轴倾斜小车,轮子也往那个方向转,不让小车倒下,说明极性是正确的,反之错误。
2.再确认大小调解大小时,需要加入刚才调好的Kp值,之后将Kd的值慢慢增大,直到小车左右摆动来回摆动,出现高频震荡(摆动的频率相比Kp有所增加)。
为什么加了Kd之后震荡频率变高?
可以参考第10小节加入和未加入kd调参的现象,加入Kd后,明显过冲变小。因为Kd有抑制作用,会抑制占空比的增长,使得曲线在目标值附近震荡。所以抖动频率增加。
上面两个调试的参数都是其最大值,在实际应用当中不使用最大值,而是乘上一个系数。两个参数都调试完后,让其乘以0.6作为最终参数。该值为经验值,可根据实际效果做变更。至此直立环调节完毕。有些小车如果各方面参数都比较好的话,到这就能直立了,不过大部分不能直立,会出现小车沿一个方向加速倒下的现象,等加入速度环就好了。出现这一现象的原因有很多,比如机械结构不行又或者是参数没调好,再或者电机间隙大等等。主要还是理论和实际的差距,理论上参数都是完美的,实际上参数是没有完美的。
4.速度环Kp、Ki:
1.先确定极性在调节速度环极性时,先将其他环都屏蔽掉。调节速度环时,只需转动其中一个轮子,两个轮子就会同方向加速至最大。如果不是上述现象,则调节Kp极性。调节之后还不行,就要检查程序和硬件接线是否一致了。这里在强调下,极性确认这个环节一定要把正确的现象调出来,如果发现现象不一致,很大可能就是程序和硬件不一致。2.再确认大小确认大小时,将调好的直立环加入进来。并且同时打开速度环的Kp和Ki,Kp = 200ki,这个关系是一个经验值。所以调节一个Kp即可。调节大小时,使得小车保持平衡的同时,速度接近于零即可。当然这是理想情况下才能完全静止,一般情况只要小车不倒,并且摆动幅度不大就已经可以了。因为电机存在死区,机械结构也有很大影响。
调节到这里基本已经能够使小车直立不倒了。
5.转向环Kd:
1.先确定极性调节转向环时,将其他两个环屏蔽掉,调节时推动小车沿Z轴旋转,如果电机会阻碍小车旋转说明极性是正确的,反之错误。2.再确认大小调节大小时让小车走直线效果较好,且无剧烈抖动即可。
三:总结
至此,零基础制作平衡小车连载教程更新完毕。和我一起制作的小伙伴们应该收获也不小吧。第一篇文章是6月底开始的,截止到目前刚好4个月,时间也蛮长的。后面的项目尽量缩短时间吧。
|