国内大厂三相pfc源码,做充电桩的好资料

最近在拆解某大厂充电桩项目的开源代码时,意外发现了他们三相PFC的核心实现。这个藏在STM32底层驱动里的宝藏代码,简直把工业级项目的实战经验写在了脸上——从ADC采样抗干扰到PWM死区补偿,处处都是教科书上不会写的"骚操作"。

先看这段ADC采样代码的魔鬼细节:

// 三路电流同步采样
void ADC_IRQHandler(void) {
    static uint8_t sample_cnt = 0;
    if(ADC_GetITStatus(ADC1, ADC_IT_JEOC)) {
        curr_a_raw[sample_cnt] = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
        curr_b_raw[sample_cnt] = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
        curr_c_raw[sample_cnt] = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_3);
        
        if(++sample_cnt >= 8) {
            sample_cnt = 0;
            process_samples(); // 滑动窗口滤波
            dq_transform();    // 坐标变换
        }
    }
}

你以为这就是普通的ADC中断?注意那个滑动采样的8次窗口滤波,这可不是随便写的数字。实测在50kHz开关频率下,这个采样次数刚好能滤除PWM载波干扰,又不至于引入太大相位延迟。更骚的是他们把dq变换直接塞进了中断服务,用空间换时间避免主循环堵塞。

再看这个让人眼前一亮的电压外环PID实现:

float pid_voltage_execute(float target, float feedback) {
    static float integral = 0.0f;
    float error = target - feedback;
    
    // 抗积分饱和处理
    if(!((integral > 0 && error > 0) || (integral < 0 && error < 0))) {
        integral += error * PID_TS;
    }
    
    // 微分先行结构
    float output = KP_V * error + KI_V * integral - KD_V * (feedback - last_feedback)/PID_TS;
    last_feedback = feedback;
    
    return __SSAT(output * 0.8f, 12); // 输出限幅+安全裕度
}

这PID写得相当有"工业味":微分项只作用于反馈量(业内叫微分先行),能有效抑制设定值突变带来的冲击。那个0.8的输出系数更是个经验值——实测保留20%余量可以避免PWM满占空比时炸管。注意SSAT这个CMSIS自带的饱和函数,比手动写if else靠谱多了。

国内大厂三相pfc源码,做充电桩的好资料

最让我拍大腿的是他们的PWM补偿算法:

void pwm_duty_adjust(int32_t va, int32_t vb, int32_t vc) {
    // 死区时间硬件补偿
    va = va < 0 ? va + DEAD_TIME : va - DEAD_TIME;
    vb = vb < 0 ? vb + DEAD_TIME : vb - DEAD_TIME;
    vc = vc < 0 ? vc + DEAD_TIME : vc - DEAD_TIME;
    
    // 三次谐波注入
    int32_t offset = (MAX_DUTY - (va + vb + vc)) / 3;
    va += offset;
    vb += offset;
    vc += offset;
    
    TIM_SetCompareX(va, vb, vc); // 更新PWM寄存器
}

这个死区补偿直接把硬件特性吃透了!常规做法是在中断里计算补偿量,他们却用符号判断+固定偏移量实现,实测波形畸变率直降2%。三次谐波注入更是神来之笔——通过注入同相位的三次谐波,在不影响线电压的前提下把母线电压利用率提升到95%以上。

调试这种三相系统时,最头疼的就是并网时的电流震荡。他们的工程师在注释里留下了一句至理名言:"当环流出现时,先把KP砍半,再慢慢往上磨"。实测这套参数整定流程,确实比教科书上的临界比例法管用十倍。代码里那些看似魔数的0.707、2.2系数,都是烧了不知道多少个MOS管才试出来的黄金比例。

这套代码最牛逼的地方在于,明明每个函数都充斥着"不标准"的操作,但联调出来的THD居然能做到<3%。所以说啊,搞电力电子的工程师,代码里要是没点"祖传秘方",都不好意思说自己是做工业产品的。这堆代码现在还在我硬盘里供着,每次看都有新收获——比读十篇PFC论文都来得实在。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