首页 > 编程语言 >基于MBD的电机控制算法开发-STM32

基于MBD的电机控制算法开发-STM32

时间:2024-06-01 21:21:39浏览次数:13  
标签:count TIM1 PMSM MBD 控制算法 STM32 theta PWM out

使用simulink搭建V/F电机控制框架,并集成到STM32F4中

1.Simulink模型搭建

本例子使用V/F拖动启动方法控制永磁同步电机启动,simulink模型

image-20240507141006145

其中V/F启动部分输出d,q轴的期望电压,并通过SVPWM调制算法施加到电机的三相:模型的输入为空,模型输出为为三路PWM波的占空比。

function [ud_out,uq_out,ange_out] = VF()
persistent count theta_e;
if(isempty(count))
    count=0;
    theta_e = 0;
end
count=count+1;

if (count<4500)%输出定矢量
    ange_out=0;
    ud_out=0.3*3.5*4;  %(*3.5*5)导致电流过大,满占空比
    uq_out=0.0;
elseif(count>=4500 && count<9000)%输出拖拽量
    we_hope = (count-4500)/4500*400;
    theta_e =  theta_e + we_hope*0.001;
    if theta_e > 2*pi
        theta_e = theta_e-2*pi;
    end
    ange_out=theta_e;
    ud_out=0.0;
    uq_out=5;
else
    we_hope = 400;
    theta_e =  theta_e + we_hope*0.001;
    if theta_e > 2*pi
        theta_e = theta_e-2*pi;
    end
    ange_out=theta_e;
    ud_out=0.0;
    uq_out=5;
end
image-20240507141510074

仿真周期设置为0.001s,仿真运行后电机三相的马鞍波图上图所示。

2.自动代码生成配置

首先由于实际芯片的运行方式是离散的,求解器一定要设置为定步长和离散状态。

image-20240507141829388 image-20240507142438194

具体的设置可以看模型文件。

使用Embedded Coder 自动生成嵌入式代码,报告如下:一共生成五个文件 ,需要关注的是PMSM_initialize初始化函数和PMSM_step函数,前者是模型中一些参数的初始化,后者是需要在任务中不断调用的函数。

image-20240507143405455

3.STM32CubeMX初始代码生成

选取芯片STM32F407VET6配置工程,1.时钟配置为外部时钟,sysclick168M,

image-20240507144647004

2.需要一个高级定时器产生三路PWM波,选择TIM1的前三个通道,由于TIM1挂在APB2总线上,定时器 base频率为168M,为了产生10KHZ的PWM,设置预分频寄存器PSC为(2-1),自动重装寄存器CNT为(4200-1),计数模式为中央对齐,则PWM频率 = 168M/(PSC+1)/(CNT+1) /2= 10k,CH Polarity设置为Low ,使得比较寄存器的值越大,PWM占空比越大。

image-20240507145459840

3.此外需要一个电机驱动板的控制使能信号,此处使用PE15,设置GPIO为推挽输出模式。全部设置完成后生Keil工程代码

image-20240507150614213

4.代码集成和接口编写

image-20240507150454733

PMSM文件夹中为生成的Keil工程,在此处新建一个文件夹Simulink,将第一章中生成的C代码复制到Simulink文件夹中。

接着进入Keil工程,

Step1:在main.c中TIM初始化后添加PWM开始输出的代码

image-20240507151109194

Step2:源代码添加,头文件路径添加

image-20240507151330355image-20240507151424922

Step3:头文件引用和初始化函数

在main.c中引入头文件PMSM.h,编译之后无错误和警告出现,接下来将初始化函数加入main函数中,while循环之前

image-20240507151801223

Step4:调用PMSM_Step函数

由于simulink模型设置的仿真步长为0.001s,需要启动一个周期为0.001s的PMSM_Step任务,而此处为简便起见,直接将PMSM_Step放在cortex内核的systick定时器中断中。Systick中断服务函数位于stm32f4xx_it.c中:void SysTick_Handler(void) ,将

image-20240507152604558

Step4:函数接口:

模型的输出定义在PMSM.c中,如下 ExtY_PMSM_T PMSM_Y;是一个结构体变量

/* External outputs (root outports fed by signals with default storage) */
typedef struct {
  uint16_T PWM_ABC[3];                 /* '<Root>/PWM_ABC' */
} ExtY_PMSM_T;

每调用一次PMSM_Step()后,将PWM_ABC中输出的值赋给TIM1的比较寄存器(CCR)中,进行PWM输出更新。最终的systick函数如下

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
	
	/*1ms中断*/
	PMSM_step();
	
	TIM1->CCR1 =  PMSM_Y.PWM_ABC[0];
	TIM1->CCR2 =  PMSM_Y.PWM_ABC[1];
	TIM1->CCR3 =  PMSM_Y.PWM_ABC[2];
  /* USER CODE END SysTick_IRQn 1 */
}

