中心对齐PWM下FOC电流采样详解:单/双/三电阻方案选型与调试避坑
2026/9/13 19:32:06 网站建设 项目流程

1. 为什么FOC调试一上来就先折腾电流采样

做FOC(磁场定向控制)的朋友应该都有这种体会:算法框架搭好了,SVPWM波形也出来了,电机也能转,但一看电流波形全是毛刺,毛刺一大过流保护就跳,保护一跳电机就开始抽搐。折腾半天以为是PI参数没调好,结果把代码翻了个底朝天,最后发现是电流采样环节出了问题。

FOC的核心本质是电流环控制,电流采样就是这个控制环路的“眼睛”。眼睛看不清东西,后面算得再漂亮都是白搭。而对于绝大多数电机控制方案来说,电流采样都和PWM的触发方式强相关——尤其是使用中心对齐PWM(Center-Aligned PWM)时,单电阻、双电阻、三电阻三种采样方案在时序、硬件、重构算法上各有各的讲究,也各有各的坑。

这篇文章就围绕“中心对齐PWM下的电流采样”展开,把单/双/三电阻三种方案的核心原理、接线方式、采样时刻点选择、最小采样窗口计算、硬件设计要点都过一遍,重点说说那些容易让人踩坑的细节,帮还在调车、调浆、调伺服的朋友少走弯路,也尽可能避免“上电即炸机”的尴尬局面。

适合谁看:正在做FOC驱动器开发的嵌入式工程师、做航模电调/机器人关节模组/伺服驱动的开发者、以及刚入门无感FOC想自己搭一套控制板的学习者。如果你还没有接触过FOC,建议先花点时间把Clark变换、Park变换和SVPWM的基本概念补上,不然有些时序上的内容不太好对应。

2. 三种采样方案选型前,先搞清楚各自的原理和适用边界

2.1 三电阻采样:最直白、最稳妥的方案

三电阻采样的思路非常朴素:在电机三相桥臂的下桥臂分别串联或者并联一个采样电阻,通过检测每个下桥臂导通时流过电阻的电流,来得到三相电流。

在三相逆变器中,任意时刻都有两个下桥臂处于导通状态(对应SVPWM中的两个有效矢量),一个下桥臂处于关断状态(对应零矢量)。所以只要选对采样窗口,三电阻方案每个PWM周期至少可以同时采到两相电流,第三相电流通过基尔霍夫电流定律算出来。

三电阻方案最大的优点就是简单、直接、鲁棒。采样时刻选得比较宽裕,每个采样电阻上的电流波形相对对称,不容易受死区时间影响的干扰。而且即使电机低速、低调制比运行,也有足够的有效矢量时间来保证采样窗口存在。

缺点也显而易见:成本高一些,需要三个采样电阻、三个运放调理电路,占PCB面积;三路采样通道都要进ADC,对MCU的ADC资源要求也更多。

2.2 双电阻采样:性能和成本的折中

双电阻采样用两个采样电阻采集任意两相电流,第三相电流通过Ia+Ib+Ic=0计算得到。这个方法在目前的中低端伺服、机器人关节、无人机电调上用得非常多。

它的关键点是必须在非零矢量期间完成两相电流的采样。也就是说,采样时刻必须落在有效矢量区间内,并且要保证此时恰好有两个下桥臂导通。这个窗口相对三电阻要窄,尤其是在低调制比(低频低速)时,有效矢量时间极短,很容易出现采样窗口不足的问题。

双电阻方案的优势是比三电阻省一路采样电路,成本低一些;同时比单电阻好做,制约少,抗干扰能力也还不错。

2.3 单电阻采样:极限省成本,但重构复杂

单电阻采样是所有方案里最省成本的,只需要在直流母线侧放一个采样电阻,通过检测不同开关状态下流过母线的电流脉冲,结合SVPWM扇区信息,重构出三相电流。

