ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

伺服电机电流环带宽与速度环PI参数整定实战指南

伺服电机电流环带宽与速度环PI参数整定实战指南 聊到伺服电机控制很多人第一反应就是调PID。你看网上求参数、问Ramp、试凑法的帖子九成都在纠结几个增益系数但真正把高动态伺服做出来的人都知道所谓“调PID”只是最外层那一步真正决定系统上限的是电流环带宽和速度环PI参数整定这套内功。这篇文章我不打算再泛泛讲PID原理而是从“电流环带宽”这条主线入手把速度环PI参数整定从头到尾拆开讲清楚告诉你为什么电流环带宽不够速度环怎么调都是白费劲以及每一步的实操方法、参数计算和现场避坑经验。适合谁来读如果你在做无刷直流电机、PMSM伺服、或者用STM32/DSP写FOC控制发现自己明明把PID“调得很顺手”但系统就是不够快、不够稳如果你已经会调电流环但对速度环参数整定没有底气不知道怎么判断“调好了”甚至你只是刚接触三环控制系统想看明白电流环、速度环、位置环之间到底怎么配合——这篇文章就是按我实际调伺服的经验写的照着一步步做基本能少走两个月弯路。1. 先把“三环”的关系捋清楚1.1 电流环、速度环、位置环到底谁听谁的伺服电机控制的底层结构是串级PID从内到外依次是电流环、速度环、位置环。电流环负责让电机的实际电流快速跟上电流指令它工作在最快的频率上速度环根据速度误差算出电流指令间接控制电机转速位置环在最外层根据位置误差算出速度指令。说白了越靠内的环节越接近“物理执行层”越靠外的环节越接近“策略调度层”。很多新人最容易犯的错误就是一上来三个环的参数一起调。比如现场有人带着一整张PID参数表速度环、位置环来回改改到后面发现只要位置环P一加大系统就抖速度环也跟着振荡到底是谁的问题完全分不清。这种情况十有八九是内环地基不稳。我的经验是电流环到速度环到位置环必须严格按顺序整定每一层在进入下一层之前都要先确认它本身是“干净”的否则你后续所有参数分析都是脏数据根本没法收敛。1.2 内环带宽决定外环上限为什么说电流环带宽是高动态伺服的地基这里有一个工程上非常重要的经验关系外环带宽大约只能做到内环带宽的1/5到1/10。举个例子如果电流环带宽做到1kHz那速度环带宽顶多做到100到200Hz如果电流环带宽只有300Hz速度环带宽超过30到60Hz就开始危险。你可以把系统理解成逐级响应外环给出指令内环去执行执行得越慢外环越不敢把指令给得太猛。这就是为什么你光去加大速度环比例增益期望响应变快结果往往是系统开始振荡——“不是速度环参数的问题是内环根本跟不上”。高动态伺服追求的“快”和“稳”首先取决于电流环能不能在几百微秒内把电流建立起来电流环带宽不够速度环用再大的增益也只是在使用一个不存在的性能空间。1.3 一个快速自测看现象定位拖后腿的环节现场我经常用一个分层判断法来快速定位问题在哪个环如果给电流指令阶跃电流反馈明显迟缓、像拉了个斜坡说明电流环带宽不足先回头整电流环如果电流反馈跟得很紧但速度反馈有固定频率的振荡或毛刺很多问题在速度环或者速度反馈本身噪声太大如果速度环已经调得比较快但位置跟随有滞后、转弯超调明显问题就在位置环和前馈策略上。用这个判断法把问题“分层”以后调试就不再是盲目试凑。你先知道是地基不牢还是楼层在晃再动手调参数时心里就有谱。这个方法花不了几分钟但能省下大量瞎调的时间我每次接手一个新伺服项目都会先做这个自测再开干。2. 电流环PI参数怎么算从电机参数到控制器增益2.1 先摸清楚电机参数否则后面全是空中楼阁电流环PI参数整定不是纯试凑它是可以从电机电气参数直接算出来的。所以在动手之前一定要先把基础参数摸清楚。电枢电阻R用万用表测直流电阻但要注意测的是绕组端子间电阻温度和接触电阻都会影响读数最好用LCR表在相近工况频率下测d/q轴电感L表贴式永磁电机可以直接近似LdLq用LCR表在1kHz左右测内置式电机需要区分Ld和Lq电流环参数建议按较大那个电感取保守设计反电动势系数或转矩常数Kt用于速度环和电流之间的换算一般电机手册会给出也可以通过空载发电实验测转动惯量J可以从厂家手册拿也可以通过阶跃电流加减速实验反推速度环整定需要它作为初值参考编码器分辨率直接影响速度反馈的噪声水平后面会详细讲到它对整定上限的影响。举个我调过的200W表贴电机例子额定电流6AR约1.2ΩL约1.8mHKt约0.19Nm/A转子带轻负载折算后J约3.6e-5 kg·m²PWM/电流采样频率10kHz。后面我会一直用这个例子做数值演示方便你对号入座算自己的电机。2.2 零极点对消法电流环PI参数为什么能一步算出来电流环的电气对象忽略反电动势和交叉耦合后就是电机绕组这个RL串联回路U R·i L·di/dt写成传递函数就是I(s) / U(s) 1 / (L·s R)这是一个典型的一阶惯性环节时间常数是L/R。对这样一个对象用PI控制器做闭环有一个非常经典的“零极点对消”设计法把PI控制器的零点对准被控对象的极点。PI控制器的传递函数是C(s) Kp Ki / s Kp·(s Ki/Kp) / s令零点与对象极点对消即Ki / Kp R / L这时整个电流环开环传递函数就化简成Gol(s) Kp / (L·s)你看开环变成一个纯积分器闭环之后就是一阶惯性系统闭环带宽频率是fc Kp / (2π·L)于是反推PI参数Kp 2π·fc·L Ki 2π·fc·R再用我的例子算一遍假如目标电流环带宽fc取1kHz那Kp 2×3.1416×1000×1.8e-3 ≈ 11.31 V/AKi 2×3.1416×1000×1.2 ≈ 7539.82 V/(A·s)。整定平台是10kHz控制频率算出来的积分时间常数Ti Kp / Ki L/R ≈ 1.5ms量级上也合理。这里必须说明白这个推导是简化模型忽略反电动势、电流采样延迟、PWM延迟和死区效应所以算出来的参数不能用完就扔但作为起点非常可靠。我实测过很多电机用这个公式算出来的电流环PI参数直接跑方波电流上升时间基本就在理论带宽对应的量级附近偏差通常不超过20%。这比你在现场瞎猜Kp、Ki靠谱得多。2.3 数字实现离散化、积分限幅和抗饱和算出来的是连续域PI参数但控制器是在DSP或MCU里跑数字PI所以要做离散化。控制频率通常就是PWM频率或它的整数倍比如10kHz控制周期T0.1ms。常用位置式PI离散化形式u_k Kp·e_k Ki·T·∑e_k也可以写成便于增量输出的递推形式u_k u_{k-1} Kp·(e_k - e_{k-1}) Ki·T·e_k我自己在写电机控制固件时更喜欢用位置式PI加积分限幅。因为电流环输出要限幅在母线电压允许范围内速度环输出要限幅在电流允许范围内直接用位置式可以顺带加“条件积分”策略当输出达到限幅值时冻结积分累积避免积分饱和把系统推向振荡。代码示意大概是这样的// 电流环PI输出限幅为 U_MAX float err ref - feedback; float prop Kp_cur * err; integral Ki_cur * err * T_control; if (output_saturated) { integral integral_before; // 条件积分饱和时冻结 } float output prop integral; if (output U_MAX) output U_MAX; if (output U_MIN) output U_MIN;注意里面一个细节饱和时我只恢复积分到饱和前一刻而不是直接把积分清零这样恢复时不会有突变。这个处理对速度环同样适用如果你用增量式PID也需要在输出端做限幅和积分状态管理只不过增量式的过饱和风险相对小一点后面专门讲。2.4 怎么验证电流环带宽真的达标了参数算完了总得证明它真的达到了设计值。我常用三种方法按成本从低到高第一种是阶跃响应法给电流环一个方波电流指令比如500Hz方波看实际电流跟踪波形。记录电流从10%上升到90%的时间Tr经验公式是fc ≈ 0.35 / Tr。如果实测Tr约0.35ms那带宽就大约在1kHz附近。这个方法简单直接现场五分钟内下结论。第二种是扫频法给电流指令叠加一个幅值很小比如额定电流的1%的正弦扫频信号从几Hz扫到2kHz同时用上位机记录指令和反馈用FFT算幅值比和相位差。当幅值比衰减到0.707倍即-3dB处的频率就是带宽。这个方法测量更准但需要能做FFT的工具比如用Vofa加脚本或者直接在MATLAB里离线分析。第三种是直接在驱动器或电机控制板的调试接口里加“辨识模式”让程序自动注入伪随机白噪声并记录数据后期离线算Bode图。这个方法适合批量调参和自动化产线配置前期搭工具麻烦一点但一次搭好后面都省事。实际操作中我的习惯是先用阶跃响应法快速确认量级如果和设计带宽差太多再用扫频细查是哪里引入的延迟。上了高动态项目后扫频工具会是标配因为它能看到相位裕度而不仅仅看幅值。3. 速度环PI参数整定手把手实操流程3.1 被控对象和带宽目标先记住这个比例速度环的被控对象从电流环的输出转矩电流到速度反馈本质是一个机械积分环节ω (Kt / (J·s)) · iq再往前串联电流环的闭环响应近似为带延迟的一阶低通。所以速度环设计的目标是在保证稳定裕度的前提下尽量把闭环带宽做高但不能高到触碰机械谐振或反馈噪声的雷区。开头说的经验值在这里就要用了速度环带宽通常取电流环带宽的1/5到1/10。我那个1000Hz电流环的例子速度环设计目标先定在100到200Hz。实际工程里做到150Hz对大多数点胶机、贴片机、机械臂关节这类设备已经很够用。不要盲目追求“越快越好”因为速度反馈往往来自编码器差分在低速段噪声很大带宽调太高就等于把噪声也放大了最后系统会在高频处啸叫。3.2 第一步只调速度环比例增益P速度环调试我建议先把积分项直接置0只用比例项找出系统稳定边界。具体流程是这样的给速度环一个小幅值速度阶跃比如目标转速300rpm从很小的Kp_v开始比如理论上限的1/5甚至更小看速度反馈曲线逐步增大Kp_v每一步做一次阶跃响应观察曲线是否出现振荡当你发现加大Kp之后系统开始持续等幅振荡或者有明显高频振铃记录此时的Kp为临界值Kp_crit最后把Kp_v调回Kp_crit的50%到70%作为后续带积分时的基础值。为什么要回退这么多因为临界振荡点意味着相位裕度已经接近0任何一点负载扰动或噪声都可能把它推向不稳定。回退到50%~70%后系统还有一定阻尼再靠积分、前馈去补精度和动态这个余量是必须留的。判断“振荡”不要盯着位置反馈要看速度反馈和电流指令。理想的速度阶跃响应是快速上升可能有1到2次轻微回摆然后平稳停在目标值电流指令在动态段出现一个尖峰随后迅速回落到稳态附近。如果你在速度反馈上看到固定频率的持续正弦波动哪怕幅值不大也别骗自己说“能忍”这往往就是带宽边界或机械谐振的前兆。我给自己的经验参考值先用公式Kp_v ≈ 2π·fsv·J/Kt估算起步比例增益其中fsv取设计速度环带宽比如150Hz。按例子数据算Kp_v ≈ 2×3.1416×150×3.6e-5 / 0.19 ≈ 0.18 A/(rad/s)这个值可以直接作为第一次试验点然后拿它乘以0.5和2再去试几步就能逼近临界点比从零一点一点加省时间。3.3 第二步再加积分项消除静态误差比例项调完以后系统通常有一个问题带恒定负载时转速会有静态误差或者稳定精度不够。这是就要上积分项。积分项的作用说白了就是“盯着长期存在的误差一点点把输出往上顶”直到误差归零。积分时间常数Ti从大到小试先取一个比较保守的值比如Ti 10 / (2π·fsv)左右用速度环路设计150Hz来算就是Ti大约10ms即Ki_v Kp_v / Ti ≈ 18A/(rad·s²)实际起点可以比这个再保守一倍做阶跃响应观察是否有低频缓慢摆动。如果有说明积分太强Ti要加大逐步减小Ti让静态误差消除得更快直到阶跃响应保持快且没有明显超调。对于“最优曲线”的判断我们常说速度环阶跃曲线应该是“一冲到位不冲过头太多静差为零”。具体一点上升时间应该在设计带宽对应的量级附近超调量控制在5%以内比较健康电流指令不应该出现持续的正弦波动。如果超调偏大优先检查Ti是不是太小其次再观察是否比例项也需要略微回调。这里有个很容易踩的坑积分项治标不治本。如果你发现静态误差很大要先确认是不是负载转矩引起的而不仅仅是“积分没调够”。如果是摩擦太大、负载太重光靠积分硬顶会让速度环变得迟钝甚至振荡。我的做法是先加一个基础的前馈补偿比如摩擦前馈、重力前馈再让积分只去处理剩下的残差这样系统动态和静态都能兼顾。3.4 第三步前馈怎么用为什么说它是“白拿”的动态性能很多人整定完PI就认为结束了其实前馈用得好高动态伺服才能拉开差距。前馈的核心思想是既然我们知道指令轨迹就可以预估系统需要什么样的输出提前给过去让反馈只去修正误差。位置环的速度前馈很简单目标速度本身已经知道把给定速度按一定比例叠加到速度环指令上能大幅减小位置跟随误差。原理上如果速度前馈比例是1.0理论上匀速段位置误差趋近于零。实际调试时从前馈系数0.6开始试逐渐加到1.0观察跟随误差是否显著变小如果出现超调或位置过冲就回调。加速度前馈更有意思它把目标加速度直接折算成转矩电流前馈给电流环iq_ff J · α_target / Kt还是用例子如果目标加速度α2000rad/s²J3.6e-5 kg·m²Kt0.19Nm/A那前馈电流大约0.38A。这个量看起来不大但对于高动态轨迹跟踪它能让电流环更快进入“预判”状态从而显著减小加减速段的跟随误差。加速度前馈的系数一般也是在0.6到1.0之间试前馈过强会造成位置超调过弱改善效果不明显。有人会问速度环内部能不能也加前馈准确说速度环内部加的是转矩补偿不是真正意义的速度前馈。更多时候高动态伺服还需要在电流环内部做反电动势前馈和d-q轴解耦前馈把旋转坐标系下的交叉耦合电压提前补偿掉这样电流环在大速度变化时才不会“打架”。想省事当然可以不加靠PI硬扛也能工作但大加减速时电流环会明显滞后速度环参数上限会因此下降不少。所以我的原则是能用模型算出来的东西就不要让反馈去死扛。4. 现场排查与工具箱我踩过的那些坑4.1 速度环啸叫、振荡、过冲怎么一步步排查现场最容易见到的三兄弟高频啸叫、低频振荡、动态过冲。很多人一看到就怀疑自己参数没调好其实原因往往没那么简单。高频啸叫一般频段在几百Hz到一两kHz听到的声音又尖又细多半是速度反馈中的编码器噪声被比例项放大或者电流环相位滞后太严重导致速度环在高频段没有稳定裕度。处理顺序先检查速度反馈是不是干净用示波器看编码器差分信号或采集出来的速度值如果有大量毛刺先修硬件滤波、屏蔽线和接线方式或者通过锁相环测速、低速滤波改善再去考虑降低一点速度环P。低频振荡大概在几Hz到几十Hz经常伴随明显的“哼声”或速度来回摆动。这种情况先检查积分是不是过强把Ti加大看有没有改善如果没用就要往机械上去想了——联轴器弹性、负载惯量比过高、皮带轮打滑都可能让系统出现机械谐振峰。速度环带宽一旦落在谐振峰附近就会把机械模态激起来。解决手段包括降低速度环带宽加陷波滤波器对谐振峰做衰减或者从机械侧改善连接刚度。动态过冲典型表现为大阶跃时冲过头再慢慢回来。这是阻尼不足的信号优先考虑轻微减小速度环比例增益或者检查是不是加速度前馈系数给大了。要记住一点速度环的过冲和电流环的过冲不一样电流环过冲多由积分饱和引起速度环过冲则多是机械阻尼比不足。我的一个长期习惯调伺服之前先空转不带负载跑一遍系统辨识拿到速度环对象的大致增益和纯延迟时间再看机械有没有明显谐振峰。有了这一层底数后面任何异常现象你都能快速判断是参数问题还是机械问题。4.2 增量式PID和位置式PID到底有什么区别什么时候用哪个关于PID实现形式很多人被增量式和位置式绕晕。先给结论在电机伺服控制里电流环和速度环我基本都用位置式PI加积分限幅位置环用P加前馈就够了增量式PID更多用在外设执行器、温控这些没有强抗积分饱和需求的场景。位置式PID的表达式u_k Kp·e_k Ki·T·∑e_k Kd·(e_k - e_{k-1}) / T它的特点是输出直接对应执行器位置积分项不断累积一旦出现输出限幅而不处理很容易积分饱和恢复时会有明显超调。所以使用位置式必须搭配积分限幅或条件积分。增量式PID的输出是控制量的增量Δu_k Kp·(e_k - e_{k-1}) Ki·T·e_k Kd·(e_k - 2e_{k-1} e_{k-2}) / T u_k u_{k-1} Δu_k增量式的优势是输出不会因为积分累积而瞬间爆表切换到手动模式时能做到一定程度上的无扰切换积分影响通过“增量”隐含体现在输出累加里。两相对比我用下面这张表帮你快速做选择量表对比项位置式PID增量式PID积分累积单独累积容易饱和隐含在输出累加中相对不容易长时间饱和抗积分饱和实现需要条件积分或限幅也需要输出限幅但突变风险低无扰切换需要额外处理天然较平滑调试直觉参数直观适合多环伺服增量含义不利于手工整定典型场景电流环、速度环、位置环温控、气动阀、无人机油门伺服等在电流环这种强限幅、强干扰的场合我始终坚持位置式PI加条件积分因为它让我能精确掌握积分当前值排查问题时一目了然。4.3 用Vofa和MATLAB PID Tuner辅助整定的实战经验调伺服不靠眼睛靠波形曲线。我现场调试几乎离不开串口示波器Vofa是免费工具里最顺手的之一。把给定速度、速度反馈、电流指令、电流反馈、占空比这些变量通过浮点格式输出到串口Vofa即时画出曲线能看到响应过程中每个瞬间的变化定位振荡源比只用耳朵听靠谱得多。用Vofa做阶跃测试的步骤很简单给速度指令发一个阶跃抓速度反馈、电流指令曲线保存下来逐段看。先看上升段是否平滑再看稳定段有没有残留振荡最后看电流指令的峰值是否在驱动器允许范围内。这个工具配合我前面说的带宽估计法基本能取代传统“听声音、摸电机”的土办法。MATLAB PID Tuner则适合在做仿真预研时使用。你可以先通过离线辨识得到速度环被控对象的近似传递函数然后在MATLAB PID Tuner里拖拽响应时间和鲁棒性滑块看参数变化的趋势再到真实电机上去验证。但务必记住仿真和现实的差异往往很大尤其是负载惯量、摩擦、信号延迟这些“看不见的东西”。仿真参数只能给出趋势和初值最终的PI参数必须跟在现场实测的阶跃响应走。我见过有人把MATLAB调出的参数直接灌进STM32或者驱动器结果系统愣是稳不住然后开始怀疑算法问题。其实很正常你建模时没考虑PWM延迟、电流环等效延迟、速度采样滞后真实系统的相位裕度会比模型差很多。我的做法是仿真只做方向性预研现场从仿真参数的一半开始试用实测曲线逐步逼近最优值。4.4 常见问题速查表建议直接截图保存实践里我做了这张速查表基本能覆盖伺服现场八成以上的异常情况。每次出问题先按表格对症状再动手改参数成功率比瞎试高得多现象可能原因排查与解决思路电流环阶跃跟踪慢电流环Kp太小或采样延迟过大确认延迟大小按公式提高fc设计值核对Kp计算电流环高频振荡/啸叫电流环Kp过大离散化相位裕度不足降低fc设计值检查积分限幅是否生效速度环高频振铃速度反馈噪声大或速度环P过大先做速度反馈滤波再降P或加低通滤波在反馈通道速度环低频摆动积分过强或机械谐振耦合加大Ti测量机械谐振频率并考虑陷波器速度静态误差消除慢积分弱或负载很大增大Ki同时考虑加摩擦/重力前馈而不是硬靠积分动态过冲严重阻尼不足或加速度前馈过大降低速度环P或者回调加速度前馈系数高速运行时电机抖动电流环延迟或PWM死区效应变大检查死区补偿提高PWM频率降低速度环带宽带上负载后参数全变负载惯量比过高机械连接松动核算惯量比必要时加装减速机构或刚度优化这张表背后有一条通用排查顺序先机械再反馈后控制器。机械不对参数再优化也白搭。编码器松动、联轴器间隙、台架共振这些都能让伺服系统表现成各种奇怪的PID问题。所以每次调参前我都会先把机械状态过一遍确认刚性平稳再谈参数。做了这么多年伺服驱动和运动控制我的体会是调PID这件事本质上不是去找一个“魔法数组”而是理解每个环节的物理约束把系统逐级打通。你花在电流环带宽和速度环PI参数整定上的功夫未来都会在设备的速度、精度和稳定性上加倍回报回来。最后再分享一个我自己的小习惯。每次调完一组速度环参数我都会做一次反向扫描把负载从轻载到重载、速度从低到高各测一遍记录下同一组参数下系统的表现变化范围。很多参数在单点调得好一到变负载工况就露馅尤其是高动态伺服工况从来不是固定的。你提前摸清参数对负载变化的敏感度后面做鲁棒性优化就心里有数。即便设备装到现场后工况变了你也能直接从速查表里快速找到解法。
返回列表