尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

第187篇 串级PID——位置环+速度环的双环控制设计

第187篇 串级PID——位置环+速度环的双环控制设计 上篇讲了前馈控制你应该已经意识到实际控制系统往往不是一个PID搞定一切。需要同时控制位置和速度时单环PID捉襟见肘。位置和速度是两个不同量纲的物理量一个PID很难同时兼顾精度和响应速度。串级PID就是为解决这个问题——用内外两个环分别处理不同层次的变量。外环位置环输出速度指令内环速度环输出力矩或电流指令。今天把串级PID的原理、设计和调参讲清楚。这是工业界最常用的控制架构之一面试频率很高。为什么要用串级结构先看单环PID的问题。假设你要控制一个电机转到指定角度。单环做法是位置误差直接通过PID算出电机电压。问题在哪第一位置和速度的动态特性差很多。位置变化慢积分关系速度变化快。一个PID控制器很难同时处理好两个时间尺度的问题。第二单环PID的抗扰动能力差。比如负载突然变化位置环要等位置偏差积累到一定程度才能反应响应太慢。串级结构的思路是把控制任务分层。外环管大方向位置内环管快速响应速度。外环的输出是内环的目标值内环的输出才是最终控制量。目标位置 → [位置环PID] → 目标速度 → [速度环PID] → 电机电压 ↑ 测量速度 ← 电机/编码器这个结构的好处是速度环能快速响应负载扰动因为速度变化比位置快位置环只需要给出大方向的指令不需要操心快速动态。串级PID的代码实现class CascadePID: 串级PID位置环(外环) 速度环(内环) def __init__(self, pos_kp5.0, pos_ki0.1, pos_kd0.5, vel_kp2.0, vel_ki0.5, vel_kd0.0, max_vel10.0, max_out100.0): self.pos_kp, self.pos_ki, self.pos_kd pos_kp, pos_ki, pos_kd self.vel_kp, self.vel_ki, self.vel_kd vel_kp, vel_ki, vel_kd self.pos_int, self.vel_int 0.0, 0.0 self.pos_prev_e, self.vel_prev_e 0.0, 0.0 self.max_vel, self.max_out max_vel, max_out def update(self, target_pos, meas_pos, meas_vel, dt): # 外环位置环 → 输出目标速度 pos_e target_pos - meas_pos self.pos_int max(-50, min(50, self.pos_int pos_e*dt)) pos_d (pos_e - self.pos_prev_e) / dt target_vel max(-self.max_vel, min(self.max_vel, self.pos_kp*pos_e self.pos_ki*self.pos_int self.pos_kd*pos_d)) self.pos_prev_e pos_e # 内环速度环 → 输出电机电压 vel_e target_vel - meas_vel self.vel_int max(-100, min(100, self.vel_int vel_e*dt)) vel_d (vel_e - self.vel_prev_e) / dt output max(-self.max_out, min(self.max_out, self.vel_kp*vel_e self.vel_ki*self.vel_int self.vel_kd*vel_d)) self.vel_prev_e vel_e return output注意几个关键设计点位置环输出要限幅。位置环的输出是速度指令必须有物理意义的上限。不然位置误差很大时位置环会输出一个荒谬的速度值。速度环的采样频率要高于位置环。速度变化比位置快内环需要更快的响应。工程上内环频率一般是外环的5-10倍。比如位置环100Hz速度环500Hz-1kHz。两个环都要加积分限幅。抗积分饱和在串级结构里同样重要而且内外环都可能饱和。串级PID的调参方法串级PID的调参比单环复杂一点但有固定的套路先内后外。第一步先调内环速度环。把外环断开直接给速度环一个速度阶跃目标。调速度环的Kp、Ki、Kd直到速度响应满意快速、无明显超调。第二步再调外环位置环。把外环接上内环保持调好的参数。调位置环的Kp、Ki、Kd直到位置响应满意。为什么先内后外因为内环是外环的执行器。内环调好了对外环来说就是一个快速的随动系统。外环设计时可以把内环近似成一个增益为1的环节如果内环调得足够好这样外环的调参就简化成了单环PID调参。def tune_cascade(): 串级PID调参流程 # 第一步调速度环外环断开 vel_pid PID(kp0.5, ki1.0, kd0.0) # 给速度阶跃调参直到满意 # ... # 第二步调位置环内环保持 pos_pid PID(kp3.0, ki0.1, kd0.2) # 给位置阶跃调参直到满意 # ...之前面试一家做伺服电机的公司面试官问串级PID你怎么调的我说先内后外。先把速度环调好让速度响应快速且稳定。然后接上位置环调位置环参数。面试官追问内环调到什么程度算好了我说速度阶跃响应的上升时间要小于外环期望响应时间的1/5超调小于5%。这样内环对外环来说就足够快了。串级结构的扩展三环控制工业界很多场景用三环。比如机器人关节控制位置环 → 速度环 → 电流环 → PWM电流环最内环响应最快电气时间常数远小于机械时间常数。调参顺序电流环→速度环→位置环先内后外。面试实战串级PID怎么聊面试官问你了解串级PID吗你要讲清楚三点为什么要串级分层控制、不同时间尺度、怎么实现外环输出是内环目标、怎么调参先内后外。建议这样回答串级PID把控制任务分层外环管慢变量位置内环管快变量速度。内环快速响应扰动外环保证稳态精度。调参顺序是先内后外——先断开外环调内环内环满意后接上外环调外环。内环的带宽要远大于外环一般5-10倍。面试官追问为什么不能先调外环你可以说外环的动态依赖于内环的响应。如果内环没调好外环看到的执行器是不稳定的调出来的参数没有意义。就像你连发动机都没装好就去调方向盘没意义。之前面试一家人形机器人公司面试官问你的关节控制用的什么架构我说串级PID位置环速度环电流环三环。面试官问三个环的频率分别是多少我说电流环10kHz速度环1kHz位置环100Hz。面试官点了点头——电气动态最快机械动态最慢。面试官又问位置环Kp怎么选的我说先只用P控制Kp从0.5往上加Kp3时响应满意超调5%左右。然后加一点I消稳态误差D没加因为位置信号噪声大。串级PID是工业控制的标准架构几乎你在机器人、数控机床、无人机里看到的控制系统都是串级结构。理解串级设计的核心思想——分层控制、先内后外、带宽逐级递减——是面试中展示控制工程能力的关键。总结一下串级PID用内外环分别处理不同时间尺度的变量外环管慢变量位置内环管快变量速度。调参顺序是先内后外内环带宽要远大于外环5-10倍。位置环输出要限幅两个环都要加积分限幅。需要更多环时如三环也是同样的思路层层嵌套。把PID系列吃透你的控制理论基础就很扎实了。下一篇开始进入控制理论的新领域——状态空间方法。从传递函数到矩阵描述这是现代控制理论的基础。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第186篇 前馈控制——提升跟踪精度的补充手段下一篇预告第188篇 状态空间方法——从传递函数到矩阵描述有任何问题欢迎评论区留言我会尽量回复。
返回列表