DC-DC转换器在线测量电池交流内阻:下采样与FIR滤波算法实践

DC-DC转换器在线测量电池交流内阻:下采样与FIR滤波算法实践 1. 项目概述为什么要在DC-DC转换器里“听”电池的心跳干电池管理系统BMS这行十几年我越来越觉得判断电池健康就像老中医“望闻问切”不能只看电压电流这些“表象”还得探其“内里”。电池的交流内阻AC-IR就是这个“内里”的关键指标。它不像直流内阻那样只反映欧姆电阻而是能灵敏地捕捉到电池内部电化学反应动力学的变化比如电极极化、电荷转移过程这些都是电池老化、析锂甚至热失控的早期征兆。传统上测量AC-IR的金标准是电化学阻抗谱EIS但那玩意儿一台设备动辄几十上百万体积庞大只能在实验室离线操作对于跑在路上的电动汽车或者7x24小时运行的储能电站来说根本用不上。所以行业里一直有个梦想能不能让电池的“主治医生”——也就是给电池充电放电的功率变换器比如DC-DC转换器——自己兼职做个“心电图仪”实时监测电池的AC-IR这个思路很美好但现实很骨感。嵌入式DC-DC转换器的数字信号处理器DSP资源极其有限采样频率被开关频率锁死比如100kHz内存也只够做一定点数的FFT。这就导致了一个致命问题频率分辨率不足。举个例子用100kHz采样做1024点FFT频率分辨率只有约97.7Hz。这意味着你根本无法精确测量几十赫兹甚至几赫兹的阻抗而这个频段恰恰是反映电池电荷转移过程与温度、老化强相关的关键窗口。我最近深入研究并实践了一种方法它不像一些论文里那样只谈理论而是直面这个工程难题提出了一套在资源枷锁下“跳舞”的完整方案基于可调下采样与FIR滤波的在线电池交流内阻估计算法。核心思想很巧妙——既然不能改变ADC的原始高速采样率否则会影响转换器控制稳定性那我就在数据进入FFT分析前专门开辟一条“慢速通道”通过下采样来“放大”低频信号的时间轴再配合一个精心设计的FIR抗混叠滤波器把高频噪声挡在门外。这样用同样的1024点FFT就能获得低至个位数赫兹的分辨率。本文将为你彻底拆解这个算法的设计思路、实操细节、参数选择背后的“为什么”以及我们在调试中踩过的坑和总结出的经验。无论你是BMS算法工程师、电力电子硬件开发者还是对电池在线诊断感兴趣的研究者这套在工程约束下追求极致精度的思路都值得你细细琢磨。2. 核心原理与系统架构拆解2.1 电池阻抗模型与关键频段要测准先得知道测的是什么。一个典型的锂离子电池的简化Randles等效电路模型包含以下部分欧姆电阻R₀主要由电解液离子电导率决定存在于整个频段但在高频1kHz占主导。电荷转移电阻Rct与双电层电容Cdl这对RC并联电路模拟了电极/电解液界面的电化学反应动力学其时间常数对应的频段通常在几赫兹到几百赫兹。这个频段的交流内阻变化与电池的活性物质损失、锂离子扩散能力下降、以及内部温度升高密切相关是我们进行早期故障诊断的黄金频段。沃伯格阻抗Zw模拟锂离子在电极材料中的固态扩散过程在极低频1Hz占主导。我们的算法目标就是精准提取以Rct为核心的中低频例如6.5Hz至1kHz交流内阻即阻抗的实部。EIS设备通过频率扫描给出一个连续的谱图而我们的嵌入式系统则需要在有限的、离散的频率点上进行高精度测量。2.2 嵌入式系统的固有瓶颈被锁死的频率分辨率在嵌入式功率转换系统中DSP的运算资源分配是个零和游戏。主要的限制来自两方面固定采样频率fs为了实现对功率开关管的逐周期精确控制ADC采样必须与PWM载波同步。例如当开关频率为100kHz时采样频率通常也设为100kHz。这个频率不能为了阻抗测量而随意降低否则会危及系统的稳定性和动态响应。有限的FFT点数NDSP的片上内存RAM非常宝贵。除了运行FFT还需要存储ADC数据、滤波器系数、控制算法变量等。以TI的C2000系列DSP为例分配5%的内存给FFT缓冲区可能已经是奢侈这通常将N限制在1024点以内。根据公式Δf fs / N当fs100kHzN1024时频率分辨率Δf高达约97.7Hz。这意味着FFT输出的频谱点只在0Hz, 97.7Hz, 195.3Hz...这些位置有值。如果你想测量50Hz的阻抗FFT根本无法直接给出结果只能通过附近频点插值误差巨大。这就是我们必须要解决的低频分辨率困境。2.3 破局思路下采样与抗混叠滤波的协同设计直接降低主ADC采样率行不通那就在数据流上动脑筋。我们的核心策略是在保持高速控制环的同时并行地构建一个专用于阻抗分析的低速、高分辨率数据通道。2.3.1 可调下采样Down-Sampling下采样的本质是“抽点”。假设原始采样频率fs100kHz我们设定一个下采样因子NFDA10。那么我们每隔10个原始采样点取一个点构成新的序列。这个新序列的等效采样频率ffb fs / NFDA 10kHz。对这个10kHz采样率、1024点的序列做FFT新的频率分辨率Δf ffb / N 10kHz / 1024 ≈ 9.8Hz。看分辨率提升了10倍现在我们可以精确测量9.8Hz, 19.5Hz等低频点了。关键设计考量NFDA不是越大越好。NFDA增大会降低等效采样率ffb根据奈奎斯特采样定理可分析的最高频率ffb/2也会降低。例如NFDA10时最高只能分析5kHz以下的频率成分。因此NFDA需要根据目标测量的最高频率fmax和所需分辨率Δfd来动态选择。公式约束为NFDA ≥ fs / (Δfd * N)且NFDA ≤ fs / (2 * fmax)。2.3.2 FIR抗混叠滤波Anti-aliasing Filtering下采样一个危险的“副作用”是频谱混叠。任何高于ffb/2的频率成分在下采样后都会错误地折叠到0~ffb/2的频带内污染我们的测量信号。在DC-DC转换器系统中混叠噪声主要来自开关频率及其谐波如100kHz, 200kHz。激励信号中超出ffb/2的高次谐波如果使用方波或伪随机序列激励。 因此在抽点下采样之前必须用一个低通滤波器把高于ffb/2的成分狠狠滤掉。我们选择FIR滤波器而非IIR滤波器原因在于线性相位FIR滤波器在所有频段具有恒定的群延迟这意味着它不会扭曲信号的相位信息。对于阻抗测量需要精确的电压电流相位差而言这是至关重要的。绝对稳定FIR滤波器没有反馈回路其极点全部位于原点无条件稳定。设计灵活可以通过窗函数法如汉明窗直接设计出满足任意截止频率和衰减要求的滤波器。FIR滤波器的阶数M决定了其性能。阶数越高过渡带越陡阻带衰减越大但计算量也呈线性增长。其设计公式可简化为M ≈ 3.32 / [(fc - fpass)/fs]其中fc是截止频率通常设为ffb/2fpass是通带截止频率如0.95*fc。这意味着NFDA越大ffb越小要求的fc越低所需的滤波器阶数M就越高DSP的计算负担越重。这里就出现了分辨率提升与计算开销之间的直接矛盾。2.3.3 系统整体架构整个系统的信号流如下图所示概念性描述电池端电压/电流 → ADC (fs100kHz) → 数据分流 ↓ [路径A功率控制环] → 直接用于PWM生成与闭环控制保持100kHz高速率 ↓ [路径B阻抗分析环] → FIR抗混叠低通滤波器 (截止频率 ~ ffb/2) → 下采样器 (按因子NFDA抽点) → 帧缓冲器 (存储N1024个点) → FFT计算 → 提取特定频点k的电压谱V[k]和电流谱I[k] → 计算阻抗 Z[k] V[k] / I[k] → 取实部得到该频率点的交流内阻 AC-IR Re{Z[k]}这个双路径架构的精妙之处在于它让“控制”和“诊断”两个任务解耦互不干扰。控制环依然高速运行保证电源转换性能诊断环则可以根据需要灵活配置下采样因子和滤波器在资源允许的范围内追求最佳的测量精度。3. 算法关键模块的深度设计与实现3.1 激励信号的选择为什么是多正弦扰动MSP要给电池“把脉”你得先给它一个“刺激”扰动。常见的扰动信号有单正弦扰动SSP简单但一次只能测一个频率完成全频段扫描耗时极长。二进制方波扰动BSP包含丰富的奇次谐波能一次激励多个频率但高次谐波幅度衰减快信噪比低。伪随机序列扰动PRSP频谱宽且平坦但信号生成和系统集成复杂。多正弦扰动MSP我们算法的首选。它可以精确地同时注入多个离散的、幅度和相位可优化的正弦波这些频率点正好对应我们通过下采样和FFT精心选择出来的“频谱线”。MSP的能量可以集中在我们关心的频带上避免了能量浪费在高频或无关频段从而在相同扰动幅值下获得更高的信噪比。更重要的是MSP的频谱是离散的我们可以通过设计让所有激励频率都完美落在FFT的频点上避免了频谱泄漏简化了后续处理。MSP信号设计实例假设我们通过优化选定NFDA10此时FFT分辨率Δf9.8Hz。我们希望测量10Hz 100Hz 500Hz三个点。那么MSP信号s(t)可以设计为s(t) A1 * sin(2π * 10Hz * t φ1) A2 * sin(2π * 100Hz * t φ2) A3 * sin(2π * 500Hz * t φ3)其中幅度A1, A2, A3可以优化分配例如给低频点分配更大能量以克服电池本身的高阻抗初始相位φ1, φ2, φ3可以优化选择以降低信号的峰值因数CF避免对DC-DC转换器输出造成过大的瞬时扰动。3.2 FIR抗混叠滤波器的具体实现与优化在DSP中实现一个高阶FIR滤波器需要仔细权衡性能与资源。3.2.1 系数计算与存储我们采用窗函数法设计。以汉明窗为例滤波器的单位冲激响应h[n]为h[n] w[n] * sin(2π * fc * (n - M/2)) / (π * (n - M/2)), for n 0, 1, ..., M 其中w[n]是汉明窗函数用于抑制吉布斯现象。 这些系数需要预先计算好并存储在DSP的常量存储器中。对于不同的NFDA即不同的ffb和fc需要准备多组滤波器系数。这是一个典型的“以空间换时间”的策略。3.2.2 实时卷积运算FIR滤波是一个卷积过程y[n] Σ (h[k] * x[n-k]), for k0 to M。 对于每一个新的输入采样点x[n]都需要进行M次乘累加MAC操作。当M高达上千时这对DSP的运算能力是严峻考验。优化方法包括利用DSP的MAC硬件加速器像C2000系列DSP都有专门的硬件加速单元单周期可以完成一次乘累加。采用循环缓冲区避免在内存中大量移动数据。汇编级优化对核心卷积循环进行手工优化。3.2.3 经验参数选择在我们的实际测试中fs100kHz针对不同的目标低频分辨率滤波器阶数经验值如下目标分辨率 (Hz)下采样因子 (NFDA)等效采样率 ffb (kHz)滤波器截止频率 fc (Hz)建议FIR最小阶数 (M)单帧滤波计算耗时估算 (ms)~97.711005000032可省略0.1~48.825025000266~0.5~9.8101050001328~2.5~6.5156.6733331992接近极限~3.8实操心得不要盲目追求极高的阶数。当M超过1500时在100MHz主频的DSP上仅滤波运算就可能占用数毫秒这会挤占控制环的计算时间可能影响系统稳定性。通常保证阻带在ffb/2处有40dB以上的衰减即可。可以通过扫描不同阶数下的实际混叠噪声水平来确定一个够用的M值。3.3 下采样因子NFDA的自适应优化策略NFDA的选择不是固定的而应该根据当前要测量的目标频率范围进行自适应调整。这本质上是一个带约束的优化问题。优化目标在满足频率分辨率要求的前提下最小化计算开销主要是FIR滤波的运算量。约束条件分辨率约束Δf fs / (NFDA * N) ≤ Δfd(所需分辨率)。频率范围约束fmax ≤ fs / (2 * NFDA)(奈奎斯特约束)。资源约束M(NFDA) ≤ M_max(DSP能承受的最大滤波器阶数)。我们可以构建一个简单的查找表机制来实现自适应根据用户设定或诊断策略确定本次要测量的频率点列表F_target [f1, f2, ..., fk]。找出列表中的最低频率f_min和最高频率f_max。遍历所有可能的NFDA例如从1到15检查是否满足fs/(NFDA*N) ≤ Δfd和f_max ≤ fs/(2*NFDA)。计算该NFDA下所需的滤波器阶数M。如果M ≤ M_max则计算该配置的“代价”例如Cost α * M β * (1/Δf)其中α和β是权重系数平衡计算量和分辨率。选择代价最小的NFDA作为当前配置。加载对应的FIR滤波器系数并调整MSP激励信号的频率成分使其与新的FFT频点对齐。这种自适应机制使得系统能够在测量低频细微变化需要高NFDA和快速扫描较宽频带需要低NFDA之间取得智能平衡。4. 嵌入式软件实现与集成要点4.1 双缓冲机制与实时性保障阻抗测量是后台任务绝不能干扰前台的实时功率控制。我们采用双缓冲Ping-Pong Buffer机制来实现数据的无缝采集与处理。缓冲区A B每个缓冲区的大小为NFFT点数。工作流程填充阶段ADC中断服务程序ISR将经过FIR滤波和下采样后的数据存入当前活跃的缓冲区例如Buffer A。处理阶段当Buffer A填满时立即切换ADC写入目标到Buffer B。同时在主循环或低优先级任务中对已满的Buffer A进行FFT计算和阻抗解算。交换阶段当Buffer B填满时再切换回Buffer A并处理Buffer B的数据。 如此循环往复。关键细节ADC的采样时刻必须与PWM的载波三角波中点或谷底严格同步以消除开关噪声对采样值的影响。这需要精确配置DSP的EPWM和ADC模块的触发关系。4.2 FFT计算与阻抗提取对于C2000 DSPTI提供了优化的DSP库如TI C28x FPU Fast RTS Library其中包含高度优化的FFT函数例如cfft_f32或cfft_f32_uns。使用这些库函数比自行编写FFT代码效率高得多。预处理对缓冲区的电压、电流时域序列v[n],i[n]分别加窗如汉宁窗以减少频谱泄漏。虽然MSP信号频率已对齐但加窗能进一步抑制非整数周期截断带来的影响。执行FFT调用库函数得到复数频谱V[k]和I[k]。定位频点根据激励频率f_in和当前分辨率Δf计算对应的FFT频点索引k round(f_in / Δf)。计算阻抗Z[k] V[k] / I[k]。注意这里是复数除法。提取AC-IRR_ac[k] real(Z[k])。同时也可以得到虚部或模值用于其他分析。幅值校准由于FIR滤波器和FFT计算会带来一定的增益需要对结果进行校准。最简单的方法是在系统初始化时注入一个已知幅值的正弦信号到测量回路记录FFT输出的幅值计算出一个校准系数。4.3 与DC-DC控制器的协同工作这是整个项目成败的另一个关键。阻抗测量注入的扰动信号本质上是叠加在DC-DC转换器控制指令上的一个小交流信号。扰动注入点通常注入到电流环的给定值或占空比指令上。必须确保注入的幅度足够小不会影响系统的稳态工作点如输出电压精度和动态稳定性。稳定性分析需要在控制环路模型中加入扰动注入点重新分析系统的相位裕度和幅值裕度。确保在注入频段内系统仍然是稳定的。保护机制当系统处于大动态负载切换、故障保护等特殊模式时应暂时关闭阻抗测量功能避免扰动信号与系统动态过程相互耦合引发异常。在我们的50W Buck-Boost实验平台上我们将扰动幅度控制在输出电流额定值的5%以内约0.25A。实测表明这对输出电压的纹波影响小于2%且控制环路保持稳定。5. 实验验证、问题排查与性能评估5.1 实验平台搭建我们使用以下核心部件构建了验证系统功率部分双向Buck-Boost转换器开关频率100kHz电感30μH输出电容40μF。控制核心TI TMS320F28379S Delfino微控制器主频200MHz。被测对象三星INR21700-50E 锂离子电池标称容量5000mAh。参考设备日置HIOKI BT4560 电池阻抗测试仪作为精度基准。信号与数据高精度差分探头测量电池端电压霍尔电流传感器测量电流通过DSP的JTAG接口实时抓取数据。5.2 典型波形与结果分析我们设置了两个典型的测试场景场景一高分辨率低频测量 (NFDA10)目标测量10Hz附近的阻抗。配置NFDA10, ffb10kHz, Δf9.8Hz, FIR阶数M1328。实测波形在示波器上可以清晰看到电池电压和电流上叠加了一个频率约为10Hz的小幅正弦扰动约50mVp-p, 1Ap-p。由于FIR滤波器的群延迟电压电流信号会有约66个采样点M/2的固定延迟但在同步采集后这个延迟在计算中被抵消。数据处理时间填满一个1024点的帧缓冲区需要102.4ms。FFT计算和阻抗解算约需2ms。因此单次测量周期约为104.4ms。精度与BT4560对比在10Hz频点AC-IR测量误差小于1.2%。场景二快速中频扫描 (NFDA2)目标快速测量~500Hz的阻抗。配置NFDA2, ffb50kHz, Δf48.8Hz, FIR阶数M266。实测波形扰动频率更高幅值更小。帧缓冲区填充时间缩短至20.48ms。精度在488Hz频点测量误差小于1.5%。5.3 常见问题与排查技巧实录在实际调试中我们遇到了不少坑以下是总结出的“避坑指南”问题现象可能原因排查步骤与解决方案测量结果噪声大重复性差1. FIR滤波器阶数不足抗混叠效果差。2. 激励信号幅度太小信噪比低。3. ADC采样与PWM不同步采集到开关噪声。4. 电源地线噪声干扰。1. 观察FFT频谱看是否有高频成分折叠到低频带。逐步增加FIR阶数直到混叠峰被抑制到-40dB以下。2. 逐步增大MSP幅度观察结果是否趋于稳定。注意不能影响系统稳定性。3. 用示波器同时观察PWM载波和ADC采样触发信号确保同步。检查DSP的EPWM和ADC触发配置。4. 优化PCB布局采用星型接地为模拟测量部分使用干净的LDO供电。低频点如10Hz测量误差显著大于高频点1. 低频点信号幅值可能太小电池阻抗随频率降低而增大。2. FFT频谱泄漏即使加了窗也可能因截断导致。3. FIR滤波器在截止频率附近的相位非线性虽然FIR是线性相位但群延迟固定需校准。1. 在MSP信号中给低频分量分配更高的幅值权重。2. 确保采集的时域信号长度是激励信号周期的整数倍。可以微调采样点数或使用更长的FFT如果内存允许。3. 对测量结果进行相位补偿校准。用一个纯阻性负载代替电池测量其“阻抗”理论上相位应为0。记录实测相位偏差作为后续测量的补偿值。改变NFDA后测量结果发生跳变1. 切换NFDA时FIR滤波器系数未正确加载或切换。2. 缓冲区数据未清空新旧数据混合。3. MSP激励信号频率未根据新的FFT频点重新生成。1. 在切换NFDA的配置函数中确保新的滤波器系数数组被正确赋值给卷积函数。2. 在切换配置后清空双缓冲区的数据并等待一个完整的缓冲区被填充后再开始计算。3. 实现一个函数根据当前NFDA和N计算出所有可用的精确频率点并据此重新生成MSP信号查表。DSP运行一段时间后跑飞或控制环路异常1. 高阶FIR滤波或FFT计算超时侵占了控制环中断的执行时间。2. 内存溢出堆栈冲突。1. 使用DSP的代码性能分析工具如TI的CLOCK和CPU负载监测精确测量中断服务程序和主循环中各个任务的执行时间。确保最坏情况下总时间小于控制周期。2. 将大型数组如滤波器系数、FFT缓冲区分配到固定的、互不重叠的RAM段。优化堆栈大小。与商用EIS设备在低频段趋势一致但存在固定偏移系统增益未校准。测量路径运放、ADC、滤波器存在固定的增益误差和直流偏移。执行一次离线校准流程1.偏移校准在无扰动状态下采集多组电压电流数据计算平均值作为零偏在后续测量中减去。2.增益校准连接一个精密电阻负载注入已知幅度的MSP信号比较测量得到的阻抗幅值与理论值计算增益校准系数。5.4 综合性能评估我们将算法在6.5Hz至990.5Hz范围内多个频点的测量结果与HIOKI BT4560的测量结果进行对比。在所有测试频点绝对误差均小于1.34%。特别是在关键的100Hz以下低频区得益于下采样带来的分辨率提升误差稳定在1%以内。作为对比如果关闭FIR抗混叠滤波器测量误差在某些频点会急剧增大至3%以上这凸显了抗混叠滤波在降采样系统中的不可或缺性。此外我们测试了算法在输入电压阶跃变化下的鲁棒性。当输入电压发生10%的阶跃变化时AC-IR的测量值仅在最初两个测量周期约200ms内出现轻微波动随后迅速恢复到稳态值波动幅度在参考值的2.3%以内。这表明该算法对系统动态工况具有一定的抗干扰能力。6. 总结与展望这套基于下采样和FIR滤波的在线AC-IR测量算法其价值不在于提出了多么高深的数学理论而在于它提供了一套在严苛工程约束下解决实际问题的完整、可落地的技术方案。它像一把手术刀在资源有限的嵌入式系统中巧妙地切开了高精度低频测量这个“死结”。从我个人的工程实践角度看这个方案的魅力在于它的平衡艺术在控制与诊断、分辨率与计算量、精度与速度之间找到了一个动态的、可配置的平衡点。自适应NFDA选择机制让系统不再是僵化的而是具备了初步的“智能”能根据任务需求调整姿态。当然它还有可扩展的空间。例如可以将该算法与电池模型参数在线辨识如扩展卡尔曼滤波相结合不仅输出AC-IR还能实时估计Rct、Cdl等更具体的模型参数。或者进一步探索在多相交错并联的DC-DC转换器中如何利用各相之间的载波移相来注入更优的扰动信号从而在更低的扰动幅值下获得更高的信噪比。最后给打算在实际项目中应用此方法的工程师一个忠告一定要先做充分的仿真和离线数据处理验证。在MATLAB/Simulink或Python中搭建完整的算法模型包括电池等效电路、DC-DC转换器平均模型、ADC量化、滤波器、下采样、FFT等全部环节。用仿真数据验证算法流程的正确性并初步确定NFDA、FIR阶数、扰动幅度等关键参数的大致范围。这能帮你节省大量在硬件上盲目调试的时间。当仿真结果与理论吻合后再将其移植到DSP上你会发现自己是在有把握地解决一些具体的实现问题而不是在黑暗中摸索整个方向。