第4章 自整定算法概览
说到PID自整定,圈子里流传着好几套“心法”。
你想想看,一个黑箱系统,不知道热床的热容、热阻,也不知道环境温度怎么变,却要自动算出靠谱的Kp、Ki、Kd——这本身就很“魔法”。
但魔法背后是扎实的控制理论。今天我就带你快速扫一遍主流的自整定流派,然后看看Marlin固件到底选了哪条路。
4.1 三大主流自整定算法
我个人习惯把自整定算法分成三类:Ziegler-Nichols频率响应法、继电器反馈法、基于模型的自整定。它们各有脾气,适用场景也不同。
4.2 Ziegler-Nichols 法(经典但暴烈)
Ziegler-Nichols法,圈内常简写为Z-N法。1942年提出的老方法,但至今仍在工业界硬朗地活着。
做法很简单:先把系统打成开环,给一个阶跃输入,看响应曲线。或者闭环下慢慢增大比例增益,直到系统等幅振荡——这时候的增益叫临界增益Ku,振荡周期叫临界周期Tu。然后查表算出PID参数。
优点: 不需要系统模型,操作直观。
缺点: 容易把系统推到振荡边缘,对热床这种大惯性对象来说,超调可能很大。我在项目里试过一次,热床温度直接冲过目标20度,吓得我赶紧切了手动。
4.3 继电器反馈法(Aström–Hägglund 改良)
继电器反馈法,本质上是对Z-N法的温柔改良。它不把系统推到持续振荡,而是用一根“继电器”代替比例控制器——输出只在两个值之间跳变(比如全开或全关)。
系统会自己产生一个稳定的极限环振荡,从振荡波形里提取Ku和Tu。整个过程温和很多,而且抗干扰能力强。
💡 我个人特别喜欢继电器反馈法的一点: 它不需要你手动去旋那个临界增益,固件自己就能完成闭环辨识。Marlin正是看中了这一点——安全、可靠、适合嵌入式跑。
4.4 基于模型的自整定(高端玩法)
这条路更“学术”。先通过系统辨识得到热床的传递函数(通常是一阶惯性加纯滞后),然后基于模型直接计算PID参数。好处是可以做到自适应,环境变了模型跟着变。
但代价也很明显:计算量大,需要足够的RAM和Flash,而且辨识过程如果激励不够,模型会跑偏。我在一个工业温控项目里试过,效果确实好,但3D打印机这种资源受限的MCU,跑起来有点吃力。
4.5 Marlin 固件选择了哪条路?
直接说结论:Marlin 走的是继电器反馈法 + Ziegler-Nichols 查表。
具体来说,Marlin 使用继电器反馈法让热床产生稳定的极限环振荡,然后测量振荡的幅度和周期,计算出临界增益Ku和临界周期Tu,最后套用Z-N整定公式得到Kp、Ki、Kd。
⚠️ 注意: Marlin 并没有直接用Z-N的开环阶跃法,而是用继电器反馈法做闭环辨识。这一点很多开发者会搞混。我曾经在论坛上看到有人把Marlin的自整定直接叫“Z-N法”,其实不准确——应该是“继电器反馈+Z-N公式”。
为什么Marlin选这条路?我分析有三个原因:
- 嵌入式友好: 继电器反馈法只需要一个比较器逻辑,不需要矩阵运算或浮点模型,8位AVR都能跑。
- 鲁棒性强: 热床是典型的慢热大惯性系统,继电器反馈产生的极限环很稳定,不容易受噪声干扰。
- 社区验证: 从Marlin 1.x到2.x,这套方法经过了无数打印机的实战检验,参数可靠。
下面这张表帮你快速对比三种方法在热床场景下的表现:
| 特性 | Z-N 频率法 | 继电器反馈法 | 基于模型法 |
|---|---|---|---|
| 是否需要模型 | 否 | 否 | 是 |
| 计算开销 | 低 | 低 | 中~高 |
| 抗干扰能力 | 弱 | 中 | 强(模型准的话) |
| 超调风险 | 高 | 中低 | 低 |
| Marlin 是否采用 | 否(直接) | 是(核心) | 否 |
🔧 避坑指南: 我曾经在调试一台大尺寸热床时,发现继电器反馈法产生的极限环不对称——加热快、冷却慢。后来才意识到,这是因为热床的加热功率和自然冷却速率差异太大。Marlin 的代码里其实有处理这个不对称的逻辑(通过调整继电器滞环),后面章节我会带你一行行看。
好了,概览就到这里。你心里应该有个地图了:
自整定不是只有一种方法,Marlin 选的是“继电器反馈 + Z-N 公式”这条务实路线。接下来的章节,我们会一头扎进 Marlin 源码,看看这个算法到底是怎么一行行实现的。