平衡车模型与sumulink仿真

导言

相信很多朋友在学嵌入式控制系统的时候,都玩过平衡车,把平衡车作为自己学习和实践的重要一步。平衡车模型,事实上类似于倒立摆模型,他是一个经典的控制系统模型,对于做自动控制的人来说,倒立摆是必须的一步,它对控制系统的分析,挖掘有着重要的影响。所以,我们很有必要了解平衡车的控制方法。这对我们对控制系统的理解有着重要的作用。

物理模型

下面我们来简单看一下平衡车的物理模型
平衡车模型与sumulink仿真
α\alpha为平衡车倾角,rr表示轮子半径。
对轮子中心求矩得fr=GLsinα2fr=\frac{GLsin\alpha}{2}
可得α=asin2frGL1\alpha=asin\frac{2fr}{GL} ( 1)
如上图,以平衡车为整体进行受力分析。在平衡车稳定时,受如上二个力,一个为地面给轮子的摩擦力,二是平衡车自重,另外还有地面给车的支撑力(这里忘画了)。假定车在稳定不跑时不倾斜,则系统在f对轮子力矩的作用下必定不能保持平衡,故可得出:车在稳定跑的时候必定有一定的倾斜角度。
平衡车模型与sumulink仿真
再单独对轮子进行受力分析,轮子受地面摩擦与电机扭矩的作用向前滚动(自重与地面支撑力和摩擦力在竖直方向与水平方向平衡,这里不列出式子)。在平衡车稳定时,车将匀速向前运动。同样对对轮子中心求矩可得:
T=fr2T=fr(2)
联立(1)(2)求得α=asin2TGL\alpha=asin\frac{2T}{GL}
可见,平衡车稳定时倾斜角度与电机转矩T有关,T越大,即给电机的速度越大,则倾斜角度越大。

控制系统的设计与仿真

方案一
速度环补偿给角度的p控制器。给出matlab框图:
平衡车模型与sumulink仿真
方案二
串级pid,速度环直接给角度环。给出框图:
平衡车模型与sumulink仿真
二个方案仿真结果一样,如图:
平衡车模型与sumulink仿真
这里可以看到最终稳定向前跑时,角度为一定值,符合我们前面的物理模型。
这里需要用到自控里的很多知识,特别是方案一,是多输入的系统,甚至要用到现代控制理论。本文只针对入门不久的朋友,所以我只简单分析一下方案二。
设x为速度环输入,y为角度环输出(注意角度环输出的是输出力矩T,这里我利用了公式上述讨论的公式将输出力矩化为了角度,我们这里只讨论输入x与输出力矩y的关系)
yx=p1s+i1+d1s2(p1+1)s+i1+d1s2p2s+i2+d2s2(p2+1)s+i2+d2s2\frac{y}{x}=\frac{p_1s+i_1+d_1s^2}{(p_1+1)s+i_1+d_1s^2} \frac{p_2s+i_2+d_2s^2}{(p_2+1)s+i_2+d_2s^2}
这里速度环用的pi控制器,角度环用的pd控制器
因此:
yx=p1s+i1(p1+1)s+i1p2+d2s(p2+1)+d2s\frac{y}{x}=\frac{p_1s+i_1}{(p_1+1)s+i_1} \frac{p_2+d_2s}{(p_2+1)+d_2s}
根据我的上一篇文章,稳态时yx=p2p2+13\frac{y}{x}=\frac{p_2}{p_2+1}(3)
联立(2)(3),其中y=T,得:
小车稳定时倾角α=asin2p2xGL(p2+1)\alpha=asin\frac{2p_2x}{GL(p_2+1)}
仿真中的参数我是随便设置的,大家可根据实际情况计算。
至于串级pid为什么能够达到这样的效果,这必须用自动控制原理来解释,对于刚入门没学的同学来说,这里不需要讲解。只用知道这个方案可以实现,并能通过仿真验证就可。切忌主观硬性理解。
串级pid调参
一般先调内环,再调外环。
角度内环:让输入为0,调节pd控制器使之能有平衡的趋势(平衡一会就会倒下)。
速度外环:将速度环加上,令速度期望为0,调节pi控制器让它平衡。

结语

本文有许多内容还没讲到,实属能力有限。关于更多的平衡小车内容,可参考平衡小车之家的资料(没收广告费)。