1. 用PID演算法實現溫度控制
第一步:把器件等各種實物連上...
第二步:開環,對PWM的控溫信號加階躍(改變PWM的占空比),由輸入輸出的結果大致得出加熱器的數學模型
第三部:由理論公式整定出PID參數
第四部:根據實際結果調節PID以達到你想要的指標
2. PID演算法,做恆溫箱使用,菜鳥不太懂,求教各位高手指導,謝謝
這個其實就是你怎樣計算目標值的問題,將你的保溫曲線畫出來,然後確定你需要多少個溫度點,以及每個溫度點的時間,然後在適當的時間改變PID程序的目標值即可,如常溫加熱到100℃保溫10分鍾,在加熱到200℃保溫20分鍾,那麼將PID的目標值設置到100℃,運行PID,當測量值到達100℃時開始計時,計時10分鍾後將PID的目標值改為200℃,當溫度到達200℃是再開始計時,計時20分鍾後進行下一段的運行或停機即可,復雜的保溫曲線也是同樣的道理,就是計算起來麻煩一些
3. 懂pid溫度控制的請進!!!!
我剛做的PID溫度控制的實驗,穩定後控制精度達到0.1度,多找找PID的資料,好好看看吧,我弄這個東西走了很多彎路,溫度控制選用「位置式」PID演算法,不要用增量式的。
就你提出的問題:
1,此程序我看不懂,但是其返回必定是UK也就是輸出比例UK(加熱力度),一般單位是%,也有‰甚至更高的解析度,(我的就是‰),比如你用0-10V電壓去加熱,那麼輸出UK=100時表示10V*100%=10V,輸出50就是10*50%=5V,就是你下一時刻要加熱的「力度」(增量式演算法輸出的是UK的變化量,就是上一時刻的UK加或減這個變化量來確定下一時刻的UK)
2,Kp比例系數,不是什麼量的比例,作用最後公式中講解
3,參數的確定是PID中最費時間的東西,要慢慢的通過實驗來確定,就是PID參數整定的過程,不是像你說的30到60就可以算出來的,這個你可以搜一下PID整定,網上介紹方法一搜一大把。不過可以肯定的是,很費時的過程。
最後公式:位置式:Uk=Kp*ek+Ki*(e1+e2+...+ek)+Kd*(ek-e(k-1))
e:差值,比如加熱中的設定-當前
ek:當前差值
e1,e2...:第1,2。。次差值
e(k-1):上一次差值
一般PID三個參數整定時首先會讓ID都=0,那麼Uk=Kp*ek
就是輸出等於Kp*當前差值,可以看出,隨著溫度的升高,ek逐漸減小,UK就逐漸減小,兩者成正比,Kp就是比例系數,還記得數學里的y=2x,2就是比例系數,那麼KP越大,同樣的ek時,UK越大,UK越大,加熱越快,加熱越快,控制越不穩定,波動大,反之,波動小,但加熱慢。選擇一個波動幅度能忍受的,加熱速度也可以的KP值就是你整定參數KP的過程
有問題繼續提出
4. 熟悉PID演算法的請進
在過程式控制制中,按偏差的比例(P)、積分(I)和微分(D)進行控制的PID控制器(亦稱PID調節器)是應用最為廣泛的一種自動控制器。 具有原理簡單,易於實現,適用面廣,控制參數相互獨立,參數的選定比較簡單等優點;而且在理論上可以證明,對於過程式控制制的典型對象——「一階滯後+純滯後」與「二階滯後+純滯後」的控制對象,PID控制器是一種最優控制。PID調節規律是連續系統動態品質校正的一種有效方法,它的參數整定方式簡便,結構改變靈活(PI、PD、…)。
PID參數整定:
(1) 比例系數Kc對系統性能的影響:
比例系數加大,使系統的動作靈敏,速度加快,穩態誤差減小。Kc偏大,振盪次數加多,調節時間加長。Kc太大時,系統會趨於不穩定。Kc太小,又會使系統的動作緩慢。Kc可以選負數,這主要是由執行機構、感測器以控制對象的特性決定的。如果Kc的符號選擇不當對象狀態(pv值)就會離控制目標的狀態(sv值)越來越遠,如果出現這樣的情況Kc的符號就一定要取反。
(2) 積分控制Ti對系統性能的影響:
積分作用使系統的穩定性下降,Ti小(積分作用強)會使系統不穩定,但能消除穩態誤差,提高系統的控制精度。
(3) 微分控制Td對系統性能的影響:
微分作用可以改善動態特性,Td偏大時,超調量較大,調節時間較短。Td偏小時,超調量也較大,調節時間也較長。只有Td合適,才能使超調量較小,減短調節時間。
5. 什麼是「PID演算法」
pid是工業控制上的一種控制演算法,其中p表示比例,i表示積分,d表示微分。以溫度控制的pid程序為例:
p(比例)表示在溫度設定值上下多少度的范圍內做比例動作,當溫度越高,功率越小,溫度越低,功率就越大,功率到底為多大,就看溫度偏差值和比例區間的大小按反比關系計算。
i(積分)也是一種比例,是溫度偏差值的累積值與設定的一個值之間的反比關系,但要注意何時將溫度偏差值的累積值清零。積分就好像當溫度比設定值低很多而你有覺得溫度升的慢的時候就使勁的加大功率一樣。
d(微分)是溫度變化快慢跟功率的比值,即當你覺得溫度上升的太快時,就降低功率,一阻止溫度上升過快,反之當溫度下降太快時,就加大功率以阻止溫度下降太快一樣。
給我郵箱我可以給你發一份pid溫度控製程序。
6. 請教單片機PWM控制加熱器用增量式PID,三個參數的選擇
uint ZKB; //定義占空比初始值
float zkc;
int kkk;
uint kp=4; //定義PID初始值
float ki=0.17;
uint kd=16;
uint uc=5000;
float ek;
float u_k;
float uk;
float uk1=0;
float ek1=0;
float ek2=0;
uchar click=0; //中斷次數計數器變數
uint zhouqi=0;
void deal(uint t) //加熱控制函數
{ TR0=1;
if(zhouqi==1) //進行PID演算法,求新的占空比
{
zhouqi=0;
ek=wen_c-t; //計算偏差
u_k=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2); //計算增量
uk=uk1+u_k;
zkc=100*uk/uc;
if (zkc>=95)
zkc=95;
kkk=(int)zkc ;
}
if(t>=wen_c) //大於設定值
shuchu=0; //輸出高電平
else //小於設定值
{
ZKB=(int)zkc; //調整新的脈寬定時,即新的占空比
if (click<=ZKB) // 判斷脈寬定時周期是否到?當小於占空比值時輸出高電平,高於時是低電平,從而實現占空比的調整
shuchu=1;
else
shuchu=0 ;
}
}
7. 單片機是怎麼用PID控制演算法實現對電加熱
那要看你計算出來的是什麼了,如果直接是一個電流,那麼直接用它來驅動加熱爐就行,如果是一個誤差值(理想值與真實值之差),那麼就要先計算出要是電爐達到理想溫度的電流值是多少,再用計算出的電流來驅動。希望能對你有幫助。
8. 水溫控制的PID演算法中怎樣控制加熱裝置
將PID輸出的信號轉換成脈寬信號就可以了。用脈寬信號驅動固態繼電器就可以了(電加熱)。如果是用蒸汽加熱可以用電磁閥
9. PID演算法控制溫度加熱系統,室溫(為防止分數流失,做成追加100分以上)
剛好前不久搞過PID,部分程序如下,僅供參考
/*==============================================================================
在使用單片機作為控制cpu時,請稍作簡化,具體的PID參數必須由具體對象通過實驗確定。
由於單片機的處理速度和ram資源的限制,一般不採用浮點數運算,而將所有參數全部用整數,
運算到最後再除以一個2的N次方數據(相當於移位),作類似定點數運算,可大大提高運算速度,
根據控制精度的不同要求,當精度要求很高時,注意保留移位引起的「余數」,做好余數補償。
這個程序只是一般常用pid演算法的基本架構,沒有包含輸入輸出處理部分。
==============================================================================*/
#include <string.h>
#include <stdio.h>
/*===============================================================================
PID Function
The PID function is used in mainly
control applications. PID Calc performs one iteration of the PID
algorithm.
While the PID function works, main is just a mmy program showing
a typical usage.
PID功能
在PID功能主要用於控制應用。 PID 計算器執行一個PID的迭代演算法。雖然PID功能的工程,
主要只是一個虛擬程序顯示一個典型的使用。
================================================================================*/
typedef struct PID {
double SetPoint; // 設定目標 Desired Value
double Proportion; // 比例常數 Proportional Const
double Integral; // 積分常數 Integral Const
double Derivative; // 微分常數 Derivative Const
double LastError; // Error[-1]
double PrevError; // Error[-2]
double SumError; // Sums of Errors
} PID;
/*================================ PID計算部分===============================*/
double PIDCalc( PID *pp, double NextPoint )
{
double dError, Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 積分
dError = pp->LastError - pp->PrevError; // 當前微分
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error // 比例項
+ pp->Integral * pp->SumError // 積分項
+ pp->Derivative * dError // 微分項
);
}
/*======================= 初始化的PID結構 Initialize PID Structure===========================*/
void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}
/*======================= 主程序 Main Program=======================================*/
double sensor (void) // 虛擬感測器功能 Dummy Sensor Function{ return 100.0;}
void actuator(double rDelta) // 虛擬驅動器功能 Dummy Actuator Function{}
void main(void)
{
PID sPID; // PID控制結構 PID Control Structure
double rOut; // PID響應(輸出) PID Response (Output)
double rIn; // PID反饋(輸入) PID Feedback (Input)
PIDInit ( &sPID ); // 初始化結構 Initialize Structure
sPID.Proportion = 0.5; // 設置PID系數 Set PID Coefficients
sPID.Integral = 0.5;
sPID.Derivative = 0.0;
sPID.SetPoint = 100.0; // 設置PID設定 Set PID Setpoint
for (;;)
{ // 模擬最多的PID處理 Mock Up of PID Processing
rIn = sensor (); // 讀取輸入 Read Input
rOut = PIDCalc ( &sPID,rIn ); // 執行的PID迭代 Perform PID Interation
actuator ( rOut ); // 所需的更改的影響 Effect Needed Changes
}
10. 剛接觸PID指令,現在有一程序通過PID指令控制固態繼電器實現加熱過程,程序這步看不懂,為什麼要用
這是一個轉換程序,將PID的輸出值轉換為加熱時間。其原理是在設置的時間段內(k2000),當PIDl輸出值>計數值時,輸出加熱。不同的PID輸出值對應不同的加熱時間與不加熱的時間。當PID輸出為0時,不加熱。50%時加熱與停止各一半的時間。這個數值的確定要根據系統的熱慣性來確定。並且要根據全部的程序才能准確的分析。