4、采样时序同步:PWM触发ADC采样、双采样模式(中心对齐与边沿对齐)

好,咱们接着聊电流采样。前面几章我们把硬件电路和误差来源都捋了一遍,现在该聊聊「什么时候采」这个问题了。

你想想看,电流信号本身是连续的,但ADC采样是离散的。什么时候按下快门,直接决定了你看到的是「真相」还是「假象」。我个人习惯把采样时序比作拍照——拍早了,电流还没建立起来;拍晚了,可能正好赶上开关噪声的尖峰。所以,采样时序同步是逆变器控制里一个非常关键的细节。

4.1 PWM触发ADC:让采样跟着开关走

在数字控制逆变器里,ADC采样通常不是随便找个定时器去触发的。最常用的方式,就是让PWM模块直接触发ADC。为什么?

因为电流的变化和PWM开关动作是强相关的。IGBT或者MOSFET一开通,电流就开始爬升;一关断,电流就开始下降。如果你用独立的定时器去采样,很可能采到开关瞬间的毛刺,那数据就没法用了。

我早期做一款三相逆变器时,就犯过这个错。当时图省事,用了一个通用定时器每隔100μs触发一次ADC。结果电流波形看起来全是毛刺,PI调节器根本稳不住。后来查了半天,才发现采样点正好落在开关沿上。改成PWM触发后,问题立刻解决了。

具体怎么配置呢?以TI的C2000系列为例,PWM模块里有一个寄存器叫EPWMXSOC,你可以设置它在PWM计数器的某个特定位置产生一个触发信号,直接送给ADC。代码大概长这样:

// 配置PWM1在计数器等于CMPB时触发ADC
EPwm1Regs.ETSEL.bit.SOCAEN = 1;      // 使能SOCA
EPwm1Regs.ETSEL.bit.SOCASEL = 2;     // 选择CMPB事件触发
EPwm1Regs.ETPS.bit.SOCAPRD = 1;      // 每次事件都触发

这样配置之后,ADC就会在PWM周期的固定时刻启动转换。你想想看,只要这个时刻选得准,采到的电流值就非常稳定。

4.2 双采样模式:中心对齐 vs 边沿对齐

说到触发时刻,就不得不提PWM的两种对齐方式。这直接决定了你一个周期内能采几次、采在什么位置。

4.2.1 边沿对齐模式

边沿对齐,说白了就是PWM的计数器从0开始递增,到周期值后立刻归零。波形看起来像锯齿波。

这种模式下,通常会在计数器的峰值或者零值处触发ADC采样。为什么选这两个点?因为这两个时刻PWM开关状态刚刚切换完毕,电流纹波处于相对稳定的位置,噪声最小。

我记得有一次做单相逆变器,客户要求成本压到最低,MCU选了一颗很便宜的型号,ADC只有一个采样保持器。没办法,我只能用边沿对齐模式,在每个PWM周期的波峰处采一次电流。虽然控制带宽受限,但胜在简单可靠。

边沿对齐的特点:
  • 每个PWM周期只能触发一次ADC(除非你用两个比较事件)
  • 采样点固定,适合低成本方案
  • 电流纹波在采样点处较小,但不对称

4.2.2 中心对齐模式

中心对齐模式就高级一些了。计数器先递增到周期值,再递减回零,波形是等腰三角形。

这种模式下,你可以在波峰波谷各触发一次ADC采样。这就是所谓的「双采样模式」。一个PWM周期内采两次电流值,然后取平均,相当于等效采样频率翻了一倍。

为什么双采样有用?我举个例子。假设PWM频率是10kHz,周期100μs。边沿对齐模式下,你每100μs只能采一次。但中心对齐模式下,你可以在50μs(波谷)和100μs(波峰)各采一次,然后做平均。这样等效采样率就变成了20kHz,控制环的带宽也能相应提高。

我曾经在一个伺服驱动器项目里用过这个技巧。电机高速运转时,电流纹波很大,单次采样很容易采到波峰或波谷的极端值,导致电流环抖动。改成双采样平均后,电流反馈信号平滑了很多,转速波动从±5rpm降到了±1rpm以内。

我的个人经验:双采样模式特别适合对电流纹波敏感的应用,比如伺服驱动、UPS逆变器。但要注意,两次采样的时间间隔必须足够长,确保ADC能完成转换。如果PWM频率太高(比如超过50kHz),双采样可能来不及,这时候就得回到边沿对齐。

4.3 采样点的选择:避坑指南

不管是中心对齐还是边沿对齐,采样点的选择都有讲究。我总结了几条原则:

  1. 避开开关沿:开关管开通和关断的瞬间,电流会有很大的di/dt,耦合到采样回路里就是噪声。采样点至少要离开关沿1~2μs以上。
  2. 避开死区时间:死区时间内上下桥臂都关断,电流通过续流二极管走,波形会有畸变。这时候采到的值不能反映真实负载电流。
  3. 考虑ADC采样时间:ADC从触发到完成转换需要时间(比如12位ADC可能需要几百ns到几μs)。你要确保采样窗口足够宽,或者用硬件自动完成。
我曾经踩过的坑:有一次做并网逆变器,采样点选在了PWM波谷处,理论上没问题。但没考虑到电网电压的过零点附近,电流很小,采样噪声占比很大。后来我在软件里加了一个动态采样点偏移,根据调制比自动调整触发时刻,才把THD降下来。所以,采样时序不是一成不变的,要根据工况灵活调整。

4.4 实际配置示例

最后,给一个实际的双采样配置思路。假设PWM频率10kHz,中心对齐模式,我们在波峰和波谷各触发一次ADC:

// 配置PWM1在波谷(计数器=0)和波峰(计数器=PRD)触发ADC
// 波谷触发
EPwm1Regs.ETSEL.bit.SOCAEN = 1;
EPwm1Regs.ETSEL.bit.SOCASEL = 0;     // 选择CTR=0事件
EPwm1Regs.ETPS.bit.SOCAPRD = 1;

// 波峰触发
EPwm1Regs.ETSEL.bit.SOCBEN = 1;
EPwm1Regs.ETSEL.bit.SOCBSEL = 1;     // 选择CTR=PRD事件
EPwm1Regs.ETPS.bit.SOCBPRD = 1;

// ADC配置:SOCA和SOCB分别对应两个不同的ADC通道或同一个通道的不同采样
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0;  // SOC0由EPWM1 SOCA触发
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 1;  // SOC1由EPWM1 SOCB触发

这样配置后,ADC会在每个PWM周期的开始和中间各采一次电流。你可以在ADC中断里把两次结果加起来除以2,就得到了一个周期的平均电流。

嗯,这里要注意:如果两次采样结果差异很大(比如超过10%),说明你的采样点可能选在了电流纹波的斜坡上,或者PWM频率太低导致电流变化太大。这时候需要检查一下PWM频率和电感量是否匹配。

好了,采样时序同步这块就聊到这儿。下一章我们讲讲标定——怎么把ADC的原始码值变成真实的电流安培数。那个环节也有不少坑等着你。