尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

用运放搭建模拟PID控制器:从比例电路到完整实现

用运放搭建模拟PID控制器:从比例电路到完整实现 做模拟控制的兄弟应该都懂PID这个词只要一冒出来脑海里大概率飘过的是STM32、DSP、反正就是单片机里跑的那套离散算法。但我始终觉得搞控制的人如果只见过数字PID从来没用硬件把它搭出来一次对比例、积分、微分这三个词的理解总是隔着什么东西。我最早接触运放搭建的PID是在一台老式的温控台上那时候没有单片机全靠358和一堆阻容实现PID调节拨动电位器改变参数时输出曲线的反应是肉眼可见的那种感觉比在代码里改一个Kp值来得直观太多了。这篇文章我就把从比例电路到完整PID实现的整条路走一遍。用的全是基础电路同相/反相比例放大、积分、微分、加法器最后串成一套完整的线性PID控制器。适合刚把运放虚短虚断路演明白的人也适合写惯了数字PID、想回头补模拟控制底子的工程师。我尽量把每个环节的取值计算、为什么这么选、以及实际搭电路容易踩的坑都写出来。1. 整体思路与方案选型为什么用模拟运放搭PID1.1 模拟PID与数字PID的本质差异数字PID本质上是采样-计算-输出的循环有采样周期、有量化误差、有输出延时。而模拟PID从传感器信号进来那一刻开始比例、积分、微分三个通道是并联同时连续工作的没有所谓的“采样时刻”信号每一毫秒都在被实时处理。就是这本质区别导致了两者在调试感受上的差异。数字PID调参时你改一个Kp要等下一轮循环才能看到效果而模拟PID你拧电位器输出立刻跟着变活生生一个连续系统摆在你面前。所以对于理解控制理论模拟电路是绝佳的物理教具。1.2 方案选型反相结构还是同相结构搭建PID时我推荐整体采用反相结构。为什么关键在加法器的实现。PID输出 比例项 积分项 微分项。用运放实现加法最方便的方式就是反相加法器所有输入支路汇聚到虚地节点互不干扰。如果你前面用了同相放大器信号相位不反转但到了加法器这里反相求和后输出极性又被翻转过来了容易把自己绕晕。当然同相结构也有其用武之地比如要求输入阻抗极高的场合。但为了减少不必要的极性转换我建议整个信号链路保持统一的极性逻辑约定输入误差信号进入PID电路比例通道反相一次积分通道反相一次微分通道反相一次最后统一在加法器反向端合成。最终PID输出经过一级反相器恢复正极性。这样整个链路思路清晰调试的时候每个节点电压都能精准预测。1.3 供电方案与运放选型运放选型上我强烈建议新手先用LM324或用TL084或NE5532为什么因为它们便宜、引脚兼容、死死生生都不心疼。LM324单电源也能工作但模拟PID控制我还是建议双电源供电正负12V或正负15V因为误差信号是双向的输出需要摆到负电压一侧才能产生“反方向修正”的动作。供电方案我试过两种台式电源双路输出正负12V对地最省事。开关电源模块隔离出正负电压适合做嵌入式板卡。如果手头只有单电源也能通过人为构造一个VCC/2的虚拟地来做但动态范围会缩水一半而且信号一旦接近虚拟地附近LM324这类轨到轨能力较差的运放会出现明显非线性对控制精度很不利。1.4 我需要准备的核心元器件清单为了方便你照着搭建我直接列出我在实验台上使用的一套名单运放LM324四路封装一片就能完成整套PID实际用三路。电阻精度1%的金属膜电阻碳膜电阻温漂太大了控制电路不要省这钱。电位器10k多圈精密电位器用于比例、积分、微分的参数调节。电容CBB电容聚丙烯薄膜用于积分和微分不要用瓷片电容陶瓷电容的容量会随电压和温度漂移积分时间常数会乱。面包板或万用板面包板虽然方便但接触电阻和分布电容对微弱信号影响很大有条件还是焊在洞洞板上更稳。信号源、示波器、万用表这三样是调试必备。2. 核心细节解析PID每个环节对应的运放电路2.1 比例环节反相比例放大电路先看最基础的。反相比例放大电路是这个项目的单元模块。输入端电阻R1接误差信号反馈电阻Rf从输出接到反相输入端同相端接地。输出与输入的关系是Vout - (Rf / R1) * Vin比例增益Kp Rf / R1。为什么用反相而不是同相首先反相输入端具有虚地特性意味着输入阻抗约等于R1本身信号源的负载效应是确定的。其次反相输入端的钳位可以让多条输入支路在同一个节点叠加而不互相干扰这一步为后面的加法器铺路。实操中需要注意运放增益带宽积GBW的限制。假设你希望比例环节在10kHz处仍保持设定的增益LM324的GBW只有1.2MHz左右如果你设定Kp100那么有效工作带宽就只有1.2M/100 12kHz再往上增益就会滚降。对于大多数慢速控制对象温度、液位、电机转速完全够用但如果你要控制高频执行器请换成GBW更大的运放比如OP07或NE5532。2.2 积分环节反相积分电路反相积分电路结构输入电阻R连接误差信号反馈电容C从输出跨接回反相输入端。这个电路的传递函数是Vout - (1 / (R * C)) * ∫Vin dt积分时间常数Ti R * C。这个电路的核心是电容对电流的累积效应输入电流经过电阻流入虚地节点被电容持续累积只要输入不为0输出电压就一直朝一个方向移动直到运放饱和。这里有几个要点普通人容易忽略第一电容的初值问题。实际电路中你不希望上电瞬间积分输出直接冲向电源轨因为电容初始电压是不确定的。解决方法是并联一个电阻Rf在电容两端形成“有泄漏的积分器”低频增益被限制在一个有限值防止积分漂移。第二积分电容的材料选择。CBB电容的介质吸收系数低、容量稳定适合做模拟积分。电解电容漏电流太大根本不适合。第三如果你希望“积分保持”效果更好可以给积分电容并联一个高阻值或模拟开关复位信号一来就把电容放电这在地面测试里非常实用。2.3 微分环节反相微分电路及其改进理论上微分电路就是输入接电容C反馈接电阻R输出是输入信号的变化率乘以时间常数Td R*C。理想微分器的问题是它对高频噪声极敏感因为信号变化越快输出越大而噪声恰恰是高频分量。没有任何滤波器过滤时微分项几乎无法正常使用。我给微分环节做了一点改进在电容支路串联一个小电阻R1并且在反馈电阻两端并联一个小电容Cf。这样微分器的增益在高频段被限制在Rf/R1不再无限放大。这个结构本质上变成了一个“带高通滤波的放大器”在控制频段内呈现微分行为在噪声频段内被限幅。关于微分项的极性方向输入误差Ein为正时微分输出为负经过后续加法器反相后最终输出为正方向。所以微分通道的反相次数和其他通道保持一致。2.4 加法器三通道信号汇集到这里三个通道的输出都是反相电压接下来用一个反相加法器把它们加起来。反相加法器原理多个输入电阻Ri1、Ri2、Ri3并联接入反相端反馈电阻Rf跨接输出与反相端输出表达式为Vout - (Rf/Ri1 * V1 Rf/Ri2 * V2 Rf/Ri3 * V3)在PID电路中V1、V2、V3分别是比例、积分、微分三路信号。我采用的方案是让三路输出的原始信号幅度比例合适加法器只是把三路信号等权相加不做额外增益调整方便后期调试。加法器的反馈电阻值决定了整条PID环路的最终输出增益调试时我习惯把它调到一个适中的初始值例如把Rf设为10k。如果你希望PID输出范围是正负10V那么要保证三路信号叠加后幅度不超过这个范围。3. 实操接线与参数计算从一块面包板开始的完整PID3.1 搭建前的理论推演我建议先画一遍完整的直流路径推演不要一上来就插线。假设误差输入Ein范围为0~5V期望PID输出为0~10V电源为±12V。第一级误差信号先经过一个缓冲器电压跟随器用来隔离信号源内阻。这里用LM324的第一路。第二级缓冲器输出分成三路分别进入比例、积分、微分三个处理环节比例通道R1 10kRf 100kKp 10即当Ein 1V时比例输出为 -10V。积分通道R 100kC 1uFTi 0.1秒。这意味着输入1V持续0.1秒积分输出为 -1V。这个时间常数覆盖温控、液位等慢系统的调参范围。微分通道C 1uFR 100kTd 0.1秒。串联电阻R1 1k反馈并联电容Cf 0.1uF。这个选择让高频增益限制在100倍不至于放大噪声到失控。第三级加法器三路输出分别通过10k电阻接入加法器反相端反馈电阻Rf也取10k则输出为三路之和的相反数。第四级输出极性恢复加法器输出再经过一级反相器R 10kRf 10k增益为-1最终输出极性为正。如果你不在意极性这一级可以省略不少PID应用对极性要求并不严格只要判断好正负反馈方向即可。3.2 逐级组装与静态测试我的建议是先搭一级、测一级把每一级独立验证完毕后再连成一个环路。整套电路如果一次焊完直接上电出问题就非常难排查。第一步搭缓冲器输入一个直流电压测量输出是否等于输入误差应该在毫伏级。第二步搭比例通道输入1V直流调节电位器让Kp从1倍到20倍变化确认输出是精确的负极性倍数关系。同时换用正弦波输入观察波形是否发生畸变判断运放是否进入饱和。第三步搭积分通道输入1V直流阶跃测量输出变化斜率。理论斜率应是1/(R*C) 10V/s。如果你的积分输出斜率偏离理论值先检查电容容量是否准确CBB电容标称值1uF实测容量可能偏差5%到10%。第四步搭微分通道输入一个缓慢上升的斜坡信号微分输出应该是一个接近恒定的负电压幅度与斜率成正比。这时候你会在示波器上看到毛刺原因就是噪声被微分放大了这就是我们加了限幅电容的作用。第五步搭加法器和反相器将三路输出分别输入验证最终输出是三者之和的相反数的相反数也就是等于三者之和。3.3 闭环测试接上一个“模拟被控对象”光测开环还不够真正的PID是要闭环的。没有真实被控对象怎么办我经常用一阶RC低通电路模拟一个惯性被控对象PID输出经过一个大电阻和电容滤波得到的电压作为被控变量再用一个分压电阻把误差信号反馈回PID输入端。这样你就有了一个极简但完整的一阶闭环系统。闭环之后你可以做两个经典实验阶跃响应实验突然改变设定电压观察被控变量电容电压是否经过一段上升过程后稳定在设定值附近稳态误差是否被积分项消除。负载扰动实验在电容两端并入一个可变电阻增加负载电流观察电压跌落多少、多久恢复。这两个实验做完你对PID每个项在闭环中扮演的角色就会有肌肉记忆。4. 常见问题与参数调试实录我踩过的那些坑4.1 积分饱和输出砸到电源轨之后下不来这个问题是模拟PID最容易遇到的也是初学时最困惑的。现象描述被控变量长时间偏离设定值积分项输出一直往一个方向积积到运放输出饱和卡死在接近电源轨的电压上。即使误差后来反号了积分项仍然要从饱和电压往回收这段时间控制输出等于饱和值系统恢复极其迟钝甚至产生大幅超调。我在实际测试温控时遇到过加热器已经停止加热温度还在惯性爬升但积分项还在维持一个很大的输出导致过冲持续好几秒。应对方法有两种一是给积分电容并联一个泄放电阻让积分在信号反号时可以尽快回退二是在积分输入前加一个二极管限幅网络限制积分项的极端输出值。对于电路实验最简单有效的方法是将积分电容从1uF减小到0.47uF甚至0.22uF减小积分饱和的“蓄能”速度代价是系统对稳态误差的消除速度变慢但至少不会发生反复震荡。4.2 自激振荡输出变成高频锯齿波如果你在闭环测试中发现输出变成了几十kHz到几百kHz的高频振荡很可能不是被控对象在震荡而是运放电路自身自激了。模拟PID中有多个电容、多个反馈回路分布电容和电源耦合会产生无意中的正反馈环路。有几个经验判断和解决手段高频振荡一般直接怀疑电源退耦没做好。每个运放的电源引脚对地要加一个0.1uF电容尽量靠近引脚放置。积分和微分电容附近的走线要短避免形成大面积回路天线。LM324的压摆率很低所以高频振荡概率相对小如果你换NE5532它的GBW很大布线和电容选型对振荡的影响会更敏感。实在不行可以在加法器反馈电阻两端并联一个1nF到10nF的小电容压缩超高频增益。要谨慎这个电容会把整个PID环路的高频增益压下来过度加容易让系统响应变慢。4.3 运放参数对PID性能的影响失调电压、偏置电流、GBW、SR凡是看过运放数据手册必然见过失调电压、输入偏置电流、GBW、压摆率这几个参数但只有把它放进PID电路里你才真正意识到每个参数的分量。失调电压Vos进入PID电路相当于在误差信号上叠加了一个额外的直流偏置这会导致比例环节输出有一个固定的偏移即使误差为0输出也不为0。积分环节问题更严重积分会把失调电压也积分进去造成输出漂移甚至饱和。这也是为什么在PID项目中不能省掉同相端平衡电阻的原因它可以抵消输入偏置电流导致的误差但失调电压需要用外部调零电路或选Vos小的精密运放来解决。压摆率SR取决于运放输出变化的最快速度。LM324的压摆率只有0.5V/μs左右如果要输出10V阶跃需要20微秒。对于温度等慢控制这毫秒级别根本无感但对于快速机构的控制比如无人机舵机响应这个压摆率就完全不够用至少要选几十V/μs的运放比如TL084或OP07的改进型。4.4 参数调试思路不要蛮调模拟PID调参与数字PID没有任何本质区别核心逻辑都是“先比例、后积分、最后微分”我在教学过程中一直跟学生强调先把微分去掉积分电容短路或断开微分支路只调比例增益Kp直到输出开始震荡记录此时Kp值然后回退一半作为初始工作点。加入积分项从小时间常数逐步加大观察输出是否最终能消除稳态误差如果出现低频周期的反复振荡就是积分时间常数太小即积分强度太大。只有前两项调稳之后才谨慎加入微分项微分只是一个阻尼作用不要指望它代替比例回路去干活。这个过程和你在Simulink里按Ziegler-Nichols整定参数的心法是同一条道路只不过模拟电路里每个参数都有电阻阻值和电容容量可以拧手感完全不同。5. 实验改进方向与扩展实战5.1 从线性PID到带输出限幅的方案标准反相加法器输出没有限幅能力。如果你控制一个最大驱动电流有限的执行器最好在PID输出级后面再加一级带限幅的功率驱动电路。最简单的做法是在输出级用两只稳压二极管对地接成双向限幅或采用二极管电位器构成的预置限幅网络限制输出范围不超过执行器允许的输入范围。5.2 使用模拟开关实现参数远程切换实验室里调好了一组参数但实际不同工况下最优PID参数不一样怎么办一个实用方案是用模拟开关比如CD4066切换不同阻值的反馈电阻和积分电容微控制器通过GPIO控制模拟开关的通断实现参数远程切换。这在无需改装电路、不影响信号连续性的前提下把模拟PID变成了可编程参数控制器。5.3 把模拟PID接入真实被控对象的小经验如果你已经在我前面提到的“模拟被控对象”上验证成功想把它接到真实系统里我建议从低功率、惯性较大的对象开始例如温度控制一块加热片、一个热敏电阻、一个驱动MOS管和运算放大器PID板就能组成一套极简温控系统。接线时注意传感器信号与功率驱动部分的接地要单点汇聚避免大电流回路在信号地上产生压差。个人感受第一次用模拟PID控住一个真实对象并看到输出曲线稳定在设定点和第一次调通一个复杂的C语言控制代码成就感是完全不一样的。前者让你感觉到“整个环路的电流和电压都在按你的设计流动”这种物理层面的可视感是代码调试替代不了的。所以如果你手头正好有LM324和几个电阻电容我强烈建议顺手焊一块哪怕只是搭在面包板上整个过程中对运放的理解深度绝对会上一个台阶。5.4 一个值得长期保留的电路调试检查单上电后检查各运放电源引脚电压是否对称。用示波器看输出是否有几十kHz以上的高频杂波。开环测试时加入一个低频小幅正弦波观察输出波形是否有削底、削顶现象。积分通道测试时记录输出漂移速度判断失调和偏置电流是否在可接受范围内。闭环测试时先把积分和微分都旁路只保留纯比例确认系统能稳定再进行后续组合。修改任何电阻或电容后断电等待10秒再操作防止电容残留电荷给手一个惊喜。
返回列表