0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度剖析SVPWM 让你迅速了解SVPWM

Q4MP_gh_c472c21 来源:小麦大叔菜刀和小麦 作者:小麦大叔菜刀和小 2021-03-31 15:16 次阅读

SVPWM

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

540a6d02-91c2-11eb-8b86-12bb97331649.gif


关于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。

54df7880-91c2-11eb-8b86-12bb97331649.png

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

555472c0-91c2-11eb-8b86-12bb97331649.png

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

55b46d92-91c2-11eb-8b86-12bb97331649.png

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

566d869c-91c2-11eb-8b86-12bb97331649.png

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

56a13320-91c2-11eb-8b86-12bb97331649.png

56ec30be-91c2-11eb-8b86-12bb97331649.png

最终,build整个工程即可。

测试部分程序

/**
#include"stm32f10x.h"
#include
#include

#include"serial_scope.h"
#include"common.h"
#include"IQmathLib.h"
#include"usart_driver.h"
#include"clarke.h"
#include"park.h"
#include"svpwm.h"

/**
*@briefMainprogram.
*@paramNone
*@retvalNone
*/
sv_mod_tsvpwm=SVGEN_DEFAULTS;

#defineCLARK0
#definePARK1
#defineSVPWM2
#defineSVPWM_REG3

intmain(void)
{
intuser_data[4]={0};
staticint16_ttime_cnt=0;
Trig_Componentsa;
Trig_Componentsb;
_iqfinal_angle;
usart_init();

while(1)
{
time_cnt-=32;

clarke_parameter.As=_IQsinPU(time_cnt);
clarke_parameter.Bs=_IQsinPU(time_cnt-0x5555);

if(clarke_parameter.As>32767){
clarke_parameter.As=32767;
}
if(clarke_parameter.As< -32768){
   clarke_parameter.As = -32768;
  }
  
  if(clarke_parameter.Bs >32767){
clarke_parameter.Bs=32767;
}
if(clarke_parameter.Bs< -32768){
   clarke_parameter.Bs = -32768;
  }
  
  clarke_calc(&clarke_parameter);
  
  park_parameter.Alpha = clarke_parameter.Alpha;
  park_parameter.Beta = clarke_parameter.Beta;
  
  park_parameter.Sin = trig_functions(time_cnt).hsin;
  park_parameter.Cos = trig_functions(time_cnt).hcos;
  park_parameter.Angle = -time_cnt;
  park_calc(&park_parameter);
  
  svpwm.Ualpha = clarke_parameter.Alpha;
  svpwm.Ubeta = clarke_parameter.Beta;
  
  svpwm_calc(&svpwm);
  
  #define FOC_DEBUG  SVPWM_REG
#if (FOC_DEBUG == CLEAK)
  user_data[0] = clarke_parameter.As;
  user_data[1] = clarke_parameter.Bs;
  user_data[2] = clarke_parameter.Alpha;
  user_data[3] = clarke_parameter.Beta;  
#elif (FOC_DEBUG == PARK)
  user_data[0] = clarke_parameter.As;
  user_data[1] = clarke_parameter.Bs;
  user_data[2] = park_parameter.Ds;
  user_data[3] = park_parameter.Qs;
#elif (FOC_DEBUG == SVPWM) 
  user_data[0] = (uint16_t)svpwm.Ta;
  user_data[1] = (uint16_t)svpwm.Tb;
  user_data[2] = (uint16_t)svpwm.Tc;
  user_data[3] = svpwm.VecSector*5000;
#elif (FOC_DEBUG == SVPWM_REG)
  
  //换算的CCRx寄存器的值
  sv_regs_mod_t sv_regs = svpwm_get_regs_mod(7200,&svpwm);
  
  user_data[0] = sv_regs.ccr1;
  user_data[1] = sv_regs.ccr2;
  user_data[2] = sv_regs.ccr3;
  user_data[3] = svpwm.VecSector*1000;
#endif
  SDS_OutPut_Data_INT(user_data);
 }
 return 0;
}

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

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

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

57c349c8-91c2-11eb-8b86-12bb97331649.gif

开关状态

编辑:jq

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

    关注

    111

    文章

    8204

    浏览量

    210924
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4897

    浏览量

    209899
  • 空间矢量脉宽

    关注

    0

    文章

    2

    浏览量

    975

