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

描述

前言

本章节采用恒压频比的开环控制方法驱动永磁同步电机的转动,首先分析恒压频比的控制原理,然后在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中的恒压频比控制算法生成代码加载到实际工程中进行了工程实现,为后续章节的分析奠定基础。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分