SVPWM算法程序
SVPWM的实现过程(附C代码)
SVPWM 算法的实现过程1、算法的输入与输出输入u s α、u s β 输出:三个比较寄存器的值CompA 、CompB 、CompC根据给定的二相静止坐标系中两个电压分量u s α、u s β,根据电压矢量所在的扇区选择相邻的两个的电压矢量,并计算相邻两个电压矢量的作用时间,按照7段式SVPWM 对CompA 、CompB 、CompC 进行赋值,算法的流程如下:2、扇区计算空间矢量调制的第一步是判断由u s α、u s β所决定的空间电压矢(U ref )量所处的扇区。
假定合成的电压矢量落在第 I 扇区,可知其等价条件如下:0<arctan(u s β/u s α)<60 º 以上等价条件再结合矢量图几何关系分析,可以判断出合成电压矢量。
落在第N 扇区的充分必要条件,得出下表1-1:ref s β 3u s α-u s β 、− 3u s α-u s β 三式决定,因此令:1232222U U U U U U ββαβα⎧=⎪⎪⎪=-⎨⎪⎪=--⎪⎩再定义,若U 1>0 ,则 A=1,否则 A=0; 若U 2>0 ,则 B=1,否则 B=0;若U 3>0 ,则 C=1,否则 C=0。
可以看出 A ,B ,C 之间共有八种组合,但由判断扇区的公式可知 A ,B ,C 不会同时为 1 或同时为 0,所以实际的组合是六种,A ,B ,C 组合取不同的值对 应着不同的扇区,并且是一一对应的,因此完全可以由 A ,B ,C 的组合判断所在的扇区。
为区别六种状态,令 X=4*C+2*B+A ,则可以通过下表计算参考电压 矢量 U ref 所在的扇区。
表 1-2 X 值与扇区对应关系采用上述方法,只需经过简单的加减及逻辑运算即可确定所在的扇区,对于提高系统的响应速度和进行仿真都是很有意义的。
3、扇区相邻电压矢量的作用时间计算当电压矢量位于第一扇区时,欲用 U 4、U 6、U 0 及 U 7 合成,用平均值等效可得:4466ref S U T U T U T *=*+*因为 |U 4|=|U 6|=2U dc /3 ,所以可以得到各矢量的状态保持时间为: T 6=3T s U dc u s βT 4=Ts U dc(32u s α−32u s β)当电压矢量位于其他扇区时同理可算出相邻电压的作用时间: 第二扇区:T 6=T s U dc(32u s α+32u s β) T 2=T s U dc(−32u s α+32u s β) 第三扇区:T 2= 3T sUdcu s βT 3=−T s U dc(32u s α+32u s β) 第四扇区:T 1=−3T s U dcu s β T 3=T s U dc(−32u s α+32u s β)第五扇区:T1=−T sU dc (32u sα+32u sβ)T5=T sU dc(32u sα−32u sβ)第六扇区:T5=−3T sU dc u sβT4=T sU dc(32u sα+32u sβ)令x=3T sU dc u sβ,y=T sU dc(32u sα+32u sβ),z=T sU dc(32u sα−32u sβ),则在每个扇区相邻的两电压矢量的作用时间如下表所示:4、计算比较寄存器的值通过上面的计算,已经的到了电压矢量所在的扇区以及相邻电压矢量的作用时间,接下来的问题是如何根据上面的结果来计算寄存器的值,使得DSP的ePWM模块发出正确的脉冲信号控制三相电桥。
SVPWM的原理和法则推导和控制算法详细讲解
SVPWM的原理和法则推导和控制算法详细讲解SVPWM(Space Vector Pulse Width Modulation)是一种三相不对称多电平PWM调制技术。
其原理是将三相电压转换为空间矢量信号,通过调制的方式控制逆变器输出电压,以实现对三相电机的控制。
下面将详细介绍SVPWM的原理、法则推导以及控制算法。
一、原理:SVPWM的原理在于将三相电压分解为两相,即垂直于矢量且相互垂直的两个分量,直流坐标分量和交流坐标分量。
其中,直流坐标分量用于产生直流电压,交流坐标分量用于产生交流电压。
通过对直流和交流坐标的调制,可以生成所需的输出电压。
二、法则推导:1.将三相电压写成直流坐标系下的矢量形式:V_dc = V_d - 0.5 * V_a - 0.5 * V_bV_ac = sqrt(3) * (0.5 * V_a - 0.5 * V_b)2. 空间矢量信号通过电源电压和载波进行调制来生成输出电压。
其中,电源电压表示为空间矢量V。
根据配比原则,V_dc和V_ac分别表示空间矢量V沿直流和交流坐标的分量。
V = V_dc + V_ac3.根据法则推导,导出SVPWM的输出电压:V_u = 1/3 * (2 * V_dc + V_ac)V_v = 1/3 * (-V_dc + V_ac)V_w = 1/3 * (-V_dc - V_ac)三、控制算法:1. 设定目标矢量Vs,将其转换为直流坐标系分量V_dc和交流坐标系分量V_ac。
2.计算空间矢量的模长:V_m = sqrt(V_dc^2 + V_ac^2)3.计算空间矢量与各相电压矢量之间的夹角θ:θ = arctan(V_ac / V_dc)4.计算换向周期T和换相周期T1:T=(2*π*N)/ω_eT1=T/6其中,N为极对数,ω_e为电机的角速度。
5.根据目标矢量和夹角θ,确定目标矢量对应的扇区。
6.根据目标矢量和目标矢量对应的扇区,计算SVPWM的换相角度β和占空比:β=(2*π*N*θ)/3D_u = (V_m * cos(β) / V_dc) + 0.5D_v = (V_m * cos(β - (2 * π / 3)) / V_dc) + 0.5D_w=1-D_u-D_v以上步骤即为SVPWM的控制算法。
SVPWM算法设计_
SVPWM 算法设计一 算法原理:1,逆PARK 变换(InversePark()),旋转坐标系到静止坐标系的变换由于矢量控制算法是在旋转坐标系d-q 坐标系中完成的,当给定量(Vd, Vq )计算出来后,需要转换成静止坐标系,最终转化成对定子交流量的控制。
逆PARK 变换公式如下:⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡-=⎥⎦⎤⎢⎣⎡q d V V V V θθθθβαcos sin sin cos (θ为电角度,d 轴与α轴的夹角)2,SVPWM 算法(Svpwm())1) 计算扇区N从电压空间矢量图可以看出,当Vref 在0 - 60度时,位于IV 扇区;在60 – 120度时,位于VI 扇区;在120 – 180度时,位于II 扇区;在180 – 240度时,位于III 扇区;在240-300度时,位于I 扇区;在300 – 360图1 SVPWM 在中断服务程序中的位置度时,位于V 扇区。
令:)3(2/1)3(2/1βαβαβV V V V V V V V c b a --=-==(逆CLARK 变换2/3)这三个电压值的正负决定了电压矢量所属的扇区。
总结规律,扇区的计算可表示为:if(Va>0) a=0; else a=1; if(Vb>0) b=0; else b=1; if(Vc>0) c=0; else c=1; N=a+2*b+4*c;2) 计算矢量作用时间t start ,t end 与t Z对一个给定的矢量V ref,可以用相邻的两个非零矢量与两个零矢量(V 0,V 7)根据平均值等效的原则得到。
当V ref 在IV 扇区时,计算公式如下:ZZ Zt t t t V t V t V T ++⨯+⨯+⨯=⨯646644从而得到, 6464)/3()3(2/1)/3(t t T t V V T t V V V T t Z DC a DC --=⨯=-⨯=ββ类似的,当V ref 在VI 区时,6226)3(2/1)/3()3(2/1)/3(t t T t V V V T t V V V T t Z DC DC --=+-⨯=+⨯=βαβα当V ref 在II 区时,3232)3(2/1)/3()/3(t t T t V V V T t V V T t Z DC DC --=--⨯=⨯=βαβ总结规律如下表(令DC V T K /3=)以上是在电压矢量逆时针旋转时的规律,t start 、t end 是顺着电压矢量旋转方向前后两相邻矢量的作用时间。
SVPWM算法实现
SVPWM 算法分析Vicho_HU交流电机输入三相正弦电流的最终目的是在电机气隙中形成圆形旋转磁场,以产生恒定的转矩。
SVPWM 调制方法把逆变器与交流电机视为一体,按照跟踪圆形磁场来驱动逆变器以实现对电机的控制。
图3.1给出了三相VSI-交流电机调速系统主电路原理图。
令S a 、S b 、S c 为VSI 三相桥臂的开关状态量,S j(j=a,b,c)=1表示上桥臂VT j(j=1,3,5)开关管导通;S j(j=a,b,c)=0表示下桥臂VT j(j=4,6,2)开关管导通。
a bcVT 1VT 4VT 3VT 6VT 5VT 2U dc图3.1 三相VSI-交流电机调速系统主电路原理图三相两电平电压源型逆变器(VSI)通过六个开关管的通断形成八个空间电压矢量U i (i=0~7),其中U 0与U 7为零矢量。
在一个周期内,六个空间电压矢量(U i (i=1~6))所形成的磁链轨迹是正六边形。
若要磁链形成圆形轨迹,可以采用相邻的两个空间电压矢量U i 和U i+x 进行时间上的线性合成以形成圆形磁链的空间电压矢量U s 来实现SVPWM 控制。
图3.2给出了SVPWM 的向量图。
实现SVPWM 模块可以分为以下几个步骤:(1) 确定合成给定空间电压矢量U s 的电压矢量U i 和U i+x ; (2) 确定电压矢量U i 和U i+x 的作用时间T 1和T 2; (3) 确定空间电压矢量的切换点。
图3.2 SVPWM向量图要实现步骤(1),必须借助一个中间变量即扇区S ector,扇区是电压矢量(U i(i=1~6))将空间划分成六个区域即图3.2中的S(1)~S(6)。
每个扇区所对应的电压矢量U i和U i+x是不相同的,表3.1给出了扇区S(1)~S(6)与空间电压矢量U i和U i+x 对应关系。
表3.1扇区S(1)~ S(6)的空间电压矢量U i和U i+x对应关系表在确定扇区与与空间电压矢量U i和U i+x的对应关系的基础上,只要确定了空间电压矢量U s的扇区即可确定合成给定空间电压矢量U s的电压矢量U i和U i+x。
svpwm的原理及法则推导和控制算法详解
svpwm的原理及法则推导和控制算法详解SVPWM是一种空间矢量脉宽调制技术,常应用于交流电机的无传感器矢量控制方案中。
SVPWM的原理及法则推导涉及到三相交流电机理论、空间矢量分析以及脉宽调制等内容。
下面将对SVPWM的原理、法则推导和控制算法进行详解。
1.SVPWM原理SVPWM的原理是基于交流电机的三相正弦波电流与空间矢量之间的转换关系。
交流电机的电流空间矢量可以表示为一个复数形式,即电流空间矢量(ia, ib, ic) = ia + jib。
空间矢量在空间中对应一个电机角度θ。
SVPWM的目标是控制交流电机的三相正弦波电流,使其与预期空间矢量一致,从而控制电机输出力矩和转速。
SVPWM首先对预期空间矢量进行空间矢量分解,将其分解为两个基本矢量Va和Vb。
然后根据电机角度θ和两个基本矢量的大小比例,计算出三相正弦波电流的幅值和相位。
2.SVPWM法则推导SVPWM的法则推导是为了实现精确控制电机的输出力矩和转速。
在法则推导中,首先需要建立电流与电压之间的关系,然后计算出三相正弦波电流的幅值和相位。
最后根据幅值和相位生成PWM波形,控制交流电机的动作。
具体推导过程如下:-步骤1:计算Va和Vb的大小比例,根据预期空间矢量和电机角度θ,可以通过三角函数计算出Va和Vb的幅值。
-步骤2:计算Vc,由于交流电机为三相对称系统,Vc的幅值等于Va和Vb的和,相位等于Va相位加120度。
-步骤3:计算三相正弦波电流的幅值和相位,幅值可以通过输入电压和阻抗模型计算得到。
-步骤4:根据幅值和相位生成PWM波形。
3.SVPWM控制算法SVPWM控制算法实现了对交流电机输出力矩和转速的精确控制。
- 步骤1:通过位置传感器或者传感器less技术获取电机角度θ。
-步骤2:根据预期输出力矩和转速,计算出预期空间矢量。
-步骤3:根据电机角度θ和预期空间矢量,计算出Va和Vb的幅值。
-步骤4:根据Va和Vb的大小比例和Vc的相位,生成PWM波形。
SVPWM控制算法
精心整理电力电子课程作业量PWMSVPWMSVPWM第二章 SVPWM 分析2.1 SVPWM 算法指令是矢量控制系统给出的矢量信号ref U ,它以某一角频率θτω=在空间逆时针旋转,当它旋转到矢量图的某个060扇区中时,系统选中该区间的所需的基本电压空间矢量,并以此矢量所对应的状态去驱动功率开关元件动作。
当控制矢量在空间旋转0360后,逆变器就能输出一个周期的正弦波电压。
在高性能的交流调速及三相逆变系统中,通常采用三相轴系到βα-坐标系的变换。
闭环控制系统中,参考电压矢量的βα-分量αU 和βU 通过闭环控制器的输出很容易获得;开环控制系统中,将期望输出的电压映射到βα-坐2.2 3/2变换然而,旋转磁动势并不一定非要三相不可,除单相以外,二相、三相、四相……等任意对称的多相绕组,通入平衡的多相电流,都能产生旋转磁动势,当然以两相最为简单。
图2-4中绘出了两相静止绕组α和β,它们在空间互差900,通入时间上互差900的两相平衡交流电流,也能产生旋转磁动势F。
当图2-4a和b的两个旋转磁动势大小和转速都相等时,即认为图2-4b 的两相绕组与图2-4a的三相绕组等效。
再看图2-4c中的两个匝数相等且互相垂直的绕组d和q,其中分别通过现在先考虑上述的第一种坐标变换——在三相静止绕组A、B、C和两相静止绕组α、β之间的变换,或称三相静止坐标系和两相静止坐标系间的变换,简称3s/2s变换。
图2-5中绘出了A、B、C和α、β两个坐标系,为方便起见,取A轴和α轴重合。
设三相绕组每项有效匝数为N3,两相绕组每相有效匝数位N2,各相磁动势为有效匝数与电流的乘积,其空间矢量均位于有关相的坐标轴上。
量分别为u和i,在行新的坐标系下,电压和电流向量变成u'和i',其中[][][]121212T n T n T n u u u u i i i i u u u u ⎧=⎪⎪=⎪⎨''''=⎪……… (2-4)其中E 为单位矩阵。
svpwm代码算法加注释
svpwm代码算法加注释SVPWM (Space Vector Pulse Width Modulation) 是一种常用于电机控制的PWM方法。
以下是一个简单的SVPWM算法的Python实现,并附有注释:```pythonimport numpy as np定义扇区数目N = 3定义与扇区数目对应的角度Sector_angle = ([0, 60, 120, 180, 240, 300])定义一个周期内的脉冲时间数组T1 = (N)T2 = (N)T0 = (N)SVPWM算法def svpwm(Vd, Vq):global N, Sector_angle计算矢量在dq轴上的分量并归一化d = Vd / (Vd2 + Vq2)q = Vq / (Vd2 + Vq2)计算当前矢量所在的扇区sector = (60 q) + 1计算当前矢量在扇区内的偏移角度theta = (60 q - Sector_angle[sector - 1]) % 60根据偏移角度计算T1和T2的长度T1[sector - 1] = d (theta) + q (theta)T2[sector - 1] = d (theta) - q (theta)T0的长度由剩下的时间决定,一个周期为1T0[sector - 1] = 1 - T1[sector - 1] - T2[sector - 1]返回T1, T2和T0的时间数组return T1, T2, T0```这个代码首先定义了扇区的数量(N=3)和每个扇区的角度。
然后,它定义了在一个PWM周期内,T1、T2和T0的初始长度都为0。
最后,`svpwm`函数接收两个输入:Vd和Vq,分别表示在d轴和q轴上的电压分量。
函数首先计算这两个分量的归一化长度,然后确定当前的扇区和偏移角度。
根据这些信息,函数计算出T1和T2的长度,然后计算出T0的长度(在一个PWM周期内剩下的时间)。
SVPWM程序流程
SVPWM程序流程SVPWM(Space Vector Pulse Width Modulation,空间矢量脉宽调制)是一种针对三相电力变频器的调制算法,用于控制电机的速度和位置。
它向电机提供的是一个平滑的、恒定的输出,根据需要,还可以提供更高的效率和低噪声。
下面是SVPWM的程序流程。
1.首先,设定一个控制周期Tp,通常为几微秒至几毫秒。
控制周期是指电机控制器对电机进行一次新的计算和控制的时间。
2.初始化参数。
在每个控制周期开始时,需要初始化一些参数,例如注入的电流、电压、电机状态参数等。
3.设置参考矢量。
根据所需的电机速度和位置,设置参考矢量。
这些参考矢量确定了电机所需的电流矢量。
4.计算矢量时序。
根据设置的参考矢量,计算出每个矢量的持续时间。
每个电流矢量会在一段时间内保持不变。
5.计算电流波形。
通过电流矢量的持续时间和幅值,计算出每个电流矢量的波形。
波形通常是一个三相正弦波形。
6.选择最佳矢量。
根据所计算出的电流波形和每个矢量的持续时间,选择最佳的电机矢量。
最佳矢量是指使电流矢量与参考矢量尽可能接近的矢量。
7.计算PWM信号。
根据选择的最佳矢量,计算出每个相位的PWM信号。
PWM信号通常是一个方波信号,其占空比由最佳矢量的持续时间决定。
8.更新电机状态。
根据计算出的PWM信号,更新电机状态参数,例如电机速度、位置、电流等。
9.输出PWM信号。
将计算出的PWM信号输出到电机驱动器中,驱动器通过PWM信号控制电机转速和位置。
10.延时一段时间。
由于控制循环是一个周期性的过程,为了控制的稳定性和准确性,需要在每个控制周期之间延时一段时间。
11.重复上述步骤。
循环执行上述步骤,直到需要改变电机速度和位置或停止电机工作。
总结:SVPWM程序流程是一个经典的控制算法流程,通过对电机的控制周期内参数的初始化、参考矢量的设置、计算矢量时序和波形、选择最佳矢量、计算PWM信号、更新电机状态等一系列步骤,最终实现对电机速度和位置的控制。
SVPWM算法详解_已标注重点_
SVPWM算法详解_已标注重点_Space Vector Pulse Width Modulation (SVPWM)是一种高性能的PWM调制技术,它通过合理地改变电压矢量的幅值和相位来控制三相逆变器输出电压的波形,从而实现对电机的精确控制。
以下是对SVPWM算法的详细解析,并标注了重点。
1.SVPWM基本原理SVPWM算法的基本原理是通过合理地选择电压矢量的幅值和相位,使得逆变器输出的电压矢量合成后的波形尽可能贴近所需的电压波形。
SVPWM将电压空间矢量分为了七个扇区,每个扇区由两个最近邻的标准矢量和一个零矢量组成。
2.SVPWM算法步骤a.确定电机的转速和电压矢量的大小,计算出所需的矢量角度θm。
b.将θm转换为电流矢量的角度θα和θβ,这需要对θm进行正弦和余弦变换。
c.计算出电流矢量的幅值iα和iβ,这需要通过电流的大小和电机的特性得出。
d.将iα和iβ分解为三个分量:iα_d、iβ_d和i0,其中iα_d 和iβ_d是两个正交轴上的电流分量,i0是零序分量。
e.根据电流分量iα_d、iβ_d和i0,可以计算出空间矢量的幅值和相位。
f.计算出三个最近邻的标准矢量和一个零矢量,这些矢量分别位于不同的扇区。
g.根据所需的电流分量和空间矢量的幅值,可以计算出各个标准矢量的幅值和相位。
h.通过插值计算出最终的电压矢量。
3.SVPWM算法的优点a.SVPWM算法实现了绝对最优的波形质量,可实现较低的失真和较高的电机效率。
b.由于SVPWM算法能够使得电机电流和电压保持正弦波形,因此可以减小电机的损耗和噪音。
c.SVPWM算法具有较高的控制精度和响应速度,可以实现准确的电机控制。
d.SVPWM算法可用于控制各种类型的电机,包括交流电机、直流电机和步进电机等。
4.SVPWM算法的应用a.SVPWM算法广泛应用于各种类型的电机控制系统,包括工业驱动、电力系统、电动汽车等领域。
b.SVPWM算法可以用于电机的速度闭环控制、位置闭环控制和扭矩闭环控制等。
svpwm的在单片机中的简单写法
svpwm的在单片机中的简单写法
空间矢量脉宽调制(SVPWM)是一种用于控制电机的高效PWM策略。
在单片机中实现SVPWM需要一些计算和编程技巧。
以下是一个简单的SVPWM实现步骤:
1.确定参考电压矢量:首先,你需要确定参考电压矢量在电压空间矢量图中的位置。
这通常涉及到将参考电压矢量映射到六个基本区域中的一个。
2.计算两个有效电压矢量的作用时间:根据参考电压矢量所在的区域,选择两个相邻的有效电压矢量。
计算这两个有效电压矢量的作用时间,通常用占空比来表示。
3.计算零电压矢量的作用时间:零电压矢量用于在两个有效电压矢量之间插入适当的“零”时间段,以平滑地过渡并减少电磁干扰(EMI)。
计算零电压矢量的作用时间,以确保平滑的过渡。
4.生成PWM信号:根据计算出的有效电压矢量和零电压矢量的作用时间,生成相应的PWM信号。
这些PWM信号将用于控制电机驱动器的开关状态,以产生所需的电压矢量。
5.编程实现:使用单片机编程语言(如C或汇编)实现上述步骤。
这可能包括定义和初始化必要的变量,进行数学计算,以及配置PWM模块以生成所需的PWM信号。
6.测试和调试:在实际应用之前,进行充分的测试和调试是必要的。
这包括验证SVPWM算法的正确性,确保电机按照预期运行,并调整参数以优化性能。
请注意,以上是一个简化的SVPWM实现过程。
实际应用中可能需要更复杂的算法和优化措施,具体取决于电机的类型、控制要求和单片机的性能。
SVPWM程序流程
SVPWM程序流程
1.程序中定义的变量:
3的Q12数据
sqrt32 存放2
1的Q12数据
sqrt3inv 存放
3
PWMPRD PWM周期
tmp、tmp1 变量暂存寄存器
ua、ub、uc SVPWM输入三相正弦电压
usalfa、usbeta alfa轴、beta轴参考电压
sintetaA、sintetaB 两个相差120度的正弦角度值,
index、indexB sintetaA、sintetaB各自的查表索引,整数
t1、t2 SVPWM两个相邻有效矢量的作用时间T1,T2
X、Y、Z SVPWM 功率器件导通时间X、Y、Z
Sector 扇区号,运行顺序(逆时针)为:3154623
Vref1、Vref2、Vref3 判断扇区用到的3个变量Vref1,Vref2,Vref3
U 外部电压设定值
Umax 输入SVPWM的电压最大值
set_f 外部频率设定值
teta 角度值,小数,经四舍五入取整得到查表索引index add_teta 每次中断进去的角度增量add_teta=360*f*中断间隔时间adtmp、adtmp2 如果两个寄存器数值不一样,就产生A/D中断一次VDC 直流侧母线电压
VDCinvT 存放PWMPRD/VDC数据值
taon 、tbon、tcon 矢量切换点
2.程序流程。
svpwm计算方式
svpwm计算方式SVPWM计算方式SVPWM,即Space Vector Pulse Width Modulation(空间矢量脉宽调制),是一种常用于交流电机驱动系统中的调制方式。
它通过控制电压矢量的方向和幅值,来实现对电机的精确控制。
在SVPWM计算方式中,通过对三相电压进行合理的分解和计算,可以得到最终的PWM信号,从而实现对电机的精确控制。
SVPWM的计算方式主要包括以下几个步骤:1. 坐标变换:将三相电压变换到静止坐标系(dq坐标系),即将三相电压分解为直轴电压(d轴电压)和交轴电压(q轴电压)。
这一步的目的是简化计算,使得接下来的计算更加方便。
2. 矢量分解:根据坐标变换得到的d轴电压和q轴电压,可以得到电压矢量的幅值和相位。
通常情况下,电压矢量的幅值为恒定值,相位为根据控制要求进行调整。
3. 矢量选择:根据控制要求,选择合适的电压矢量。
在SVPWM中,电压矢量通常有7种选择,分别为零矢量、正矢量和负矢量。
根据控制要求,选择合适的电压矢量。
4. 占空比计算:根据选择的电压矢量,计算占空比。
占空比表示PWM信号的高电平时间与周期时间的比值,通过调整占空比可以控制电机的转速和扭矩。
在SVPWM中,通过计算得到的占空比可以保证电机的转速和扭矩的精确控制。
5. PWM信号生成:根据计算得到的占空比,生成最终的PWM信号。
在SVPWM中,PWM信号一般由6个脉冲信号组成,分别对应电机的A、B、C三相。
通过调整PWM信号的占空比和频率,可以实现对电机的精确控制。
在实际应用中,SVPWM计算方式具有很高的精度和效率。
通过合理选择电压矢量和计算占空比,可以实现对电机的精确控制,同时还可以减小电机的功率损耗和噪音。
因此,SVPWM计算方式广泛应用于各种交流电机驱动系统中。
SVPWM计算方式是一种常用的交流电机调制方式,通过对三相电压的合理分解和计算,可以实现对电机的精确控制。
在实际应用中,SVPWM计算方式具有很高的精度和效率,可以满足各种电机控制的需求。
SVPWM算法详解(已标注重点)
3 SVPWM的原理及实现方法随着电压型逆变器在高性能电力电子装置(如交流传动、不间断电源和有源滤波器)中的广泛应用,PWM控制技术作为这些系统的公用技术,引起人们的高度重视,并得到越来越深入的研究。
本章首先推导出SVPWM的理论依据,然后给出5段式和7段式SVPWM的具体实现方法。
3.1 SVPWM的基本原理空间矢量PWM从电机的角度出发,着眼于如何使电机获得幅值恒定的圆形旋转磁场,即磁通正弦。
它以三相对称正弦波电压供电时交流电机的理想磁通圆为基准,用逆变器不同的开关模式所产生的实际磁通去逼近基准圆磁通,并由它们比较的结果决定逆变器的开关状态,形成PWM波形。
由于该控制方法把逆变器和电机看成一个整体来处理,所得的模型简单,便于微处理器实时控制,并具有转矩脉动小、噪声低、电压利用率高的优点,因此目前无论在开环调速系统或闭环调速系统中均得到广泛的应用[2]。
设交流电机由理想三相对称正弦电压供电,有[2][14]cos2cos34cos3ssAsB ssCstuu tutωωπωπ⎡⎤⎢⎥⎢⎥⎡⎤⎢⎥⎛⎫⎢⎥=-⎢⎥⎪⎢⎥⎝⎭⎢⎥⎢⎥⎣⎦⎢⎥⎛⎫-⎢⎥⎪⎝⎭⎣⎦(3.1)其中,LU为电源线电压的有效值;LUsω电源电压的角频率,2s sfωπ=。
由于三相异步电动机的定子绕组空间上呈互差1200分布,定义电压空间矢量为2433()j jS sA sB sCU k U U e U eππ=++(3.2)其中,SU为电压空间矢量,考虑到不同的变换,k可以取不同的值,如功率不变,电压电流幅值不变等[15~18]。
所采用交流电机的定子坐标系如图3.1所示。
图3.1 交流电动机定子坐标系为了使合成空间矢量在静止三相坐标轴上的投影和分矢量相等,将k 值取为23,(这也是Park 变化所采用的系数)。
所以电压空间矢量可以表示为24332()3j j S sA sB sC U U U e U e ππ=++ (3.3)将(3.1)式中的值代入式(3.3)可得理想供电电压下的电压空间矢量23()32j t j t S m m U U e U e ωω--== (3.4)其中,m U =; 可见理想情况下,电压空间矢量为幅值不变的圆形旋转矢量。
SVPWM详解及实现代码
SVPWM控制算法及代码实现本文针对SVPWM控制算法实现过程进行详细推导,已及对最终PWM模块输出进行完整图解,并根据SVPWM实行过程附带对应源代码,以便深入理解分析SVPWM算法。
SVPWM技术目的:通过基本空间矢量对应的开关状态组合,得到一个给定的参考电压矢量U ref。
电压矢量以ω=2πf角速度旋转,旋转一周时间T= 1/f;若载波频率为f s,则频率比n = f s/f。
如此将一个周期切割为n个小增量,则每个增量角度为∆θ = 2π/n = 2πf/f s = 2πT s/T。
1.基本矢量推导以扇区Ⅰ为例,如图1-1,将U4、U6及零矢量(U0和U7)合成U ref,其中U4和U6分别作用时间为T4和T6,零矢量作用时间为T0,于是有:T s=T4+T6+T0(1-1)U ref T s=U4T4+U6T6(1-2)图1-1 扇区Ⅰ的电压矢量合成与分解图图1-2 电压矢量图在α/β参考坐标系中,令U ref和U4的夹角为θ,则可以得到:Uα=T4T s |U4|+T6T s|U6|cosπ3(1-3)Uβ=T6T s |U6|sinπ3(1-4)由于|U4| = |U6| = 2Udc/3,从而计算出T4和T6,如下T4=√3T sU dc (√32Uα−12Uβ)(1-5)T6=√3T sU dcUβ(1-6)则零矢量电压所分配时间为(7段式):T0=T7=(T s−T4−T6)/2(1-7)同理,可计算出其它扇区矢量作用时间如表1-1所示:表1-12.扇区判断通过上述对扇区矢量时间的推导可知实现SVPWM调制的实时信号,但实现SVPWM调制的首要条件是知道参考电压U ref所在的区间位置,才能利用所在扇区的相邻两电压矢量和适当的零矢量来合成参考电压矢量。
因此,空间矢量调制的第一步则是通过已知的参量来判断空间电压矢量所处的扇区。
由于计算扇区矢量作用时间使用到Uα和Uβ,且Uα和Uβ可由Clarke变换轻易获取,通过此参量不仅可以判断空间电压矢量所处扇区,还可以获得扇区矢量作用时间。
变频调速svpwm技术的原理_算法与应用
变频调速-SVPWM技术的原理、算法与应用引言变频调速(Variable Frequency Drive, VFD)是一种将电机转速与输出频率相匹配的控制技术,广泛应用于工业生产中。
在变频调速技术中,Space Vector Pulse Width Modulation (SVPWM) 是一种常用的调制算法,它能够通过调节电压和频率来实现电机的精确控制。
本文将介绍SVPWM技术的原理、算法及应用。
原理SVPWM技术基于矢量控制原理,通过调整电压的大小和相位来控制电机转速。
其基本原理如下:1.矢量空间分解:将三相电压转换为一个大小和方向均可调节的矢量。
这个矢量可以由相量分解法等转换得到。
2.矢量生成:根据所需的电机状态,通过矢量合成算法生成一个控制电压矢量。
生成的矢量包含了相应的大小和相位信息。
3.矢量调制:将生成的矢量转换为三相电压信号,用于驱动电机。
矢量调制通常采用PWM技术,将矢量电压信号转换为脉冲宽度调制(PulseWidth Modulation, PWM)信号。
4.PWM波形生成:通过对调制后的电压信号进行PWM调制,获得电机驱动所需的波形信号。
常见的PWM调制方法有SVPWM、SPWM等。
算法SVPWM算法是一种将参考矢量与实际电机状态进行比较的控制算法。
它通过将矢量和电机状态比较,并调整控制电压以使其接近所需的矢量,从而控制电机速度。
SVPWM算法的具体步骤如下:1.矢量分解:将输入的三相电压信号转换为矢量表示。
常用的方法有相量分解法、Park变换等。
2.矢量合成:根据所需的电机状态,将矢量合成为一个控制电压矢量。
合成的矢量包含了相应的大小和相位信息。
3.矢量选择:选择最接近合成矢量的有效矢量。
这个有效矢量将作为PWM调制的参考。
4.PWM调制:根据选择的有效矢量进行PWM调制,生成对应的PWM信号用于驱动电机。
SVPWM算法能够实现电机速度的精确控制,并具有响应速度快、效率高等优点,因此被广泛应用于各种工业应用中。
TI给的SVPWM编程实现
TI给的SVPWM编程实现SVPWM (Space Vector Pulse Width Modulation) 是一种常见的电力电子调制技术,广泛应用于电机驱动、电力转换器和逆变器等领域。
其主要功能是通过控制开关器件的导通和断开时机,生成所需的输出电压波形。
下面是一个基于TI公司提供的DSP编程实现的SVPWM算法,包括步进角计算和相电压计算:```c#include <stdint.h>//定义SVPWM的参数#define NUM_PHASES 3#define NUM_STEPS 6//定义相电压typedef structfloat v_alpha;float v_beta;} phase_voltage_t;//定义电机状态typedef structfloat theta;float magnitude;} motor_state_t;//计算电机状态motor_state_t calculate_motor_state(float duty_cycle, float modulation_index)motor_state_t state;state.theta = (2 * M_PI) * duty_cycle;state.magnitude = modulation_index * sqrt(3);return state;//计算相电压phase_voltage_t calculate_phase_voltage(float theta, float magnitude)phase_voltage_t voltage;float sector = floor(theta / (M_PI / 3)) + 1;float angle = theta - (sector - 1) * (M_PI / 3);switch ((int)sector)case 1:voltage.v_alpha = magnitude * cos(angle);voltage.v_beta = magnitude * sin(angle);break;case 2:voltage.v_alpha = magnitude * (-sin(angle)); voltage.v_beta = magnitude * cos(angle); break;case 3:voltage.v_alpha = magnitude * (-cos(angle)); voltage.v_beta = magnitude * (-sin(angle)); break;case 4:voltage.v_alpha = magnitude * (-cos(angle)); voltage.v_beta = magnitude * sin(angle); break;case 5:voltage.v_alpha = magnitude * sin(angle); voltage.v_beta = magnitude * (-cos(angle)); break;case 6:voltage.v_alpha = magnitude * cos(angle);voltage.v_beta = magnitude * (-sin(angle));break;}return voltage;int mai//输入参数float duty_cycle = 0.5;float modulation_index = 0.9;//计算电机状态motor_state_t motor_state = calculate_motor_state(duty_cycle, modulation_index);//计算相电压phase_voltage_t phase_voltage =calculate_phase_voltage(motor_state.theta,motor_state.magnitude);//输出结果printf("Phase Voltage - Alpha: %f\n", phase_voltage.v_alpha);printf("Phase Voltage - Beta: %f\n", phase_voltage.v_beta);return 0;```在这个实现中,我们首先定义了SVPWM的配置参数,并定义了相电压和电机状态的数据结构。
SVPWM算法理解、Simulink仿真及程序编写
SVPWM算法理解、Simulink仿真及程序编写SVPWM算法理解、Simulink仿真及程序编写1. 空间⽮量理解三相逆变器中,三相电压若分开描述则较繁琐,故将三相电压量⽤⼀个合成量表⽰(该合成量能保持三相信息的完整性),则三相问题简化为单相(复数)问题。
相似于坐标变换。
三相电压 a = k sin x ; b = k sin (x-120) ; c = k sin (x+120) 。
空间⽮量电压 V = Re+ j Im = 1.5k e^j {x-90} ; 其轨迹为圆。
对于任⼀三相电压状态,只有唯⼀空间⽮量电压点 与之对应;对于任⼀空间⽮量电压点,亦只有唯⼀三相电压状态 与之对应。
两者相互转换。
举⼀个常见的例⼦,在两电平三相逆变电路中,如下。
开关管导通状态有 000~111 ,共8种。
其表⽰意义为 “abc”3桥臂 ,“1”上半桥臂导通。
由开关管导通状态 得到 三相电压状态 如表格中所⽰,将 三相电压状态 转换为 空间电压⽮量 表⽰如下所⽰。
在空间电压⽮量 中很清晰得到开关管导通顺序:a(110001…); b ( 011100… ) ; c ( 000111 )联系第⼀段的理论基础,6个空间⽮量组成的 空间电压⽮量 是个不规整的圆,故其得到的三相电流 亦⼗分失真。
然⽽能够 通过使相邻两个⽮量(和适当的零⽮量)短时间内 交替作⽤,似于 合成新的空间⽮量,使得 圆规整些、三相电流趋于正弦。
这种合成“新”⽮量 的⽅法便是 SVPWM。
2. SVPWM算法主要包括3个部分:判断参考电压⽮量Uref所在扇区;计算相邻空间⽮量的作⽤时间;根据作⽤时间合成三相PWM信号。
参考电压⽮量Uref 所在扇区判断空间扇区定义如下所⽰;图中Ud为逆变器主电路的直流母线电压,⽮量幅值为2Ud/3。
根据恒幅值clack变换推得。
计算相邻两电压空间⽮量的作⽤时间根据作⽤时间合成三相PWM信号3. Simulink 仿真采⽤恒幅值变换将 三相变换为两相 作为svpwm1程序的输⼊;余下2输⼊分别为 采样时间和直流侧母线电压;svpwm1输出的调制信号经三⾓载波调制后输出的PWM波B点电势B相负载上的电压、电流波形。
SVPWM每种状态时间计算详细过程
对于SVPWM 的一个要点便是计算每一种开关状态下的导通时间,现在的计算方法,抛弃了最原始使用三角函数的办法,因为那样在实际计算过程中的计算量大。
一般都是建立在两相静止βα-坐标系下,根据βαU U 和的值直接计算开关导通时间,因为βαU U 和的值在坐标变换过程中本就会计算出一次,所以这样做便可省去一次三角函数计算,进而减小计算量。
在进行计算之前,先要说明:因为不同人的不同使用习惯,建立的βα-坐标系往往也不尽相同,本例仅以当轴-α以a 相的正相作为正方向,轴-β逆时针方向超前90°来建立两项静止坐标系。
U如上图,将空间分为6个扇区,各相的正相和负相电压命名以开关函数表示的二进制数值进行命名下面对这六个扇区的计算情况进行分别讨论,以便在使用过程中对计算结果进行直接使用。
对于下面所有计算式子有θβθαβαsin cos ⋅=-⋅=-ref ref U U U U 轴:轴:dc U U U U U U U 32654321======这里ref U U U U U U U 、、、、、、654321仅表示电压的绝对值,不表示矢量值654321T T T T T T 、、、、、表示每一种状态的导通时间s T 表示开关周期第一扇区:)100(4U 4αU Usdc s ss dc s s T T U U T T U T T T T U U T T U T T U 666646644333sin )3132(3cos ⋅=⋅⋅=-⋅+⋅⋅=⋅⋅+⋅=-πβπαβα轴:轴:由轴-β的方程可以⇒βU U T T dcs⋅=36 带入轴-α的方程,⇒)2123(34βαU U U T T dc s -⋅=⇒⎥⎦⎤⎢⎣⎡⋅⎥⎥⎦⎤⎢⎢⎣⎡-⋅=⎥⎦⎤⎢⎣⎡βαU U U T T T dcs 102123364第二扇区:)100(4U 010(2U α)(333sin 3sin 33326226626ss dc s s s s dc s s T T T T U U T T U T T U T T T T +⋅=⋅⋅+⋅⋅=-ππββα轴:⇒⎥⎦⎤⎢⎣⎡⋅⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-⋅=⎥⎦⎤⎢⎣⎡βαU U U T T T dc s 21232123326第三扇区:3U αU 3sdc s ss dc s s T T U U T T U T T T T U U T T U T T U 222232233333sin )3132(3cos ⋅=⋅⋅=-+⋅⋅-=⋅⋅-⋅-=-πβπαβα轴:轴:⇒⎥⎦⎤⎢⎣⎡⋅⎥⎥⎦⎤⎢⎢⎣⎡--⋅=⎥⎦⎤⎢⎣⎡βαU U U T T T dcs102123323第四扇区:Usdc s s s dc s s T T U U T T U T T T T 12113333sin 333⋅-=⋅⋅-=-πββα轴:⇒⎥⎦⎤⎢⎣⎡⋅⎥⎥⎦⎤⎢⎢⎣⎡--⋅=⎥⎦⎤⎢⎣⎡βαU U U T T T dcs 102123313第五扇区:001(1U)(333sin 3sin )(313cos 3cos 151155151155ss dc s s s s dc s s T T T T U U T T U T T U T T T T U U T T U T T U --⋅=⋅⋅-⋅⋅-=--⋅=⋅⋅-⋅⋅=-ππβππαβα轴:轴:⇒⎥⎦⎤⎢⎣⎡⋅⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---⋅=⎥⎦⎤⎢⎣⎡βαU U U T T T dc s21232123351第六扇区:sdc s s s dc s s T T U U T T U T T T T 55554333sin 333⋅-=⋅⋅-=-πββα轴:⇒⎥⎦⎤⎢⎣⎡⋅⎥⎥⎦⎤⎢⎢⎣⎡--⋅=⎥⎦⎤⎢⎣⎡βαU U U T T T dcs102123354。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章空间矢量脉宽调制技术例1、CLARK变换的DSP实现图CLARK变换实现波形图/*---------------------------------------------------------------------------------------------------------------------------------------- CLARKE变换相关变量定义----------------------------------------------------------------------------------------------------------------------------------------*/ typedef struct { float32 As; // 输入:A相定子电流float32 Bs; // 输入:B相定子电流float32 Alpha; // 输出:静止坐标系d轴定子电流float32 Beta; // 输出:静止坐标系q轴定子电流void (*calc)(); // 计算函数指针} CLARKE;typedef CLARKE *CLARKE_handle;/*---------------------------------------------------------------------------------------------------------------------------------------- 定义CLARKE变换初始化参数----------------------------------------------------------------------------------------------------------------------------------------*/ #define CLARKE_DEFAULTS { 0, \0, \0, \0, \(void (*)(Uint32))clarke_calc }/*---------------------------------------------------------------------------------------------------------------------------------------- CLARKE变换函数原型CLARKE.C----------------------------------------------------------------------------------------------------------------------------------------*/ void clarke_calc(CLARKE_handle);#include "dmctype.h"#include "clarke.h"void clarke_calc(CLARKE *v){v->Alpha = v->As;v->Beta = (v->As + 2*v->Bs)*0.57735026918963; // 1/sqrt(3) = 0.57735026918963}例2、PARK变换的DSP实现图PARK变换DSP实现坐标映射/*---------------------------------------------------------------------------------------------------------------------------------------- PARK变换相关变量定义----------------------------------------------------------------------------------------------------------------------------------------*/ typedef struct { float32 Alpha; // 输入:静止坐标系d轴定子变量loat32 Beta; // 输入:静止坐标系q轴定子变量float32 Angle; // 输入:转子角度(弧度)float32 Ds; // 输出:旋转d轴定子变量(M轴)float32 Qs; // 输出:旋转q轴定子变量(T轴)void (*calc)(); // 函数指针} PARK;typedef PARK *PARK_handle;/*---------------------------------------------------------------------------------------------------------------------------------------- PARK变换变量初始化参数----------------------------------------------------------------------------------------------------------------------------------------*/ #define PARK_DEFAULTS { 0, \0, \0, \0, \0, \(void (*)(Uint32))park_calc }/*---------------------------------------------------------------------------------------------------------------------------------------- PARK函数原型----------------------------------------------------------------------------------------------------------------------------------------*/ void park_calc(PARK_handle);#include "dmctype.h"#include "park.h"extern float32 sin_tab[];void park_calc(PARK *v){float32 Cosine,Sine;// 采用查表法// (PI/2)/(2*PI) = 0.25// ((PI/2)/(2*PI))*256 = 0.25*256 = 64// ((PI/2)-2*PI)/(2*PI) = -0.75// (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192// 查表发求解正弦if (v->Angle+0.25 > 1.0){Sine = sin_tab[(int16)(v->Angle*256)];Cosine = sin_tab[(int16)(v->Angle*256) - 192];}else{Sine = sin_tab[(int16)(v->Angle*256)];Cosine = sin_tab[(int16)(v->Angle*256) + 64];}v->Ds = v->Alpha*Cosine + v->Beta*Sine;v->Qs = v->Beta*Cosine - v->Alpha*Sine;}图6.7 PARK变换坐标映射图/*---------------------------------------------------------------------------------------------------------------------------------------- PARK逆变换参数定义----------------------------------------------------------------------------------------------------------------------------------------*/ typedef struct { float ds; /* 输出:定子参考坐标系d-轴变量*/float qs; /* 输出:定子参考坐标系q-轴变量*/float ang; /* 输入:转子转动角度(rad) */float de; /* 输入:旋转d-轴定子变量*/float qe; /* 输入:旋转q-轴定子变量*/void (*calc)(); /* 计算函数指针*/} IPARK;typedef IPARK *IPARK_handle;/*---------------------------------------------------------------------------------------------------------------------------------------- Default initalizer for the IPARK object.----------------------------------------------------------------------------------------------------------------------------------------*/ #define IPARK_DEFAULTS { 0, \0, \0, \0, \0, \(void (*)(long))ipark_calc }/*---------------------------------------------------------------------------------------------------------------------------------------- 逆变换函数IPARK.C----------------------------------------------------------------------------------------------------------------------------------------*/ void ipark_calc(IPARK_handle);/*----------------------------------------------------------------------------------------------------------------------------------------文件名称:: IPARK.C----------------------------------------------------------------------------------------------------------------------------------------*/ #include "ipark.h"extern float sin_tab[];void ipark_calc(IPARK *v){float cos_ang,sin_ang;/*采用查表法计算正弦角度*//* (PI/2)/(2*PI) = 0.25 *//* ((PI/2)/(2*PI))*256 = 0.25*256 = 64 *//* ((PI/2)-2*PI)/(2*PI) = -0.75 *//* (((PI/2)-2*PI)/(2*PI))*256 = -0.75*256 = -192 */if (v->ang+0.25 > 1){sin_ang = sin_tab[(int)(v->ang*256)];cos_ang = sin_tab[(int)(v->ang*256) - 192];}else{sin_ang = sin_tab[(int)(v->ang*256)];cos_ang = sin_tab[(int)(v->ang*256) + 64];}v->ds = v->de*cos_ang - v->qe*sin_ang;v->qs = v->qe*cos_ang + v->de*sin_ang;}例3、空间矢量的算法程序/*----------------------------------------------------------------------------------------------------------------------------------------空间矢量的产生: SVGEN_DQ.C (IQ version)----------------------------------------------------------------------------------------------------------------------------------------*/ #include "IQmathLib.h" // Include header for IQmath library// Don't forget to set a proper GLOBAL_Q in "IQmathLib.h" file#include "dmctype.h"#include "svgen_dq.h"void svgendq_calc(SVGENDQ *v){_iq Va,Vb,Vc,t1,t2;Uint32 Sector = 0; // Sector is treated as Q0 - independently with global Q// CLARKE 逆变换 Va = v->Ubeta;Vb = _IQmpy(_IQ(-0.5),v->Ubeta) + _IQmpy(_IQ(0.8660254),v->Ualpha); Vc = _IQmpy(_IQ(-0.5),v->Ubeta) - _IQmpy(_IQ(0.8660254),v->Ualpha);// 0.8660254 = sqrt(3)/2// 60o 扇区确定 if (Va>_IQ(0)) Sector = 1; if (Vb>_IQ(0)) Sector = Sector + 2; if (Vc>_IQ(0)) Sector = Sector + 4;// X,Y,Z (Va,Vb,Vc) 计算Va = v->Ubeta; // X = Va Vb = _IQmpy(_IQ(0.5),v->Ubeta) + _IQmpy(_IQ(0.8660254),v->Ualpha); // Y = Vb Vc = _IQmpy(_IQ(0.5),v->Ubeta) - _IQmpy(_IQ(0.8660254),v->Ualpha); // Z = Vcif (Sector==0) // Sector 0: 当(αU ,βU ) = (0,0) {v->Ta = _IQ(0.5); v->Tb = _IQ(0.5); v->Tc = _IQ(0.5); }if (Sector==1) // Sector 1: t1=Z 和 t2=Y (abc ---> Tb,Ta,Tc) {t1 = Vc;v->Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2v->Ta = v->Tb+t1; // taon = tbon+t1v->Tc = v->Ta+t2; // tcon = taon+t2 }else if (Sector==2) // Sector 2: t1=Y和t2=-X (abc ---> Ta,Tc,Tb) {t1 = Vb;t2 = -Va;v->Ta = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // taon = (1-t1-t2)/2v->Tc = v->Ta+t1; // tcon = taon+t1v->Tb = v->Tc+t2; // tbon = tcon+t2 }else if (Sector==3) // Sector 3: t1=-Z和t2=X (abc ---> Ta,Tb,Tc) {t1 = -Vc;t2 = Va;v->Ta = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // taon = (1-t1-t2)/2v->Tb = v->Ta+t1; // tbon = taon+t1v->Tc = v->Tb+t2; // tcon = tbon+t2 }else if (Sector==4) // Sector 4: t1=-X和t2=Z (abc ---> Tc,Tb,Ta) {t1 = -Va;t2 = Vc;v->Tc = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tcon = (1-t1-t2)/2v->Tb = v->Tc+t1; // tbon = tcon+t1v->Ta = v->Tb+t2; // taon = tbon+t2 }else if (Sector==5) // Sector 5: t1=X和t2=-Y (abc ---> Tb,Tc,Ta) {t1 = Va;v->Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tbon = (1-t1-t2)/2v->Tc = v->Tb+t1; // tcon = tbon+t1v->Ta = v->Tc+t2; // taon = tcon+t2 }else if (Sector==6) // Sector 6: t1=-Y和t2=-Z (abc ---> Tc,Ta,Tb){t1 = -Vb;t2 = -Vc;v->Tc = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2)); // tcon = (1-t1-t2)/2v->Ta = v->Tc+t1; // taon = tcon+t1v->Tb = v->Ta+t2; // tbon = taon+t2 }// Convert the unsigned GLOBAL_Q format (ranged (0,1))// -> signed GLOBAL_Q format (ranged (-1,1))v->Ta = _IQmpy(_IQ(2.0),(v->Ta-_IQ(0.5)));v->Tb = _IQmpy(_IQ(2.0),(v->Tb-_IQ(0.5)));v->Tc = _IQmpy(_IQ(2.0),(v->Tc-_IQ(0.5)));}。