ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

TMS320F28069控制的三相VIENNA PFC设计与调试要点

TMS320F28069控制的三相VIENNA PFC设计与调试要点 简介一套基于TMS320F28069 DSP的三相PFC充电桩控制程序面向电力电子、嵌入式工程师及充电桩方案开发者用于实现30kW级、500-1000Vdc/0-60A输出的直流充电控制包含电压电流闭环、功率因数校正、保护与通信交互等完整逻辑可迁移至电动车快充、光伏储能、工业直流电源等场景。资源包共203个文件约1.95MB以C源文件、H头文件、ASM启动代码为主辅以CMD链接脚本、GEL初始化脚本、CCS工程配置文件及MAP/OUT映像覆盖DSP外设初始化、中断服务、DMA与系统控制等模块。已有180人学习下载。通过工程结构可清晰掌握F2806x的ADC、EPWM、ECAP、SCI、I2C、CLA等外设配置方式尤其适合基于TI官方库完成PFC控制逻辑移植与调试附带的库文件与链接配置也便于快速搭建CCS开发环境缩短项目落地周期。1. 一块F28069把30kW三相PFC扛下来难在哪做充电桩功率级的人看到“TMS320F28069控制500-1000Vdc 0-60A 30KW 三相PFC”这个标题第一反应多半不是“能不能做”而是“输出母线这么宽拓扑怎么选、环路怎么调”。500-1000Vdc的直流输出范围意味着PFC级不能像常规380V整流那样只盯一个额定点输入电流在0-60A之间变化满载30kW时母线电压可能被拉到500V也可能稳在800V或1000V这对控制策略、器件应力、母线电容纹波电流都提出了比普通通信电源PFC更苛刻的要求。TMS320F28069是TI C2000家族里带浮点运算单元的型号主频90MHz跑50kHz的PFC中断还有余量做三相VIENNA整流或两电平PFC都够用但真正决定项目成败的不是芯片性能而是拓扑选型、采样时序、环路参数和启动预充这一整套工程细节。这篇就按一线开发通常走的路径把理论、代码和调试经验串起来讲。2. 三相VIENNA PFC拓扑与F28069外设资源规划2.1 为什么500-1000Vdc输出选VIENNA不选两电平三相PFC在30kW这个功率等级有几种主流做法三相两电平有源整流器、维也纳VIENNA整流器、以及衍生出的无桥或图腾柱结构。先说结论输出母线500-1000Vdc的宽范围场景常见做法是选VIENNA原因有三个。第一是开关管电压应力。VIENNA整流器的每个开关管只需要承受直流母线电压的一半因为拓扑里二极管和开关管的分压结构把应力天然砍掉了一半。输出1000Vdc时两电平PFC的开关管要扛接近1000V甚至更高得上1200V的IGBT或SiC MOSFET而VIENNA用600V-650V的器件就能覆盖器件选型成本和驱动设计难度都明显下降。第二是输入电流连续三相VIENNA工作在CCM模式时输入电感电流连续EMI滤波器体积可以做得相对小这对充电桩整机尺寸有实际帮助。第三是控制自由度VIENNA等效于三个boost并联每相的开关状态独立数字控制在F28069上用SVPWM或载波比较都能实现。图腾柱无桥PFC这两年很热但它更适合单相应用三相场景做图腾柱会把开关管数量和驱动隔离复杂度推上去热词里常讨论的图腾柱无桥PFC在这个项目里顶多做辅机电源或单相充电模块不作为30kW主功率电路。三相VIENNA的输入侧还需要考虑缺相保护、相序检测F28069的捕获单元配零过零检测电路可以处理这一点后面调试部分再展开。2.2 F28069的ADC与PWM映射采样窗口怎么排F28069内部有3个ADC模块每个都是12位支持多通道排序器可以配置成多个SOC触发源。做三相PFC至少要采集这些量两路线电流用两相采样第三相根据基尔霍夫定律算出、三相输入相电压或线电压用于锁相和输入前馈、直流母线电压、中点电位VIENNA必须采、辅助的NTC温度量。推荐的资源分配如下表这是做30kW三相PFC时常用的映射方式信号F28069资源采样时机用途IacA/IacBADCINA0/A1EPWM1下溢触发电流内环VbusADCINA2同上电压外环Vmid中点对负母线ADCINA3同上中点电位平衡VacA/B/C经电阻分压ADCINB0/B1/B2PLL同步锁相、电压前馈温度/二次辅助数值ADCINC0...慢速轮询保护采样窗口的关键在于避开IGBT或MOSFET开关瞬间的di/dt噪声。F28069的ADC内置了采样保持窗口寄存器ACQPS一般设置成能覆盖300-500ns的采样窗口具体值跟采样电阻网络的阻抗有关。电流霍尔输出通常有上百ns的压摆率采样窗口太小采到毛刺太大又会让采样值混入过多开关噪声一般从ACQPS14开始调用DAC输出或仿真器观察电流波形再修正。PWM配置上VIENNA只需要三路带互补输出的ePWM模块每路对应一个双向开关管。F28069的ePWM模块映射如下EPWM1/2/3分别驱动三相开关管时基同步周期寄存器TBPRD由开关频率决定占空比寄存器CMPA在中断里更新死区模块DB设置为输入信号反相后插入死区死区时间一般取200-400ns具体由开关管驱动芯片的传播延迟决定。2.3 预充回路与上电时序控制输出母线500V以上甚至到1000V直接合闸的冲击电流足以炸毁整流桥和电容。常规做法是在输入EMI滤波器之后串联预充电阻通过接触器或继电器在母线电压充到一定阈值后旁路掉预充电阻然后PFC才开始发波。控制这个过程正好是F28069的一个GPIO加一段简单的状态机逻辑。typedef enum { PRECHARGE_IDLE, // 待机 PRECHARGE_START, // 闭合主接触器预充回路串电阻 PRECHARGE_RUN, // 等待母线电压上升 PRECHARGE_DONE, // 旁路接触器吸合PFC使能 PRECHARGE_FAULT // 预充超时 } PrechargeState; void precharge_fsm(PrechargeState* st) { switch (*st) { case PRECHARGE_IDLE: if (user_request_run) *st PRECHARGE_START; break; case PRECHARGE_START: close_input_contactor(); // 输入侧合闸 enable_precharge_gpio(); // 预充电阻串入回路 charge_start_time get_timer(); *st PRECHARGE_RUN; break; case PRECHARGE_RUN: if (vb_measure PRECHARGE_THRESHOLD) { // 母线电压达到80%额定 bypass_precharge_gpio(); // 短接预充电阻 pfc_enable 1; *st PRECHARGE_DONE; } else if (get_timer() - charge_start_time PRECHARGE_TIMEOUT_MS) { input_contactor_open(); fault_report(FAULT_PRECHARGE_TIMEOUT); *st PRECHARGE_FAULT; } break; default: break; } }这段状态机的关键是PRECHARGE_THRESHOLD不要取太高常见做法是取期望母线电压的75%-85%。电压太高时预充电流变小接触器旁路瞬间两端压差大容易拉弧太低则PFC启动瞬间还是会从交流侧吸入较大冲击。充电桩电网侧一般还有防雷和EMI预充回路建议放在EMI之后不要放在共模电感之前不然预充电流路径和共模干扰会耦合。3. 双闭环控制策略与软件架构3.1 电压外环加电流内环的dq轴结构VIENNA控制的核心是双闭环电压外环维持直流母线电压稳定输出的是给定有功电流电流内环跟踪d/q轴电流。由于三相PFC工作在单位功率因数q轴电流给定通常为0但如果需要参与电网调度可以放宽这个限制给q轴一个无功电流给定。坐标变换用Clarke变换把abc静止坐标系转到αβ再用Park变换转到dq旋转坐标系F28069的浮点运算直接算不用定点Q格式这能省下不少开发时间。电流环在dq轴下存在耦合项d轴方程里有ωLiqq轴方程里有ωLid通常的做法是在调节器输出做解耦补偿电压前馈就是网压d/q分量。解耦不强求很多人为了省事在数字控制里不做解耦把耦合项当作扰动但30kW满载时耦合电压可能到几十伏对动态响应有明显影响还是建议加上。电感值的选择和电流纹波直接相关。输入电感一般取额定功率下电流纹波为峰值电流的15%-25%按30kW、三相380Vac计算线电流有效值大约46A峰值约65A。输入电感L取500uH到800uH之间比较常见电感太小时纹波电流大EMI滤波器和采样噪声都难办电感太大则电流环动态变慢还带来更大的体积和铜损。3.2 主中断里的执行顺序PFC控制通常在PWM下溢中断里执行中断频率等于开关频率一般取50kHz也有取100kHz的F28069浮点跑到100kHz的PI计算没问题但要留足时间给保护逻辑和通信处理。主中断代码的骨架如下interrupt void pfc_isr(void) { // 1. 读ADC电流母线电压中点电位 ii_meas[0] adc_read(ADC_A0, adc_result_i_0); ii_meas[1] adc_read(ADC_A1, adc_result_i_1); vbus adc_read(ADC_A2, adc_result_vbus); vmid adc_read(ADC_A3, adc_result_vmid); ii_meas[2] -ii_meas[0] - ii_meas[1]; // 三相电流对称假设 // 2. 电网电压锁相反馈更新theta theta pll_update(vac_alpha, vac_beta); // 3. Clark/Park变换得到id/iq clarke_park_trans(theta, ii_meas, vac_meas, id, iq, vd, vq); // 4. 电压外环vbus_ref来自充电策略vbus为反馈 id_ref vbus_pi(vbus_ref, vbus); // 5. 电流内环PI 解耦 m m_pi(id, id_ref, id_kp, id_ki); od m - omega*grid_L*iq vd; // 解耦项L*w*Iq oq q_pi(iq, 0.0f, iq_kp, iq_ki); oq oq omega*grid_L*id vq; // 6. 反Park变换生成三相调制波 inv_park(od, oq, ma, mb, mc); // 7. 中点电位平衡修正 correction mid_balance_pi(0, vmid); ma correction; mb correction; mc - correction; // 8. 限制调制波范围并更新CMP limit_and_update_duty(ma, mb, mc); }这段代码的顺序是有讲究的。先读ADC再更新PWM保证这次运算用的是最新采样值PWM占空比更新在中断末尾CMP寄存器在特定时基点被装载不会中途跳变。第7步的中点平衡是VIENNA特有的处理中点电位偏移会让两个母线电容电压不均直接导致电容寿命下降甚至炸电容。平衡修正量的方向和大小靠两个电容的电压差来算实际调的时候饱和限幅要做死在修正量上通常修正量不超过总调制波幅值的10%否则会引起电流畸变。3.3 单周期控制什么时候用、什么时候不用热词里频繁出现“pfc和llc电路图及原理”、“无桥双boost pfc为啥有预充电路”这些内容说明很多人在选控制方案时会在单周期控制One-Cycle Control和平均电流控制之间犹豫。单周期控制不需要坐标变换和锁相环把输入电压和输出电压的信息整合到占空比计算里实现三个单相boost独立控制结构简单代码量比双闭环小很多。但它有两个问题一是三相之间解耦依赖硬件设计输入阻抗的一致性要求高二是对电网畸变敏感谐波环境下中线电位容易漂移。我一般会在样机调试初期用单周期控制快速验证主功率电路确认电感电流波形和开关管应力没问题后再切换到dq双闭环做精调。F28069代码空间足够把两套算法都留着按编译宏切换调试效率高。对于正规充电桩产品要过THD或IEC 61000-3-2谐波限值双闭环加坐标变换的方式更好调因为电流环可以直接对特定次谐波做补偿。4. 环路参数与PFC电容纹波电流计算4.1 母线电容的纹波电流到底怎么算这是热词里专门列出来的“pfc电容纹波电流计算”也是实际工程里最容易翻车的一环。很多设计算母线电容容量时只关注电压纹波忽略电容的纹波电流应力结果电容温度飙升寿命大打折扣。30kW三相PFC的母线电容除了要吸收100Hz左右的脉动功率还要吸收开关频率纹波和负载突变时的暂态能量。三相整流输出的纹波功率主频是6倍网频即300Hz纹波电流有效值的工程简化公式如下I_C_rms sqrt(I_ripple_power^2 I_ripple_hf^2) I_ripple_power ≈ P_out / (sqrt(2) * V_bus) // 6倍频分量 I_ripple_hf ≈ (P_out / V_bus) * (2 / sqrt(3)) * sqrt(0.25 - D) // 开关频率附近分量近似以30kW、母线800V为例I_ripple_power 30000 / (1.414 * 800) ≈ 26.5A开关纹波分量和占空比有关典型值约8-12A合成后rms在28-30A左右。这意味着母线电容必须选多只电解电容并联每只电容的允许纹波电流要能满足分摊。常见做法是用4到6只450V/470uF电解电容串联并联组合同时要注意电容ESR带来的发热环境温度高时要降额。4.2 电流环PI参数从物理量推电流环的对象是电感传递函数近似为1/(Ls Rw)其中Rw是电感铜阻和线路电阻之和。用零极点对消法设计PI参数工程步骤很直接电流环PIGpi(s) Kp Ki/s 要求穿越频率fc fs / 10 5kHz 相位裕量50度左右 Kp L * 2π * fc / (Vdc_inv_norm) Ki Kp * (Rw / L)假设L 600uHRw 20mΩVdc_inv_norm 0.5PWM调制波归一化算出来Kp在25左右Ki约0.8单位由电流和占空比的归一化标幺值决定。不同人写的标幺基值不一样参数直接套用可能差几十倍关键是把基值捋清楚。实际调试时先给比例项再给积分项从穿越频率和相位裕量看增益图表来定。电流环采样频率50kHzPI输出还需要做抗饱和处理。积分项饱和会让电流在突加负载时出现几毫秒级的超调直接体现在母线电压跌落上严重时触发过流保护。F28069里可以做条件积分法判断PI输出接近限幅时停止积分累加。4.3 电压环带宽和输出动态的取舍电压外环带宽不能太高因为电压环要抑制的扰动是100Hz或300Hz纹波带宽太高会让PFC输入电流谐波变大。常见做法是取10-20Hz也就是说电压环响应时间在50-100ms量级。对充电桩这种负载相对稳定的场景这个带宽够用。电压环被控对象近似为一阶惯性加电流内环等效一阶惯性PI参数可以用对称最优法或零极点法推导。给出一个实际可用的参数表参数数值说明电流环Kp22-28先调比例观察电流阶跃超调电流环Ki0.5-1.0积分消除稳态误差电压环Kp0.8-1.5带宽约15Hz电压环Ki20-50按积分时间来定中点平衡Kp0.02-0.05对调制波直接修正5. 上电调试流程与常见问题定位5.1 不带主功率的先跑起来拿到一块F28069控制板先不要在380V电网上直接试。常见做法有两个阶段。第一阶段是控制板单板调试只接通DSP供电和仿真器用CCS加载程序把PWM输出全部禁用检查ADC采样的直流偏置检查霍尔传感器的零漂确认温度、电压分压网络都正常。第二阶段用调压器把输入电压从20Vac逐步往上加观察母线电压和电流波形确认预充流程正确后再让PFC使能发波。这里有个容易踩的坑F28069的ADC基准是内部基准精度约在几毫伏量级但对霍尔传感器来说零漂会导致电流采样在零输入时不为零软件里要做偏移校准。把偏移存在Flash里每次上电先采样零电流值再减掉。更稳妥的方法是留一路ADC通道直接接地测量基准漂移做软件动态补偿。5.2 波形不对先查采样还是先查时序调PFC遇到电流波形畸变或母线电压振荡时很多人习惯先调PI参数其实更高效的排查顺序是先查采样再查时序最后才是调参。用DAC输出把中断里的电流采样值还原成模拟量用示波器对比实际电流传感器输出如果两者波形幅值或相位对不上说明采样时序有问题。VIENNA在开关管开关瞬间输入电感电流会有比较明显的di/dt尖峰PWM下溢触发采样刚好落在开关噪声带上时采进来的纹波噪声会直接进电流环。解决方法是把采样点挪到开关周期中点或者增加采样窗口长度。F28069的ADC可以配置SOC触发源来自不同的EPWM模块利用EPWM4作为延迟触发器把采样点滞后半个开关周期这是比较通用的做法。时序问题排查干净之后剩下的畸变基本就是中点电位不平衡或电感饱和。看一下两个母线电容的分压波形如果中点和负母线差值持续增长优先调中点平衡环节不要动电流环。5.3 网压闪变时怎么不掉链子充电桩装在户外电网电压波动比实验室大得多三相输入电压在正常范围内波动PFC的电压前馈需要实时更新。输入电压跌落时如果前馈没有跟上电流环会为了维持输出功率大幅拉升调制波导致占空比饱和电流失控。做法是把输入电压的dq分量直接前馈到电流环输出这在前面的代码里已经体现。输入电压做锁相时还要注意三相不平衡的情况。负序分量会在dq变换里产生100Hz的脉动影响锁相精度。用F28069的软件锁相环可以加陷波器滤掉负序分量或者用双二次滤波把100Hz分量衰减掉锁相环带宽控制在50Hz以内比较稳。6. 采样窗口对齐与轻载突卸载两个可复用的细节6.1 用PWM计数器截获替代固定延时采样通用做法里常见的PWM下溢触发采样是在开关管开通瞬间附近采这容易采到电流尖峰。更实用的是利用F28069的ePWM模块的计数器比较事件来触发ADC。把EPWM1配置为从模式触发EPWM4产生一个延迟时间片EPWM4的CMPA值设到开关周期的一半附近这样ADC采样点落在开关管平稳导通的区间电流信号更干净。配置示例// EPWM4作为ADC触发源采样点位于开关周期中点 EPwm4Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 接收主PWM同步信号 EPwm4Regs.TBPHS.bit.TBPHS 0; // 相位延迟 EPwm4Regs.TBPRD EPwm1Regs.TBPRD; // 同周期 EPwm4Regs.CMPA.bit.CMPA EPwm1Regs.TBPRD 1; // 中点触发 EPwm4Regs.AQCTLA.bit.ZRO AQ_CLEAR; // 周期清零产生空选择 AdcRegs.ADCSOC0CTL.bit.TRIGSEL 14; // SOC触发源选EPWM4这里TRIGSEL14表示ADC SOC0用EPWM4的事件触发具体编号要查F28069技术手册。ADC结果存在ADCRESULT0里中断里读取时按实际序号对应即可。6.2 轻载突卸载时母线过冲的处置充电桩遇到电动车充满断开的瞬间负载电流从几十安突然降到零电压环带宽低来不及立刻拉低id_ref母线电压会冲高。常见做法是给电压外环加一个微分前馈检测母线电压变化率一旦dv/dt超过阈值直接按比例关闭PWM发波或快速拉低调制波幅值。实现上在电压环输出到id_ref的路径上加一个左零点滤波器// 突卸载保护检测母线电压过冲率 float dv vbus - vbus_prev; if (dv OVERSHOOT_DV_THRESHOLD) { active_damping_enable 1; id_ref 0.0f; // 立即撤掉有功电流给定 } else if (active_damping_enable dv 0.0f) { active_damping_enable 0; }另外母线电容的分布要尽量靠近IGBT和整流二极管用低感母排结构能减少杂散电感击穿器件的概率这一点在30kW大功率PFC里比环路参数还重要。用热成像检查电容和电感温度正常满载运行时电解电容外壳温升控制在10度以内才算设计到位。本文还有配套的精品资源点击获取
返回列表