PID控制動手玩玩看

PID三個參數到底該怎麼調才好,真的是一門藝術。
雖然在Marlin韌體內有提供自動測量的功能,但是測得的結果,不見得能令人滿意,還是需要調整。可是到底該怎麼調整?從哪個參數開始動手?數值該增加還是該減小?會不會調整了這個,又需要回頭調整上一個?整個調整過程實在是亂七八糟,不容易理出頭緒。在加上實驗需要時間,可是有一直找不出最佳參數,實在有夠累人。
今天我不曉得是哪根筋不對,突然想說可以用excel模擬PID溫度控制,這樣就可以很快得得到實驗結果,增加調整PID參數的經驗。雖然沒辦法直接透過模擬獲得擠出頭加熱需要的PID參數,但是至少可以熟悉調整PID參數對溫度控制的影響。
下載excel並且開啟後,可以看到左上角有可調整的參數,中間是模擬過程,右邊有兩個模擬結果的圖表。模擬參數分成兩組,前面幾項是環境變數,最後三項是PID值。
受熱物比熱:每公克的受熱物值,需要多少卡的熱量,能上升1℃。水的比熱為1(卡/公克-℃)
受熱物質量:(這不用解釋吧...)
初始溫度:(這不用解釋吧...)
環境溫度:(這不用解釋吧...)
目標溫度:(這不用解釋吧...)
散熱常數:跟受熱物散熱速度相關的常數。系統散失的熱量,我這邊用 (當下溫度 - 環境溫度 ) x 散熱常數來模擬計算。散熱常數越大,系統散失熱量的速度就越快;系統溫度跟環境溫度差異越大,散失熱量也越快。
PID:分別是比例控制常數、機分控制常數、微分控制常數。
系統熱量供應:這邊相對應於加熱棒輸出多少百分比的功率。這邊"系統熱量供應"的模擬計算公式如下:
"這次的"系統熱量供應 =
        P x 這次取樣的溫度誤差 +
        I x 從系統開始以來每次取樣的溫度誤差總和 +
        D x (上次取樣的溫度誤差 - 這次取樣的溫度誤差)
P:比例控制常數。誤差值乘上P值,再加回系統熱量供應。
如果只有P,I跟D都設為零時,我覺得可以把他比喻成開車的時候,油門只會"直接"踩到某個定值,或是完全放掉。不會微調油門的力道。理論上只用比例控制,仍然可以讓溫度控制在目標溫度附近,但是震盪的狀況會比較嚴重。就像司機開車,總是猛踩油門,又猛踩剎車,車子會跑,速度也有,只是乘客會暈到死...

D:微分控制常數。溫度誤差對時間的曲線圖,是一個二維曲線。而對二維曲線微分的幾何意義,則是斜率。所以微分控制,實做上是取上一次採樣與這一次採樣的溫度誤差相減,再除以兩次採樣的時間間隔,算出斜率。用斜率乘上D,再加回系統熱量供應。
D值的效果,我會把他比喻成"提早減速"。當車子的速度接近司機想要維持的速度,速度還沒超過之前,有經驗的司機就會開始預先減小油門。不要等速度衝過頭再來踩剎車,減少車子加速減速的震盪,讓乘客舒適不暈車。不過該提早多少時間開始減速、該減多少速度不要減過頭或是減太少,就要靠D值的大小來調整了。

加入D "微分控制",可以讓系統較快穩定得達到目標溫度。

合適的D值,能讓溫度快速又穩定得恆定在目標溫度,而且沒有衝過頭的問題。

D值過大,提早剎車煞的力道多了,反而會讓系統不穩定得震盪。

再繼續加大D值,甚至會讓控制結果發散不能收斂到目標溫度。

I:積分控制常數。積分在這邊的概念,是把過去所有的誤差加總起來。積分控制當然就是拿積分控制常數乘以過去所有誤差的加總,,再加回系統熱量供應。
積分控制多用來校正穩態誤差。當溫度穩定下來之後,溫度離目標溫度仍然有些微的誤差,這就是"穩態誤差"。如果為了穩態誤差而調整P值,整個系統的穩定度會大受影響。積分控制靠累積穩態誤差,讓這個誤差的效應因累積而放大,再乘以機分控制常數,就可以消彌穩態誤差。
以上是我對PID控制的一些想法。特別注意我介紹的時候,順序是PDI,用意就是建議大家調整的時候,可以先來回調整P、D這兩個常數(I歸零),覺得系統穩定、滿意了,再針對"穩態誤差"來調整 I 積分控制常數。
修改受熱物的質量、比熱,可以觀察受熱系統熱含對PID控制的影響。修改散熱常數,則可以觀察系統散熱情況(多加了風扇吹喉管),對系統穩定的影響。透過模擬實驗,多改幾組環境,並且調出相對應的PID值,應該可以更熟悉PID控制這門藝術~

