手把手教你打电赛—单相逆变器软件设计
本文详细介绍了单相全桥逆变器的双闭环控制(电流内环+电压外环)在离网模式下的实现方法。系统通过PI控制器和SPWM模块调节驱动信号,使输出电压精确跟踪正弦参考信号。重点分析了三种核心子模块:1)两种参考信号生成方法(查表法和实时计算法);2)单极性与双极性SPWM调制技术的特点与实现;3)双PI控制器的设计及抗饱和处理。文章提供了基于STM32和DSP的完整代码实例,并给出"内快外慢"的参数整定原
一、单相逆变器的整体控制(离网模式)
图1给出了单相全桥逆变器的双闭环控制(电流内环、电压外环)的框图。双闭环控制目标是通过控制器调节驱动信号,使逆变器输出一个稳定的正弦交流电压𝑢𝑜,且输入电压uo跟踪给定信号𝑢ref。
单相逆变器的双闭环控制包括以下核心模块:给定信号(uref)的生成、PI控制器、SPWM模块。

图1 双闭环控制的框图
二、核心子模块详解
2.1. 给定信号生成方法
电压外环所需的参考信号uref为一正弦波,其生成方式包括以下两类:
1) 查表法(Lookup Table)
原理:将正弦波一周期的离散点预先计算存储于查找表,系统运行时按时序读取。
优点:运算量小,实时性强,不依赖浮点计算;
适用:资源有限的控制平台(如 STM32 固定点、DSP 固定点核等);
局限:频率和幅值调节不灵活,分辨率受限。
海盗船示例代码(stm32f103(keil5开发):
const u16 Sin_wave_Table[200] =
{0, 2, 3, 5, 6, 8, 9, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 45, 47, 48, 50, 51, 52, 54, 55, 56, 58, 59, 60, 61, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 84, 85, 86, 87, 88, 88, 89, 90, 90, 91, 92, 92, 93, 94, 94, 95, 95, 96, 96, 96, 97, 97, 98, 98, 98, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 98, 98, 98, 97, 97, 96, 96, 96, 95, 95, 94, 94, 93, 92, 92, 91, 90, 90, 89, 88, 88, 87, 86, 85, 84, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 68, 67, 66, 65, 64, 63, 61, 60, 59, 58, 56, 55, 54, 52, 51, 50, 48, 47, 45, 44, 43, 41, 40, 38, 37, 35, 34, 32, 31, 29, 28, 26, 25, 23, 22, 20, 19, 17, 16, 14, 13, 11, 9, 8, 6, 5, 3, 2};
if(i<200)
{
TIM1->CCR2=(30*Sin_wave_Table[i]+Mid_Value);
TIM1->CCR1=(30*Sin_wave_Table[i]+Mid_Value);
}
else
{
TIM1->CCR2=(Mid_Value-30*Sin_wave_Table[i-200]);
TIM1->CCR1=(Mid_Value-30*Sin_wave_Table[i-200]);
}
i++;
if(i>=399)
i=0;
2) Sin函数计算法
原理:通过调用正弦函数实时计算 uref=A⋅sin(ωt);
优点:灵活性高,幅值和频率可动态调整;
要求:需处理器支持浮点运算(如 STM32F4/F7,TMS320F28335 等);
适用:控制器资源充足,控制精度要求较高场合。
海盗船示例代码(dsp28335/ccs平台开发):
if(i<= ( (sum/2) -1)) //半周期-1
{
x=pi*Out_Point_Count/20000;
y=(int)(sin(x)*Aratio*1875);
EPwm3Regs.CMPA.half.CMPA= 1875+y;
EPwm3Regs.CMPB= 1875+y;
EPwm4Regs.CMPA.half.CMPA= 1875-y;
EPwm4Regs.CMPB= 1875-y;
Out_Point_Count=Out_Point_Count+k; // 20000/半周期点数
}
else
{
x=pi*Out_Point_Count/20000;
y=(int)(sin(x)*Aratio*1875);
EPwm3Regs.CMPA.half.CMPA= 1875-y;
EPwm3Regs.CMPB= 1875-y;
EPwm4Regs.CMPA.half.CMPA= 1875+y;
EPwm4Regs.CMPB= 1875+y;
Out_Point_Count =Out_Point_Count +k;
}
2.2. SPWM模块设计
SPWM模块将控制器输出的调制信号Udc与载波比较,生成全桥驱动脉冲。按载波方式不同,可分为单极性与双极性两类。两种SPWM调制的详细原理请查阅TI官方技术文档,见附件。
1) 单极性 SPWM(Unipolar SPWM)
图2为单极性SPWM方案示意图,SW1对应图1中Q1,SW2对应图1中Q2,其余器件类似。图3为单极性PWM的开关波形(EPWM1、CAD为DSP中寄存器名)。
特点:输出电压在 0 与 +Vdc/-Vdc 之间切换;
优点:输出电压谐波成分低,电能质量好;
适用:硬件支持两组互补 PWM 输出的控制系统。
海盗船示例代码(dsp28335/ccs平台开发):
ur2= mr/50.0;
if ( ur2 >= 0.0)
{
A=0;//EPwm1Regs.CMPA.half.CMPA = 0;
B=(int)((float)3600*fabs(ur2));//EPwm2Regs.CMPA.half.CMPA = (int)((float)3750*fabs(ur2));
}
else
{
A= (int)((float)3600*fabs(ur2));//EPwm1Regs.CMPA.half.CMPA = (int)((float)3750*fabs(ur2));
B=0;//EPwm2Regs.CMPA.half.CMPA = 0 ;
}

