目录
前言
MPC模块使用步骤和参数设计
电机控制系统验证
MPC参数调整
MPC和PI控制器比较
总结
前言
前面尝试了基于电机DQ轴电流环的传递函数设计PI控制器的参数,最近尝试了下模型预测控制(MPC)对电流环进行控制,这里总结一下方便日后回顾。关于MPC的基本原理随便搜一下一大堆资料这里不再多说,下面主要介绍怎么把电机控制的双电流环替换成MPC控制,如果用MPC模块设计MPC的参数。
永磁同步电机矢量控制电流环参数整定方法----Matlab controlSystemDesigner的使用_永磁同步电机模型传递函数-CSDN博客
MPC模块使用步骤和参数设计
新建一个Simulink模型,在模型窗口里找到MPC模块,如下图所示:
取消勾选Measured disturbance, 暂且不用这个功能。
创建模型如下 ,D1Q1分别是DQ轴的功率部分传递函数,参考PI参数整定的文章。
双击MPC模型,配置默认选项
Sample time: 采样时间,这里电机的控制频率是10K, 采样时间设置成0.0001s.
Prediction Horizon: 预测的范围,越小响应越快,但是稳定性会差些,根据实际调整即可,先用默认的后面可在线调整
Number of manipulated variables: 这里设置为2是因为输入有两个DQ轴电流环一个两个输入和两个输出
Number of measured outputs: 设置为2,同上。
配置好后点Design, 弹出如下窗口,选择MPC Structure.
确定采样时间和输入输出数量,直接点Import
左边窗口会弹出plant, mpc1, scenario1。这时候会生成一组默认参数,可以把下图中的响应放大看细节。
如下,放大之后系统是能收敛的。这时候就可以点TUNING去调整MPC的参数。
下图框里分别是采样时间,预测范围,控制范围
把控制范围改小,响应变缓,可暂且设置一个收敛效果还不错的参数,一会把模型放到电机控制的系统仿真进行验证,在线调参等等。
如下,需要设置约束条件,其实就是设置输入输出的上下限,还有变化率,根据电机控制环路的输入输出合理设计就行。变化率太快容易超调,太小响应慢,合理选择即可。
配置好后,如下,ECR是软约束,前面配置后面就可以不用管:
权重会默认生成,如果系统收敛了可以先不用动,后面慢慢优化。通过调节滑块优化控制性能,如果能正常收敛也可以先不用管。
配置完成后点更新模块并运行仿真。
可以看到DQ轴系统能正常的收敛,这是基于传递函数的验证,接下来直接上电机控制仿真系统。
电机控制系统验证
把原先电机的控制系统PI控制输出断掉,换成MPC。如下,mo分别是DQ轴电流输入,ref就是DQ轴电流的给定参考值。输出是Vd和Vq。
设计好MPC的参数后会有一个MPC控制器,如下图。可以在WorkSpace里导出设计好的MPC控制器,方便下一次运行的时候不需要再重新调参。
在Others里调整数据类型,避免生成代码的时候不会报错。
运行仿真,电流环控制,仿真结果如下,控制没有问题至少MPC控制器能正常工作。
看看给定的电流和反馈的电流:
给定和反馈都能快速响应,会有些稳态误差,虽然能控住但是性能并不理想。
看看细节,十几个周期之后才进入稳态。
MPC参数调整
下面对MPC的控制参数进行调整,先把预测范围从10改到2,效果有明显提升。
再看看细节,三四个周期就进入了稳态。那是不是再把预测范围改小还会更快?
直接把预测范围改到1,系统还是能控住,不过有明显的超调了。
把细节放大看看,也是几个周期就稳定了,不过相比之前的效果超调更大,运气比较好,系统响应都比较快,后面有时间再试试其他参数的特性。
MPC和PI控制器比较
这里简单比较下响应和生成代码的复杂度,仅供参考。
先把电机控制的模型改成PI控制电流环。比对MPC,稳态误差更小,几乎重合在一起了。
PI控制器的响应速度,给定Q轴电流和反馈的响应PI控制器甚至更快些。
DQ轴响应都挺快
MPC模块生成代码,下面只是生成的一部分代码,生成的代码比PI控制器的复杂太多。一个可能是MPC模块里添加的冗余功能太多,比如系统自带的PI控制器生成的代码就比自己搭的还复杂。仅供参考,也可以自己搭个MPC测试。
总结
从仿真效果和生成代码的效果来看MPC在这种电机环路控制上优势并不明显,甚至表现不如PI,MPC同样依赖被控对象的传递函数,需要调整的参数也更多,对于算力低的MCU还是PI控制器更有性价比。当然MPC还有很多参数可以优化,这里并没有花太多时间优化,主要介绍一下MPC模块的使用。也没实际上硬件系统进行测试,结果仅供参考。