十、两轮平衡车基于模型的设计流程
下面以两轮自平衡车的控制系统开发为例,介绍MBD流程和MATLAB相关软件的应用。
概述对于两轮自平衡车来说,也许有人会说网上有很多现成的资源,可以直接拿来用,没有必要花时间先去做仿真。其实,这样做也没有问题。因为MBD是为了解决设计过程中遇到的问题才出现的,而不是为了用MBD而去用MBD。当需要开发一个新系统的时候,如果采用传统的流程难免会出现后期大量调试修改的问题,而采用MBD可以一定程度上避免这些问题。再者,对于一个老系统的改造,也可以采用MBD进行研究,从而获得更好的性能。
故,对于两轮自平衡车,应用MBD的好处在于可以开发新的算法、采用新的设计方案或者优化当前的控制性能。比如,可以通过MATLAB建模仿真,设计避障算法,设计走“8字”算法等等。
在本文中,主要介绍下面这些内容:
(1)使用MATLAB软件对两轮车进行数学建模,包括白箱法和物理建模法;
(2)使用MATLAB软件设计PID控制器,卡尔曼滤波器和走8字算法;
(3)MATLAB与STM32芯片的自动代码生成及集成方法。
对于控制系统的设计,可以按照下面的流程进行。
(1)首先,要根据物理系统特性或实验数据建立被控对象的数学模型;
(2)然后根据功能要求来设计控制算法,并通过闭环仿真来验证是否满足要求;
(3)接着,可通过半实物仿真的方式将控制算法模型下载到实时仿真平台中,与实际被控对象连接,来快速验证控制算法的有效性和实时性;
(4)再次,将验证过的控制算法模型,自动生成嵌入式代码下载到实际硬件控制器中,可以进行SIL软件在环、PIL处理器在环测试;
(5)再次,同样通过半实物仿真的方式将被控对象模型下载到实时仿真平台中,与实际的控制器构成闭环,进行硬件在回路HIL仿真;
(6)最后,将实际的控制器与实际的被控对象进行系统联调。
被控对象建模
第一步,要建立两轮车被控对象模型。首先,要熟悉被控对象的组成,识别输入和输出,掌握基本特性;其次,采用MATLAB工具进行建模。
两轮车的被控对象包括车轮、电机、支架及其上面放置的驱动板、传感器等,这是一个多变量系统,输入是控制器输出的电机驱动信号PWM,状态变量包括:陀螺仪测得的车体角位移、角速度,编码器采集的电机转角、转速等。
在本文中,使用Simulink和SimMechanics进行被控对象建模。
控制算法设计
在被控对象模型搭建完成后,就可以设计控制算法了。MATLAB提供了很多专业的工具,可以进行被控对象的特性分析,通过时域或频域方法进行校正设计,采用模糊、神经网络、鲁棒控制等工具箱进行高级算法设计等。
两轮车的控制设计任务包括:设计自稳定控制算法,能使车体保持直立;设计陀螺仪的信号处理算法;设计“走8字”控制算法。
在本文中,使用Simulink Control Design及Simulink、Stateflow等来设计、调节控制算法。
离线仿真验证当控制器设计完成后,需要进行大量的仿真验证工作。通过设置不同的期望参考信号、扰动信号,来进行离线仿真,验证在各种情况下,整个系统是否能满足设计要求。
自动代码生成当控制算法经过仿真验证之后,就可以自动生成代码了。针对具体的应用,需要采用不同的方法,可以分成2种情况:1、如果采用的控制芯片是MATLAB的Embedded coder所支持的,那么IO接口驱动部分都已经有现成的驱动模块了,只需要将算法模型的输入、输出等与对应的IO驱动模块相连,配置好参数,就可以一键自动代码生成、下载了;2、如果采用的控制芯片不是Embedded coder所支持的,那么可以手写IO驱动代码和主函数等,只将控制算法模型生成C源代码,然后手动集成到工程中。
针对小车采用的STM32-F1芯片,MATLAB没有官方支持的库,这里采用的是第三方的库,需要从ST官网下载驱动库程序包STM32-MAT。
说明对于两轮车来说,一个理想的MBD过程,应该是从头到尾,用到的都是MATLAB模型,一键就能把模型下载到控制板中,然后小车就能够正常工作。能做到这一点其实很不容易,首先,这样的模型中就需要包括算法部分、驱动部分,能在多个任务中进行切换;其次,被控对象模型要与实物的特性相近,这样设计的控制算法才能直接应用在实物中。
但是,由于小车被控对象中的很多参数是未知的,如转动惯量、摩擦等,故很难建立精确的仿真模型。而且,针对小车采用的STM32-F1芯片,MATLAB没有官方支持的库,这里采用的是第三方库,笔者在使用I2C和串口进行通信时都遇到了各种问题。
故本文更多的是作为启发和科普性介绍,希望有兴趣的同学能更进一步。