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

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

3天内不再提示

一文详解如何实现SVPWM进行

FPGA之家 来源: 小麦大叔 作者:菜刀和小麦 2021-04-30 11:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

SVPWM

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

2c9b466e-a960-11eb-9728-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。

2f05fe76-a960-11eb-9728-12bb97331649.png

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

2f21b814-a960-11eb-9728-12bb97331649.png

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

2f3a41fe-a960-11eb-9728-12bb97331649.png

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

2f718114-a960-11eb-9728-12bb97331649.png

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

2f8a3254-a960-11eb-9728-12bb97331649.png

2fb99a6c-a960-11eb-9728-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); #defineFOC_DEBUGSVPWM_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_tsv_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); } return0; }

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

2fe6bca4-a960-11eb-9728-12bb97331649.png

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

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

3007fbb2-a960-11eb-9728-12bb97331649.gif

开关状态

编辑:jq

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

    关注

    15

    文章

    615

    浏览量

    92246
  • IQmath
    +关注

    关注

    0

    文章

    8

    浏览量

    7856

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

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    缓存之美:万详解 Caffeine 实现原理(上)

    文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍,首先会讲解它的实现原理,在大家对它有个概念之后再深入具体源码的细节之中,理解它的设计理念,从中能学习到
    的头像 发表于 08-05 14:49 516次阅读
    缓存之美:万<b class='flag-5'>文</b><b class='flag-5'>详解</b> Caffeine <b class='flag-5'>实现</b>原理(上)

    详解线性霍尔IC

    全面认知·线性霍尔IC 线性霍尔IC,是种rail to rail的模拟输出传感器,后端微控制器处理起来简单方便,因此与霍尔IC样,适用于白色家电和工业设备。 线性霍尔IC进行模拟输出,与数字
    的头像 发表于 07-24 17:59 2029次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b>线性霍尔IC

    双三相感应电机SVPWM的新型过调制策略

    摘要:过调制策略能够提高逆变器输出电压范围和品质,从而提高电机输出转速范围和转矩特性。针对双三相感应电机空间矢量脉宽调制(SVPWM)算法过调制区域有限,分区实现复杂,内存占用率大等问题,提出
    发表于 06-19 11:10

    SVPWM的原理及法则推导和控制算法详解

    小,使得电机转矩脉动降低,旋转磁场更逼近圆形,而且使直流母线电压的利用率有了很大提高,且更易于实现数字化。下面将对该算法进行详细分析阐述。 1.1 SVPWM 基本原理 SVPWM
    发表于 06-16 17:11

    详解激光划片机

    激光划片机是利用高能激光束对晶圆等材料进行切割或开槽的精密加工设备,广泛应用于半导体、微电子、光学器件等领域。其核心原理是通过激光与材料的相互作用,实现材料的固态升华、蒸发或原子键破坏,从而完成高精度加工。
    的头像 发表于 06-13 11:41 1793次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b>激光划片机

    六相异步电机的分组式SVPWM控制的研究

    摘要:提出了基于电力电子系统集成概念的六相异步电机分组式变频调速系统。以SVPWM调制方法为例,讨论了六相异步电机分组式控制的实现。理论研究和仿真表明,为使电源的利用效率最高和产生的电盛转矩最大,应
    发表于 06-10 13:08

    【必看】开关电源中每个元器件的计算+51页图文详解

    开关电源的各个元器件怎么计算?损耗怎么估算?散热器的大小怎么计算? 51页图文详解带你弄懂! 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持
    发表于 05-12 16:20

    有霍尔传感器SVPWM学习总结

    SVPWM:空间矢量脉冲宽度调制 为什么要使用 SVPWM 来控制电机呢?传统的六拍换相控制方式使逆变器的输出呈方波变化,该种控制方式在电机空间形成的旋转磁场为个正六边形,与我们期望的理想
    发表于 05-09 13:54

    SMA接头制造工艺详解:精密加工技术与实现策略

    SMA接头制造工艺详解:精密加工技术与实现策略
    的头像 发表于 04-26 09:22 521次阅读
    SMA接头制造工艺<b class='flag-5'>详解</b>:精密加工技术与<b class='flag-5'>实现</b>策略

    详解Vivado时序约束

    Vivado的时序约束是保存在xdc文件中,添加或创建设计的工程源文件后,需要创建xdc文件设置时序约束。时序约束文件可以直接创建或添加已存在的约束文件,创建约束文件有两种方式:Constraints Wizard和Edit Timing Constraints,在综合后或实现后都可以
    的头像 发表于 03-24 09:44 4384次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b>Vivado时序约束

    详解Verilog HDL

    Verilog HDL(Hardware Description Language)是种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。现实生活中多用于专用集成电路
    的头像 发表于 03-17 15:17 3777次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b>Verilog HDL

    SVPWM的原理及法则推导和控制算法详解

    ,而且使直流母线电压的利用率有了很大提高,且更易于实现数字化。下面将对该算法进行详细分析阐述。 文章过长,请点击下方可查阅*附件:SVPWM的原理及法则推导和控制算法详解.pdf
    发表于 03-14 14:51

    有霍尔传感器SVPWM学习总结(可下载)

    SVPWM:空间矢量脉冲宽度调制为什么要使用 SVPWM 来控制电机呢?传统的六拍换相控制方式使逆变器的输出呈方波变化该种控 制方式在电机空间形成的旋转磁场为个正六边形,与我们期望的理想的圆形
    发表于 03-13 15:23 1次下载

    图解空间电压矢量控制(SVPWM)模式下怎么提高电机扭矩

          在空间电压矢量控制(SVPWM)模式下,提高电机的扭矩输出可以通过以下几种方法实现:         、精确控制电压和频率       SVPWM技术通过精确控制电机的电
    的头像 发表于 02-13 15:01 1488次阅读
    图解空间电压矢量控制(<b class='flag-5'>SVPWM</b>)模式下怎么提高电机扭矩

    其利天下技术·电机控制SVPWM七段式算法·无刷电机驱动方案

    两种。今天我们先介绍下七段式算法如何应用到电驱系统进行电磁兼容性仿真。七段式是种更复杂的SVPWM控制技术,可以将三相电机的输出电压分解为七个矢量,分别为正向最
    的头像 发表于 12-11 10:28 3262次阅读
    其利天下技术·电机控制<b class='flag-5'>SVPWM</b>七段式算法·无刷电机驱动方案