永磁同步电机恒压频比开环控制系统Matlab/Simulink仿真分析(一)

2023-10-07  

前言

本章节采用恒压频比的开环控制方法驱动永磁同步电机的转动,首先分析恒压频比的控制原理,然后在Matlab/Simulink中进行永磁同步电机恒压频比开环控制系统的仿真分析,最后将Simulink中的恒压频比控制算法生成代码加载到实际工程中进行工程实现。


一、 恒压频比(V/F)控制原理

图片

永磁同步电机恒压频比控制方法与异步电机恒压频比控制方法相似,也是控制电机输入电压与频率同时变化,从而使气隙磁通保持恒定。该控制方法没有电机电流、电压、位置等物理量的反馈,动态性能较差,在给定目标转速发生变化或者负载突变的情况下容易产生失步和震荡的问题,但该控制方法胜在简单,多适用于对转速精度要求不高的场合。

永磁同步电机恒压频比开环控制系统Matlab/Simulink仿真框图如下:

图片

二、永磁同步电机恒压频比开环控制系统Matlab/Simulink仿真分析

2.1.仿真电路分析

2.1.1.恒压频比控制算法

图片

恒压频比控制算法:永磁同步电机转速与频率的换算关系如下所示:

图片

首先,将设定的电机目标转速通过上式换算为频率,由于该开环控制系统没有自动限制启动电流的作用,因此加入了一个斜坡函数使频率有一个平缓的变化过程。例如仿真中设定的目标转速为1200r/min,换算为频率的过程如下图所示:

图片

然后,由恒压频比V/F控制算法特性(下图所示),使输入电压与频率同步变化,从而保持气隙磁通恒定。低频时Us和Eg都较小,定子电阻和漏感压降所占分量比较显着,不能再忽略,此时人为的把定子电压抬高一些,近似的补偿定子阻抗压降,如下图b线所示:

图片

由上图可知输入电压与频率的关系为(带低频补偿的b线,已知(0,U0)(f1N,UsN)):

图片

将频率通过上式换算为电压,由电机的额定转速计算出额定频率f1N(永磁同步电机转速与频率的关系)。永磁同步电机的恒压频比控制为基频以下调速,系统最高频率不能超过额定频率f1N,例如仿真中所选永磁同步电机的额定转速为12540r/min,计算出额定频率f1N为1463Hz,为系统最高设定频率。

目标转速设置为1200r/min,将转速换算为频率,再由频率的变化得到输入电压的变化,如下图所示:

图片

此处作了一个归一化处理,将电压的变化除以电机额定电压,使输出电压的范围落在[0,1]区间内。

图片

将频率转换为角速度,再对角速度求积分获得当前的角度,如下图所示:

图片

此时已获得输入电压的幅值Um与相角wt,再通过下式将幅值与相角的电压表示转化为两相αβ坐标系下的电压表示:

图片

αβ坐标系下的电压表示为:

图片

接着采用反Clark变换,得到最终输入到电机的三相电压:

图片

2.1.2.输出处理

图片

对恒压频比控制算法的输出电压做处理,使其落在[0,1]的范围内:

图片

2.1.3.主电路

图片

主电路包括逆变电路与永磁同步电机,逆变电路如下图所示,采用Average-Value Inverter模块直接生成三相正弦电压,下图为目标转速1200r/min下输入到电机的电压波形。

图片

图片

永磁同步电机采用BR2804-1700电机(电机的参数用ST Motor Proflier测得),参数如下:

图片

图片

2.2.仿真结果分析

2.2.1.设定目标转速为1200r/min

目标转速与实际转速的波形曲线:

图片

稳态时,目标转速与实际转速的误差:

图片

稳态时,电机定子电流:

图片

电机转子位置:

图片

dq坐标系下的定子电流值:

图片

电磁转矩:

图片

2.2.1.设定目标转速为变化值

目标转速:

图片

目标转速与实际转速:

图片

从图中可以看出电机加减速有一段斜坡时间,电机加减速的快慢由恒压频比控制算法中由转速换算为频率时所设置的斜坡函数斜率有关。

三、永磁同步电机恒压频比开环控制系统代码生成及工程实现

3.1.功能需求

实现永磁同步电机的恒压频比控制,可通过按键调节永磁同步电机的转速。

3.2.硬件设计

图片

控制板:STM32F302R8

驱动板:X-NUCLEO-IHM07M1

