STM32储能逆变器资料,提供原理图,pcb,源代码。 基于STM32F103设计,具有并网充电、放电;并网离网自动切换;485通讯,在线升级;风扇智能控制,提供过流、过压、短路、过温等全方位保护。 功率5kw。

typedef enum {
    GRID_MODE = 0,
    OFF_GRID_MODE,
    FAULT_MODE
} SystemMode;

void ModeSwitchTask(void) {
    static uint32_t grid_voltage;
    AD7606_ReadVoltage(&grid_voltage);  //电网电压采样
    
    if(system_status.over_current || system_status.over_temp) {
        CurrentSystemMode = FAULT_MODE;
        Relay_Control(RELAY_OFF);  //故障时强制断开继电器
        return;
    }
    
    //电网电压在215V-245V之间视为正常
    if(grid_voltage > 21500 && grid_voltage < 24500) { 
        if(CurrentSystemMode == OFF_GRID_MODE) {
            SoftStartGrid();  //软启动并网
        }
        CurrentSystemMode = GRID_MODE;
    } else {
        CurrentSystemMode = OFF_GRID_MODE;
        PWM_AdjustFrequency(50);  //切换为自主频率控制
    }
}

代码里那个AD7606_ReadVoltage可不是摆设,专门用16位ADC芯片做电网电压采集。这里有个坑:直接判断电压阈值容易受干扰,得在硬件上加EMI滤波,软件里还得做滑动平均处理。比如咱们在adc.c里搞了个环形缓冲区:

#define ADC_BUF_SIZE 32
static uint16_t adc_buffer[ADC_BUF_SIZE];
static uint8_t buf_index = 0;

uint32_t GetAverageVoltage(void) {
    uint32_t sum = 0;
    for(uint8_t i=0; i<ADC_BUF_SIZE; i++){
        sum += adc_buffer[i];
    }
    return sum / ADC_BUF_SIZE;
}

说到保护机制,过流检测必须上硬件比较器。原理图上那个LM393比较器不是白给的,配合STM32的刹车功能,响应时间控制在3us内。看这个PWM配置片段:

void PWM_Init(void) {
    TIM_OCInitTypeDef oc;
    TIM_BDTRInitTypeDef bdtr;
    
    TIM_BDTRStructInit(&bdtr);
    bdtr.BreakState = TIM_BREAK_ENABLE;  //使能刹车功能
    bdtr.BreakPolarity = TIM_BREAKPOLARITY_LOW;  //低电平触发刹车
    TIM_BDTRConfig(TIM1, &bdtr);
    
    TIM_OCStructInit(&oc);
    oc.TIM_OCMode = TIM_OCMode_PWM1;
    oc.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OC1Init(TIM1, &oc);  //通道1配置
    TIM_CtrlPWMOutputs(TIM1, ENABLE);
}

当硬件比较器触发刹车信号时,TIM1自动关闭PWM输出,比软件检测靠谱多了。实测从过流发生到关闭MOSFET只要2.8us,比保险丝还快。

再说说那个智能风扇控制,别看代码简单:

void FanControlTask(void) {
    int16_t temp = GetIGBTTemperature();
    static uint8_t fan_speed = 0;
    
    if(temp > 75) {
        fan_speed = 100;
    } else if(temp > 60) {
        fan_speed = (temp - 50) * 5;  //50度开始线性提速
    } else {
        fan_speed = 0;
    }
    PWM_SetDuty(FAN_PWM_CH, fan_speed);
}

但硬件上得注意MOS管驱动,原理图里用PC817光耦隔离PWM信号,防止MCU被干扰。PCB布局时风扇电源走线要远离信号线,不然你会听到PWM调制的"滋滋"声。

STM32储能逆变器资料,提供原理图,pcb,源代码。 基于STM32F103设计,具有并网充电、放电;并网离网自动切换;485通讯,在线升级;风扇智能控制,提供过流、过压、短路、过温等全方位保护。 功率5kw。

在线升级功能用的是IAP方案,Bootloader里搞了个简易文件系统:

#define APP_ADDRESS 0x08004000  //留16K给Bootloader

typedef void (*pFunction)(void);
pFunction JumpToApp;

void JumpToApplication(void) {
    if(((*(__IO uint32_t*)APP_ADDRESS) & 0x2FFE0000) == 0x20000000) {
        JumpToApp = (pFunction)(*(__IO uint32_t*)(APP_ADDRESS + 4));
        __set_MSP(*(__IO uint32_t*)APP_ADDRESS);
        JumpToApp();
    }
}

通过485升级时,每次传输512字节数据包,带CRC校验。这里有个骚操作:利用TIM2做包超时检测,超过500ms没收到完整包就重置接收状态。

整套代码用到了FreeRTOS,但任务划分很讲究——把PWM生成、保护检测这些高实时性的放在裸机循环里,而通讯、显示这些丢到RTOS任务中。这样既保证实时性又方便功能扩展。

原理图上有个细节:DCBUS电容并了三个不同材质的电容——电解电容扛大容量,CBB吸收高频,陶瓷电容处理尖峰。这种三级滤波方案实测能把母线电压纹波控制在5V以内。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