对不起!这篇Svpwm来晚了!

本文转载自微信公众号「小麦大叔」,可以通过以下二维码关注。转载本文请联系小麦大叔公众号。

创新互联是一家集网站建设,缙云企业网站建设,缙云品牌网站建设,网站定制,缙云网站建设报价,网络营销,网络优化,缙云网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

SVPWM

SVPWM是空间矢量脉宽调制(Space Vector Pulse Width Modulation)的简称,通常由三相逆变器的六个功率开关管组成,经过特定的时序和换相所所产生的脉冲宽度调制波,最终输出的波形可能会十分接近理想的正弦波形。具体如下图所示;左侧为复平面,即空间矢量,右侧为时域的正弦波形;

关于SVPWM原理的文章非常多,这里可以推荐一下网上一个非常不错的教程《SVPWM的原理及法则推导和控制算法详解第五修改版》,本文将如何实现SVPWM进行简单的介绍。

IQMATH

TI的片子很香,控制方面,TI无疑是做的最好的方案之一,相对来说资料也非常齐全;另外TI针对没有浮点运算器的定点DSP推出了IQMATH库,在使用Q格式对数据进行分析和处理的过程中,十分方便,代码也变得更加简洁,本文将使用TI的提供的SVPWM算法基于STM32平台实现SVPWM调制。

测试平台参数:硬件:stm32f103软件:标准外设库3.5IDE:MDK-ARM

IQmathLib

本文使用了IQMathLib的Cortex-M3版本,这样一来,对于没有浮点处理器的定点MCU来说,对数据统一进行Q格式的处理会变得更加便捷,并且高效;

首先将IQmathlib解压可以得到如下文件,其中包含各个平台下的静态库,本文使用STM32F1在keil环境下进行开发,需要使用的是rvmdk-cm3。

打开一个keil工程,在菜单界面点击如下图所示的图标进入project items;

添加IQmath组,并添加rvmdk-cm3路径下的静态库,和头文件;

点击下图所示的图标进入工程熟悉的设置;

添加rvmdk-cm3静态库的路径,和头文件的包含路径,如下图所示;

最终,build整个工程即可。

测试部分程序

 
 
 
 
  1. /**
  2. #include "stm32f10x.h"
  3. #include 
  4. #include 
  5. #include "serial_scope.h"
  6. #include "common.h"
  7. #include "IQmathLib.h"
  8. #include "usart_driver.h"
  9. #include "clarke.h"
  10. #include "park.h"
  11. #include "svpwm.h"
  12. /**
  13.   * @brief  Main program.
  14.   * @param  None
  15.   * @retval None
  16.   */
  17. sv_mod_t svpwm = SVGEN_DEFAULTS;
  18. #define CLARK  0
  19. #define PARK  1
  20. #define SVPWM  2
  21. #define SVPWM_REG 3
  22. int main(void)
  23. {
  24.  int user_data[4] = { 0 };
  25.  static int16_t time_cnt = 0;
  26.  Trig_Components a;
  27.  Trig_Components b;
  28.  _iq final_angle;
  29.  usart_init(); 
  30.  while (1)
  31.  {  
  32.   time_cnt-=32;
  33.   
  34.   clarke_parameter.As = _IQsinPU(time_cnt);
  35.   clarke_parameter.Bs = _IQsinPU(time_cnt-0x5555);
  36.   
  37.   if(clarke_parameter.As > 32767){
  38.    clarke_parameter.As = 32767;
  39.   }
  40.   if(clarke_parameter.As < -32768){
  41.    clarke_parameter.As = -32768;
  42.   }
  43.   
  44.   if(clarke_parameter.Bs > 32767){
  45.    clarke_parameter.Bs = 32767;
  46.   }
  47.   if(clarke_parameter.Bs < -32768){
  48.    clarke_parameter.Bs = -32768;
  49.   }
  50.   
  51.   clarke_calc(&clarke_parameter);
  52.   
  53.   park_parameter.Alpha = clarke_parameter.Alpha;
  54.   park_parameter.Beta = clarke_parameter.Beta;
  55.   
  56.   park_parameter.Sin = trig_functions(time_cnt).hsin;
  57.   park_parameter.Cos = trig_functions(time_cnt).hcos;
  58.   park_parameter.Angle = -time_cnt;
  59.   park_calc(&park_parameter);
  60.   
  61.   svpwm.Ualpha = clarke_parameter.Alpha;
  62.   svpwm.Ubeta = clarke_parameter.Beta;
  63.   
  64.   svpwm_calc(&svpwm);
  65.   
  66.   #define FOC_DEBUG  SVPWM_REG
  67. #if (FOC_DEBUG == CLEAK)
  68.   user_data[0] = clarke_parameter.As;
  69.   user_data[1] = clarke_parameter.Bs;
  70.   user_data[2] = clarke_parameter.Alpha;
  71.   user_data[3] = clarke_parameter.Beta;  
  72. #elif (FOC_DEBUG == PARK)
  73.   user_data[0] = clarke_parameter.As;
  74.   user_data[1] = clarke_parameter.Bs;
  75.   user_data[2] = park_parameter.Ds;
  76.   user_data[3] = park_parameter.Qs;
  77. #elif (FOC_DEBUG == SVPWM) 
  78.   user_data[0] = (uint16_t)svpwm.Ta;
  79.   user_data[1] = (uint16_t)svpwm.Tb;
  80.   user_data[2] = (uint16_t)svpwm.Tc;
  81.   user_data[3] = svpwm.VecSector*5000;
  82. #elif (FOC_DEBUG == SVPWM_REG)
  83.   
  84.   //换算的CCRx寄存器的值
  85.   sv_regs_mod_t sv_regs = svpwm_get_regs_mod(7200,&svpwm);
  86.   
  87.   user_data[0] = sv_regs.ccr1;
  88.   user_data[1] = sv_regs.ccr2;
  89.   user_data[2] = sv_regs.ccr3;
  90.   user_data[3] = svpwm.VecSector*1000;
  91. #endif
  92.   SDS_OutPut_Data_INT(user_data);
  93.  }
  94.  return 0;
  95. }

最终通过串口输出串口图形化软件的Ta,Tb,Tc 如下图所示;

关于STM32的配置,需要配置三路互补PWM波形输出;例如配置了TIM1的CH1,CH2,CH3这三路PWM输出,然后可以把Ta,Tb,Tc的值分别赋值给CCR1,CCR2,CCR3即可;

具体如下图所示;左侧是复平面的矢量合成动态图;右侧是三路PWM输出通道的比较状态;

开关状态

附件

分享文章:对不起!这篇Svpwm来晚了!
文章地址:http://www.hantingmc.com/qtweb/news36/99036.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联