SVPWM原理及编程实现(Ti的库)
这篇文章中介绍到的符号及其含义参考:
永磁同步电机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的库)相关推荐
- UEFI原理与编程(一)
第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述: 缩略词 全名 描述 UEFI Unified Extensi ...
- C51应用原理与编程
单片机,英文Micro Controller Unit,简称MCU.其内部集成了CPU.RAM(random access memory,即随机存取存储器).ROM(read-only memory, ...
- 《机器学习:算法原理与编程实践》的读书笔记:SMO部分最难,大部分代码基于Scikit-Learn,决策树其实用处不大
机器学习:算法原理与编程实践 目录 [隐藏] 1 机器学习的基础 2 中文文本分类 3 决策树的发展 4 推荐系统原理 5 梯度寻优 6 神经网络初步 7 预测的技术与哲学 8 万能分类器:SVM 9 ...
- TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书
作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...
- PennyLane | 用于量子计算机可微分编程的跨平台Python库
PennyLane简介 A cross-platform Python library for differentiable programming of quantum computers. Tra ...
- 收藏,7个学习Python编程的最佳开源库!
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 仅做学术分享,如有侵权,联系删除 转载于 :机器学习算法与Python实战 很多伙伴们 ...
- 郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...
7.1.1 回归与现代预测 7.1.2 最小二乘法 7.1.3 代码实现 (1)导入数据 def loadDataSet(self,filename): #加载数据集X = [];Y = []fr = ...
- python:程序猿的方式在元宵佳节之际,带你设计【东方明珠】动画浪漫烟花秀(python编程利用Tkinter+PIL库)
python:程序猿的方式在元宵佳节之际,带你设计[东方明珠]动画浪漫烟花秀(python编程利用Tkinter+PIL库) 目录 设计动画展示 设计思路 核心代码 设计动画展示 设计思路 核心代码 ...
- python进阶 多线程编程 —— threading和queue库实现多线程编程
python进阶 多线程编程 -- threading和queue库实现多线程编程) 摘要 多线程实现逻辑封装 模型参数选择实例 摘要 本文主要介绍了利用python的 threading和queue ...
最新文章
- Python学习笔记《Python核心编程》第4章Python对象
- centeros7安装docker
- 奖学金pascal程序
- 找出两列表的共有元素python_python 找出两个dataframe中不同的元素
- 拥有一台你的轻量应用服务器Lighthouse
- python矩阵教程_numpy教程:矩阵matrix及其运算
- php kibana查询,搜索您的数据 | Kibana 用户手册 | Elastic
- CodeForces - 816A Karen and Morning 解题
- Feign如何针对单个服务屏蔽Hystrix熔断功能
- android 5.0rom官方,Android 5.0刷机包开放下载 升级需谨慎
- 【转载】在美国找工作秘籍
- 国美易卡的Java软件的特点
- 离职创业三年后,我来谈谈我的感受
- Assuming drive cache: write through 因为硬盘内存不足VM虚拟机开不了机的问题
- 以txt为数据源的随机点名系统
- 华为鸿蒙0系统桌面图标不能移动,win10桌面图标无法移动怎么办_win10为什么不能拖动桌面图标...
- 玩转Tomcat高级篇
- DTOJ 1486:分数(score)
- tp计算机术语是什么意思,tp是什么意思呀?谁能把术语给我解释一下? – 手机爱问...
- 在SLED 10下ADSL的配置方法
热门文章
- wireshark抓rtsp rtp rtcp包手把手教你分析包结构 H264 H265
- python3 币种汇率计算
- 自动切换输入法 mac版能让你在不同的应用之间自动的切换输入法
- c# wifi串口通信_在C#中实现串口通信的方法
- 解决:teamview持续很久显示连接未就绪
- 无法连接到宽带连接被远程计算机终止,无法连接到宽带连接?
- Python第三次(下)
- 设备信息之硬盘序列号、设备序列号、操作系统安装时间、IP地址
- 石墨文档链接不到服务器,石墨文档怎么打开链接
- Android10有sdcard读写权限,仍无法读写sdcard中文件问题解决