图3 IR2130驱动其中1个桥臂的电路原理图 输出滤波模块
采用SPWM控制的逆变电路,输出的SPWM波中含有大量的高频谐波。为了保证输出电压为纯正的正弦波,必须采用输出滤波器。本文采用LC滤波电路,其中截止频率取基波频率的4.5倍,L=12mH,C=10μF。
电压检测模块
电压检测是完成闭环控制的重要环节,为了精确的测量线电压,通过TMS320F28335的SPI总线及GPIO口控制对输入的线电压进行衰减/放大的比例以满足A/D模块对输入信号电平(0-3V)的要求。电压检测模块采用256抽头的数字电位器AD5290和高速运算放大器AD8202组成程控信号放大/衰减器,每个输入通道的输入特性为1MΩ输入阻抗+30pF。电压检测模块电路原理图如图4所示。
图4 电压检测电路原理图 系统软件设计
系统上电后按照选定的模式自举加载程序,跳转到主程序入口,进行相关变量、控制寄存器初始化设置和正弦表初始化等工作。接着使能需要的中断,启动定时器,然后循环进行故障检测和保护,并等待中断。主要包括三部分内容:定时器周期中断子程序、A/D采样子程序和数据处理算法。主程序流程图如图5所示。
图5 主程序流程图 定时器周期中断子程序
主要进行PI调节,更新占空比,产生SPWM波。定时器周期中断流程图如图6所示。
图6 定时器周期中断流程图 A/D采样子程序
主要完成线电流采样和线电压采样。为确保电压与电流信号间没有相对相移,本部分利用TMS320F28335片上ADC的同步采样方式。为提高采样精度,在A/D中断子程序中采用均值滤波的方法。
对A相电压和电流A/D的同步采样部分代码如下:
interrupt void adc_isr(void)
{
if(counter==0)
{
receive_a0_data[i++] = AdcRegs.ADCRESULT0>>4; //右移四位
receive_b0_data[j++] = AdcRegs.ADCRESULT1>>4; //右移四位
}
if(counter>=1)
{ // 对结果取平均,平滑滤波
receive_a0_data[i++] = (receive_a0_data[i0++]+(AdcRegs.ADCRESULT0>>4))/2;
receive_b0_data[j++] = (receive_b0_data[j0++]+(AdcRegs.ADCRESULT1>>4))/2;
}
if(i==512) {i=0;i0=0;}
if(j==512) {j=0;j0=0; counter++;}
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // 复位排序器
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // 清中断标志位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;// 开中断应答
}
数据处理算法
本系统主要用到以下算法:(1)SVPWM算法(2)PID调节算法(3)频率检测算法
SVPWM算法
变频电源的核心就是SVPWM波的产生,SPWM波是以正弦波作为基准波(调制波),用一列等幅的三角波(载波)与基准正弦波相比较产生PWM波的控制方式。当基准正弦波高于三角波时,使相应的开关器件导通;当基准正弦波低于三角波时,使相应的开关器件截止。由此,逆变器的输出电压波形为脉冲列,其特点是:半个周期中各脉冲等距等幅不等宽,总是中间宽,两边窄,各脉冲面积与该区间正弦波下的面积成比例。这种脉冲波经过低通滤波后可得到与调制波同频率的正弦波,正弦波幅值和频率由调制波的幅值和频率决定。
本文采用不对称规则采样法,即在三角波的顶点位置与低点位置对正弦波进行采样,它形成的阶梯波更接近正弦波。不规则采样法生成SPWM波原理如图7所示。图中,Tc是载波周期,M是调制度,N为载波比,Ton为导通时间。
由图7得:
当k为偶数时代表顶点采样,k为奇数时代表底点采样。
SVPWM算法实现过程:
利用F28335内部的事件管理器模块的3个全比较单元、通用定时器1、死区发生单元及输出逻辑可以很方便地生成三相六路SPWM波形。实际应用时在程序的初始化部分建立一个正弦表,设置通用定时器的计数方式为连续增计数方式,在中断程序中调用表中的值即可产生相应的按正弦规律变化的SPWM波。SPWM波的频率由定时时间与正弦表的点数决定。
SVPWM算法的部分代码如下:
void InitEv(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x00FF;
EDIS;
EvaRegs.EVAIFRA.all = 0xFFFF; // 清除中断标志
EvaRegs.T1PR= 2500; //定时器1周期值,定时0.4us*2500=1ms
EvaRegs.T1CMPR = XPWM; //比较值初始化
EvaRegs.T1CNT = 0; EvaRegs.T1CON.all = 0xF54E; //增模式, TPS系数80M/32=2.5M,T1使能,
EvaRegs.ACTR.all = 0x0006; //PWM1,2低有效
EvaRegs.DBTCONA.all = 0x0534; //使能死区定时器1,分频80M/32=2.5M,死区时
//间5*0.4us=2us
EvaRegs.COMCONA.all = 0xA600; //比较控制寄存器 EvaRegs.EVAIMRA.all = 0x0080;
}
| | | |