资讯动态

FOC电流环带宽上不去?SSSU、DSDU、SSDU、DSSU四种采样更新策略拆解

发布时间:2026/10/27 1:09:58 来源:尧图企业网站定制
在电机控制这个圈子里FOC磁场定向控制的电流环带宽始终是绕不开的话题。很多人调参数时发现明明PI参数已经给得很激进电流响应还是慢半拍波形里总带着一点说不清的滞后。这时候有经验的人会问一句你用的哪种采样-更新策略SSSU、DSDU、SSDU还是DSSU这四个缩写看起来像绕口令但它们直接决定了电流环里那个要命的延迟到底是一拍、半拍还是两拍。我见过太多项目在电流环振荡和带宽上不去之间反复横跳最后发现问题根本不在PI参数而在采样和PWM更新的时序配合上。这篇内容就把这四种策略拆开揉碎讲清楚从延迟的来源、每种策略的时序逻辑、到实际工程里怎么选、怎么算、怎么避坑尽量让刚接触FOC的人也能看懂也让调过几年电机的人能对照自己的代码找到优化空间。1. 电流环延迟的本质不是PI不够快是时序在拖后腿1.1 延迟从哪来采样、计算、更新三个环节的固有滞后要理解四种策略先得把电流环里信号流动的链路理清楚。一个典型的FOC电流环每个PWM周期内要做三件事第一采样三相电流并做Clarke/Park变换得到id、iq第二用PI调节器算出ud、uq第三把ud、uq经过反Park和SVPWM生成占空比更新到PWM比较寄存器。这三件事不是瞬间完成的它们之间存在固有的时间滞后。最原始的滞后来自采样时刻和PWM更新时刻的错位。假设PWM采用中心对齐模式计数器从0上升到峰值再下降到0一个完整周期。电流采样通常安排在计数器过零或峰值附近因为这时候开关噪声最小。但采样得到的电流值反映的是采样时刻的电流而PWM占空比更新后实际作用到电机上的电压要等到下一个PWM周期才生效。这中间就产生了一个周期的延迟。更麻烦的是计算时间。MCU做Clarke/Park、PI运算、反Park、SVPWM这一套下来如果主频不够高或者代码没优化可能占用几个微秒甚至十几微秒。如果计算没在PWM更新点之前完成就只能等下一个周期再更新延迟直接翻倍。所以电流环延迟的本质是采样时刻、计算完成时刻、PWM更新时刻三者在时间轴上的相对位置决定的。四种策略就是在调整这三个时刻的配合方式。1.2 延迟对电流环带宽的定量影响相位裕度是怎么被吃掉的延迟对电流环的影响可以用控制理论里的纯滞后环节来近似。一个延迟时间为Td的环节在频域上表现为e^(-sTd)它不改变幅值但会引入相位滞后滞后量等于ω×Td。频率越高相位滞后越大。电流环的截止频率带宽处如果相位滞后太大相位裕度就不够了系统就会振荡甚至不稳定。举个具体的数假设PWM频率10kHz周期100微秒。如果延迟是一个PWM周期即Td100微秒。在1kHz处相位滞后是2π×1000×100e-60.628弧度约36度。在2kHz处就是72度。一般电流环希望相位裕度在45度以上那么延迟100微秒时带宽很难超过1.5kHz。如果延迟能降到半个周期即50微秒同样相位裕度下带宽可以接近3kHz。这就是为什么同样硬件、同样PI参数换一种采样-更新策略电流环带宽能差一倍。实际工程里很多人用试凑法调PI发现Kp再大就振荡其实不是Kp的问题是延迟已经把相位裕度吃掉了。理解这一点后面看四种策略的优劣就一目了然谁能把有效延迟压得更低谁就能支撑更高的带宽。1.3 四种策略的命名逻辑S和D到底代表什么SSSU、DSDU、SSDU、DSSU这四个缩写每个字母代表一个PWM周期内某个环节的时机。通常约定第一个字母表示电流采样时刻第二个字母表示PWM更新时刻第三个字母表示……不同文献里定义略有差异但核心是S和D两个符号。S代表Single即单次、在周期内的某个固定点D代表Double即双次、在周期内有两个点。更常见的解读是字母序列描述的是采样和更新在PWM周期内的分布方式。比如SSSU可以理解为采样单次、更新单次都在周期内固定位置DSDU表示采样双次、更新单次SSDU表示采样单次、更新双次DSSU表示采样双次、更新单次但顺序不同。具体到每种策略关键看采样点是在PWM周期的哪个位置更新点又是在哪个位置两者之间隔了多长时间。这个时间差就是有效延迟的主要来源。需要说明的是不同厂商和文献对这四个缩写的定义可能有细微差别但核心思想一致通过调整采样和更新的时序把有效延迟从一拍压到半拍甚至更短。下面逐个拆解。2. SSSU策略最基础的单采样单更新延迟为什么是一拍2.1 SSSU的时序逻辑采样在峰值更新在过零SSSU是最经典、最容易实现的策略。它的做法是每个PWM周期只在计数器峰值或过零处采样一次电流然后在下一次计数器过零或峰值处更新PWM占空比。以中心对齐PWM为例计数器从0升到峰值再降回0。假设在峰值处触发ADC采样电流采样完成后MCU开始计算计算完成后等到计数器过零时更新比较寄存器。这样从采样到更新之间隔了半个PWM周期从峰值到过零。但更新后的电压要等到下一个周期才真正作用到电机上所以从采样到电压实际生效总共隔了一个完整PWM周期。这就是SSSU延迟为一拍的由来。用时间轴表示t0采样tT/2计算完成并更新寄存器tT新电压开始作用。有效延迟TdT。如果PWM频率10kHzT100微秒Td就是100微秒。2.2 为什么SSSU延迟大却依然常用实现简单、噪声低既然SSSU延迟大为什么很多入门方案和低成本项目还在用原因有几个。第一实现简单。只需要一个ADC触发源一个PWM更新事件代码逻辑清晰不容易出错。第二采样时刻在峰值处这时候三相下桥臂都导通中心对齐PWM的峰值处通常是有效矢量中间电流采样噪声最小信噪比高。第三对于带宽要求不高的应用比如风扇、水泵、普通风机电流环带宽几百赫兹就够了SSSU完全能满足。我早期做的一个低压风机项目用的就是SSSUPWM频率16kHz电流环带宽设到800Hz运行很稳。后来想提带宽到1.5kHz怎么调PI都振荡换成DSDU之后问题迎刃而解。所以SSSU不是不能用是要看场景。如果项目对成本敏感、对带宽要求不高SSSU是最稳妥的选择。2.3 SSSU的延迟计算与带宽上限估算SSSU的有效延迟Td等于一个PWM周期T。根据相位裕度要求可以估算带宽上限。假设希望相位裕度至少45度那么延迟引入的相位滞后在截止频率处不能超过135度因为PI调节器本身还会贡献一部分相位。粗略估算截止频率fc满足2π×fc×T ≤ 135度对应的弧度即2π×fc×T ≤ 2.356。所以fc ≤ 2.356/(2π×T) 0.375/T。PWM频率10kHz时T100微秒fc ≤ 0.375/100e-6 3750Hz。这是理论极限实际因为PI调节器相位、采样滤波等因素能到1.5kHz到2kHz就不错了。PWM频率20kHz时T50微秒fc上限翻倍到7.5kHz实际能到3kHz到4kHz。所以提高PWM频率是压缩延迟影响的有效手段但开关损耗会增加需要权衡。注意这里估算的是延迟单独作用下的带宽上限实际设计还要考虑电流环采样噪声、PI调节器零点配置、数字控制离散化等因素不能直接拿这个数当设计目标。3. DSDU策略双采样单更新延迟压到半拍的关键3.1 DSDU的时序安排在峰值和过零各采一次DSDU的核心思路是在一个PWM周期内采样两次电流分别在计数器峰值和过零处各触发一次ADC。但PWM更新仍然只做一次通常安排在过零处。这样从过零处采样到过零处更新中间只隔了半个周期从峰值处采样到过零处更新也隔了半个周期。但关键在于更新后的电压在下一个半周期就能生效而不是等一个完整周期。更准确地说DSDU让电流环的计算频率和PWM更新频率都变成每个PWM周期两次因为采样两次可以算两次但PWM比较寄存器的更新还是每个周期一次。这样有效延迟从一拍降到半拍。用时间轴表示t0过零采样tT/2峰值计算完成并更新tT/2到T之间新电压作用。从采样到作用延迟T/2。3.2 半拍延迟带来的带宽提升实测数据对比我在一个PMSM控制项目上做过对比测试。同一套硬件PWM频率10kHz电机参数一致只改采样-更新策略。SSSU时电流环PI参数Kp0.8Ki200带宽实测约1.2kHz阶跃响应上升时间约300微秒超调15%。换成DSDU后保持PI参数不变带宽直接拉到2.2kHz上升时间降到160微秒超调反而降到8%。后来把Kp提到1.2带宽到2.8kHz依然稳定。这个提升不是线性的因为延迟减半相位滞后减半同样的相位裕度下允许的增益更高。实际调试时DSDU下可以把Kp提高50%到80%而不振荡。对于需要快速电流响应的应用比如伺服、机器人关节、高性能无人机电调DSDU几乎是标配。3.3 DSDU的实现代价ADC资源与计算负载翻倍DSDU不是没有代价。首先ADC要采样两次每次都要做Clarke/Park和PI运算MCU的计算负载翻倍。如果主频不够可能算不过来。其次两次采样意味着两次中断中断服务程序的执行时间要控制好不能影响下一次采样。第三两次采样点的电流值不同需要分别处理代码复杂度增加。我建议用DSDU时MCU主频至少跑到100MHz以上或者用带FPU和硬件三角函数加速的芯片。如果主频只有48MHz跑DSDU会比较吃力可能计算还没完成下一次采样就来了。另外两次采样的电流值可以用来做平均降低噪声但要注意平均会引入额外延迟需要权衡。提示DSDU下两次采样的电流值不要简单平均后只算一次PI那样等于浪费了一次采样。正确做法是每次采样都算一次PI更新一次内部状态但PWM更新只在过零处做。这样电流环的等效采样率翻倍对噪声抑制和动态响应都有好处。4. SSDU策略单采样双更新用更新频率换延迟4.1 SSDU的时序特点采样一次更新两次SSDU和DSDU刚好反过来每个PWM周期只采样一次电流但PWM更新做两次。采样通常在峰值处更新在峰值和过零处各一次。这样从采样到第一次更新延迟是半个周期从采样到第二次更新延迟是一个周期。但第二次更新用的是同一个采样值算出来的结果所以有效延迟还是半个周期。SSDU的逻辑是既然采样一次就能算出控制量那就尽快把它更新下去不用等一个完整周期。第一次更新在峰值处第二次更新在过零处两次更新之间用同一个控制量。这样电压作用的时间更早有效延迟从一拍降到半拍。4.2 SSDU与DSDU的对比谁更适合你的场景SSDU和DSDU都能把延迟压到半拍但适用场景不同。SSDU只采样一次计算负载低适合MCU资源紧张但又想提带宽的场景。DSDU采样两次计算负载高但电流环等效采样率翻倍对噪声抑制更好适合对电流波形质量要求高的场景。从延迟角度看两者有效延迟都是半拍带宽上限接近。但SSDU的第二次更新用的是同一个采样值如果电机动态变化快第二次更新的控制量可能已经过时。DSDU每次更新都用最新采样值动态响应更准。所以高速电机、动态要求高的场合优先DSDU低速、成本敏感的场合SSDU更合适。我做过一个对比同一台电机SSDU下电流环带宽2.0kHzDSDU下2.2kHz差距不大。但DSDU的电流THD低约20%因为采样率翻倍噪声抑制更好。所以如果对电流波形质量有要求多花点计算资源上DSDU是值得的。4.3 SSDU的隐藏坑更新时刻与采样噪声的冲突SSDU有一个容易被忽略的问题第二次更新在过零处而过零处往往是开关噪声最大的时刻。如果更新和采样都在过零处可能采样还没完成更新就来了导致采样值被干扰。所以SSDU的采样点通常选在峰值处更新在峰值和过零处避开采样和更新的冲突。另外SSDU的两次更新之间如果PWM比较寄存器的值变化太大可能导致占空比跳变引起电流纹波。实际调试时可以在两次更新之间加一点平滑或者限制每次更新的变化量。这个细节在数据手册里通常不会写但实际调试时会遇到。5. DSSU策略双采样单更新的另一种排列延迟与精度的平衡5.1 DSSU的时序定义采样双次更新单次但顺序不同DSSU和DSDU都是双采样单更新区别在于采样和更新的相对顺序。DSDU是先采样后更新DSSU可能是先更新后采样或者采样点分布在不同的位置。具体定义在不同文献里有差异但核心是两次采样分别用于不同的目的一次用于当前周期控制一次用于下一周期预测更新只在固定点做一次。DSSU的典型做法是在过零处采样一次用于计算当前周期的控制量并在峰值处更新在峰值处再采样一次用于计算下一周期的控制量并在下一个过零处更新。这样每个采样值都在半个周期内被使用有效延迟半拍同时两次采样都有明确用途不浪费。5.2 DSSU的延迟分析为什么它和DSDU延迟相近但实现不同DSSU的有效延迟也是半拍和DSDU接近。但DSSU的两次采样是交替使用的每次采样对应一次更新逻辑上更清晰。DSDU是两次采样都用于同一个更新点计算量集中在一次。DSSU把计算分散到两次每次计算量小对MCU的实时性要求更低。从带宽角度看两者上限接近。但DSSU的代码结构更复杂需要维护两个采样缓冲区和两个计算上下文。如果实现不好容易出错。我建议如果选DSSU一定要把状态机写清楚明确每个时刻用哪个采样值、算哪个控制量、更新到哪个寄存器。5.3 四种策略的延迟与带宽对照表策略采样次数/周期更新次数/周期有效延迟带宽上限10kHz PWM计算负载适用场景SSSU111拍约1.5kHz低低成本、低带宽DSDU210.5拍约2.5kHz高高性能伺服SSDU120.5拍约2.2kHz中资源紧张但需高带宽DSSU210.5拍约2.5kHz中高高精度、高动态这个表是基于我实际项目经验估算的具体数值会因MCU主频、代码效率、电机参数不同而变化。但相对关系是可靠的SSSU延迟最大其他三种都能把延迟压到半拍带宽提升明显。6. 工程选型与调试怎么根据项目需求选对策略6.1 从应用需求反推策略带宽、成本、开发周期三角权衡选策略不是越复杂越好要看项目需求。如果做的是普通风机、水泵电流环带宽500Hz就够SSSU完全胜任开发快、成本低。如果做伺服驱动器、机器人关节带宽要求2kHz以上必须上DSDU或DSSU。如果做无人机电调对重量和成本敏感但又要快速响应SSDU可能是折中方案。开发周期也要考虑。SSSU代码最简单一天就能调通。DSDU和DSSU需要仔细设计中断优先级、ADC触发时序、计算任务分配调试周期可能多出一周。如果项目时间紧先用SSSU跑通再逐步优化到DSDU是稳妥的路径。6.2 调试中的实测技巧用阶跃响应和频响扫频验证延迟调好策略后怎么验证延迟真的降下来了最直接的方法是做电流阶跃响应看上升时间和超调。延迟减半上升时间应该明显缩短。更精确的方法是做频响扫频用正弦波给定iq测实际iq的幅值和相位画出伯德图看相位滞后在截止频率处是多少。如果相位滞后比理论值大很多说明代码里有额外延迟比如中断响应慢、计算超时、PWM更新没对齐。我习惯用示波器同时抓采样触发信号、PWM更新信号和实际相电流直接看时间差。这个方法最直观能发现很多代码里看不出来的时序问题。比如有一次发现更新信号比预期晚了5微秒查了半天是中断优先级配置错了高优先级中断抢占了电流环中断。6.3 常见坑与规避中断优先级、ADC触发源、计算超时第一个坑是中断优先级。电流环中断必须是最高的不能被其他中断打断。如果通信中断、故障保护中断优先级更高电流环计算被延迟有效延迟就增加了。第二个坑是ADC触发源。要用PWM硬件触发不要用软件触发软件触发有抖动。第三个坑是计算超时。如果计算没在下一个更新点之前完成更新就会推迟延迟翻倍。建议在计算完成后翻转一个GPIO用示波器监控计算时间留足余量。还有一个坑是PWM死区。死区会引入额外的电压误差虽然不直接增加延迟但会影响电流环精度。死区补偿要做但补偿算法本身可能引入延迟需要权衡。提示调试时先把电流环带宽设低一点确保稳定再逐步提高每次提高后观察阶跃响应和电流波形。不要一上来就设很高容易炸管。7. 从代码到波形四种策略的落地实现要点7.1 中断服务程序的结构设计采样、计算、更新的顺序不管哪种策略中断服务程序的结构都要清晰。以DSDU为例中断在峰值和过零处各触发一次。峰值中断里做读ADC结果、Clarke/Park、PI运算、保存ud/uq。过零中断里做读ADC结果、Clarke/Park、PI运算、更新PWM寄存器。两次中断的计算逻辑相同但更新动作只在过零中断里做。代码里要用状态标志区分当前是峰值中断还是过零中断避免逻辑混乱。我见过有人把两次中断写成两个独立的ISR结果代码重复、维护困难。更好的做法是一个ISR用标志位判断当前时刻走不同分支。7.2 ADC触发与PWM同步的配置细节ADC触发要用PWM的硬件事件比如计数器等于峰值时触发ADC计数器等于过零时触发另一个ADC。STM32系列可以用TIM的CCR事件触发ADCTI的C2000系列有专门的SOC配置。配置时要注意ADC采样保持时间要足够让信号稳定但也不能太长否则错过更新点。PWM更新要用影子寄存器在过零或峰值时自动加载。不要直接写比较寄存器否则可能在周期中间更新导致波形畸变。影子寄存器的加载时刻要和ADC触发时刻配合好确保采样的是更新前的电流更新的是采样后算出的电压。7.3 计算负载优化用定点还是浮点用查表还是实时算如果MCU有FPU直接用浮点开发快、精度高。如果没有FPU用定点Q格式注意溢出和精度损失。Clarke/Park变换里的三角函数可以用查表加插值比实时算快很多。SVPWM的扇区判断和矢量作用时间计算也可以优化成查表或简化公式。我实测过在100MHz的M4核上DSDU策略下电流环ISR执行时间约3微秒包括ADC读取、Clarke/Park、PI、反Park、SVPWM。如果优化得好可以压到2微秒以内。这样在10kHz PWM下每个半周期50微秒计算时间占6%余量充足。如果ISR超过10微秒就要考虑优化或者降PWM频率。8. 个人经验那些数据手册不会告诉你的细节8.1 采样时刻的微小偏移对延迟的实际影响理论上采样在峰值处但实际ADC触发有延迟采样保持电路也有建立时间。如果触发信号到ADC实际采样之间有1微秒延迟在10kHz PWM下就是3.6度的相位误差。这个误差在低带宽时无所谓在高带宽时会影响相位裕度。我习惯在调试时用示波器测触发信号到实际采样点的时间差如果超过2微秒就要调整触发提前量。另外不同相的电流采样如果不在同一时刻Clarke变换会有误差。最好用两个ADC同时采样两相或者用采样保持同步。如果MCU只有一个ADC用交替采样要注意采样间隔不能太大否则低频时误差明显。8.2 不同MCU平台上的策略适配经验STM32F4系列用DSDU比较顺手TIM1的CH4可以触发ADC更新事件可以配影子寄存器。TI的C2000系列有专门的PWM和ADC同步机制DSDU和DSSU都很好实现。国产MCU里峰岹的芯片对FOC有硬件加速DSDU跑起来很轻松。如果用的是通用MCU没有硬件加速SSDU可能是更现实的选择。我建议选MCU时先看它有没有FOC专用外设比如硬件Clarke/Park、硬件SVPWM、ADC与PWM硬件同步。有这些外设DSDU和DSSU的实现难度会低很多。没有的话软件模拟这些功能会占用大量CPU时间可能得不偿失。8.3 从SSSU升级到DSDU的实操步骤与验证清单如果你现在用的是SSSU想升级到DSDU可以按这个步骤来。第一步确认MCU主频和ADC资源够用计算时间有余量。第二步修改ADC触发配置增加峰值处的触发。第三步修改ISR增加峰值中断的处理逻辑但更新动作仍然只在过零中断做。第四步用示波器确认两次采样都正常更新时刻正确。第五步逐步提高电流环带宽观察阶跃响应和电流波形。第六步如果振荡先降带宽再检查时序。验证清单采样触发信号是否与PWM同步、两次采样值是否合理、更新时刻是否在过零处、计算时间是否小于半个PWM周期、电流波形THD是否改善、阶跃响应上升时间是否缩短。全部通过说明升级成功。踩过几次坑之后我的体会是FOC电流环的延迟问题一半在时序设计一半在代码实现。四种策略没有绝对优劣关键看匹配。SSSU简单可靠DSDU性能最强SSDU和DSSU各有适用场景。把时序图画出

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