STM32 Simulink 自动代码生成电机控制——脉振高频注入

最近在做一些电机控制代码生成的相关学习,记录一些学习心得和成果

目录

模型简介

运行仿真

代码生成与集成

开发板运行演示


模型简介

1. 如图,模型分为离散和连续两部分,电机系统是连续域,控制算法部分是离散的,需要把变量转为离散变量,如下C/D模块需要把被控系统的数据类型和采样率进行连接,输入到控制算法模型STM32 Simulink 自动代码生成电机控制——脉振高频注入_第1张图片

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第2张图片

2.  如图为算法模型,不同的模块执行频率是不一样的,和我们在嵌入式开发的思想一样,有些运算不需要实时性很高,就放在不同的任务周期里面,如下: 功率计算和状态机放到10ms一次,速度环放到2ms一次,FOC和角度计算放到100us也就是PWM的开关周期,对就单片机就是放在ADC中断里面,而ADC又是以PWM的开关周期来触发的,这样就可以减少开关周期里面执行的代码。

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第3张图片

3.  下图是脉振高频注入状态控制模块,关于脉振高频注入原理的文档和论文网上有很多,这里就不细说了。高频注入的启动过程为:初始位置检测(电机静止)>NS极检测(电机静止)>角度估算(电机运动)>高速无感控制,如下图通过stateflow来实现各个状态的切换分别为IPD,NS,HFI模块

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第4张图片

4. 为了方便实际电机和板子角度估算的验证,同样也增加霍尔计算电机角度和速度的模块,如下STM32 Simulink 自动代码生成电机控制——脉振高频注入_第5张图片

运行仿真

1.  设定目标转速1000RPM如下图,分别是电机的实际角度,相电流,速度响应

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第6张图片 2. 角度对比,如下蓝色是霍尔得到的角度,黄色是HFI得到的角度,电机设置的初始角度是0,可以看到初始角度是2Pi, 系统的角度是0-2pi,因此2pi等效是0,霍尔低速时估算角度不准,可以看到霍尔初始角不平滑,我们可以对比上图,得到的HFI的角度仿真和实际基本一致

 STM32 Simulink 自动代码生成电机控制——脉振高频注入_第7张图片

代码生成与集成

1. 生成代码

生成代码的步骤有很多,这里我们生成嵌入式的C代码得到如下

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第8张图片

自定义的观测量和标定量,在实际的调试中,我们需要去更改某些变量,达到我们的控制效果,我们可以生成如下所示的观测量和标定量。 

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第9张图片

2. 软件集成

这里我们已经配置好了相应的底层,主控芯片是STM32F401,集成好后如下:

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第10张图片

开发板运行演示

这是一个24V的小电机,电机参数大致如下 ,运行效果:

脉振高频注入,STM32自动代码生成_哔哩哔哩_bilibili

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第11张图片

STM32 Simulink 自动代码生成电机控制——脉振高频注入_第12张图片

你可能感兴趣的:(STM32,代码生成,单片机,stm32,c语言)