news 2026/6/21 20:32:16

最近在拆解某大厂量产的6.6kW OBC程序时,发现他们PFC和LLC的代码架构有点意思。先看这段PFC的电压环控制核心代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
最近在拆解某大厂量产的6.6kW OBC程序时,发现他们PFC和LLC的代码架构有点意思。先看这段PFC的电压环控制核心代码

大厂量产的6.6kw OBC车载充电机程序 PFC和LLC源代码

__interrupt void PFC_ISR(void) { static float Vdc_Err, Duty_Step; //ADC采样值转换成实际电压 Vdc_Actual = (AdcResult.ADCRESULT0 >> 4)*0.0125; Vdc_Err = Vdc_Ref - Vdc_Actual; //带抗饱和的PID算法 if(!PFC_SoftStart_Flag) { Duty_Step = 0; } else { Duty_Step = Kp*Vdc_Err + Ki*Vdc_Err_Integral; Duty_Step = LIMIT(Duty_Step, -0.05, 0.05); //限制步长变化率 } EPwm1Regs.CMPA.half.CMPA = (uint16_t)(Duty_Step * 1000); EPwm1Regs.CMPB = DeadTime_Compensation(EPwm1Regs.CMPA); //死区补偿 }

这段代码有几个实战细节值得注意:首先是ADC采样的0.0125转换系数,对应的是12位ADC基准3.0V时的电压分辨率。工程师用右移4位操作代替了常规的除以16,这种位操作在实时控制中能节省几个时钟周期。再看Duty_Step的限制范围±0.05,对应的是每个控制周期最大5%占空比变化,这种斜率限制对电磁兼容有帮助。

LLC部分的移相控制更有意思,特别是频率跟踪策略:

void LLC_Freq_Update(float Vbat) { float Freq_Base = 85e3; //基准频率85kHz float Freq_Adj = 0; if(Vbat < 300) { Freq_Adj = (300 - Vbat) * 0.15; //低压段频率补偿 } else if(Vbat > 420) { Freq_Adj = (420 - Vbat) * 0.08; //高压段频率补偿 } EPwm2Regs.TBPRD = (uint16_t)(SYSCLK/(Freq_Base + Freq_Adj)); //突发模式阈值判断 if(I_Load < 2.0) { EPwm2Regs.TBCTL.bit.PHSEN = 0; //关闭相位同步 EPwm2Regs.CMPC = 0; //进入burst模式 } }

这里Vbat参数其实是电池电压采样值,在不同电压段采用不同斜率调整频率。特别注意当负载电流低于2A时直接关闭PWM输出进入burst模式,这种设计能有效降低轻载损耗。实测中发现,当SYSCLK=120MHz时,TBPRD寄存器的值必须大于等于8才能稳定运行,否则会出现PWM异常。

在调试PFC+LLC协同工作时,遇到过最头疼的问题是轻载震荡。后来在代码里加了这段状态机才解决:

typedef enum { MODE_TRICKLE, MODE_CC, MODE_CV } CHARGE_MODE; void Charge_StateMachine(void) { static uint16_t skip_cnt = 0; switch(Charge_Mode) { case MODE_TRICKLE: if(I_Charge > 0.1) { skip_cnt++; if(skip_cnt > 30) { //持续30个周期 Charge_Mode = MODE_CC; LLC_Enable_SoftStart(); } } break; case MODE_CC: if(Vbat >= Vbat_CV_Thres) { Charge_Mode = MODE_CV; PFC_Enable_PWM_Limited(); } break; case MODE_CV: if(I_Charge < 0.05) { Charge_Mode = MODE_TRICKLE; LLC_Enter_BurstMode(); } break; } }

状态迁移时需要注意PFC和LLC的使能顺序。比如从涓流充电切换到恒流模式时,必须等LLC完成软启动后再放开PFC的占空比限制,否则会出现母线电压过冲。这里的30个周期延时对应实际约15ms,正好是LLC软启动所需时间。

这些代码片段虽然只是整个OBC程序的冰山一角,但已经能看到量产级代码对时序和状态管理的极致追求。下次有机会再聊聊他们用DSPCLA协处理器实现的故障快速响应机制,那个设计才叫暴力美学。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 20:35:10

当数字员工搭载AI销冠系统,如何迅速提升销售效率?

数字员工通过引入AI销冠系统&#xff0c;能够显著优化业务流程&#xff0c;降低企业运营成本&#xff0c;并提升整体效率。数字员工的智能化特性使其能够自动化处理大量客户交互&#xff0c;如电话回访和信息收集&#xff0c;减少了对传统人工客服的依赖。这不仅提高了工作效率…

作者头像 李华
网站建设 2026/6/15 13:14:10

还在手动处理退款?RPA自动处理希音退款,效率提升20倍!⚡

还在手动处理退款&#xff1f;RPA自动处理希音退款&#xff0c;效率提升20倍&#xff01;⚡ "深夜11点&#xff0c;客服团队还在电脑前逐条审核退款申请&#xff0c;同样的操作重复了上百遍...这样的加班场景该终结了&#xff01;" 一、痛点直击&#xff1a;退款处理…

作者头像 李华
网站建设 2026/6/17 4:13:55

Open-AutoGLM快递路径预测黑科技(基于时空图神经网络的大模型应用)

第一章&#xff1a;Open-AutoGLM 快递轨迹追踪Open-AutoGLM 是一个基于大语言模型与自动化推理框架的智能物流解决方案&#xff0c;专注于快递轨迹的实时解析与状态预测。该系统能够从非结构化的物流日志中提取关键节点信息&#xff0c;并结合时间序列分析实现高精度的路径还原…

作者头像 李华
网站建设 2026/6/21 11:01:01

Open-AutoGLM requirements.txt 配置秘籍(仅限内部流传的3种高效写法)

第一章&#xff1a;Open-AutoGLM requirements.txt 配置核心概述在构建 Open-AutoGLM 项目时&#xff0c;requirements.txt 文件是管理 Python 依赖的核心组件。该文件定义了项目运行所必需的第三方库及其版本约束&#xff0c;确保开发、测试与生产环境之间的一致性。依赖声明规…

作者头像 李华
网站建设 2026/6/21 9:01:48

电商比价不再难,手把手教你用Open-AutoGLM实现全自动利润挖掘

第一章&#xff1a;电商比价不再难&#xff0c;Open-AutoGLM开启智能利润挖掘新时代在电商平台竞争日益激烈的今天&#xff0c;精准掌握商品价格动态是获取市场优势的关键。传统人工比价方式效率低下、误差率高&#xff0c;已无法满足现代商家对实时性和准确性的需求。Open-Aut…

作者头像 李华