原理上,单电阻在一个PWM周期内需要至少两个不同的有效矢量采样时刻——分别在两个不同的非零矢量中间时刻采集母线电流,再通过坐标变换重构出某一相或某两相电流,最后算出三相信流。

难点在于:当两个有效矢量中的任意一个时间太短时(低调制比或高调制比都有可能出现),采样窗口不足,ADC可能还没完成转换,矢量就已经切换了。这种情况下只能做移相或者插入测量矢量等补偿处理,算法复杂度明显上升。对新手而言,单电阻方案并不是一个“好上手”的选择。

2.4 在中心对齐PWM下,三种方案的采样时刻怎么排

中心对齐PWM有两种最常见的计数方式,一种是先增后减,另一种是先减后增。计数器到达峰值(PRD/ARR)或零点(ZERO)时,比较匹配事件触发PWM翻转。典型的三相桥臂PWM生成方式,就是分别用三对比较寄存器控制三路PWM的占空比和死区。

在这种结构下,一个PWM周期内有两个采样“静默点”:计数器的峰值和零点。这两个位置对应着特定的开关状态。对三电阻采样来说,通常选择在零点或峰值的中间位置触发ADC采样,此时所有下桥臂要么全部开通(低端调制),要么全部关断(高端调制),流过采样电阻的电流对应已知状态,可以一次采三路。

对双电阻采样来说,则要在有效矢量中间时刻触发ADC,也就是SVPWM扇区切换过程中的某个特征位置。这个位置往往不等于计数器峰值或零点,需要通过比较匹配事件来触发。

单电阻采样更复杂一些,需要在一个PWM周期内安排两个不同的触发点,还要求这两个触发点对应的矢量时间都足够长。

这个“采样时刻点的选择”是整个电流采样设计里最容易被初学者忽略,也是最容易出问题的地方。很多人直接把ADC触发放在定时器更新事件上,结果在中心对齐模式下采出来的电流波形乱七八糟,原因就是没搞清楚自己用的到底是要在零矢量采样还是有效矢量采样的方案。

3. 采样窗口的估算与最小采样时间:这里算错就容易出问题

3.1 最小采样时间由什么组成

先说结论:最小采样时间要同时满足三个环节的需求——死区时间、开关振铃时间、ADC采样保持时间和运放建立时间。

在实际驱动器里,PWM切换瞬间会产生一个电流尖峰,这个尖峰来自开关管的寄生电容充放电,以及续流二极管反向恢复。在尖峰存在的这段时间去采样,采集到的必然是乱七八糟的高频分量。所以采样点必须避开这个振铃区间。

这三部分加起来,时间上大致可以估算为:

  • 死区时间,一般0.5~2us,视开关管和驱动器的速度而定;
  • 开关振铃时间,一般0.5~1.5us,看栅极电阻和回路寄生电感;
  • 运放建立时间,取决于运放带宽和压摆率,一般0.2~1us;
  • ADC采样保持时间,取决于ADC采样时间配置,一般在0.1~0.5us。

所以最小采样窗口至少在2us以上,稳妥一点3us以上。

你可以直接测试一下:把示波器探头夹在采样电阻两端,让电机转起来(可以开环给一个小占空比),看看有效矢量期间采样电阻上的波形,振铃要多久才能稳定。这个实测值最真实,比任何估算都可靠。

3.2 三电阻方案的最小采样窗口怎么算

三电阻方案的最小采样窗口,主要由SVPWM扇区内某一相下桥臂的最小导通时间决定。

举个例子,设PWM频率20kHz,周期50us,中心对齐模式下半个周期25us。如果调制比在某些位置很低,某一个有效矢量的作用时间可能只有3~4us。扣除死区和振铃,可用的采样窗口可能就只剩下1~2us了,这就很紧张了。

一般来说,三电阻方案要求每个PWM周期中,任意一个有效矢量的作用时间都要大于最小采样时间。如果算出来采样窗口不足,可以考虑:

  • 提高PWM频率不是好选择,频率越高,周期越短,每周期可用的采样窗口反而越窄;
  • 降低PWM频率,能换来更宽的采样窗口,但电流纹波会变大;
  • 改用移相策略或者单电阻补偿算法,在高调制比区域做额外处理;
  • 在硬件上想办法缩短死区和振铃时间,比如减小栅极电阻,加快开关速度。

