news 2026/9/13 16:32:14

中心对齐PWM下FOC电流采样:单/双/三电阻方案与调试实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
中心对齐PWM下FOC电流采样:单/双/三电阻方案与调试实战

做FOC的都知道,电流采样是整个环路里最容易被忽视、又最容易出事的环节。很多人画板子时觉得“不就是电阻加运放嘛”,结果一上电就过流报警,或者波形乱七八糟,严重一点直接炸管子。我这些年调过不少无感FOC驱动板,也算摸清了里面的门道:在中心对齐PWM模式下,单电阻、双电阻、三电阻三种方案各有脾气,选型、布局、时序、触发时刻错一个,效果天差地别。这篇就把我实际搭电路、调时序、踩坑的经验完整梳理一遍,给正在做FOC驱动、准备画采样电路的工程师一个参考。

先说清楚,这篇文章讨论的是基于中心对齐PWM的电流采样,核心素材就是MCU的定时器、ADC触发、运算放大器、采样电阻这四样东西。文章不讲课式地堆原理,而是从“怎么搭才不会炸机”这个角度,把单/双/三电阻采样的工程细节逐个讲透。

1. 中心对齐PWM与采样时机:先把“什么时候采”讲透

1.1 中心对齐模式的底层逻辑

PWM生成方式有边沿对齐和中心对齐两种。边沿对齐就是计数器从0数到ARR,然后直接归零,波形左对齐或右对齐,实现简单,但开关动作都集中在某个边沿,电流纹波大,谐波分量也高。中心对齐模式不同,计数器先从0向上数到ARR,再从ARR向下数到0,输出电平在计数值与比较寄存器匹配时翻转。这样PWM波形以周期中点对称,开关频率的等效倍频比边沿对齐高一倍,电流纹波明显更小,电机噪音和扭矩脉动都更友好,所以现在主流的FOC方案基本都选中心对齐。

中心对齐还有一个隐藏优势,对FOC采样特别关键:在一个PWM周期内,三角波有两个顶点和一个底点。在三角波的底点,也就是计数器为0的时刻,三相桥臂都处于同一种开关状态(要么全上管导通,要么全下管导通),而FOC算法最常用的SVPWM合成方式里,零矢量正好落在这个区域。在零矢量期间,三相下桥臂或者上桥臂同时导通,母线电流为零或者只有很小的纹波,此时采样三相电流,就是最干净、最接近真实相电流的时刻。

1.2 ADC触发时刻的数学约束

中心对齐模式下,定时器向上计数和向下计数各占半个周期。以STM32高级定时器为例,当计数方向是向上且计数器值为0,或者向下且计数器值为ARR时,会产生更新事件。实际项目里,我习惯把ADC触发放在计数器值等于0的瞬间,用TIM的TRGO触发ADC注入组或规则组采样,也可以在比较匹配事件触发。

需要特别注意的是,ADC采样必须避开开关切换瞬间。因为开关管开通和关断时,续流二极管反向恢复、栅极驱动振铃、母线寄生电感会产生很大的dV/dt和di/dt,采样电阻两端的电压在这个期间根本不反映真实的相电流。我实测过,从开关动作时刻到振荡基本平息,少说要几百纳秒到一两微秒,具体取决于栅极电阻阻值、MOS管Qg、PCB布局这些因素。

所以ADC触发要留出足够的延时,确保采样保持电容充电的时刻已经避开开关振铃区。做法可以是设置定时器的重复计数寄存器,让ADC在更新事件后延时几个时钟周期再触发;也可以直接用ADC的采样时间配置把采样窗口往后拖一点。总之,采样点必须落在开关管完全导通、电流续流稳定之后的那个平台区,这永远是第一原则。

2. 三电阻采样:三路齐全,但要盯住最小脉宽

2.1 采样窗口计算:为什么低脉宽时采不准

三电阻方案是三路下桥臂各串联一个采样电阻,理论上任何时刻都可以通过三个电阻测出三相电流,只要对应相的MOS管导通即可。在中心对齐PWM下,下桥臂导通时间对应低电平的持续时间,也就是零矢量期间。问题就出在这里:如果某一相的占空比接近1,或者SVPWM电压矢量落在扇区边缘,该相下桥臂的导通时间可能非常短,短到不够完成一次可靠采样。

