基于C语言控制的数字化单相220V转三相380V逆变方案

注意事项前置说明

电力电子变压/逆变方案,属于强电领域,涉及220V市电和380V工业电压,操作不当会引发触电、火灾甚至设备爆炸风险。请务必由持有电工特种作业操作证的专业人员实施,所有电路必须做好绝缘、接地防护,严格遵循国家电气安全规范。

本文提供的是基于C语言控制的数字化单相220V转三相380V逆变方案,适用于小型单相220V电网驱动三相380V负载(如小型三相电机、电焊机等,总功率不超过4.4kW)。


一、方案整体架构

我们采用单相输入全桥逆变+升压变压器的方案,将220V单相交流电整流为直流后,通过IGBT全桥逆变电路生成三相SPWM波形,再通过升压隔离变压器将电压提升至线电压380V,最终输出三相交流电。
整体框图如下:

220V市电 → 整流滤波 → DC母线 → 全桥逆变单元(C语言控制IGBT) → 升压隔离变压器 → 三相380V输出

核心参数匹配

总功率4.4kW,单相输入电流约为 4400W / 220V ≈20A,逆变输出三相线电流约为 4400W / (√3*380V)≈6.7A。


二、原理详解

1. 功率变换流程

  1. 整流滤波:将单相220V交流电通过桥式整流器转换为约310V的直流母线电压,再通过电解电容滤波平抑纹波。
  2. SPWM逆变:通过C语言控制IGBT全桥电路,按照三相正弦波的SPWM调制规则通断IGBT,将直流母线电压转换为三相正弦交流电的脉冲序列。
  3. 升压隔离:通过三相升压变压器将逆变输出的低压SPWM波形升压至线电压380V,同时实现输入输出电气隔离,保障安全。
  4. 滤波稳压:变压器输出侧加装LC低通滤波器,将SPWM脉冲还原为标准的三相正弦交流电。

2. C语言控制核心:SPWM调制

我们采用对称规则采样法生成三相SPWM波,核心是通过C语言计算每一个开关周期内IGBT的导通时刻,实现正弦电压的脉冲等效输出。

核心数学模型

三相正弦参考波为:

\[\begin{cases} U_a = U_m \sin(\omega t) \\ U_b = U_m \sin(\omega t - 120^\circ) \\ U_c = U_m \sin(\omega t + 120^\circ) \end{cases} \]

通过比较参考波和三角载波,生成IGBT的开关信号,将直流母线电压按照正弦规律分配到三相输出端。


三、硬件实现清单

组件类型 参数要求
整流桥模块 额定电流≥25A,耐压≥600V(适配220V整流后的310V母线)
母线滤波电容 2~4颗450V/1000μF电解电容并联,总容量满足母线纹波抑制要求
IGBT全桥模块 6颗IGBT管(每相2颗),耐压≥1200V,额定电流≥10A,搭配驱动板
三相升压变压器 输入线电压220V(相电压127V),输出线电压380V,容量≥5kVA,D/Y接线方式
输出LC滤波器 每相配置L=5mH电感+10μF电容,滤除SPWM载波谐波
主控MCU 32位ARM单片机(如STM32F103),主频≥72MHz,至少3路互补PWM输出通道
采样与保护电路 母线电压采样、输出电流采样、过温保护、过流保护电路

四、C语言代码实现(核心SPWM生成部分)

1. 基础宏定义与全局变量

#include "stm32f10x.h"

// 系统参数配置
#define DC_BUS_VOLTAGE 310.0f    // 220V整流后的母线电压
#define OUTPUT_LINE_VOLTAGE 380.0f// 目标输出线电压
#define CARRIER_FREQ 10000.0f    // SPWM载波频率10kHz
#define SYS_FREQ 72000000.0f      // 单片机主频
#define PWM_PERIOD (SYS_FREQ / CARRIER_FREQ) // PWM计数周期

