1. AC-DC-AC系统架构解析
在电力电子领域,AC-DC-AC变换器是实现电能双向转换的关键设备。这套系统本质上是一个能量路由器,能够将不稳定的交流输入转换为纯净的交流输出。我通过STM32G474实现的这套方案,采用了电压型PWM整流和SPWM逆变的拓扑结构,整体架构可分为三个主要部分:
- 前端整流环节:采用全桥PWM整流拓扑,实现网侧单位功率因数运行
- 中间直流环节:包含大容量电解电容和LC滤波网络
- 后端逆变环节:使用全桥逆变电路生成可调频调压的交流输出
这个架构的特殊之处在于,整流和逆变部分共用同一套控制芯片,通过时分复用方式实现协同控制。在实际测试中,系统在满载情况下仍能保持THD<3%的输出质量。
2. 控制系统核心算法实现
2.1 锁相环(PLL)设计要点
电网同步是系统稳定运行的基础。我采用的软件锁相环基于二阶广义积分器(SOGI)结构,其核心代码如下:
c复制// SOGI正交信号生成
void SOGI_Update(SOGI_TypeDef *s, float input) {
s->v_alpha = s->v_beta_prev * s->k * s->wo * s->Ts;
s->v_beta = (input - s->v_alpha) * s->wo * s->Ts + s->v_beta_prev;
s->v_beta_prev = s->v_beta;
}
// 锁相环更新
void PLL_Update(PLL_TypeDef *p, float alpha, float beta) {
float sin_theta = sinf(p->theta);
float cos_theta = cosf(p->theta);
float error = alpha * cos_theta - beta * sin_theta;
p->integrator += error * p->ki * p->Ts;
p->frequency = p->kp * error + p->integrator + p->wo;
p->theta += p->frequency * p->Ts;
if(p->theta > 2*PI) p->theta -= 2*PI;
}
关键参数经验值:
- 电网频率wo:314.16rad/s (50Hz)
- SOGI增益k:1.414(临界阻尼)
- PLL比例系数kp:100-200
- PLL积分系数ki:5000-10000
2.2 整流侧双闭环控制
整流侧采用经典的电压外环+电流内环结构,但有几个创新点值得注意:
-
电压外环的特殊处理:
- 采用带前馈的PI控制器
- 前馈项计算:Pout/(Vgrid*η)
- 输出限幅根据IGBT额定电流设定
-
电流内环的PR控制:
c复制// PR控制器实现
float PR_Controller(PR_TypeDef *pr, float error) {
float out = error * pr->kp;
pr->integrator += error * pr->ki * pr->Ts;
out += pr->integrator;
// 谐振项计算
float res = 2 * pr->kr * pr->wc * pr->Ts;
res *= (error * cosf(pr->theta) - pr->prev_error * cosf(pr->theta_prev));
out += res / (pr->Ts*pr->Ts * pr->wc*pr->wc + 4);
pr->prev_error = error;
pr->theta_prev = pr->theta;
return out;
}
2.3 逆变侧有效值控制
逆变环节采用基于有效值的单环控制,其核心在于实时计算输出电压有效值:
c复制// 滑动窗口有效值计算
float RMS_Calculate(RMS_TypeDef *rms, float new_sample) {
rms->sum_squares -= rms->window[rms->index] * rms->window[rms->index];
rms->window[rms->index] = new_sample;
rms->sum_squares += new_sample * new_sample;
rms->index = (rms->index + 1) % RMS_WINDOW_SIZE;
return sqrtf(rms->sum_squares / RMS_WINDOW_SIZE);
}
这种方法的优势在于:
- 计算延迟固定为一个基波周期
- 对采样噪声不敏感
- 实现简单,计算量小
3. 关键外设配置技巧
3.1 高级定时器配置
STM32G474的高级定时器配置是实现高精度PWM的核心:
c复制void TIM1_Init(void) {
// 时钟配置
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
// 时基配置
TIM1->PSC = 0; // 无分频
TIM1->ARR = SystemCoreClock / (2 * SWITCHING_FREQ) - 1; // 倍频模式
// PWM模式配置
TIM1->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1;
TIM1->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E;
// 刹车和死区配置
TIM1->BDTR |= TIM_BDTR_MOE | (DEADTIME << TIM_BDTR_DTG_Pos);
// 触发ADC配置
TIM1->CCR2 = TIM1->ARR / 2; // PWM中点触发
TIM1->CR2 |= TIM_CR2_CCDS | TIM_CR2_CCUS;
TIM1->EGR = TIM_EGR_UG; // 更新寄存器
TIM1->CR1 |= TIM_CR1_CEN; // 启动定时器
}
3.2 ADC采样优化
ADC配置的关键点:
- 使用定时器触发采样,确保采样时刻精确
- 配置注入通道实现同步采样
- 启用DMA传输减轻CPU负担
c复制void ADC_Init(void) {
// 共用配置
ADC12_COMMON->CCR |= ADC_CCR_CKMODE_0 | ADC_CCR_CKMODE_1; // 异步时钟模式
// ADC1配置
ADC1->CFGR |= ADC_CFGR_CONT | ADC_CFGR_DMAEN;
ADC1->SMPR1 |= ADC_SMPR1_SMP9_0 | ADC_SMPR1_SMP9_1; // 47.5周期采样时间
// 注入通道配置
ADC1->JSQR |= (1 << ADC_JSQR_JL_Pos) | (9 << ADC_JSQR_JSQ1_Pos);
ADC1->CFGR |= ADC_CFGR_JQDIS;
// 触发源配置
ADC1->CFGR |= ADC_CFGR_JEXTEN_0 | (7 << ADC_CFGR_JEXTSEL_Pos);
}
4. 数字滤波实现细节
4.1 二阶巴特沃斯滤波器
c复制typedef struct {
float a[3];
float b[3];
float x[3];
float y[3];
} BiquadFilter;
float Biquad_Update(BiquadFilter *f, float input) {
// 移位历史数据
f->x[2] = f->x[1];
f->x[1] = f->x[0];
f->x[0] = input;
f->y[2] = f->y[1];
f->y[1] = f->y[0];
// 差分方程计算
f->y[0] = f->b[0] * f->x[0] + f->b[1] * f->x[1] + f->b[2] * f->x[2]
- f->a[1] * f->y[1] - f->a[2] * f->y[2];
return f->y[0];
}
滤波器设计步骤:
- 确定截止频率(如2kHz)
- 计算预扭曲频率:ωd = 2/Ts * tan(ωc*Ts/2)
- 设计模拟原型滤波器
- 使用双线性变换转换为数字滤波器
4.2 卡尔曼滤波器实现
c复制typedef struct {
float Q; // 过程噪声协方差
float R; // 观测噪声协方差
float x; // 状态估计
float P; // 估计误差协方差
float K; // 卡尔曼增益
} KalmanFilter;
float Kalman_Update(KalmanFilter *k, float z) {
// 预测
float x_pred = k->x;
float P_pred = k->P + k->Q;
// 更新
k->K = P_pred / (P_pred + k->R);
k->x = x_pred + k->K * (z - x_pred);
k->P = (1 - k->K) * P_pred;
return k->x;
}
参数整定建议:
- Q/R比值决定滤波器响应速度
- 初始P可取较大值加速收敛
- R可通过测量ADC噪声方差确定
5. 系统保护机制设计
5.1 实时故障检测
c复制void Fault_Handler(void) {
// 读取故障标志
uint32_t flags = TIM1->SR & (TIM_SR_BIF | TIM_SR_CC1OF | TIM_SR_CC2OF);
if(flags) {
// 立即关闭PWM输出
TIM1->BDTR &= ~TIM_BDTR_MOE;
// 记录故障信息
fault_log[fault_index].type = flags;
fault_log[fault_index].timestamp = systick_count;
fault_index = (fault_index + 1) % FAULT_LOG_SIZE;
// 触发安全状态
Enter_Safe_Mode();
}
}
5.2 分级保护策略
-
一级保护(硬件自动触发):
- 过流比较器触发刹车输入
- 硬件死区保护
- 响应时间<100ns
-
二级保护(软件中断响应):
- ADC过压/欠压检测
- 温度监控
- 响应时间<10μs
-
三级保护(主循环处理):
- 能量平衡监测
- 通信故障处理
- 响应时间<1ms
6. 系统调试与优化
6.1 控制参数整定方法
-
电流环整定步骤:
- 先关闭电压环,仅测试电流环
- 给定阶跃电流指令,观察响应
- 先调P增益至出现轻微振荡
- 然后加入I增益消除稳态误差
- 最后加入谐振项提高跟踪精度
-
电压环整定技巧:
- 电流环作为内环需先调好
- 使用斜坡信号而非阶跃信号测试
- 带宽设为电流环的1/5~1/10
- 重点关注抗负载扰动能力
6.2 常见问题解决方案
问题1:整流侧电流波形畸变
- 检查PLL同步精度
- 确认ADC采样与PWM同步
- 调整PR控制器谐振增益
问题2:逆变输出电压抖动
- 检查直流母线电压纹波
- 验证有效值计算窗口长度
- 调整PID抗积分饱和参数
问题3:系统效率偏低
- 测量开关器件损耗
- 优化死区时间设置
- 检查驱动电路开关速度
这套系统在实际应用中展现了出色的性能指标:
- 输入功率因数>0.99
- 输出电压THD<3%
- 整机效率>95%
- 动态响应时间<10ms
通过STM32G474的强大性能,我们实现了传统需要DSP才能完成的复杂控制算法,为中小功率AC-DC-AC系统提供了高性价比的解决方案。
