Simulink实现无感电机控制:自动代码生成在某国产ARM0定点MCU上

目录

前言

开发流程

定点化的技巧

代码生成运行演示

总结


前言

这次尝试了在国产arm0内核的MCU上实现Simulink自动代码生成永磁同步电机无传感控制。机缘巧合之下拿到了一块国产MCU的电机控制板和一个5000RPM的小电机。最后实现了无传感控制,在这里总结下一些经验。

芯片的参数如下:

开发流程

1. 首先根据新的电机参数在浮点的模型上进行仿真验证, 这里选择使用的观测器是龙伯格观测器

新的电机和控制参数调整完后仿真没有问题 

 2. 不放心可以先在浮点的MCU上跑一把,一般电机参数和实际参数相差不大,仿真没问题,实际运行也没啥问题

 3. 把浮点模型定点化

可以参考以下文章链接

Simulink 自动代码生成电机控制:自动定点化Fixed-Point Tool 使用_simulink模型定点化_卡洛斯伊的博客-CSDN博客

定点化的技巧

创建电机的运行实例,不同的输入电压,不出的负载,越多的输入输出实例,定点化后问题越少!

但是高转速可能输入的电流范围太小,大扭矩可能转速不够高,转速范围小。不能完全依赖自动定点化收集的数据。所以可以考虑局部定点化,分每个单独的模块进行定点化。如:

先对电流环进行定点化,或者先对SVPWM模块进行定点化都可以。完整系统进行定点化有很多工况会考虑不到范围。

当全局定点化运行后,如果系统仿真不正常,就需要去对模块进行检查

可通过Scope和log的方式去检查可疑的输出信号。如:

定点化后跑到一定的转速就失控了,不知道是控制环路引起的还是角度引起的。

 这个时候可以用电机的实际角度进行控制排除观测器原因,直接用电流环控制,排除速度环。

直接给电流环和实际角度,运行如下,能正常控制,说明电流环没有问题

 对比观测器的角度和实际角度,观测器观测的角度和实际角度对不上了,先把问题定位到观测器,理论上来讲观测到的角度要和实际的角度一样。

 再进到观测器里面查找是观测器的问题,还是锁相环的问题,经过一翻查找,定位到了下面这个位置。

 适当调整范围后:

目标转速也能达到,可以到开发板中进行测试了

 有时候在定位数据溢出可以用浮点和定点混合运行测试,如:

 仿真后:

浮点和定点的反电动势完全重合在一起,说明定点化的模块在当前工况没有问题。 

 这种方式,也能快速去定位数据溢出的位置。直到仿真的结果和自己想要的结果一致。就可以直接生成代码并集成了。

代码生成运行演示

也是在ADC里面调用生成的代码,传递电流信息等。

电机

总结

掌握定点化流程方法后,系统越复杂就越不要想着通过几个实例就把整个系统完全定点化好,也需要对一些异常的模块进行分析,仿真以达到数据失真小,且不溢出。Simulink定点化后有些数据是16位的,可以考虑把一些数据用32位表示,以确保其精度。

物联沃分享整理
物联沃-IOTWORD物联网 » Simulink实现无感电机控制:自动代码生成在某国产ARM0定点MCU上

发表评论