5.PMSM驱动板输出波形:

PMSM驱动板的三相中A相输出10KHZ的PWM波如下图所示:

tek00000

标签:count,TIM1,PMSM,MBD,控制算法,STM32,theta,PWM,out
From: https://www.cnblogs.com/yyyq/p/18226420

相关文章

  • STM32学习笔记(二)流水灯
    STM32学习笔记(二)流水灯一、原理部分1.1LED原理1.2GPIO原理二、工程部分三、加入宏定义这次我们来实现LED流水灯成为点灯大师。使用的核心板的MCU型号为STM32F103ZET6,使用标准库函数来实现。一、原理部分1.1LED原理其中PWR是系统电源指示灯,为蓝色。LED0......
  • 报错信息:Unable to make field private final java.lang.Class java.lang.invoke.Seri
    jdk版本与当前MyBatisPlus版本不兼容解决方法:1.升级MyBatisPlus的版本。2.或者使用以下方法--add-opensjava.base/java.lang.invoke=ALL-UNNAMED......
  • Java中的Lambda表达式与函数式接口:简化代码与提升效率
            Lambda表达式自Java8引入以来,已成为Java编程中提高代码简洁性与效率的一种重要特性。Lambda表达式允许你以匿名函数的方式来编写方法,使代码更简洁,增强了集合库的功能,尤其是在处理集合操作时。本文将探讨Lambda表达式的基本概念、函数式接口的用途,以及如何在实......
  • 杂项——STM32ZET6要注意的一些问题——高级定时器问题和PB3,PB4引脚问题
    ZET6可能会用到定时器,高级定时器要输出PWM要加上这样一行代码,否则无法正常输出PWM波TIM_CtrlPWMOutputs(TIM8,ENABLE); //主输出使能,当使用的是通用定时器时,这句不需要ZET6中PB3,PB4引脚默认功能是JTDO和NJTRST,如果想将其当作正常IO口使用需要加上两行代码 RCC_APB2Pe......
  • Linux低功耗Suspend/Resume梳理(基于STM32MP1)
    基于STM32MP1简单梳理Linuxsuspend/resume涉及到的内容:触发Suspend流程,以及唤醒手段和后续resume流程。Linuxkernel中Suspend/Resume流程。TFA中冷启动、热启动、SMC处理、PSCI实现等等。其他低功耗相关:poweroff、reboot、fiq处理。PowerDomainTree介绍;PSCI移植指导等。......
  • STM32和ESP32哪个更适合初学者
    对于初学者来说,STM32和ESP32都有各自的优点和适用场景,但考虑到初学者的学习曲线和资源可用性,以下是对两者的一些比较和建议:STM32优点:丰富的教程和社区支持:STM32拥有庞大的用户群体和活跃的社区,这意味着你可以找到大量的教程、示例代码和解答问题的资源。完善的开发环境:STM32......
  • 新手学习STM32还是ESP32
    对于新手来说,选择学习STM32还是ESP32取决于个人的学习目标和背景。以下是针对这两种微控制器的详细分析,以便您做出更明智的选择:STM321.处理器架构与性能STM32采用单核或多核处理器架构,基于ARMCortex®-M0,M0+,M3,M4和M7内核。这些内核具有高性能,优化的指令集和较大的内存,能够......
  • STM32--如何合理使用宏定义使用来简化开发工作
    #defineI2C_OAR1_OA1EN_Pos(15U)#defineI2C_OAR1_OA1EN_Msk(0x1UL<<I2C_OAR1_OA1EN_Pos)/*!<0x00008000*/#defineI2C_OAR1_OA1ENI2C_OAR1_OA1EN_Msk......
  • 【STM32 标准库】DS18B20温度
    目录1.DS18B201.1DS18B20简介1.1.1特点1.1.2内部结构1.1.3温度读取2.软件配置3.硬件设计4.软件设计4.1 功能描述4.2 软件实现4.2.1DS18B20.c4.2.2DS18B20.h4.2.3main.c1.DS18B201.1DS18B20简介1.1.1特点        一线总线(单总线)接口......
  • 学好STM32单片机必备的10件工具
    学会STM32单片机必备10件软硬件工具提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、常用软硬件工具二、软硬件工具的具体介绍1.STM32F103C8T6小系统板2.ST-LINKV2下载调试器3.万用表4.示波器5.电烙铁6.USB转TTL串口通讯模块7.AltiumD......