这篇文章中介绍到的符号及其含义参考:

永磁同步电机SVPWM技术参考

1. 标幺值

标幺值是相对于某一基准值而言的,同一有名值,当基准值选取不同时,其标幺值也不同。

标幺值 = 某物理量的实际值/该物理量的基准值

2. 标幺化处理

2.1 电压幅值进行标幺(归一)化处理

线电压最大值为,q轴电压最大值的绝对值为,选择为基(准)值,则有:

 ,其标幺值  为被标幺化之后,其值为。注意一点,标幺化意味着跟电压相关的量都进行了处理。

2.2 对矢量作用时间进行标幺化

根据参考文章,可知的作用时间为:

这里的,然后式(2-20)可以写成

对时间进行归一化处理:以载波周期T为基准值,则有:

同理可以得出其他扇区各矢量的作用时间。令

也就是

因为涉及到多个扇区,因此制定下面一个标准

扇区 U4和U6 U2和U6 U2和U3 U1和U3 U1和U5 U4和U5
t1 -Z Z X -X -Y Y
t2 X    Y -Y Z -Z -X
扇区 1 2 3 4 5 6
t1对应矢量 U4 U2 U2 U1 U1 U4
t2对应矢量 U6 U6 U3 U3 U5 U5

那么N与作用时间的关系为,其中T4=T1,T6=T2

采用七段式SVPWM调制,每个载波周期中依次有:1个开关导通-->2个开关导通-->3个开关导通-->2个开关导通-->1个开关导通

3. 硬件实现SVPWM流程

1. 确定扇区(还有N),注意一点N和扇区不是一个东西;参考文章

2. 计算X、Y、Z,进而计算t1,t2;

3. 确定taon、tbon、tcon赋值给Ta、Tb、Tc;这一步也参考 参考文章中的表2-2,很容易推出各个开关管的开启关断时间。

4. 把Ta、Tb、Tc赋给CMPRx。

下面是Ti的代码,注意一点Sector表示的是N的值,其他很简单。