// 三相正弦波幅值系数(升压变比约为380/220≈1.73,匹配输出电压)
#define AMP_RATIO (OUTPUT_LINE_VOLTAGE / (DC_BUS_VOLTAGE * 1.732f))
float theta = 0.0f;               // 电角度,单位:弧度
float sin_va, sin_vb, sin_vc;     // 三相参考正弦波

// 定时器3用于生成SPWM载波
void TIM3_PWM_Init(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

    // 配置PWM输出引脚PA6/PA7、PB0/PB1、PB13/PB14
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_13 | GPIO_Pin_14;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // 定时器基础配置
    TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD - 1;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIm_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    // 配置PWM模式1:向上计数时,CNT < CCRx时输出高电平
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
    TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    TIM_OC3Init(TIM3, &TIM_OCInitStructure);
    TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    TIM_Cmd(TIM3, ENABLE);
}

2. 三相SPWM波生成主函数

// 电角度增量计算:f=50Hz时,每100us步进约0.00924弧度
#define THETA_STEP (2 * PI * 50 / 10000) // 适配10kHz载波频率

void Generate_SPWM(void)
{
    // 更新三相正弦参考波
    sin_va = AMP_RATIO * sinf(theta);
    sin_vb = AMP_RATIO * sinf(theta - 2 * PI / 3);
    sin_vc = AMP_RATIO * sinf(theta + 2 * PI / 3);
    theta += THETA_STEP;
    if(theta > 2*PI) theta -= 2*PI;

    // 计算每相的CCR寄存器值,匹配PWM占空比
    uint16_t ccr_va = (uint16_t)((sin_va + 1) * PWM_PERIOD / 2);
    uint16_t ccr_vb = (uint16_t)((sin_vb + 1) * PWM_PERIOD / 2);
    uint16_t ccr_vc = (uint16_t)((sin_vc + 1) * PWM_PERIOD / 2);

    // 写入比较寄存器,更新PWM占空比
    TIM3->CCR1 = ccr_va; // A相下桥臂
    TIM3->CCR2 = PWM_PERIOD - ccr_va; // A相上桥臂(互补输出)
    TIM3->CCR3 = ccr_vb;
    TIM3->CCR4 = PWM_PERIOD - ccr_vb;
    // B、C相可通过另外的定时器通道实现,此处简化示例
}

// 定时器中断中定时调用SPWM生成函数
void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
    {
        Generate_SPWM();
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    }
}

五、实现步骤

1. 硬件搭建

  1. 按照接线图连接整流桥、母线电容、IGBT全桥模块和变压器,确保所有高压部分做好绝缘防护。
  2. 连接MCU控制板与IGBT驱动板,通过光耦隔离强电和弱电信号。
  3. 加装电压电流采样电路,将母线电压、输出电流反馈给MCU用于闭环控制。

2. 软件调试

  1. 先在无高压的情况下,通过信号发生器模拟SPWM波,测试IGBT驱动逻辑是否正常。
  2. 接入低压直流电源(如300V直流电源替代整流后的母线),测试三相输出波形是否为标准正弦波。
  3. 接入220V市电,逐步加载负载,通过示波器监测输出电压和电流,调整SPWM调制系数确保输出电压稳定在380V。

3. 安全验证

  1. 测试过流、过压、过温保护逻辑是否正常触发。
  2. 确保设备外壳可靠接地,绝缘电阻符合国家电气安全标准。

六、应用场景与优化方向

适用场景

  1. 户外无三相电网场景下,驱动小型三相380V设备(如小型切割机、伺服电机)。
  2. 应急供电场景,将单相220V市电转换为三相380V临时供电。

优化方向

  1. 加入PID闭环控制,稳定输出三相电压和频率。
  2. 采用无感FOC矢量控制,提升电机驱动效率。
  3. 加入蓝牙/WiFi模块,实现远程监控和参数调整。
posted @ 2026-04-13 10:32  嘎哥  阅读(205)  评论(0)    收藏  举报