永磁同步电机:BR2804-1700

图片

3.3.软件设计

3.3.1.STM32CubeMX底层配置

1、RCC设置外接HSE(Crystal/Ceramic Resonator),时钟设置为72MHz

2、PC10、PC11、PC12设置为推挽输出、无上下拉电阻、高速,初始化状态设为0; PB13设置为推挽输出,下拉电阻、高速,初始化状态为0; PC13设置为输入,无上下拉电阻。

3、设置TIM1时钟源为内部时钟,TIM1_CH1(PA8)设置为PWM输出,TIM1_CH2(PA9)设置为PWM输出,TIM1_CH3(PA10)设置为PWM输出;TIM1预分频值设置为3-1,计数模式选为中央计数模式1,ARR设计为1200-1(1/(1/(72000000/3))*1200=20KHz),内部时钟无分频;使能TIM1更新中断,中断优先级设置为(1,0)

4、USART2设置为异步,115200波特率,8位数据位,无奇偶校验位,1位停止位

5、Project Manager->工程名+IDE配置,Code Generator配置,生成工程代码

图片

图片

图片

图片

3.3.2.应用层与底层的接口开发

图片

Speed_Ref用于设定目标转速;Duty[3]用于接收恒压频比控制算法生成的三相电压,该三相电压作为调制波,TIM1计数器(中央计数模式)作为载波,频率20KHz与Simulink仿真设计一致。调制波与载波进行调制生成PWM,控制三相逆变电路的驱动输出,此处采用SPWM控制方法进行控制;Vmin用于设定恒压频比控制算法中的补偿电压值U0。

3.3.3.Matlab/Simulink恒压频比控制算法代码生成

图片

图片

3.3.4.应用层与底层的代码集成

在主函数中调用:PMSM_VF_initialize()初始化函数。

/**

  * @brief  The application entry point.

  * @retval int

  */

int main(void)

{

  /* USER CODE BEGIN 1 */

  uint8_t count=0;



  /* USER CODE END 1 */



  /* MCU Configuration--------------------------------------------------------*/



  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();



  /* USER CODE BEGIN Init */



  /* USER CODE END Init */



  /* Configure the system clock */

  SystemClock_Config();



  /* USER CODE BEGIN SysInit */



  /* USER CODE END SysInit */



  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_TIM1_Init();

  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */

  PMSM_VF_initialize();  //Simulink初始化函数



  /* USER CODE END 2 */



  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */



    /* USER CODE BEGIN 3 */

    if(Key_Scany(KEY_GPIO_Port,KEY_Pin)==1)

    {

      HAL_GPIO_WritePin(GPIOC, EN1_Pin|EN2_Pin|EN3_Pin, GPIO_PIN_SET);  //使能三相桥臂


      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);   //使能三路PWM

      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);

      HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);


        __HAL_TIM_ENABLE_IT(&htim1,TIM_IT_UPDATE);  //使能TIM1更新中断

        __HAL_TIM_CLEAR_FLAG(&htim1,TIM_IT_UPDATE);


      Speed_Ref+=500;

      if(Speed_Ref>=12000)

        Speed_Ref=12000;

    }


    HAL_Delay(1);

    count++;

    if(count%50==0)

    {

      count=0;

      HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);  //程序运行指示灯

    }

  }

  /* USER CODE END 3 */

}

在TIM1更新中断函数中调用:PMSM_VF_step(Speed_Ref, Duty)函数,实现恒压频比控制算法。


/* USER CODE BEGIN 1 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  //Simulink函数 20KHz V/F控制

  PMSM_VF_step(Speed_Ref, Duty);


  for(int i=0;i<3;i++)

  {

    Duty[i]=(1-Duty[i])*htim1.Init.Period;

  }


  TIM1->CCR1=Duty[0];  //进行SPWM控制

  TIM1->CCR2=Duty[1];

  TIM1->CCR3=Duty[2];


}

/* USER CODE END 1 */

3.4.仿真验证


编译下载到开发板观察实验现象


总结


本章节采用恒压频比的开环控制方法驱动永磁同步电机的转动,分析了恒压频比的控制原理,然后在Matlab/Simulink中进行了永磁同步电机恒压频比开环控制系统的仿真分析,最后将Simulink中的恒压频比控制算法生成代码加载到实际工程中进行了工程实现,为后续章节的分析奠定基础。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。