所以在设定PWM频率和死区时间之前,先自己算一遍最小采样时间,再确认在所有调制比范围内采样窗口够不够,这是“不炸机”的基本功。

3.3 运放带宽对采样窗口的影响

很多人容易忽略运放带宽的问题。电流采样电阻两端的信号是脉冲信号,为了维持信号的边缘陡峭度,运放的带宽必须足够高。

如果运放带宽不够,信号建立时间变长,原本2us就能稳定的信号可能3us都稳定不了。极限情况下,ADC触发时采到的还是一个没建立好的电压,测出来的电流值偏低,导致电流环增益不准,表现出来就是电机高速运转时力矩忽大忽小,甚至引发控制发散。

运放带宽至少选择开关频率10倍以上才比较安全。20kHz的PWM,运放带宽至少选200kHz,实际推荐选1MHz以上,比如常用的AD8606(带宽10MHz)、OPA2333(带宽350kHz)这类。注意OPA2333虽然零漂性能好,但带宽偏低,用于电流采样时要注意建立时间是否足够。高带宽运放如AD8606、MCP6V02(零漂+2MHz)通常表现更好。

4. 硬件电路设计细节:采样电阻、滤波、布局与保护

4.1 电流采样电路输入滤波怎么选

电流采样电路一般都会在运放输入端加一个RC低通滤波器,用来滤除高频开关噪声。但这个滤波器并不是越大越好,因为RC低通会引入相位延迟,导致采样信号建立时间变长。

RC截止频率怎么选?经验值:截止频率放在开关频率的10~20倍左右,比如20kHz开关频率,RC截止频率取200kHz~500kHz。

再算一个例子:如果采样电阻为10mΩ,运放输入端的滤波电阻选100Ω,那么滤波电容C=1/(2π×f_c×R),取f_c为300kHz左右时,C大约5.6nF,实际选4.7nF~10nF都可以。

但也要注意,RC滤波的R会与运放的输入电容形成另一个极点,如果R太大容易和运放输入电容相互作用,产生不必要的振荡。通常R建议控制在100Ω到1kΩ之间。

4.2 采样电阻的选型:阻值、功率与寄生电感

采样电阻阻值的选择是矛盾的:阻值大,采到的信号幅值高,信噪比好;但阻值太大会导致功率损耗大、发热严重,而且会改变电路的等效参数。

通常做法是让采样电阻在额定电流下的压降不超过50~100mV。比如额定电流30A,采样电阻取2mΩ,满量程压降60mV,功率P=I²R=1.8W,必须选2W以上的功率电阻。如果要兼顾小电流精度,可以考虑用两个电阻并联(例如两个3mΩ并联得到1.5mΩ),降低等效电阻并分散发热。

采样电阻的寄生电感也很关键。对于低阻值采样电阻,寄带电感在某些情况下反而会主导高频阻抗,导致采样波形产生严重的振铃。建议选用合金电阻、锰铜电阻这类低感抗元件,或者采用开尔文连接(四线制)方式,把采样电阻的电流路径和电压检测路径分开,避免大电流路径上的杂散压降被叠加到采样信号里。

4.3 PCB布局:一条走线位置不对也能毁掉整板

电流采样的PCB布局,核心就两个字:短、净。

“短”是指采样电阻到运放输入的距离尽可能短,采样信号走线不要跨越功率区域,不要和其他高di/dt的走线平行走线。

“净”是指采样信号的参考地必须独立、干净。最好把采样电阻的“地”端直接引回到控制芯片的模拟地(AGND),并在靠近运放电源引脚放置去耦电容。采样信号走线尽量两侧包地,防止耦合噪声。