采样需要的最小时间由三部分构成:采样电阻+RC滤波端的建立时间、运放的压摆率和建立时间、ADC的采样保持时间。我以20kHz PWM、中心对齐模式为例算了一笔账,PWM周期50微秒,如果要求下桥臂有效导通时间至少1.5微秒才能稳定采样,那么对应占空比要在(1 - 1.5/25)这个量级附近,也就是97%以下。听上去还好,但实际工程里,采样窗口还要覆盖运放建立时间和ADC采样保持时间,三电阻的最小可采样脉宽往往要留到2微秒以上,对应最大占空比就得限制在92%到95%左右。这还不是最坑的,最坑的是SVPWM在扇区边界处,总有一相的小矢量持续时间几乎归零,那个时刻的三电阻采样数据是不可信的。

所以三电阻方案虽然简单可靠,但必须有“最小脉宽限制”和“过调制保护”逻辑。我在实际调试中做了一件事:在主循环里判断SVPWM输出的占空比,如果某相占空比超过上限,就限制调制比,或者把采样点从三角波底点移到另一个方向的重合点,尽量避开窄脉冲区。

2.2 三电阻方案的硬件抗炸机设计

三电阻方案硬件上最容易炸的地方不是采样本身,而是采样电阻的寄生电感和地弹噪声。我建议采样电阻用低感贴片电阻,最好是金属合金箔电阻,封装至少2512以上,焊盘底下要开大面积的散热过孔。如果板上电流很大,可以把采样电阻做成四线开尔文连接,把采样电压引线单独走到运放输入端,避免大电流走线压降混入采样信号。

运放选型也有讲究。FOC电流采样一般要求带宽不低于1MHz,压摆率最好在5V/us以上,输入偏置电流要小,共模输入范围要包含负压(因为下桥臂导通时采样电阻下端接近母线负端,实际工作时会有地弹导致电压瞬时偏低)。我常用的电路是差分放大结构,增益选取要看采样电阻阻值和ADC参考电压的配合。比如采样电阻10毫欧,最大相电流50A,峰值电压0.5V,ADC参考电压3.3V,运放增益可以设在5.5倍左右,留出余量。RC滤波的截止频率我一般取1MHz到3MHz,太高滤不掉开关噪声,太低会拖慢建立时间,导致窄脉宽采样失真。

还有一点,运放电源千万别直接从MCU的3.3V LDO取,因为电机大电流时母线会拉低系统电压,LDO容易跌落,运放输出进入饱和区后恢复需要很长时间,这段时间里ADC采到的全是废数据,严重时会误导过流保护导致误动作。如果条件允许,采样运放用单独的隔离电源或者低噪声LDO供电,至少也要加足够的去耦电容,我习惯在运放电源引脚放一个100nF陶瓷电容和一个10uF钽电容。

3. 双电阻采样与电流重构:省一路采样,别省算法

3.1 两相采样还原第三相的原理边界

双电阻方案只在两相下桥臂放采样电阻,第三相电流用基尔霍夫电流定律算出来:三相电流之和为零,知道两相就等于知道第三相。理论没问题,但工程里有个前提:采样的那一刻,这两相电流必须是同时刻的有效值,才能直接做代数运算。如果在不同的时刻分别采样两相,中间隔了一小段PWM时间,电机绕组的电流已经变化了,重构出来的第三相就会有误差,转速越高误差越明显。

这就要求两路ADC采样必须在同一个PWM周期内、尽量同一个时刻点完成。实现方式有两种,一是用两个ADC同时触发规则组采样,二是用注入组在同一触发源下多通道顺序采样。第二种方式要注意ADC注入组是逐个通道串行转换的,两个通道之间有时间差,如果这个时间差太大,误差就大了。在低速低载频下问题不大,但高速大电流时要谨慎。

双电阻方案最大的坑是扇区边界重构失效。当SVPWM矢量正好落在两个扇区的边界附近时,有一相下桥臂导通时间非常短,甚至等于0,此时采不到该相电流。如果这一相正好是需要直接采样的两相之一,那电流重构直接失败。因此纯双电阻方案在过调制区和高调制比时很难做稳定,业界常见的做法是在扇区边界切换采样相,根据当前SVPWM扇区动态选择可采的那两相,再从第三相去推算无法采到的那相。

3.2 双电阻的采样时刻配置

双电阻采样时刻的核心原则是:在两相下桥臂同时导通的时间段内完成两路采样。中心对齐PWM下,这个时间段就是零矢量区间,但具体要选在三角波的底点还是顶点,取决于当前SVPWM合成时零矢量是000还是111。一般SVPWM实现中,一个PWM周期内零矢量会拆成两段,分散在起点和终点附近。如果你使用的是七段式SVPWM,两个零矢量段分别在PWM起始和结束位置,中间是有效矢量,那么这个时刻两个下桥臂都是导通的,可以采样。

