基于DSP的SPWM控制法
- 格式:doc
- 大小:184.00 KB
- 文档页数:6
基于DSP的SPWM变频调速系统的实现
翟红存;薛重德;魏昌洲
【期刊名称】《机械与电子》
【年(卷),期】2005(000)011
【摘要】介绍一种基于TMS320F240 DSP芯片实现交流异步电动机变频调速系统的设计方案.用不对称规则采样法产生的SPWM波来控制逆变器,从而实现交流电机的变频调速.
【总页数】3页(P20-22)
【作者】翟红存;薛重德;魏昌洲
【作者单位】南京航空航天大学,江苏,南京,210016;南京航空航天大学,江苏,南京,210016;南京航空航天大学,江苏,南京,210016
【正文语种】中文
【中图分类】TM921.51
【相关文献】
1.基于DSP控制变频调速系统SPWM波形产生方法 [J], 陈芳靖;汪涛
2.基于DSPs的SPWM波调制方法的实现 [J], 王成;叶天晓;张峰
3.基于单片机实现SPWM变频调速系统设计 [J], 黄灿胜;杨秀增
4.基于DSP的交流异步电机SPWM变频调速系统设计 [J], 宋店波;王永生
5.基于DSP的SPWM变频调速系统的分析与设计 [J], 张宏飞;张忠;姜伟东
因版权原因,仅展示原文概要,查看原文内容请购买。
基于DSP的SPWM直接面积等效算法分析
开始的SPWM 生成技术是采用模拟电路构成三角波和正弦波发生电路,用比较器来确定他们的交点。
这种方法电路复杂,精度较差,早已淘汰。
后来人们采用单片机和微机生成SPWM 波,但受硬件计算速度和算法计算量的影响,往往无法兼顾计算的精度和速度。
再后来随着具有强大运算能力的DSP 和一些新算法的出现,这一问题得到了较好地解决。
1 算法的原理
一般SPWM 波形的产生有以下几种方法:自然采样法、规则采样法、低次谐波消去法直接面积等效法等。
其中自然采样法的精度很高,但他求解导通关断点需要解一个超越方程,计算量很大,一般不被采用。
低次谐波消去法计算复杂,只能用查表法,而且这种方法的波形频率和幅值是不可以连续变化的。
因此将主要分析规则采样法,直接面积等效法这两种方法的原理。
规则采样法是从自然采样法演变而来的,他由经过采样的正弦波(实际上是阶梯波)与三角波相交,由交点得出脉冲宽度。
这种方法只在三角波的顶点或底点位置对正弦波采样而形成阶梯波。
其原理如其中:
Tz: 三角载波周期
M: 调制深度(正弦波与三角波幅值比)
t:某采样时刻?
直接面积等效法的基本原理如在
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
基于DSP的SPWM控制波形生成的一种方法
卢慧芬
【期刊名称】《机电工程》
【年(卷),期】2002(019)005
【摘要】介绍利用数字信号处理器TMS320F243产生SPWM波形的方法.该方法的特点是采用查表和在线计算相结合,既能满足一定控制精度要求,又能满足实时控制要求.
【总页数】5页(P30-34)
【作者】卢慧芬
【作者单位】浙江大学,电气工程学院,浙江,杭州,310027
【正文语种】中文
【中图分类】TN911.72;TM787+.2
【相关文献】
1.一种基于CPLD的SPWM控制波形生成方法 [J], 梁中华;肖丹;杨霞
2.制冷机驱动控制器中基于dsPIC的SPWM 高效生成方法 [J], 肖南;刘文其;周皖生;左涛;李令言;陆勤龙;陈宇鹏;陈新民
3.DSP生成SPWM波的一种设计方法 [J], 任小洪;贺映光;方刚
4.一种基于FPGA的SPWM波的实时生成方法 [J], 丁卫东;郭前岗;周西峰
5.一种基于DSP的SPWM波形生成新方法 [J], 胡玉祥;田红芳
因版权原因,仅展示原文概要,查看原文内容请购买。
dspSPWM#include "DSP281x_Device.h" // DSP281x Headerfile Include File#include "DSP281x_Examples.h" // DSP281x Examples Include File#include "IQmathLib.h"// Prototype statements for functions found within this file.interrupt void Eva_PDINTA_ISR();interrupt void Evb_PDINTB_ISR();void PWM_Update();void Gpio_select();_iq1 F_Carry,F_Modul;_iq28 PITC; _iq4 T_QUA;_iq F_M,M;Uint32 N,k;struct{Uint32 mHalfPeriod; //载波周期为50us_iq mDuty1;_iq mDuty2;_iq mDuty3;}pwma={271,0,0,0};void main(void){// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interruptsDINT;IER=0x0000;IFR=0x0000;// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP281x_SysCtrl.c file.InitSysCtrl();//初始PIE控制寄存器(关闭所有的PIE中断,并清除相应的中断标志)InitPieCtrl();// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in DSP281x_DefaultIsr.c.// This function is found in DSP281x_PieVect.c.InitPieVectTable();// Interrupts that are used in this example are re-mapped to // ISR functions found within this file.EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.PDPINTA=&Eva_PDINTA_ISR;//(功率保护中断)PieVectTable.PDPINTB=&Evb_PDINTB_ISR;EDIS; // This is needed to disable write to EALLOW protected registersPieCtrlRegs.PIEIER1.all |=(M_INT1|M_INT2);//开功率保护中断IER |=M_INT1; //开cpu级中断1// Enable global Interrupts and higher priority real-time debug events:EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGMwhile (1){//变量初始化k=0;F_Carry=0x40000;//载波频率 Q1格式F_Modul=50; //调制波频率 Q1格式PITC=42166; // Q28格式T_QUA=3750; //T_Carry/4的定时器计数脉冲个数 Q4格式N=F_Carry/ F_Modul; //计算每个调制周期的载波脉冲数Q0格式F_M=188744; //调制度对调制波的比例系数(0.9/50)*2^24=301000 Q24格式M=_IQ24mpyIQX(F_Modul,1,F_M,24);PWM_Update(); //更新PWM占空比函数}}//PWM初始化函数void PWMA_Init(){EvaRegs.EVAIMRA.all=0x0001; //使能PDPINTA功率保护中断EvaRegs.EVAIFRA.all=0xffff; //清除中断悬挂/doc/2a5506827.html,CONA.all=0x8200; //使能PWM,禁止空间矢量状态机//定时器下溢时重装CMPRx和ACTRx寄存器//使能比较操作EvaRegs.GPTCONA.all=0x0000;EvaRegs.ACTRA.all=0x0fff; //极性设置:强迫高EvaRegs.DBTCONA.all=0x09fc; //死去时间 3.84usEvaRegs.T1PR=pwma.mHalfPeriod; //初始化定时器1的周期寄存器EvaRegs.CMPR1=pwma.mHalfPeriod/2;EvaRegs.CMPR2=pwma.mHalfPeriod/2;EvaRegs.CMPR3=pwma.mHalfPeriod/2;EvaRegs.T1CNT=0; //计数器清零EvaRegs.T1CON.all=0x0840; //对称PWM预定标系数为x/1,连续增减计数模式//打开定时器,禁止定时器比较操作}//I/O功能配置void Gpio_select(void){EALLOW;GpioMuxRegs.GPAMUX.all=0x073f; // Configure MUXs as digital I/Os orGpioMuxRegs.GPBMUX.all=0x0000; // peripheral I/OsGpioMuxRegs.GPDMUX.all=0x0001;GpioMuxRegs.GPFMUX.all=0x0000;GpioMuxRegs.GPEMUX.all=0x0000;GpioMuxRegs.GPGMUX.all=0x0000;GpioMuxRegs.GPADIR.all=0xf8ff; // GPIO PORTs as output GpioMuxRegs.GPBDIR.all=0xffff; // GPIO DIR select GPIOs as outputGpioMuxRegs.GPDDIR.all=0x0002;GpioMuxRegs.GPEDIR.all=0xffff;GpioMuxRegs.GPFDIR.all=0xffff;GpioMuxRegs.GPGDIR.all=0x0010;GpioMuxRegs.GPAQUAL.all=0x0000; // Set GPIO input qualifier valuesGpioMuxRegs.GPBQUAL.all=0x0000;GpioMuxRegs.GPDQUAL.all=0x0000;GpioMuxRegs.GPEQUAL.all=0x0000;//GpioMuxRegs.GPFQUAL.all=0x0000;//GpioMuxRegs.GPGQUAL.all=0x0000;GpioDataRegs.GPADAT.all=0x0000; //配置Gpio数据寄存器1为高,0为低GpioDataRegs.GPBDAT.all=0xffff;GpioDataRegs.GPDDAT.all=0xffff;GpioDataRegs.GPEDAT.all=0xffff;GpioDataRegs.GPFDAT.all=0xffff;GpioDataRegs.GPGDAT.all=0xffff;EDIS;}//定时器下溢子函数interrupt void T1UFINT(void){_iq28 Theta1,Theta2,Theta3,Theta4,Theta5,Theta6;_iqTAon1,TAon2,TBon1,TBon2,TCon1,TCon2,TAon,TBon,TCon;_iq Temp1,Temp2,T emp3,Temp4,Temp5,Temp6;Theta1=_IQ28mpyI32(PITC,k);Theta1=_IQ28toIQ(Theta1);Theta1=_IQ24mpyIQX(F_Modul,1,Theta1,24);Theta2=Theta1+_IQ(2.0944); //Theta2=Theta1+2Pi/3 if(Theta2>_IQ(6.28312))Theta2=Theta2-_IQ(6.28312); //减一个周期值Theta3=Theta2+_IQ(2.0944);if(Theta3>_IQ(6.28312))Theta3=Theta3-_IQ(6.28312);Temp1=_IQ(1)+_IQmpy(M,_IQsin(Theta1));TAon1=_IQmpy(_IQ(0.5),Temp1);//TAon1=0.5(1+Msin(Temp1))Temp2=_IQ(1)+_IQmpy(M,_IQsin(Theta2));TBon1=_IQmpy(_IQ(0.5),Temp2);Temp3=_IQ(1)+_IQmpy(M,_IQsin(Theta3));TCon1=_IQmpy(_IQ(0.5),Temp3);k++;if(k>2*N)k=0;else{Theta4=_IQ28mpyI32(PITC,k);Theta4=_IQ28toIQ(Theta1);Theta4=_IQ24mpyIQX(F_Modul,1,Theta1,24);Theta5=Theta1+_IQ(2.0944); //Theta2=Theta1+2Pi/3 if(Theta5>_IQ(6.28312))Theta5=Theta5-_IQ(6.28312); //减一个周期值Theta6=Theta5+_IQ(2.0944);if(Theta6>_IQ(6.28312))Theta6=Theta6-_IQ(6.28312);Temp4=_IQ(1)+_IQmpy(M,_IQsin(Theta4));TAon2=_IQmpy(_IQ(0.5),Temp4);//TAon1=0.5(1+Msin(Temp1))Temp5=_IQ(1)+_IQmpy(M,_IQsin(Theta5));TBon2=_IQmpy(_IQ(0.5),Temp5);Temp6=_IQ(1)+_IQmpy(M,_IQsin(Theta6));TCon2=_IQmpy(_IQ(0.5),Temp6);}TAon=TAon1+TAon2;TBon=TBon1+TBon2;TCon=TCon1+TCon2;pwma.mDuty1=_IQ(1)-TAon;if(pwma.mDuty1>_IQ(1))pwma.mDuty1=_IQ(1);else if(pwma.mDuty1<0)pwma.mDuty1=0;pwma.mDuty2=_IQ(1)-TBon;if(pwma.mDuty2>_IQ(1))pwma.mDuty2=_IQ(1);else if(pwma.mDuty2<0)pwma.mDuty2=0;pwma.mDuty3=_IQ(1)-TAon;if(pwma.mDuty3>_IQ(1))pwma.mDuty3=_IQ(1);else if(pwma.mDuty3<0)pwma.mDuty3=0;EvaRegs.EVAIFRA.all=0x0200; //清除中断标志位PieCtrlRegs.PIEACK.all=PIEACK_GROUP2; //清除应答}//更新PWMA数据void PWM_Update(){volatile Uint32 halfPeriod;volatile int32 temp;halfPeriod=pwma.mHalfPeriod;EvaRegs.T1PR=(Uint16)halfPeriod;temp=_IQmpy((_iq)halfPeriod,pwma.mDuty1); EvaRegs.CMPR1=(Uint16)temp;temp=_IQmpy((_iq)halfPeriod,pwma.mDuty2); EvaRegs.CMPR2=(Uint16)temp;temp=_IQmpy((_iq)halfPeriod,pwma.mDuty3);EvaRegs.CMPR3=(Uint16)temp;}//功率保护中断函数interrupt void Eva_PDINTA_ISR(){}interrupt void Evb_PDINTB_ISR(){}//===================================== ====================================== // No more.//===================================== ===。
基于DSP控制变频调速系统SPWM波形产生方法
陈芳靖;汪涛
【期刊名称】《机电工程技术》
【年(卷),期】2005(034)004
【摘要】本文介绍了数字信号处理器TMS320LF2407的性能特点以及它在变频调速系统中的特殊应用.讨论了用规则采样法产生SPWM波形的原理和方法,用这种方法可以大大扩展电机的调速范围,并给出了详细程序设计的控制框图.
【总页数】4页(P27-29,81)
【作者】陈芳靖;汪涛
【作者单位】河南理工大学,河南,焦作,451400;漯河职业技术学院机电工程系,河南,漯河,462000;漯河职业技术学院机电工程系,河南,漯河,462000
【正文语种】中文
【中图分类】TP274
【相关文献】
1.基于DSP控制的SPWM波形发生器的优化算法 [J], 吴新开;李勇成;蔡翔
2.基于DSP的SPWM控制波形生成的一种方法 [J], 卢慧芬
3.基于DSP产生SPWM波形的软件设计 [J], 薛一哲;马子飞
4.基于DSP的SPWM波形产生算法研究 [J], 叶程; 黄梓瑜; 白琳; 赵松柏; 曾萍; 高文刚
5.基于DSP的SPWM波形产生算法研究 [J], 叶程; 黄梓瑜; 白琳; 赵松柏; 曾萍; 高文刚
因版权原因,仅展示原文概要,查看原文内容请购买。
基于DSP的SPWM不对称规则采样算法的分析与实现摘要:本文以高性能数字信号处理芯片TMS320F2812为核心,设计生成了基于不对称规则采样算法的SPWM波形,键盘输入参数设定调制波频率。
本文首先分析了不对称规则算法的原理,接着设计了基于TMS320F2812芯片的软件设计流程,最后在数字示波器上显示了实验波形,验证了设计的有效性和可行性。
1 引言在三相逆变器中,SPWM(Sinusoidal Pulse Width Modulation)技术是最为先进的控制算法之一,SPWM 波用于控制逆变器功率器件的开关时刻。
SPWM 技术最初是用模拟电路构成三角波和正弦波发生电路,接着用比较器来确定他们的交点,这种实现方法电路复杂,精度较差。
后来人们采用单片机来实现,但由于单片机在硬件计算速度和算法计算量方面的局限,往往无法兼顾计算的精度和速度。
由于DSP 具有强大的运算能力,能够完全兼顾控制的精度和速度,越来越多的应用选择使用DSP。
用DSP 产生多相正弦波有多种方法,如采用D/A 转换器,使用DSP 外接D/A 转换器可以输出频率较高的正弦波,但是这种方法浪费硬件资源,因为需要几相正弦波就需要几个D/A 转换器,而且在每次计算每个D/A 采样点的正弦值时都需要占用CPU,不利于系统整体性能的提高。
TMS320F2812是TI 公司推出的用于工业控制的新型32 位定点DSP,最高主频150MHz,拥有丰富的外设,利用其内部硬件电路---事件管理器模块中的全比较单元,采用SPWM 算法,可以非常方便的产生高精度的、实时性强、可在线调节、带死区控制的三相正弦SPWM 波形,从而实现三相逆变器的SPWM 控制[2]。
2. SPWM 算法原理[3]PWM 技术利用全控型器件的导通和关断把电压变成一定形状的电压脉冲序列,实现变压、变频控制并且消除谐波,而SPWM 算法是以获得正弦电压输出为目标的一种脉宽调制技术。
SPWM波形优化算法及其DSP实现1.引言从逆变器诞生之日起人们就把改善输出波形,消除谐波,提高波形质量作为一项重要的研究内容,所以对SPWM波形的谐波分析有着十分重要的意义[1]。
对于实时计算的PWM 控制方法常常需要建立数学模型,较为常用的是采样型的SPWM法。
文[2]指出,在对正弦波进行调制时,采用三角波作为载波比用锯齿波产生更少的谐波分量,自然采样SPWM法就是通过正弦波与三角波的比较来决定开关点的位置,原理简单易于用模拟电路实现,但由于其开关模式不能用显式表达,难以用微机实现实时控制,因此发展了规则采样法。
本文给出了一种基于DSP的对称规则SPWM生成法——开关点预置算法,开关点预置最优SPWM控制波形的确定是以输出THD性能指标最小为优化目标,在同样开关频率的前提条件下,从所有可能的开关控制波形中唯一地筛选出来的,因此所选取的开关控制波形即为同样开关频率下所有SPWM控制波形中最优的选择,以此来控制逆变桥开关,其最终输出正弦信号也必然地具有最优性。
2.对称规则SPWM波的生成自然取样法的主要问题是SPWM波形每一个脉冲的起始和结束时刻tA和tB对于三角载波的中心线不对称,因而求解困难[3]。
工程上实用的方法要求计算简单,误差不是很大,因此对自然取样法进行一些近似处理,得出了各种规则采样方法。
规则采样法是波形发生器通过编程方法实现的几种方式之一,这种方式使PWM波产生的谐波小,在三相异步电动机变频调速系统中,通常都采用此种方法。
在三角波的一个周期内,只利用三角波的一个峰值点所对应的正弦函数值求取的脉冲以三角波的峰值点为对称,因此这种采样法称为对称规则采样法,如图1所示。
图1. 生成SPWM波的规则采样法若以单位量1代表三角载波的幅值Uc,则正弦波的幅值Um就是调制度m,m=Um/Uc,再由图1几何关系可知:式中:ωs为正弦调制信号的角频率,;Tc为载波周期;fm为调制波频率。
根据脉宽时间计算公式,如果一个周期内有N个矩形波(通常N取为3的整数倍),载波比N=fc/fm,则第i个矩形波的占空比为:(3)可见,在已知载波周期Tc、正弦波电压Um或m以及每个特定时刻的函数值,便可以计算出第i个脉宽时间和间隙时间。
#include "DSP280x_Device.h" // DSP280x Headerfile Include File #include "DSP280x_Examples.h" // DSP280x Examples Include File typedef struct{volatile struct EPWM_REGS *EPwmRegHandle;Uint16 EPwm_CMPA_Direction;Uint16 EPwm_CMPB_Direction;Uint16 EPwmTimerIntCount;Uint16 EPwmMaxCMPA;Uint16 EPwmMinCMPA;Uint16 EPwmMaxCMPB;Uint16 EPwmMinCMPB;}EPWM_INFO;// Prototype statements for functions found within this file.void InitEPwm1Example(void);void InitEPwm2Example(void);void InitEPwm3Example(void);interrupt void epwm1_isr(void);interrupt void epwm2_isr(void);interrupt void epwm3_isr(void);void update_compare(EPWM_INFO*);// Global variables used in this exampleEPWM_INFO epwm1_info;EPWM_INFO epwm2_info;EPWM_INFO epwm3_info;// Configure the period for each timer#define EPWM1_TIMER_TBPRD 2000 // Period register#define EPWM1_MAX_CMPA 1950#define EPWM1_MIN_CMPA 50#define EPWM1_MAX_CMPB 1950#define EPWM1_MIN_CMPB 50#define EPWM2_TIMER_TBPRD 2000 // Period register#define EPWM2_MAX_CMPA 1950#define EPWM2_MIN_CMPA 50#define EPWM2_MAX_CMPB 1950#define EPWM2_MIN_CMPB 50#define EPWM3_TIMER_TBPRD 2000 // Period register#define EPWM3_MAX_CMPA 950#define EPWM3_MIN_CMPA 50#define EPWM3_MAX_CMPB 1950#define EPWM3_MIN_CMPB 1050// To keep track of which way the compare value is moving#define EPWM_CMP_UP 1#define EPWM_CMP_DOWN 0void main(void){// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP280x_SysCtrl.c file.InitSysCtrl();// Step 2. Initalize GPIO:// This example function is found in the DSP280x_Gpio.c file and// illustrates how to set the GPIO to it's default state.// InitGpio(); // Skipped for this exampleEALLOW;GpioCtrlRegs.GPAMUX1.all = 0x0; // GPIO pinGpioCtrlRegs.GPADIR.all = 0xFF; // Output pinGpioDataRegs.GPADAT.all =0xFF; // Close LEDsEDIS;// For this case just init GPIO pins for ePWM1, ePWM2, ePWM3// These functions are in the DSP280x_EPwm.c fileInitEPwm1Gpio();InitEPwm2Gpio();InitEPwm3Gpio();EALLOW;GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; // GPIO pinGpioCtrlRegs.GPADIR.bit.GPIO11 = 1; // Output pinGpioDataRegs.GPADAT.bit.GPIO11 =0; // GPIO11输出拉低是为了使能3245的/OE引脚EDIS;// Step 3. Clear all interrupts and initialize PIE vector table:// Disable CPU interruptsDINT;// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the DSP280x_PieCtrl.c file.InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in DSP280x_DefaultIsr.c.// This function is found in DSP280x_PieVect.c.InitPieVectTable();// Interrupts that are used in this example are re-mapped to// ISR functions found within this file.EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.EPWM1_INT = &epwm1_isr;PieVectTable.EPWM2_INT = &epwm2_isr;PieVectTable.EPWM3_INT = &epwm3_isr;EDIS; // This is needed to disable write to EALLOW protected registers // Step 4. Initialize all the Device Peripherals:// This function is found in DSP280x_InitPeripherals.c// InitPeripherals(); // Not required for this example// For this example, only initialize the ePWMEALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;EDIS;InitEPwm1Example();InitEPwm2Example();InitEPwm3Example();EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;EDIS;// Step 5. User specific code, enable interrupts:// Enable CPU INT3 which is connected to EPWM1-3 INT: IER |= M_INT3;// Enable EPWM INTn in the PIE: Group 3 interrupt 1-3PieCtrlRegs.PIEIER3.bit.INTx1 = 1;PieCtrlRegs.PIEIER3.bit.INTx2 = 1;PieCtrlRegs.PIEIER3.bit.INTx3 = 1;// Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// Step 6. IDLE loop. Just sit and loop forever (optional):for(;;){asm(" NOP");}}interrupt void epwm1_isr(void){// Update the CMPA and CMPB valuesupdate_compare(&epwm1_info);// Clear INT flag for this timerEPwm1Regs.ETCLR.bit.INT = 1;// Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}interrupt void epwm2_isr(void){// Update the CMPA and CMPB valuesupdate_compare(&epwm2_info);// Clear INT flag for this timerEPwm2Regs.ETCLR.bit.INT = 1;// Acknowledge this interrupt to receive more interrupts from group 3PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}interrupt void epwm3_isr(void){// Update the CMPA and CMPB valuesupdate_compare(&epwm3_info);// Clear INT flag for this timerEPwm3Regs.ETCLR.bit.INT = 1;// Acknowledge this interrupt to receive more interrupts from group 3PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}void InitEPwm1Example(){// Setup TBCLKEPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period 801 TBCLKsEPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0EPwm1Regs.TBCTR = 0x0000; // Clear counter// Set Compare valuesEPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A valueEPwm1Regs.CMPB = EPWM1_MAX_CMPB; // Set Compare B value// Setup counter modeEPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loadingEPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;// Setup shadowingEPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// Set actionsEPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on event A, up countEPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A on event A, down countEPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM1B on event B, up countEPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // Clear PWM1B on event B, down count// Interrupt where we will change the Compare ValuesEPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero eventEPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INTEPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event// Information this example uses to keep track// of the direction the CMPA/CMPB values are// moving, the min and max allowed values and// a pointer to the correct ePWM registersepwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA &epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing CMPBepwm1_info.EPwmTimerIntCount = 0; // Zero the interrupt counterepwm1_info.EPwmRegHandle = &EPwm1Regs; // Set the pointer to the ePWM moduleepwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA; // Setup min/max CMPA/CMPB valuesepwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;epwm1_info.EPwmMaxCMPB = EPWM1_MAX_CMPB;epwm1_info.EPwmMinCMPB = EPWM1_MIN_CMPB;}void InitEPwm2Example(){// Setup TBCLKEPwm2Regs.TBPRD = EPWM2_TIMER_TBPRD; // Set timer period 801 TBCLKsEPwm2Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0EPwm2Regs.TBCTR = 0x0000; // Clear counter// Set Compare valuesEPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA; // Set compare A valueEPwm2Regs.CMPB = EPWM2_MIN_CMPB; // Set Compare B value// Setup counter modeEPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loadingEPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;// Setup shadowingEPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// Set actionsEPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on event A, up countEPwm2Regs.AQCTLA.bit.CBD = AQ_CLEAR; // Clear PWM2A on event B, down countEPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Clear PWM2B on zeroEPwm2Regs.AQCTLB.bit.PRD = AQ_SET ; // Set PWM2B on period// Interrupt where we will change the Compare ValuesEPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero eventEPwm2Regs.ETSEL.bit.INTEN = 1; // Enable INTEPwm2Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event// Information this example uses to keep track// of the direction the CMPA/CMPB values are// moving, the min and max allowed values and// a pointer to the correct ePWM registersepwm2_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA &epwm2_info.EPwm_CMPB_Direction = EPWM_CMP_UP; // increasing CMPBepwm2_info.EPwmTimerIntCount = 0; // Zero the interrupt counterepwm2_info.EPwmRegHandle = &EPwm2Regs; // Set the pointer to the ePWM moduleepwm2_info.EPwmMaxCMPA = EPWM2_MAX_CMPA; // Setup min/max CMPA/CMPB valuesepwm2_info.EPwmMinCMPA = EPWM2_MIN_CMPA;epwm2_info.EPwmMaxCMPB = EPWM2_MAX_CMPB;epwm2_info.EPwmMinCMPB = EPWM2_MIN_CMPB;}void InitEPwm3Example(void){// Setup TBCLKEPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;// Count up/downEPwm3Regs.TBPRD = EPWM3_TIMER_TBPRD; // Set timer period EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loadingEPwm3Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0EPwm3Regs.TBCTR = 0x0000; // Clear counterEPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1;// Setup shadow register load on ZEROEPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// Set Compare valuesEPwm3Regs.CMPA.half.CMPA = EPWM3_MIN_CMPA; // Set compare A valueEPwm3Regs.CMPB = EPWM3_MAX_CMPB; // Set Compare B value// Set ActionsEPwm3Regs.AQCTLA.bit.PRD = AQ_SET; // Set PWM3A on periodEPwm3Regs.AQCTLA.bit.CBD = AQ_CLEAR; // Clear PWM3A on event B, down countEPwm3Regs.AQCTLB.bit.PRD = AQ_CLEAR; // Clear PWM3A on periodEPwm3Regs.AQCTLB.bit.CAU = AQ_SET; // Set PWM3A on event A, up count// Interrupt where we will change the Compare ValuesEPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero eventEPwm3Regs.ETSEL.bit.INTEN = 1; // Enable INTEPwm3Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event// Information this example uses to keep track// of the direction the CMPA/CMPB values are// moving, the min and max allowed values and// a pointer to the correct ePWM registersepwm3_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA &epwm3_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing CMPBepwm3_info.EPwmTimerIntCount = 0; // Zero the interrupt counterepwm3_info.EPwmRegHandle = &EPwm3Regs; // Set the pointer to the ePWM moduleepwm3_info.EPwmMaxCMPA = EPWM3_MAX_CMPA; // Setup min/max CMPA/CMPB valuesepwm3_info.EPwmMinCMPA = EPWM3_MIN_CMPA;epwm3_info.EPwmMaxCMPB = EPWM3_MAX_CMPB;epwm3_info.EPwmMinCMPB = EPWM3_MIN_CMPB;}void update_compare(EPWM_INFO *epwm_info){// Every 10'th interrupt, change the CMPA/CMPB valuesif(epwm_info->EPwmTimerIntCount == 10){epwm_info->EPwmTimerIntCount = 0;// If we were increasing CMPA, check to see if// we reached the max value. If not, increase CMPA// else, change directions and decrease CMPAif(epwm_info->EPwm_CMPA_Direction == EPWM_CMP_UP){if(epwm_info->EPwmRegHandle->CMPA.half.CMPA < epwm_info->EPwmMaxCMPA){epwm_info->EPwmRegHandle->CMPA.half.CMPA++;}else{epwm_info->EPwm_CMPA_Direction = EPWM_CMP_DOWN;epwm_info->EPwmRegHandle->CMPA.half.CMPA--;}}// If we were decreasing CMPA, check to see if// we reached the min value. If not, decrease CMPA// else, change directions and increase CMPAelse{if(epwm_info->EPwmRegHandle->CMPA.half.CMPA == epwm_info->EPwmMinCMPA){epwm_info->EPwm_CMPA_Direction = EPWM_CMP_UP;epwm_info->EPwmRegHandle->CMPA.half.CMPA++;}else{epwm_info->EPwmRegHandle->CMPA.half.CMPA--;}}// If we were increasing CMPB, check to see if// we reached the max value. If not, increase CMPB// else, change directions and decrease CMPBif(epwm_info->EPwm_CMPB_Direction == EPWM_CMP_UP){if(epwm_info->EPwmRegHandle->CMPB < epwm_info->EPwmMaxCMPB){epwm_info->EPwmRegHandle->CMPB++;}else{epwm_info->EPwm_CMPB_Direction = EPWM_CMP_DOWN;epwm_info->EPwmRegHandle->CMPB--;}}// If we were decreasing CMPB, check to see if// we reached the min value. If not, decrease CMPB// else, change directions and increase CMPBelse{if(epwm_info->EPwmRegHandle->CMPB == epwm_info->EPwmMinCMPB){epwm_info->EPwm_CMPB_Direction = EPWM_CMP_UP;epwm_info->EPwmRegHandle->CMPB++;}else{epwm_info->EPwmRegHandle->CMPB--;}}}else{epwm_info->EPwmTimerIntCount++;}return;}。
基于DSP的整流器SPWM调制方法优化设计与实现
胡春龙
【期刊名称】《计算技术与自动化》
【年(卷),期】2022(41)4
【摘要】针对整流器调制过程易产生谐波干扰和非线性等问题,提出了一种DSP控制下SPWM调制的优化设计方法,以TMS320F2812型DSP为主控制器,对交流电压电流调理电路、直流电压调理电路、负载电流调理电路进行了设计、分析与计算,在DSP定时器周期中断下对电压、电流信号进行采样,将采样值优化后作为调制波采样时刻值,带入比较寄存器关系式中来改变比较寄存器的值,从而改变脉冲信号的占空比,通过Modbus协议以MCGS触摸屏下发调制度M,改变SPWM波形,并对电压信号进行显示。
对系统进行了仿真和实验,结果表明系统输出信号正常、可靠,具有较强的稳定性和抗扰性。
【总页数】6页(P27-32)
【作者】胡春龙
【作者单位】陕西国防工业职业技术学院
【正文语种】中文
【中图分类】TM461
【相关文献】
1.DSP2812基于MATLAB模块化编程的SPWM调制实现
2.基于DSPs的SPWM波调制方法的实现
3.基于CPS-SPWM级联型脉冲宽度调制整流器设计
4.
基于DSP与FPGA的MMC载波移相调制SPWM方法实现5.基于DSP的SPWM调制的实现
因版权原因,仅展示原文概要,查看原文内容请购买。
式中p是电动机磁极对数源频率;s是转差率。
由公式可知交流电机调速方法主要有三种图1 SPWM调制技术原理图2 系统硬件设计框图角波)时,逆变桥的开关管导通;反之,则关断,逆变器就产生一组等幅不等宽的脉冲序列[5-6],如图1所示。
通过控制输入频率来产生不同的输出电压,从而改变电动机的转速。
调速系统的硬件设计该系统的硬件设计主要由三部分组成:主电路、系统保护电路、控制是:利用DSP的事件管理器(EVA)中的3个比较单元、通用定时器死区发生单元以及输出逻辑来生成三相六路SPWM波,经6个复用的I/O引脚输出给逆变电路驱动交流电动机的运行。
采用SPWM逆变电路可以大大降低逆变电路输出电压的谐波,使逆变电路的输出电流接近正弦波。
保护电路设计分析系统保护电路包括电压保护电DSP。
该DSP制推出的一款定点型该系列DSP控制器外设功能集于一身统应用提供了理想的解决方案最小系统是和最重要的一步源电路、时钟电路JTAG电路、图3 主电路原理图图4 DSP最小系统框图通信单元的设计为了实时监控下位机的工作状态,本设计还建立了上位机与下位机通信的电路模块。
利用TMS320LF2407的串行通信接口与RS-232串行口进行DSP与PC机之间的异步通信。
上位机PC都带有RS-232接口,所以可以利用上位机(PC)的串行口与下位机(DSP)进行通信,进行上位机与下位机之间的数据交换,有效地实现监控。
电动机测速电路设计电动机测速电路设计采用光电传感器进行测速,光电传感器检测到的脉冲信号传给DSP芯片的QEP1口,再经过DSP芯片的处理转变为转数,最后通过LCD显示出来。
调速系统的软件设计调速系统控制能力的优劣程度除了取决于软件可靠性和通用性之外,机主要负责串口通信电压电流采集、故障监控等设计分为主程序和串口通信中断服务程序、SPWM中断服务程序断服务程序三个中断服务子程序主程序设计主程序主要负责口接收发送、循环等待等程如图5所示。
基于DSP的变频调速SPWM控制实现胡永胜;周向阳;刘宇琦【摘要】由于正弦波脉宽调制(SPWM)技术动态特性好,能明显地提高电动机的效率,因此在电机控制中得到了广泛的应用;介绍了以数字信号处理器SM320LF2407A为核心的温度闭环控制系统,采用SPWM技术实现了变压控制,可实现对某型航空发动机涡轮前温度的限制;试验结果表明,采用SPWM技术的温度闭环控制系统具有实现简单、性能优良和安全可靠的特点.【期刊名称】《计算机测量与控制》【年(卷),期】2016(024)004【总页数】4页(P61-64)【关键词】DSP;SPWM;FADEC【作者】胡永胜;周向阳;刘宇琦【作者单位】中航工业动力控制系统研究所,江苏无锡214063;中航工业动力控制系统研究所,江苏无锡214063;中航工业动力控制系统研究所,江苏无锡214063【正文语种】中文【中图分类】TP273与以往的机械液压控制系统和模拟电路控制系统相比,数字控制系统具有更加灵活、控制精确、抗干扰能力更强、设备尺寸更小、性能稳定和易于维护等特点[1-2]。
针对前期某模拟式温度控制放大器在与执行机构进行协同工作时,出现温度限制失效、故障无法定位、故障率高等问题,严重影响飞机的出勤率[3],故启动数字式温度控制放大器的研发工作,目标是可实现对模拟式温度控制放大器的互换,并且还要具备故障定位、故障重构、数据存储等[4]能力。
文中主要描述某数字温度控制放大器如何利用DSP实现SPWM波,并调制成正弦波控制信号,进而控制燃调通道伺服电机,以此来调节燃油流量,实现对某型发动机涡轮排气温度T6和高压压气机出口温度T3限制。
SM320LF2407A是TI公司的DSP芯片,晶振频率可达到10 MHz。
该芯片集成了存储单元、两个可独立使用的事件管理器模块、16通道10位A/D转换器、SCI串行通讯接口及SPI串行通讯口等[5-6]。
两个事件管理器模块功能相同,每个事件管理器包含两个16位通用定时器,可实现独立配置和关联配置,实现同步定时和频率设定;包括8个16位的脉冲宽度调制(PWM)通道,可以根据用户设定,实现PWM的对称和非对称波形;3个输入捕获单元,可实现对频率量信号的采集。
第二节正弦波脉宽调制SPWM控制法
1.2.1 正弦波脉宽调制SPWM
逆变器结构
典型的交流-直流-交流逆变器的结构如图2-1-3所示。
图2-1-3:变压变频器主电路结构图
图2-1-3中,单相交流或三相交流供电经非控全波整流,变成单极性直流电压;该直流电压经有源或无源功率因素校正电路PFC(Power Factor Correct)得到直流母线电压 Udc,某些情况下功率因素校正电路可以省略。
逆变器的核心电路是由六个功率开关器件Q1-Q6构成的三相逆变桥,每个桥有上下两个桥臂;上桥臂上端接直流母线电压正端(DC+),下桥臂下端接直流母线参考端(DC-);对于交流异步电机的驱动,为防止直通,上、下桥臂通常设置为互补工作方式:上桥臂导通时,下桥臂截止;下桥臂导通时,上桥臂截止。
三桥臂中间输出接至负载:三相感应电机的UVW输入端。
功率开关器件Q1-Q6可以是晶闸管GTO,双极性功率晶体管BJT,金属氧化膜功率场效应管MOSFET,绝缘栅型双极性功率晶体管IGBT。
IGBT具有开关速度快、承载电流大、耐压高、管耗小等特点,在电源逆变器中得到最为广泛的应用。
对于感性负载(电机),为了保护IGBT,常需加续流二极管D1-D6,用以在开关管关断时形成电流回路。
IGBT通常已与续流二极管封装在一起。
电容C用于能量缓冲,可保持直流母线电压Udc相对稳定。
为了在电机的UVW端线上输入三相平衡的交流电,通常做法是依一定规则用PWM信号PWM1L-PWM3H去控制逆变器的六个开关管的开关状态。
所谓的正弦波SPWM(Sinusoidally PWM)技术,就是用正弦波去调制PWM信号的脉宽,即:功率管的输出为一系列等幅不等宽的矩形脉冲波形,其宽度依正弦波规律变化;对交流输出波形的幅度对称性及相位要求不是非常苛刻的应用来说,PWM信号的频率通常保持不变。
这种控制策略也叫异步控制法,即载波信号的频率独立于调制波频率。
见图2-1-4。
SPWM也叫SWPWM(Sinusoidally Weighted PWM)。
图2-1-4 SPWM波形
图中:Udc --直溜母线电压;
Um -- 正弦波基波的峰值,一般情况下,随t2比例变化;
T,通常为一固定值;
t1 -- PWM信号的周期
pwm
t2 --正弦波基波的周期。
SPWM控制法的实现
SPWM控制法实现起来相对较为简单。
先产生一个在时间与幅度上都离散的单位正弦序列,也叫正弦表,90°,180°,360°皆可,并存储在程序空间里。
这部分工作可借助于其他工具来完成,如Office Excel。
正弦表的角度分辨率由实际应用确定;对于一个完整的电周期(360°), 1024个点能满足大部分应用的需求。
正弦波生成时,有效样本点越多,电压电流谐波越小,效果越好。
确定正弦表长度时,还需考虑的因素有:程序空间的大小,功率开关管的速度(PWM 信号频率/载波频率),PWM 的有效分辨率,调速比等。
正弦波频率f ,PWM 信号频率pwm f ,有效样本点数N 之间的关系如下:
f f N pwm =
式(2-2-1) 应用中,对应正弦波最高频率max f ,如有可能,N 应不小于60。
考虑到连续变频,正弦表长度L 可由下式计算得到:
N L *10>
即: max *10f f L pwm
> 式(2-2-2)
例2-2-1:
一给定SPWM 调速系统,载波频率为10KHz ,最高运行频率为120Hz ,试确定正弦表的长度。
直接代入式(2-2-2)得:
==>120
10*10*10*103max f f L pwm
833 同时由式(2-2-1)得: 83120
10*103===f F N pwm
符合要求。
取L =1024,即正弦表的长度为1024个点。
由于正弦值的范围是-1-1,实际存储的通常是正弦值经比例放大后的数据,对于DSPIC ,可以放大16384(14
2)倍(最高位用于表示极性)。
产生SPWM 正弦波的基本方法是用一组虚拟的三角形波与一个正弦波进行比较(斩波) 。
受制于PWM 的输出方式(边沿对齐),早期的斩波方案较多是采用锯齿形的三角形波。
随着中心对齐的PWM 的输出方式的出现,现在应用较多的是利用虚拟的等腰三角形波与一个正弦波进行比较,如图2-1-5 所示。
其相交的时刻(即交点)来作为开关管“ 开 ”或“ 关 ”
的时刻。
图2-1-5:SPWM波生成方法
图中: t1 –开关管导通;
t2 –开关管截止。
设定图2-1-5表示的是U相电压,结合图 2-1-3,t1 对应开关管Q1导通区间,t2 对应开关管Q1截止区间。
当PWM工作在中间对齐模式(又称连续增减计数模式)时,可产生图2-1-5中的虚拟等腰三角形波。
对应于每一次PWM中断,更新t1。
综前所述,对于任一给定的正弦波频率,正弦波输出大致经以下几个步骤:步骤1:依据V/F曲线,确定调制系数m;
步骤2:依据载波频率确定相位步进值;
步骤3:每一次PWM中断,依据相位步进值,确定正弦表步进值;
步骤4:查正弦表,取正弦值,计算时间t1;
步骤5:更新PWM占空比。
以上我们讨论的是一相正弦波的生成方法。
其他两相正弦波的产生方法相同,只是相位上彼此相差120º,即所谓的三相平衡电。
有效/无效窄脉冲对输出谐波电流有较大的影响,实际应用中应注意窄脉冲的处理(通
常是消除)。
SPWM 正弦波的输出特性
由于施加在电机上的信号是三相平衡的交流电:幅度相同,频率相同,相位相差120º。
在任何时刻,电流总是从两个绕组流进来,经一个绕组流出去,或者从一个绕组流进来,经两个绕组流出去。
显而易见,电机中性点N 电压总为直流母线电压Udc 的一半。
U 相的相电压可表示为: t m U u dc UN ωsin 2= 式(2-2-3)
式中: 目标相电压的角频率为ω;
m 为调制度(0~1); V 相的相电压为:
)32sin(2πω+=
t m U v dc VN 式(2-2-4)
U 、V 间的线电压为:
))32sin(((sin *2πωω+-=-=t t m U v u u dc VN UN UV
不难得到:
))61sin(**23πω+=t m U u dc UV
在满调制(m=1)的情况下,线电压的峰-峰值为: DC u P P UV 23)(=-
也就是说,SPWM 技术的电压利用率只有 86.6 %。
这就降低了系统的效率。
实际应用中,为了提高电压利用率,SPWM 技术通常辅助以三次谐波叠加法,或称为三次谐波注入法。
不管是谐波叠加还是谐波注入法,首先要遵循的一个原则是没有过调制:线电压不失真。
式(2-2-3)、(2-2-4)同乘以 32
,并在相电压上引入三次谐波e (t ),
令 t t e ω3sin 6
1)(=。
我们得到
)3sin 61(sin 3t t U u dc UN ωω+= 式(2-2-5) ))32(3sin 61)32(sin(3
πωπω+++=t t U v dc VN 得到:
)3sin 61)32(sin(3
t t U v dc VN ωπω++= 则 ))6
1sin(**πω+=t m U u dc UV 在满调制(m=1)的情况下,线电压的峰-峰值为:
dc U V U u =
显然,电压利用率变为100%,系统效率得到提高。
这种情况下,虽然得到了提升,并保持不失真。
但由式(2-2-5)看到,相电压由于叠加了三次谐波,出现明显失真。
见图2-1-6。
图2-1-6:三次谐波叠加后的相电压与线电压波形
1.2.2 正弦波脉宽调制SPWM 在DSPIC 上的实现。