有一点几乎人人都踩过坑:功率地和信号地直接在采样电阻一端短接,导致功率回路上产生的压降全部叠加到采样信号参考地上,最终在ADC读数里呈现在一个明显的电流偏置上。正确做法是:采样电阻的功率电流路径和控制信号的地路径只在单点汇合,最好在采样电阻的负载端附近直接短接,且这个点要尽量靠近采样电阻本体。

4.4 过流保护不能只靠硬件比较器

如果你把过流保护完全寄希望于软件(比如在ADC中断里判断电流值是否超限),那你是给自己埋了一颗雷。ADC有采样周期和转换延迟,加上中断响应时间,整个闭环可能几百微秒甚至几毫秒才响应。在这个时间内,开关管早就烧掉了。

硬件上应该增加一个快速的比较器保护电路,电压超过阈值直接关断PWM输出(拉低使能或者触发刹车)。这个比较器的响应时间应该在微秒级别。

另外,PWM故障保护要充分利用MCU的高级定时器刹车功能。STM32的高级定时器有BKIN(刹车输入)引脚,可以在检测到故障时直接把PWM输出置为无效电平,同时产生中断告知主控。这个功能的配置要在PWM初始化时就完成,不要等出故障了再去开。

5. 软件层面:ADC触发时刻与中心对齐PWM的配合

5.1 中心对齐PWM的模式配置

在STM32中,设置中心对齐模式主要是在TIMx_CR1中设置CMS位(Center-aligned Mode Select)。CMS=01表示计数器在向上计数时比较匹配,向下计数时不匹配;CMS=10表示向下计数时匹配;CMS=11表示向上和向下都匹配(常用于产生对称PWM)。

FOC一般推荐使用CMS=11,这样PWM波形关于周期中点完全对称,电流纹波最小,谐波也低。

在配置好PWM后,还要记得设置死区(Dead-Time),STM32的刹车和死区寄存器(BDTR)中的DTG位来控制。死区时间不能为0,否则上下桥臂可能出现直通短路,这个在电机驱动里就是“炸机”的最大原因之一。

5.2 采样时刻点怎么和ADC触发对齐

中心对齐模式下,计数器到达峰值或零点时,ADC触发信号可以由定时器的TRGO(触发输出)事件给出。

对于三电阻方案,一般选择在峰值处(或者在零点处)触发ADC。此时三相下桥臂都处于导通状态(低端调制)或者都处于关断状态(高端调制),采样电阻上的电流可以正确反映相电流。

这里有个很容易忽略的问题:触发ADC的时刻和ADC真正开始采样的时刻之间有延迟(一般几个时钟周期),而且ADC不同通道之间也有通道间采样延迟(如果是多通道规则组转换,通道间会有间隔)。如果PWM周期很短、半个周期内时间很紧,这个延迟累积起来不小。

建议:ADC触发采用定时器的TRGO信号,并且配置ADC为规则组或者注入组多通道采样,采样通道顺序按照三相顺序排列。如果对时序要求极高,可以把ADC配置在注入组(Injected Group),它可以在规则转换被抢占时强行插入采样,对多通道FOC采样更方便。

5.3 双电阻采样的触发点设置

双电阻采样则不能简单在峰值/零点触发,而是要在有效矢量期间触发。具体来说,取决于SVPWM的扇区。

这里以STM32定时器为例,常规做法是使用定时器的比较匹配事件去触发ADC,即把某个通道的比较寄存器设定为需要的采样时刻点。然而中心对齐模式下,同一定时器的比较值在向上计数和向下计数时会各匹配一次,因此需要利用“匹配时计数方向”的信息来决定是否触发。有些MCU支持在匹配时只从上升沿或只从下降沿触发,或者采用两个不同的比较通道来区分上下半周期的采样点,例如设一个比较值只在计数器向上计数的过程中匹配时触发ADC,另一个比较值只在向下计数的过程中匹配时触发。这样可以更灵活地适应双电阻采样的时序要求。