/* =================================================================================
File name:       SVGEN_DQ.H  (IQ version)                    Originator:    Digital Control Systems GroupTexas InstrumentsDescription:
Header file containing constants, data type, and macro  definitions for the SVGEN_DQ module .
=====================================================================================History:
-------------------------------------------------------------------------------------4-15-2010  Version 1.1
------------------------------------------------------------------------------*/
#ifndef __SVGEN_DQ_H__
#define __SVGEN_DQ_H__typedef struct    { _iq  Ualpha;          // Input: reference alpha-axis phase voltage _iq  Ubeta;            // Input: reference beta-axis phase voltage _iq  Ta;                // Output: reference phase-a switching function     _iq  Tb;                // Output: reference phase-b switching function _iq  Tc;                // Output: reference phase-c switching functionUint16 N;} SVGENDQ;typedef SVGENDQ *SVGENDQ_handle;
/*-----------------------------------------------------------------------------
Default initalizer for the SVGENDQ object.
-----------------------------------------------------------------------------*/
#define SVGENDQ_DEFAULTS { 0,0,0,0,0,0 }/*------------------------------------------------------------------------------Space Vector PWM Generator (SVGEN_DQ) Macro Definition
------------------------------------------------------------------------------*/_iq Va,Vb,Vc,t1,t2,temp_sv1,temp_sv2;
Uint16 Sector = 0;  // Sector is treated as Q0 - independently with global Q#define SVGEN_MACRO(v)                                                         \\Sector = 0;                                                                  \temp_sv1=_IQdiv2(v.Ubeta);                    /*divide by 2*/                 \temp_sv2=_IQmpy(_IQ(0.8660254),v.Ualpha); /* 0.8660254 = sqrt(3)/2*/     \\
/* Inverse clarke transformation */                                             \Va = v.Ubeta;                                                             \Vb = -temp_sv1 + temp_sv2;                                                   \Vc = -temp_sv1 - temp_sv2;                                                    \
/* 60 degree Sector determination */                                            \if (Va>_IQ(0)) Sector = 1;                                                 \if (Vb>_IQ(0)) Sector = Sector+2;                                         \if (Vc>_IQ(0)) Sector = Sector+4;                                         \v.N = Sector;                                                               \
/* X,Y,Z (Va,Vb,Vc) calculations X = Va, Y = Vb, Z = Vc */                       \Va = v.Ubeta;                                                             \Vb = temp_sv1 + temp_sv2;                                                    \Vc = temp_sv1 - temp_sv2;                                                 \
/* Sector 0: this is special case for (Ualpha,Ubeta) = (0,0)*/                 \
switch(Sector)                                                                  \
{                                                                               \case 0:                                                                        \v.Ta = _IQ(0.5);                                                          \v.Tb = _IQ(0.5);                                                          \v.Tc = _IQ(0.5);                                                          \break;                                                                     \case 1:   /*Sector 1: t1=Z and t2=Y (abc ---> Tb,Ta,Tc)*/                 \t1 = Vc;                                                                  \t2 = Vb;                                                                  \v.Tb=_IQdiv2((_IQ(1)-t1-t2));                                                 \v.Ta = v.Tb+t1;              /* taon = tbon+t1     */                      \v.Tc = v.Ta+t2;              /* tcon = taon+t2     */                      \break;                                                                     \case 2:      /* Sector 2: t1=Y and t2=-X (abc ---> Ta,Tc,Tb)*/                \t1 = Vb;                                                                  \t2 = -Va;                                                                 \v.Ta=_IQdiv2((_IQ(1)-t1-t2));                                                 \v.Tc = v.Ta+t1;              /*  tcon = taon+t1        */                      \v.Tb = v.Tc+t2;              /*  tbon = tcon+t2        */                      \break;                                                                     \case 3:      /* Sector 3: t1=-Z and t2=X (abc ---> Ta,Tb,Tc)*/                    \t1 = -Vc;                                                                 \t2 = Va;                                                                  \v.Ta=_IQdiv2((_IQ(1)-t1-t2));                                                 \v.Tb = v.Ta+t1;              /*  tbon = taon+t1        */                      \v.Tc = v.Tb+t2;              /*  tcon = tbon+t2        */                      \break;                                                                     \case 4:      /* Sector 4: t1=-X and t2=Z (abc ---> Tc,Tb,Ta)*/                    \t1 = -Va;                                                                 \t2 = Vc;                                                                  \v.Tc=_IQdiv2((_IQ(1)-t1-t2));                                                 \v.Tb = v.Tc+t1;              /*  tbon = tcon+t1        */                      \v.Ta = v.Tb+t2;              /*  taon = tbon+t2        */                      \break;                                                                     \case 5:      /* Sector 5: t1=X and t2=-Y (abc ---> Tb,Tc,Ta)*/                    \t1 = Va;                                                                  \t2 = -Vb;                 /*  tbon = (1-t1-t2)/2 */                      \v.Tb=_IQdiv2((_IQ(1)-t1-t2));                                                 \v.Tc = v.Tb+t1;              /*  taon = tcon+t2        */                      \v.Ta = v.Tc+t2;                                                              \break;                                                                     \case 6:      /* Sector 6: t1=-Y and t2=-Z (abc ---> Tc,Ta,Tb)*/               \t1 = -Vb;                                                                 \t2 = -Vc;                                                                 \v.Tc=_IQdiv2((_IQ(1)-t1-t2));                                                 \v.Ta = v.Tc+t1;              /*  taon = tcon+t1        */                      \v.Tb = v.Ta+t2;              /*  tbon = taon+t2        */                      \break;                                                                     \
}                                                                               \
/*  Convert the unsigned GLOBAL_Q format (ranged (0,1)) ->.. */                  \
/*  ..signed GLOBAL_Q format (ranged (-1,1))*/                                  \
v.Ta = _IQmpy2(v.Ta-_IQ(0.5));                                                 \
v.Tb = _IQmpy2(v.Tb-_IQ(0.5));                                                 \
v.Tc = _IQmpy2(v.Tc-_IQ(0.5));                                                 \#endif // __SVGEN_DQ_H__

    Ts(时基周期寄存器的值)=2* v.HalfPerMax,v.MfuncC1,v.MfuncC2,v.MfuncC2,分别等于v.Ta,v.Tb,v.Tc。

