ARTICLE DETAIL

资讯详情

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

分段PID、积分分离与死区补偿实现伺服热压机±1%压力控制

分段PID、积分分离与死区补偿实现伺服热压机±1%压力控制 做设备调试这些年伺服热压机的压力控制一直是个“看着简单、做起来头疼”的活。明明伺服电机定位精度那么高怎么换成压力输出就各种不听话压力爬升半天拉不上去、接近目标值就猛冲过头、保压阶段又像抽风一样上下抖——这些我都遇到过最后答案几乎都指向同一套组合拳分段PID、积分分离加死区补偿。这篇文章就把我在伺服热压机±1%压力控制这件事上的整套实战思路写出来包括为什么要用这三板斧、每个参数怎么定、调试现场会遇到哪些坑适合正在做压力闭环的电气工程师和调试工程师参考。1. 伺服热压机压力控制的难点拆解1.1 热压工艺对压力控制的核心诉求伺服热压机应用很广锂电池极片热压整形、FPC补强压合、多层板脉冲热压、半导体封装里的热压键合以及各种橡胶、薄膜类材料的压合。这类设备的共性要求是压头在指定温度下以指定压力压住产品保持一段指定时间然后卸压。压力不稳、超调、爬行直接反映到产品上是厚度不均、结合强度波动、溢胶或者压痕。压力控制的目标拆开看有三个加压过程快速、到位不超调、保压无波动。客户拿±1%去验收时通常关注的是保压阶段的压力波动和最终压力稳定值与设定值的偏差。比如设定500kg实际稳定在495~505kg之间算合格。这个要求对液压热压机来说相当苛刻液压系统油温变化、阀芯死区都会让压力飘但伺服电动缸做压力闭环只要控制算法到位是可以稳定压在这条线内的。1.2 ±1%精度为什么不容易很多人觉得伺服电机加个压力传感器再套个PID不就行了可真做起来会发现几个麻烦热压机传动链长。电机→减速机→丝杠→压头中间有减速机背隙、丝杠弹性变形、导轨摩擦力这些部件传递力时不是刚性的压力环的模型是非线性的。低速时摩擦力突变。压头刚到产品表面附近时速度很低静摩擦和动摩擦切换造成压力不连续电机明明在走压力却卡住不动然后突然窜一下。传感器噪声和机械振动。压力传感器直接安装在压头附近压机机架振动、变频器噪声都会叠加到信号上滤波滤多了相位滞后控制环就容易发颤。压力建立是弹性过程。对很多材料压力和压深的关系不是线性的材料从软变硬的过程中增益变化很大。用固定PID参数会出现低压阶段太慢、接近高压时猛冲的情况。这几个坑叠加在一起就注定了单环固定参数的PID很难同时满足快速性和±1%的稳定精度。分段PID解决的是“增益变化”问题积分分离解决的是“大误差冲击”问题死区补偿解决的是“摩擦和间隙”问题。三个配合起来才是完整的解。2. 三种核心策略的原理与实战价值2.1 分段PID让参数跟随工况变化分段PID的思路很直白既然不同压力阶段对象的增益不一样那就为每个阶段准备一套PID参数按当前压力和设定值的差值自动切换。在伺服热压机上我一般分成三段或四段。以目标压力500kg为例低压段0~80%设定压力这时压头还没有压实或刚开始压实系统刚性好、增益低可以给大Kp、小Ki、不用Kd目标是快速逼近。预压段80%~95%材料开始明显受压变形位置小变化就会引起压力大变化增益明显上升。Kp要降下来一档Ki先不打开否则容易冲过去。保压段95%~100%误差很小积分起作用消除静差Kp继续调小Kd可以稍微加一点抑制残余振荡。分段切换要加滞回避免压力在切换临界点附近抖动导致参数频繁切换。比如88%切到第二段回落到86%才切回第一段。这个滞回宽度按压力传感器噪声级别来定一般取设定值的2~3%。不然的话传感器噪声0.5%就足够让参数在切换点来回蹦压力最后稳不住。2.2 积分分离先保证稳定再消除静差积分环节本来是消除静差的功臣但在大误差启动阶段却是灾难。误差500kg时积分项几个周期就累积满等到压力接近目标积分里存的“旧账”还在往外吐于是压力过了头。这就像一个人欠了一屁股债手里有点钱就得先还旧账于是生活反而过不好。积分分离做的就是误差大时切断积分通道只让比例和微分出力误差进入小范围后再把积分接回来。关键的参数是积分生效阈值。经验值取设定值的1%~3%伺服热压机我一般取2%左右。比如500kg设定误差小于10kg才开始积分。还有一个细节积分重新接入时容易因为积分初值跳变产生冲击所以积分项要限幅而且误差大的时候可以选择把积分清零或者保持我习惯清零逻辑最简单。限幅值按扭矩饱和的20%~30%设防止积分在保压阶段把输出憋爆。实际操作中积分限幅设小了静差消不掉设大了又会在某些临界工况下顶到扭矩上限这两种情况我都遇到过。2.3 死区补偿死区是压力控制精度的隐形杀手标题里特别提到的电机死区补偿算法值得多花点篇幅讲。死区包含两层电机驱动侧的死区和机械传动侧的死区。电机驱动侧变频器/伺服驱动器IGBT开关存在死区时间低速轻载时会造成电压损失输出扭矩和指令之间出现非线性机械传动侧减速机背隙和丝杠间隙在换向时非常明显正转改反转时电机要先把间隙走完压力才会变化这在保压阶段压力微调时特别致命。针对机械换向死区常用死区补偿的办法是检测到控制方向翻转时叠加一个偏置扭矩先把丝杠和减速机的间隙“顶住”让压力能快速重新响应。这个补偿值可以从g_backlash_comp参数里写入方向翻转瞬间叠加一次即可。针对摩擦死区可以在误差小于一定阈值接近目标压力时输出一个固定方向的很小偏置帮助压头克服静摩擦。注意这个偏置不能太大否则会让压力超出控制目标。经验是从额定扭矩的1%开始试验慢慢加直到压力稳定误差最小为止。3. 从硬件选型到控制实现的实操指南3.1 传感器与执行机构的选型要点要做±1%压力控制硬件是地基。传感器建议选稳定性好、抗偏载能力强的轮辐式或S型拉压力传感器量程要留余量实际最大压力占量程的50%~80%比较合适。传感器精度至少0.1%FS这样传到控制环至少能“看清”压力变化。采样率方面PLC或控制器的压力采样周期最好在1ms~2ms再慢压力环的带宽就不够了。执行机构方面伺服电机建议带高精度编码器配高刚性行星减速机或直驱丝杠。减速机背隙要小最好选用额定背隙低于3弧分的型号丝杠导程和电机转速匹配好保证压头在保压阶段能以极低速度微动而不爬行。伺服驱动器的速度环带宽要高压力环在最外层内部的速度环/电流环响应快压力环才好调。有些项目图便宜用了普通减速机背隙太大死区补偿怎么调都补不回来最后只能换硬件那才是真的花钱买教训。3.2 压力闭环的搭建方式压力闭环有两种常见搭法外部压力环压力传感器信号进PLC或者上位控制器控制器算PID输出扭矩指令给伺服。这种最灵活分段PID、积分分离、死区补偿都能随意写我用得最多。驱动器内置压力闭环部分高端伺服支持把压力传感器信号直接接到驱动器在驱动器内部做力闭环。优点是响应快但分段逻辑和死区补偿写起来不灵活适合简单压装场景。建议优先用外部压力环。热压机控制周期短1ms~2ms一般PLC处理压力环没问题。压力环输出给伺服驱动器时用扭矩模式或速度模式。扭矩模式最直接但要注意扭矩波动速度模式更平稳我在实际项目中两种都试过对绝大多数热压机外部压力环扭矩模式是最好调的组合。扭矩波动大的场合比如齿轮传动间隙带来周期性负载变化用速度模式加外部压力环反而更稳。3.3 一个可直接参考的控制逻辑代码结构这里给一个简化版本的C语言压力控制逻辑包含了分段PID、积分分离、死区补偿读者可以根据自己控制器的语法迁移。// 压力闭环控制周期 dt 1ms float dt 0.001f; float pressure_pid_control(void) { float target g_target_pressure; // 设定压力 float current get_loadcell_force(); // 当前压力传感器读数 float error target - current; float output 0.0f; // 1. 分段PID参数选择 float kp, ki, kd; if (current target * 0.80f) { // 低压段 kp 0.50f; ki 0.0f; kd 0.0f; } else if (current target * 0.95f) { // 预压段 kp 0.28f; ki 0.0f; kd 0.002f; } else { // 保压段 kp 0.15f; ki 0.01f; kd 0.001f; } // 2. 积分分离 float integ_limit target * 0.02f; // 2%误差阈值 if (fabsf(error) integ_limit) { g_integ error * dt; float out_limit 0.10f; // 积分限幅 if (g_integ out_limit) g_integ out_limit; if (g_integ -out_limit) g_integ -out_limit; } else { g_integ 0.0f; } // 3. PID计算 float d_err (error - g_last_error) / dt; output kp * error ki * g_integ kd * d_err; // 4. 死区补偿 // 4.1 换向死区补偿方向翻转时叠加补偿 if (g_last_output 0 output 0) { output g_backlash_comp; // 换向补偿值 } else if (g_last_output 0 output 0) { output - g_backlash_comp; } // 4.2 摩擦死区补偿小误差时输出爬行偏置 float fric_deadzone target * 0.01f; if (fabsf(error) fric_deadzone) { if (error 0) output g_fric_comp; else if (error 0) output - g_fric_comp; } g_last_error error; g_last_output output; // 输出扭矩给伺服限幅 if (output g_torque_limit) output g_torque_limit; if (output -g_torque_limit) output -g_torque_limit; return output; }说明几个要点分段切换用当前位置与目标压力的比例简单可靠压力上升过程中会自动走完三段。积分分离阈值和摩擦死区补偿的阈值不要重叠太多我通常积分阈值取2%摩擦补偿阈值取1%。不然小误差时积分和偏置会打架。换向补偿值不能一直加方向翻转瞬间加一次或者用一个短时间的脉冲否则在保压阶段输出正负交替时会把压力顶出目标区间。这个代码是单环压力控制验证用的实际工程还需要加压力前馈、位置限位、温度联动保护等。4. 参数整定与调试实录4.1 五步完成基础PID整定死区补偿和分段参数不能一上来就拍脑袋我的调试顺序是第一步先做开环测试。不给PID直接给电机一个固定扭矩指令看压力从0到设定值的开环响应记录时间常数和是否有明显爬行。这一步能摸清系统的大概增益。如果开环本身就有严重爬行后面控制算法再强也白搭。第二步先把分段PID临时简化为单段关闭积分和微分只调比例。给一个阶跃目标压力Kp从很小开始加观察压力爬升过程会不会出现振荡。出现振荡就退回去一点找到一个快速但不振荡的Kp基准值。第三步在Kp基准值的50%~70%基础上把积分接回来。Ki从Kp/20开始开始逐步增加到Kp/5上下。观察误差能否稳定收敛到±1%以内。加积分后如果压力出现缓慢波动把Ki往回调。第四步加入微分。热压机压力环一般不强行需要微分只有在传感器噪声不大、压力有高频振铃时才用。Kd从很小慢慢加到振铃消失就停别贪多。第五步恢复分段PID把前面得到的参数分别填入三段再按阶跃测试结果微调。这一步通常要来回改三轮左右才能把三段切换磨顺。4.2 分段切换点和积分分离阈值的确定分段切换点不要按物理压力值去死记要按“对象增益是否发生突变”来选。如果压的是锂电池电芯材料在压到一定深度后突然变硬压力增益会明显上升切换点就设在变硬的位置前一点。不确定的话可以用一个小幅的测试信号观察压力变化率找到明显的非线性拐点。积分分离阈值设太大积分作用只剩很小一段静差消除不了设太小误差稍大就切断积分保压段会有小幅静差。我的经验是在设定值的1.5%~3%之间试先设2%看保压稳定后误差是否小于目标。还差一点就调小出现过冲就往大调。切换滞回也要一起设。我见过一些设备切换点压力附近传感器有0.5%的噪声导致参数在分段点疯狂切换压力出现周期性抖动。解决就是加2%左右的滞回宽度别让控制参数跳来跳去。提示参数整定的核心原则是“一步只动一个参数”。很多人一上来就同时改Kp、Ki、Kd改乱了根本不知道是哪个参数引起的振荡。我每次只调一个值记录前后波形对比调试效率会高很多。4.3 死区补偿参数的处理方法死区补偿参数调试用一个非常有效的方法换向测试。让压头压到目标压力稳定后把目标微调降低0.5%观察压力跟随情况。正常情况下压力应该很快降到新目标如果出现明显迟缓就说明换向死区在作怪。这时候把g_backlash_comp从0开始慢慢加每加一次重复测试直到压力能在一个控制周期内开始响应。摩擦爬行测试在低压段让压力目标在零点附近缓慢增减观察压头是否出现一顿一顿的爬行。如果有就在小误差范围内加摩擦补偿偏置。注意补偿值方向必须和误差方向一致加反了会把系统搞振荡。死区补偿调完有个明显现象保压段的压力波动会减小而且目标微调时压力响应变快。如果补偿值过大反而会在目标附近出现持续的微振那种情况压缩补偿值就行。我在某台设备上试过摩擦补偿从1%往2%加时压力开始抖动退回1.5%就稳了这种临界值只能靠现场调。5. 典型问题与排查方法实录5.1 压力爬升缓慢现象设定500kg加压阶段压力上升很慢甚至卡在半路不动。排查思路先确认是不是PID参数太保守。Kp太小压力爬不起来把低压段Kp按步骤往上调。检查伺服扭矩限幅。很多设备调试时扭矩限幅默认设50%压力环输出被限住了自然爬升慢。把扭矩限幅放开到额定扭矩的100%机械允许范围内。检查是否有积分分离阈值设置过小。如果误差还很大就被切断积分虽然理论上有P项在但实际摩擦阻力会让压力停在某个位置。把积分分离阈值适当放大。5.2 超调与保压段压力波动现象压力冲过目标5%以上或者保压阶段压力像波浪一样波动。排查思路超调基本是Kp过大或积分累积过多。先检查保压段参数Kp降低积分分离阈值可以调小让积分更早关闭还有一种情况是微分通道噪声太大把微分先关掉看是否改善。保压波动常见原因是传感器噪声经微分放大。滤波时间常数加大或者减少Kd。另一个原因是机械振动的共振点在压力环带宽范围内可以在压力环输出端加一个低通滤波截止频率设在5~10Hz。5.3 应力松弛导致的压力下降这个在热压工艺里特别常见压头压住产品后材料内部应力慢慢释放压力会逐渐下降。PID虽然能慢慢补回来但如果补偿太慢保压曲线会呈现一个明显的“V”字影响工艺一致性。我的处理办法保压阶段引入一个小比例前馈Kp_press按压力下降趋势叠加一个缓慢增加的扭矩偏置速度匹配应力松弛速度。这个方法需要在保压阶段多吃几次数据找到应力松弛的时间常数。这个不算死区补偿但在热压机里非常实用能显著改善保压曲线的平直度。5.4 问题速查表现象可能原因处理方式压力爬升慢Kp过小 / 扭矩限幅 / 摩擦死区大增大Kp放开扭矩限幅加摩擦补偿到位超调Kp过大 / 积分饱和分段压低Kp启用积分分离保压波动微分噪声 / 机构共振加大滤波降低Kd输出端低通换向迟缓背隙 / 丝杠间隙换向死区补偿压力泄后压低应力松弛保压阶段平缓增加扭矩偏置最后分享一个经验如果你正在被热压机压力波动问题折磨先别急着换伺服和传感器多数情况下是控制参数没有调到位。我甚至有次只把积分分离阈值从3%改到1.5%保压误差就从±1.8%压到了±0.8%。算法这个东西看起来不如换硬件直观但往往是最省钱、也最考验功力的地方。伺服热压机实现±1%压力控制本质上就是把对象特性摸清楚再让分段PID、积分分离、死区补偿各司其职一步一步来多半能压进1%以内。
返回列表