同时还要保证采样点落在有效矢量中间而非边缘,避免在矢量切换瞬间采样。一般做法是在SVPWM软件里算出每个扇区需要采样的比较值,然后直接更新到定时器的比较影子寄存器里。

这种方法对实时性要求高,但好处是采样点非常精准。实际工程中,双电阻采样很少用固定的比较值,因为不同扇区、不同调制比下,有效矢量的分布完全不一样。

5.4 采样窗口不足时的软件补偿手段

无论哪种采样方案,都会遇到采样窗口不足的极端工况。软件补偿主要有两条路:

一是插入测量矢量。在有效矢量时间不足的区间,人为插入一段额外的电压矢量,使该区间的下桥臂导通时间大于最小采样时间,然后再通过坐标变换把插入的电压矢量对电流环的影响补偿回来。这个方法实现复杂,而且会带来额外的电流纹波和损耗,一般只在高性能伺服驱动里用。

二是移相法。当某个矢量时间太短时,把这个矢量的作用时间整体移到相邻的PWM周期的后半部分,让它在“时间上”变长。这样可以在不增加纹波的情况下解决窗口不足的问题,但会轻微增加电流谐波,对控制频率的精度也有一定影响。

对于初学者来说,建议先用三电阻或双电阻方案,避免一开始就陷入单电阻的补偿算法泥潭。

6. 三种采样方案的对比总结与选型建议

6.1 对比总结表

对比维度三电阻采样双电阻采样单电阻采样
硬件成本高(3个采样电阻+3路运放)中(2个采样电阻+2路运放)低(1个采样电阻+1路运放)
ADC通道需求3路2路1路
电流重构复杂度低,直接采两相算第三相中,两相采样一相重构高,需要母线电流重构三相
低调制比时的采样窗口较宽裕可能出现窗口不足极易出现窗口不足
采样时序复杂度较高
适用场景工业伺服、对精度和可靠性要求高的场景机器人关节模组、直流无刷电调低成本电调、追求极致成本的小功率场合

6.2 选型建议

做小功率(10A以内)航模电调、无人机电调,预算敏感的,可以选择单电阻方案,但要做好低调制比下采样失败的补救逻辑。

做常规功率(10A~60A)的机器人关节、动力电机驱动,双电阻方案是性价比最高的选择。成本只比单电阻略高,但调试体验和可靠性好很多。

做伺服驱动器、对动态响应要求高的场合,毫不犹豫选三电阻方案。额外的成本换来的是更宽裕的采样窗口和更小的电流纹波,调试省心,性能上线也更高。

6.3 时序设计流程清单

从零搭建一个电流采样方案,推荐的实施顺序如下:

  • 确定PWM频率、死区时间、死区方式(高有效还是低有效)、中心对齐模式;
  • 计算最小采样时间(死区+振铃+运放建立+ADC采样保持);
  • 确定采样方案(单/双/三电阻),并列出所有扇区下的采样窗口值;
  • 检查整个调制比范围内,是否存在窗口不足的区间;如果有,是否需要软件补偿;
  • 在定时器上配置好各个ADC触发点(TRGO或比较匹配);
  • 配置ADC采样通道、采样时间、DMA传输或注入组中断;
  • 先不加电流环,开环给一个小占空比让电机转起来,观察电流波形是否干净;
  • 确认电流波形干净后,再接入电流环PI调节器,从小增益慢慢往上调。

7. 常见问题与排查技巧实录

7.1 问题:上电后芯片发烫,PWM设置后桥臂直接冒烟

最常见的原因是死区设置错误或PWM极性配置反了。尤其在使用STM32高级定时器时,如果OCx和OCxN的极性配置不对,可能在上桥臂导通的同时下桥臂也导通了,产生直通短路。

排查方法:不接母线电压,只接逻辑电源,用示波器查看上下桥臂驱动波形,确认存在死区时间且极性正确。再逐步加大母线电压测试,但注意在输入端加限流电阻或电子负载保护。

7.2 问题:电流波形低频周期性抖动,采样值看起来有嘴唇状的波形