实际操作中,我不建议把采样点放在PWM刚开始或者刚结束的那几百纳秒,因为那是死区刚结束、开关管刚导通的时刻,振荡最厉害。更好的位置是PWM周期中间的有效矢量区间,这时有两相下桥臂同时导通,而且不是刚刚切换完的瞬间,状态稳定。不过要注意,如果在有效矢量区间采样,采到的是母线回路里的相电流,和零矢量期间采到的略有不同,算法里的电流值意义要换算清楚。我用的是比较成熟的做法:在计数器匹配事件触发ADC,配合DMA自动搬运结果,这样采样时刻固定稳定,且每个PWM周期都能同步更新电流环。

4. 单电阻采样:最省钱,也最考验PWM布局

4.1 单电阻的几个采样点从哪里来

单电阻方案更进一步,整个驱动板只在母线回路里放一个采样电阻,硬件成本最低、布局最简单,但代价是算法复杂度最高。母线电阻上的电流在一个PWM周期内会随着开关状态变化,并不是始终等于某一相电流。只有当零矢量作用时,母线电流才是0(或负母线电流),此时采样没意义;而有效矢量作用时,母线电流等于三相中某一相的电流,具体等于哪一相取决于当前开关状态。

因为单电阻只能采到一个值,要想得到三相电流,必须在一个PWM周期内采多次。常用的套路是在一个PWM周期内找两个不同的时间点:在一个零矢量区间和相邻有效矢量区间各采一次,分别得到两相电流,第三相再算出来。比如扇区1,有效矢量100期间母线电流等于U相电流,零矢量采样得到0或噪声,所以不行,得换一种组合。更通用的做法是采用移相PWM,把PWM中心点错开,制造出足够宽的两次采样窗口。

这个方法稍微绕,但理解了就不难:中心对齐PWM下,在一个载波周期里,如果把PWM的占空比中心位置做偏移,使得两个有效矢量(比如110和100)在时间轴上分得足够开,那么ADC就可以在第一个有效矢量期间采到一相电流,在第二个有效矢量期间采到另一相电流。这样两次采样的时间差仍在一个PWM周期内,电流重构误差可控。很多集成电机驱动芯片内置的MOSFET电流采样就是这么干的,外部不需要三路采样电阻,一个采样电阻加一串算法就够了。

4.2 移相PWM和最小插入时间的实现注意

移相PWM听上去是软件的事,但硬件上也有约束。每次采样都需要满足最小采样时间,如果两个有效矢量之间的间隔太小,两次采样窗口会重叠,采到的电流混叠,重构就废了。业界通行的做法是设置最小脉冲插入时间,当某个有效矢量持续时间小于最小采样时间时,人为把该矢量拉长,同时缩短另一个矢量来保持总周期不变,代价是电流谐波略增、电压利用率略降。

单电阻方案的采样电阻选择也要更谨慎,因为母线电流是断续的、峰值更大,电阻发热和噪声比三电阻方案严重。我建议采样电阻阻值比三电阻方案略小,比如5毫欧到10毫欧,同时把运放增益调高,确保弱电侧的信号幅度足够。还要特别注意采样电阻两端的RC滤波,太大会把窄脉冲信号的上升沿滤掉,导致采样值偏小;太小的干扰又压不住。我实践经验是RC时间常数取采样保持时间的五分之一到十分之一,这样能兼顾抗噪和建立时间。

5. 调试实录:常见异常现象、参数与坑位对照

5.1 最容易炸机的几个场景

我见过不少FOC驱动板炸机,真凶往往不是算法,而是采样环节的“虚假安全”信号。最典型的就是母线电容充电瞬间,浪涌电流很大,如果过流保护阈值设置不当,或者过流比较器的滤波时间太长,保护来不及响应,功率管就先挂了。我的做法是设置两级保护:硬件比较器快速保护(微秒级),软件ADC过流保护(慢速但可配置阈值和恢复策略)。硬件比较器必须直接触发定时器刹车输入,并做到锁存,不能靠软件判断后再关PWM,那绝对来不及。