#define PWM_MACRO(ch1,ch2,ch3,v)                                                 \\
/*  Mfuncx range is (-1,1)                                                      */  \
/*  The code below changes PeriodMax*Mfuncx range ....                          */  \
/*  from (-PeriodMax,PeriodMax) to (0,PeriodMax) where HalfPerMax=PeriodMax/2  */  \\(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax;     \(*ePWM[ch2]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC2)+ v.HalfPerMax;      \(*ePWM[ch3]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC3)+ v.HalfPerMax;      \

SVPWM原理及编程实现(Ti的库)相关推荐

  1. UEFI原理与编程(一)

    第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述: 缩略词 全名 描述 UEFI Unified Extensi ...

  2. C51应用原理与编程

    单片机,英文Micro Controller Unit,简称MCU.其内部集成了CPU.RAM(random access memory,即随机存取存储器).ROM(read-only memory, ...

  3. 《机器学习:算法原理与编程实践》的读书笔记:SMO部分最难,大部分代码基于Scikit-Learn,决策树其实用处不大

    机器学习:算法原理与编程实践 目录 [隐藏] 1 机器学习的基础 2 中文文本分类 3 决策树的发展 4 推荐系统原理 5 梯度寻优 6 神经网络初步 7 预测的技术与哲学 8 万能分类器:SVM 9 ...

  4. TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书

    作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...

  5. PennyLane | 用于量子计算机可微分编程的跨平台Python库

    PennyLane简介 A cross-platform Python library for differentiable programming of quantum computers. Tra ...

  6. 收藏,7个学习Python编程的最佳开源库!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 仅做学术分享,如有侵权,联系删除 转载于 :机器学习算法与Python实战 很多伙伴们 ...

  7. 郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...

    7.1.1 回归与现代预测 7.1.2 最小二乘法 7.1.3 代码实现 (1)导入数据 def loadDataSet(self,filename): #加载数据集X = [];Y = []fr = ...

  8. python:程序猿的方式在元宵佳节之际,带你设计【东方明珠】动画浪漫烟花秀(python编程利用Tkinter+PIL库)

    python:程序猿的方式在元宵佳节之际,带你设计[东方明珠]动画浪漫烟花秀(python编程利用Tkinter+PIL库) 目录 设计动画展示 设计思路 核心代码 设计动画展示 设计思路 核心代码 ...

  9. python进阶 多线程编程 —— threading和queue库实现多线程编程

    python进阶 多线程编程 -- threading和queue库实现多线程编程) 摘要 多线程实现逻辑封装 模型参数选择实例 摘要 本文主要介绍了利用python的 threading和queue ...

最新文章

  1. Python学习笔记《Python核心编程》第4章Python对象
  2. centeros7安装docker
  3. 奖学金pascal程序
  4. 找出两列表的共有元素python_python 找出两个dataframe中不同的元素
  5. 拥有一台你的轻量应用服务器Lighthouse
  6. python矩阵教程_numpy教程:矩阵matrix及其运算
  7. php kibana查询,搜索您的数据 | Kibana 用户手册 | Elastic
  8. CodeForces - 816A Karen and Morning 解题
  9. Feign如何针对单个服务屏蔽Hystrix熔断功能
  10. android 5.0rom官方,Android 5.0刷机包开放下载 升级需谨慎
  11. 【转载】在美国找工作秘籍
  12. 国美易卡的Java软件的特点
  13. 离职创业三年后,我来谈谈我的感受
  14. Assuming drive cache: write through 因为硬盘内存不足VM虚拟机开不了机的问题
  15. 以txt为数据源的随机点名系统
  16. 华为鸿蒙0系统桌面图标不能移动,win10桌面图标无法移动怎么办_win10为什么不能拖动桌面图标...
  17. 玩转Tomcat高级篇
  18. DTOJ 1486:分数(score)
  19. tp计算机术语是什么意思,tp是什么意思呀?谁能把术语给我解释一下? – 手机爱问...
  20. 在SLED 10下ADSL的配置方法

热门文章

  1. wireshark抓rtsp rtp rtcp包手把手教你分析包结构 H264 H265
  2. python3 币种汇率计算
  3. 自动切换输入法 mac版能让你在不同的应用之间自动的切换输入法
  4. c# wifi串口通信_在C#中实现串口通信的方法
  5. 解决:teamview持续很久显示连接未就绪
  6. 无法连接到宽带连接被远程计算机终止,无法连接到宽带连接?
  7. Python第三次(下)
  8. 设备信息之硬盘序列号、设备序列号、操作系统安装时间、IP地址
  9. 石墨文档链接不到服务器,石墨文档怎么打开链接
  10. Android10有sdcard读写权限,仍无法读写sdcard中文件问题解决