4、采样窗口设计:ADC采样保持时间与PWM开关周期的匹配

各位做工业控制的同行,今天咱们聊一个特别实在的话题——采样窗口设计。

说白了,就是ADC什么时候采样、采多久,才能不被PWM开关噪声干扰。我早期做变频器项目时,就吃过这个亏。采样点正好落在IGBT开关瞬间,结果电流波形上全是毛刺,PID调了半天都稳不住。后来才明白,这不是算法问题,是采样时机没选对。

4.1 采样保持时间与PWM周期的匹配原则

ADC采样保持时间,指的是采样电容充电到输入电压所需的时间。PWM开关周期,是功率管导通和关断的完整周期。

这两者怎么匹配?我个人习惯用一个简单公式:

采样保持时间 ≤ PWM周期 × 采样窗口占空比

举个例子。PWM频率20kHz,周期50μs。如果采样窗口占空比设为10%,那采样窗口就是5μs。ADC采样保持时间必须小于5μs,否则采样还没完成,窗口就结束了。

我在项目中遇到过一种情况:ADC采样保持时间设得太长,导致采样结果跨过了PWM开关沿。嗯,那数据基本没法用。所以我的建议是:

  • 采样保持时间:取ADC数据手册推荐值的1.2~1.5倍,留点余量
  • 采样窗口:占PWM周期的5%~15%,具体看开关噪声持续时间
  • 窗口位置:避开开关沿前后各1~2μs的死区

核心原则:采样窗口必须完全落在PWM导通或关断的稳定区间内,不能跨越开关沿。

4.2 避免采样点落在开关噪声区

开关噪声区,就是功率管导通和关断瞬间,电压电流剧烈变化的那段时间。你想想看,IGBT或MOSFET在几纳秒到几十纳秒内完成开关,产生的di/dt和dv/dt会通过寄生电容耦合到采样回路。

我曾经调试一个电机驱动板,ADC采样值在PWM开关瞬间跳变超过10%。用示波器一看,采样保持电容上叠加了高频振铃。后来我把采样点往后移了3μs,问题就解决了。

怎么判断噪声区?我一般用这几种方法:

  1. 示波器测量法:在ADC输入引脚测波形,看开关沿前后噪声幅度
  2. 软件扫描法:让采样窗口在PWM周期内逐步移动,记录每个位置的采样值方差
  3. 经验估算法:开关噪声持续时间为开关时间的3~5倍,比如开关时间100ns,噪声区约300~500ns

小技巧:如果硬件上无法完全隔离噪声,可以在采样窗口内做多次采样取平均。我习惯采3~5次,去掉最大值和最小值再平均,效果不错。

4.3 死区时间内的采样规避

死区时间,是上下桥臂同时关断的那段空白期。目的是防止直通短路。但死区时间内,电流通过续流二极管续流,电压波形会有明显的台阶或振铃。

我记得有一次,客户反馈电流采样不准,导致过流保护误动作。查了半天,发现采样点正好落在死区时间内。死区内的电流是续流电流,和实际负载电流有偏差。把采样点移到死区外,问题就解决了。

死区时间内的采样规避,我总结了几条规则:

场景 规避策略 说明
单次采样 采样窗口避开死区前后各1μs 留足安全裕量
多次采样 丢弃死区内的采样点 软件滤波剔除
同步采样 用PWM同步信号触发ADC 硬件自动对齐

警告:死区时间通常只有几百纳秒到几微秒,但采样点落在里面,误差可能达到5%~20%。特别是高精度应用(如伺服驱动),必须严格规避。

4.4 知识体系与核心逻辑

下面这张图,是我自己总结的采样窗口设计逻辑。你看一遍,基本就明白整个流程了。

采样窗口设计核心逻辑 PWM参数输入 采样保持时间 ≤ 采样窗口宽度? 采样点避开开关噪声区? 采样点不在死区时间内? 采样窗口配置完成 关键参数 • PWM周期:Tpwm • 采样窗口:5%~15% Tpwm • 保持时间:≤ 窗口宽度 • 噪声区:开关沿±1~2μs • 死区时间:严格规避 • 安全裕量:≥ 500ns (经验值,具体看硬件)

这张图的逻辑很清晰:先确认PWM参数,然后依次检查三个条件。任何一个不满足,就要调整采样窗口的位置或宽度。三个条件都满足,配置才算完成。

4.5 实战中的避坑指南

最后分享几个我踩过的坑,希望能帮你少走弯路:

  • 坑一:采样窗口设得太宽。我曾经把窗口设到PWM周期的30%,结果采样值包含了开关噪声和稳定区,平均值反而更不准。后来控制在10%以内,效果最好。
  • 坑二:忽略采样保持电容的建立时间。不同ADC的采样电容大小不同,充电时间也不同。我建议用示波器实测采样保持波形,确认电容电压在窗口结束前稳定。
  • 坑三:死区时间内的采样点没完全剔除。软件滤波时,我习惯在死区前后各加一个采样点的屏蔽区,确保万无一失。

我的习惯:每次调试新板子,我都会先用软件扫描法找出最佳采样窗口位置。虽然多花半小时,但能省下后面几天的排查时间。你想想看,值不值?

好了,采样窗口设计就聊到这儿。记住三个核心:匹配时间、避开噪声、规避死区。做到这三点,ADC采样数据基本就干净了。

专注资料整理