另一个常见坑是运放输出饱和。如果采样电阻的电流短暂超过设计上限,运放输出可能被轨到轨钳位,但钳位后运放恢复需要时间,这期间过流比较器可能已经因此触发保护,或者反过来掩盖了真实过流。要避免这个问题,除了选轨到轨且快速恢复的运放,最好在软件里把ADC采样值做合法性判断,直接丢弃钳位区间的数据,并在连续多个周期异常时进入故障状态。

5.2 参数配置速查与调试心得

我把实际调试中比较有效的参数组合列一下,作为参考起点,实际值要根据你的电机和板子调整。

配置项推荐值/做法备注
PWM频率16kHz-20kHz频率太高会增加开关损耗,太低会增大电流纹波
ADC采样频率每个PWM周期同步触发用定时器TRGO触发,不要用软件循环触发
采样电阻三相各10毫欧/母线5-10毫欧大电流用开尔文连接,低感合金电阻
RC滤波截止频率1MHz-3MHz太高会引入开关噪声,太低会拖慢建立
运放增益保证最大电流时输出不超过ADC参考电压80%同时兼顾小电流分辨率
死区时间0.5us-2us视开关管RG、Qg而定

调试时我的顺序是先不开电机,只发一个固定占空比的小PWM脉冲串,用示波器看三相电流采样的波形,确认采样点和实际电流波形吻合,再上闭环。上闭环后不要直接给大目标扭矩,先用一个很低的电流内环目标跑起来,观察重构电流噪声和电流环稳定性。踩过几次坑之后,我养成了一个习惯:每次改采样电路参数,都会把ADC原始数据用DMA搬到内存里,在调试器里直接查看一整个PWM周期的采样点分布,这比任何仿真都有说服力。

单电阻和双电阻方案在低调制比下重构误差大是通病,我曾经试过在低速时动态切回三电阻模式,程序里写两套采样配置,实测切换过程只要做一次PWM周期的同步,电流波形不会出现明显毛刺。这种做法虽然代码量大一点,但能同时享受三电阻的精度和单电阻的低成本,适合对成本敏感又不愿意牺牲低速性能的产品。

5.3 上电和过压保护的额外提示

最后说一个很经验的细节。用中心对齐PWM加ADC同步采样,PWM寄存器更新时机一定要选好。STM32里比较寄存器和ARR寄存器的更新,是在更新事件之后生效的,而ADC采样触发又是基于更新事件或比较匹配,如果寄存器更新时机和ADC采样点离得太近,可能同一时刻PWM占空比还在用旧值,ADC已经按新配置采样了,电流环就会产生一步延迟,严重时导致环路振荡。我一般会开启预装载功能,让比较寄存器的修改在下一个PWM周期开始才生效,确保整个电流环的所有变量都同步于同一个PWM周期。

我个人的体会是,FOC电流采样这套东西,看着是硬件活,实际调试起来三分在硬件、七分在时序。只要PWM和ADC的触发关系理清了,三电阻、双电阻、单电阻用起来都能稳定,但如果时序图没画明白,换再好的器件也一样出问题。每次搭新板子,我都会先画一张PWM计数、比较匹配、ADC采样点、死区信号的时序图,再开始写配置代码,这个习惯帮我在调试阶段省了大量时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 16:32:04

BP神经网络参数辨识:从数据到参数的直接映射方法

简介:BP神经网络参数辨识Matlab程序包,面向从事系统辨识、预测建模的工程师及学习神经网络的初学者,可用于解决非线性动态系统内部参数估计与预测问题。压缩包内包含完整可运行的BP网络训练与预测代码,涵盖网络结构定义、权重随机…

作者头像 李华
网站建设 2026/9/13 16:30:43

Windows下用Docker与WSL2部署vLLM运行Qwen3-8B的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 16:28:19

保研面试实战指南:从知识图谱到学术可塑性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 16:25:40

面向对象 vs 面向过程:Java编程范式实战对比与设计选型

先聊几句题外话。带新人这几年,我发现一个很有意思的现象:很多刚入行的同学能把“封装、继承、多态”倒背如流,但你要是真扔给他一个需求,他写出来的代码依然是“一个工具类 一堆静态方法 一串if/else”,本质上就是披…

作者头像 李华
网站建设 2026/9/13 16:25:16

基于知识图谱与图神经网络的电影推荐系统:KGCN实战解析

简介:一份完整高分毕业设计项目,基于Python知识图谱与图神经网络实现电影推荐系统,面向需要完成毕设、期末大作业或课程设计的高校学生。资源共31个文件,以21个Python脚本为主体,覆盖知识图谱构建、数据加载、KGCN模型…

作者头像 李华