图2 单极性SPWM方案

图3 单极性PWM的开关波形
2) 双极性 SPWM(Bipolar SPWM)
图4为双极性SPWM方案示意图,SW1对应图1中Q1,SW2对应图1中Q2,其余器件类似。图5为双极性PWM的开关波形(EPWM1、CAD为DSP中寄存器名)。特点:输出电压在 +Vdc 与 -Vdc 之间切换;
优点:结构简单,易于实现;
缺点:谐波集中,滤波要求高;
适用:资源有限、实现简便为主的系统。
海盗船示例代码(dsp28335/ccs平台开发):
sum = (20000/Frequency);
k = (20000/(sum/2));
if(i>=(sum-1)) //总点数-1
{
i=0;
}
if(i%( sum /2 ) == 0) //半周期点数
Out_Point_Count =0;
if(i<= ( (sum/2) -1)) //半周期-1
{
x=pi*Out_Point_Count/20000;
y=(int)(sin(x)*Aratio*1875);
A=1875+y; // EPwm3Regs.CMPA.half.CMPA= 1875+y;
//B=1875+y; // EPwm3Regs.CMPB= 1875+y;
C=1875-y; // EPwm4Regs.CMPA.half.CMPA= 1875-y;
//D=1875-y; // EPwm4Regs.CMPB= 1875-y;
// TIM1->CCR2=(A*Sin_wave_Table[i]+Mid_Value);
// TIM1->CCR1=(A*Sin_wave_Table[i]+Mid_Value);
Out_Point_Count=Out_Point_Count+k; // 20000/半周期点数
}
else
{
x=pi*Out_Point_Count/20000;
y=(int)(sin(x)*Aratio*1875);
A=1875-y ; // EPwm3Regs.CMPA.half.CMPA= 1875-y;
//B=1875-y; // EPwm3Regs.CMPB= 1875-y;
C=1875+y; // EPwm4Regs.CMPA.half.CMPA= 1875+y;
//D=1875+y; // EPwm4Regs.CMPB= 1875+y;
// TIM1->CCR2=(Mid_Value-A*Sin_wave_Table[i-200]);
// TIM1->CCR1=(Mid_Value-A*Sin_wave_Table[i-200]);
Out_Point_Count =Out_Point_Count +k;
}
i++;

图4 双极性SPWM方案

图5 双极性PWM的开关波形
2.3 PI控制器
双闭环中各PI控制器功能如下:
1) 电压外环PI控制器
输入:输出电压误差 eu=uref−uo;
输出:电感电流参考值 iL∗;
作用:维持输出电压稳定,抵抗外部负载扰动。
PI控制器形式:

2) 电流内环 PI 控制器
输入:电流误差 ei=iL∗−iL;
输出:控制量 Udc;
作用:提高电流跟踪精度,提升系统动态性能。
PI控制器形式见式(1.1).
海盗船PI控制示例代码(dsp28335/ccs平台开发):
float pi_func(PI_CTRL_DATA_DEF *pi, float give, float sen)
{
//改进 抗饱和积分
/* proportional term */
pi->up = pi->Kp*(give - sen);
/* integral term */
pi->ui = (pi->Out == pi->v1)?(pi->Ki* pi->up+ pi->i1) : pi->i1;
pi->i1 = pi->ui ;
/* control output */
pi->v1 = pi->up + pi->ui;
pi->Out= pi->v1;
if(pi->v1 >= pi->Umax)
pi->Out = pi->Umax;
if(pi->v1 <= pi->Umin)
pi->Out = pi->Umin;
return(pi->Out);
}
2.4 双闭环调试建议
参数整定可采用经验法(试凑法)、Ziegler-Nichols 法,或借助 MATLAB 仿真平台优化。
双闭环调试心得(电源海盗船):
遵循“内快外慢”的基本原则,即内环(电流环)的响应速度应显著快于外环(电压环)。因此,调试过程中应优先设置电流环参数:
电流环调试:为提高系统对快速扰动的响应能力,应将比例增益 Kip设得较大,增强调节能力;为简化控制并保证稳定性,积分增益 Kii可设为零。
电压环调试:内环调试完成后,外环初期仅调整比例增益 Kvp,将积分增益 Kvi设为零;待系统初步稳定后,再逐步引入较小的 Kvi以减小稳态误差。
参数微调:在初步设定基础上,根据实际运行情况微调 Kvp和Kvi,以兼顾系统的稳态精度与动态响应,确保逆变器输出稳定可靠。
三、实验结果
3.1. 单相逆变器实物图

图1 单相全桥逆变器的整体实物图

图2 驱动电路的实物图

图3 采样电路的实物图

图4 主控板的实物图
3.2. 测试结果

图5 采用闭环控制的单相逆变器输出电压波形
测试的详细步骤和结果,可移步小破站链接:2025年电赛电源速成教学——2分钟完成23年国赛基础部分_哔哩哔哩_bilibili
TI官方介绍单极性与双极性技术文档:PDF下载链接:[点击下载](链接: https://pan.baidu.com/s/13w-acaiXp_fwNgI_K7poiA?pwd=x726)
更多推荐



所有评论(0)