这通常不是采样本身而是采到了错误的时刻,比如双电阻采样时,采样点落在了矢量切换的边界上,导致采到的是切换瞬间的电流尖峰。

排查方法:用示波器CH1测PWM波形,CH2测采样电阻两端电压波形,把ADC触发信号(可以用示波器的解码功能或者直接观察比较事件触发引脚)和电流波形叠加对比,确认采样时刻是否落在平台期。

7.3 问题:电流波形整体偏大或偏小,静态偏置明显

这是运放失调电压或者零点校准没做好的问题。电流采样电路有模拟偏置时,需要在系统初始化时自动校准零漂。

排查方法:在电机不转、PWM输出全部无效时,采集1000次ADC值求平均,把这个平均值作为零偏存在Flash里,每次上电后先校准一次再投入使用。另外用示波器查看运放输出的直流电平,确认是否和理论值一致。

7.4 问题:低转速下电机转矩波动明显,似乎是采样值丢失

低转速意味着低调制比,有效矢量时间短,采样窗口可能不足。双电阻和三电阻方案偶尔会出现某几次PWM周期内采样无效的情况。

排查方法:在代码里统计单位时间内ADC采样失败的次数,如果失败率过高,就需要考虑减低PWM频率,或者增加最小矢量时间约束,或者在失败时保持上一次采样值并平滑过渡。

7.5 排查工具准备

调试电流采样必备两样工具:一个至少100MHz带宽的双通道示波器,一个电流探头(如果有条件的话)。没有电流探头的话,可以用采样电阻两端的电压波形做参考,但要注意共模干扰的影响。

个人经验:不管方案设计得多么“理论上完美”,上电后的第一步永远是拿示波器看真实波形。电流采样相关的很多问题,只看代码是看不出来的,必须结合实际的开关波形、死区波形和采样电阻波形一起对照,才能快速定位。

8. 我踩过的几个值得分享的坑

最后挑几个我实际调试中印象比较深的教训,给大家做个参考。

第一个是关于采样点时机。最早做三电阻方案的时候,我把ADC触发设置在了定时器更新事件上,想着刷新率越高越好。结果电流波形上叠加了一层非常规律的“栅栏”状噪声,后来才意识到中心对齐模式下定时器更新事件并不是采样窗口的平台期,必须在峰值或零点处采样。程序里只差一个触发源的选择,实际效果天差地别。

第二个是关于运放带宽。有次用小带宽精密运放做电流采样,低转速下一切正常,一拉高速电流环就开始发散。排查了整整两天,最后用示波器对比采样电阻两端信号和运放输出信号,发现运放输出在三五微秒内都建立不到位,信号被严重“拉圆”了。换高带宽运放后问题直接消失。从那以后,我选运放先看带宽,再看精度。

第三个是关于PCB布局。有一版双层板为了布线方便,把采样信号走线放在了功率管下方,结果电机一转起来ADC读数就跳动。后来做第二版,把采样信号走线挪到远离功率管的一侧,并做了包地处理,同样代码、同样的电路参数,电流波形干净了一个数量级。硬件布局上的一个走线位置,能让软件人员白忙好几天,这话真不是开玩笑。

第四个是关于采样窗口的动态评估。很多人(包括曾经的我)只在额定工作点校验采样窗口够不够,但实际上电机运行时会穿越各种调制比区间,某个区间采样窗口不足会让电流环在那个转速区间出现明显的抖动。后来我在代码里加了实时统计采样有效率的逻辑,调试时配合上位机看曲线,很快就定位到了问题转速段,然后针对性地做了处理。

FOC电流采样这件事,说到底就是三板斧:选对方案,算好时序,留好硬件裕量。方案选对了,时序算准了,硬件布局干净了,电流环自然稳,炸机概率就能降到很低。反过来,任何一个环节偷懒,最终都会在调试阶段加倍还回来。希望这篇文章能帮你少熬几个夜,少烧几块板子。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询