原文标题:对不起!这篇SVPWM来晚了!

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SVPWM-过调制技术

    SVPWM形成电压矢量通常可以划分为三个区段
    的头像 发表于 10-25 14:14 573次阅读
    <b class='flag-5'>SVPWM</b>-过调制技术

    SVPWM的原理及法则推导和控制算法介绍

    包含SVPWM的算法介绍,基本原理,以及详细的公式推导,详细的图表示意,是初学FOC,准备自己手写FOC库或者理解FOC算法的工程师的有利手册,手册中也简单介绍了SVPWM与SPWM的内在联系与区别。读者可自行推导公式后与手册结果进行对照。
    发表于 10-07 09:13

    SVPWM调制波的数学表达究竟是怎样的呢?

    SVPWM可以通过载波比较的方法实现开关控制信号输出。那SVPWM的调制波的数学表达究竟是怎样的呢?答案是SVPWM实质是一种对在三相正弦波中注入了零序分量的调制波进行规则采样的一种变形 SPWM。
    发表于 07-10 17:16 997次阅读
    <b class='flag-5'>SVPWM</b>调制波的数学表达究竟是怎样的呢?

    基于载波SVPWM与空间矢量SVPWM实现策略的等效推导

    前面推导出了SVPWM的调制波,调制波与载波比较就是基于载波的SVPWM实现方式。
    的头像 发表于 07-10 16:32 818次阅读
    基于载波<b class='flag-5'>SVPWM</b>与空间矢量<b class='flag-5'>SVPWM</b>实现策略的等效推导

    基于载波的SVPWM发波计算Mathcad实例

    基于载波的SVPWM发波计算Mathcad实例,由于本文分析SVPWM,因此没有控制环路的PID环节,为了简便输入直接给定dq值,经过park 和clark变换后,生成ABC三相电源,送给SVPWM程序判断扇区生成调制波。
    发表于 07-10 16:13 1155次阅读
    基于载波的<b class='flag-5'>SVPWM</b>发波计算Mathcad实例

    基于载波的SVPWM实现方式

    不妨试着用倒推的方法进行理解。已知svpwm的电压利用率可达1。也就是说使用svpwm的调制方式,线电压的幅值可达Udc。
    发表于 07-10 15:09 992次阅读
    基于载波的<b class='flag-5'>SVPWM</b>实现方式

    为什么要使用SVPWM来控制电机呢?有霍尔传感器SVPWM学习总结

    为什么要使用SVPWM来控制电机呢?传统的六拍换相控制方式使逆变器的输出呈方波变化,该种控制方式在电机空间形成的旋转磁场为一个正六边形,与我们期望的理想的圆形旋转磁场并不相符,可见六拍换相控制的方式
    发表于 07-07 16:36 1569次阅读
    为什么要使用<b class='flag-5'>SVPWM</b>来控制电机呢?有霍尔传感器<b class='flag-5'>SVPWM</b>学习总结

    为什么要使用SVPWM策略?SVPWM调制策略要点讲解

    SVPWM(Space Vector Pulse Width Modulation,空间矢量脉宽调制)是近年发展的一种比较新颖的电机控制方法
    发表于 06-30 16:35 786次阅读
    为什么要使用<b class='flag-5'>SVPWM</b>策略?<b class='flag-5'>SVPWM</b>调制策略要点讲解

    SVPWM算法的Simulink模型介绍

    电压空间矢量调制方法(SVPWM)是一种常用的PWM算法,和普通的正弦PWM方法不同
    的头像 发表于 06-27 15:37 1052次阅读
    <b class='flag-5'>SVPWM</b>算法的Simulink模型介绍

    svpwm与动量轮怎么融合 svpwm变频调速原理

    SVPWM与动量轮可以通过控制算法的设计实现融合,实现更加高效的电机控制系统。
    发表于 06-10 07:23 317次阅读

    空间矢量调制技术(SVPWM

    空间矢量脉宽调制 (Space Vector Pulse Width Modulation, SVPWM )是用在三相电路中的调制方法。 SVPWM调制算法的任务是根据8个基本空间矢量,通过时间加权,合成任意想要的参考电压
    的头像 发表于 05-29 17:22 3217次阅读
    空间矢量调制技术(<b class='flag-5'>SVPWM</b>)

    SVPWM控制的应用领域

    SVPWM控制是一种控制三相交流电机的方法,它可以实现高效、精确的控制。
    发表于 05-29 14:34 646次阅读

    SVPWM控制技术的基本原理及Matlab/Simulink仿真分析

    本章节首先介绍SVPWM控制技术的原理,然后详细分析SVPWM控制算法的具体实现方式包括7段式SVPWM与5段式SVPWM算法,并通过Matlab/Simulink对
    的头像 发表于 05-24 11:10 5091次阅读
    <b class='flag-5'>SVPWM</b>控制技术的基本原理及Matlab/Simulink仿真分析

    TI电机控制算法里面的SVPWM原理及编程实现算法

    TI电机控制算法里面的SVPWM原理及编程实现算法对研究SVPWM,电机控制有很大的帮助
    发表于 05-15 17:11 9次下载

    电机foc是什么意思 svpwm和foc的区别

    SVPWM是一种基于矢量控制的功率电子调制技术,与FOC不同的是,SVPWM通过调节电压幅值和相位角度控制电机转矩和速度,其工作原理是将固定幅值的三相交流电源电压按照特定的相位间隔、相位差和脉冲宽度进行匹配控制,从而实现对电机的控制。
    发表于 05-02 10:54 8702次阅读