參考資料

關於PID的認識與討論?

PID控制動手玩玩看的更多相关文章

  1. 手把手教你看懂并理解Arduino PID控制库——引子

    介绍 本文主要依托于Brett Beauregard大神针对Arduino平台撰写的PID控制库Arduino PID Library及其对应的帮助博客Improving the Beginner’s ...

  2. 【iCore3应用开发平台】发布 iCore3 应用开发平台PID控制代码

    说明:1.本代码包包含FPGA和STM32F407两部分内容2.FPGA工程为出厂代码FPGA工程,版本为REV43.STM32F407为只含PID控制的ARM工程4.在使用风扇过程中,请勿将手伸入扇 ...

  3. SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定

    摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...

  4. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

  5. PID控制及整定算法

    一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...

  6. 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

      PID控制应该算是应用非常广泛的控制算法了.小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制.这里我们从原理上来理解PID控制. PID(proportion ...

  7. STM32—PID控制在直流电机中的应用

    文章目录 一.PID控制算法 1.什么是PID 2.PID系数的理解 Ⅰ.比例(P)部分 Ⅱ.积分(I)部分 Ⅲ.微分(D)部分 3.PID的数字化处理 二.位置闭环控制 三.速度闭环控制 一.PID ...

  8. 专家PID控制仿真学习

    目录 专家控制 专家系统 专家控制 学习笔记,用于记录学习 资料:<智能控制>(第四版)--刘金琨 专家系统 一.专家系统的定义 专家系统是一类包含知识和推理的智能计算机程序,其内部包含某 ...

  9. 两轮自平衡小车双闭环PID控制设计

                                                                                            两轮自平衡小车的研究意义 ...

随机推荐

  1. java string和int之间的相互转化

    java 中string和int之间的相互转化 1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); ...

  2. 虚拟机窗口太小_设置分辨率(win8/win7)

    虚拟机安装了WIN7和WIN8系统后,安装了VMware Tools后窗口还是较小,需要调整虚拟机系统中的分辨率. 桌面右键->屏幕分辨率->设置成与主机显示器分辨率相近的即可.

  3. linux关闭的时候出现异常: java.net.ConnectException: 拒绝连接 (Connection refused)

    这个时候: 需要先把java进程杀死. 然后再重新启动. 杀死进程: ps -aux | grep java 然后kill -9 进程 然后再重新启动.

  4. falsk 与 django cookie和session存、取、删的区别

    falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...

  5. java JDBC (七) org.apache.commons.dbutils 查询

    package cn.sasa.demo1; import java.sql.Connection; import java.sql.SQLException; import java.util.Li ...

  6. js中常用的offset client screen对象

    javascript中offsetWidth.clientWidth.width.scrollWidth.clientX.screenX.offsetX.pageX offsetWidth //返回元 ...

  7. 关于WARN Dispatcher:68 - Could not find action or result报错

    出现这个错 00:03:37,142 WARN Dispatcher:68 - Could not find action or result: /crm/linkMan_addLinkMan.act ...

  8. java多线程和.net多线程区别与联系

    在网上搜了好多,没有搜到这方面的内容,自己浅薄写点吧. 1..net和java的主线程和子线程,原理是类似的 (1).当子线程是前台线程时,主线程结束,子线程并未结束(还将继续运行,即进程未结束) ( ...

  9. [django]cbv方式

    cbv的方式 1.简单的url from django.views.generic import TemplateView path('', TemplateView.as_view(template ...

  10. (转)Marathon健康检查

    健康检查是需要每个应用运行监控检查任务的. 1.默认的健康检查是延迟才能让mesos知道任务的状态是否健康. 2.marathon提供一个任务资源的健康成员访问的REST API接口. 如果HTTP的 ...