51單片機實現PID算法(溫度控制)

2021-01-08 電子產品世界

用整型變量來實現PID算法,由於是用整型數來做的,所以也不是很精確,但是對於很多的使用場合,這個精度也夠了,關於係數和採樣電壓全部是放大10倍處理的.所以精度不是很高. 但是也不是那麼低,大部分的場合都夠了. 實在覺得精度不夠, 可以再放大10倍或者100倍處理,但是要注意不超出整個數據類型的範圍就可以了.本程序包括PID計算和輸出兩部分.當偏差>10度全速加熱,偏差在10度以內為PID計算輸出.具體的參考代碼參見下面:*/

//================================================================
// pid.H
// Operation about PID algorithm procedure
// C51編譯器Keil 7.08
//================================================================
// 作者:zhoufeng
// Date :2007-08-06
// All rights reserved.
//================================================================

本文引用地址:http://www.eepw.com.cn/article/201611/321816.htm

#include
#include
typedefunsignedcharuint8;
typedefunsignedintuint16;
typedefunsignedlong intuint32;

voidPIDOutput ();
voidPIDOperation ();

typedef struct PIDValue
{
uint32Ek_Uint32[3];//差值保存,給定和反饋的差值
uint8EkFlag_Uint8[3];//符號,1則對應的為負數,0為對應的為正數
uint8KP_Uint8;
uint8KI_Uint8;
uint8KD_Uint8;
uint16Uk_Uint16;//上一時刻的控制電壓
uint16RK_Uint16;//設定值
uint16CK_Uint16;//實際值
}PIDValueStr;
PIDValueStrPID;
uint8out ;// 加熱輸出
uint8count;// 輸出時間單位計數器

voidPIDOperation (void)
{
uint32Temp[3];//中間臨時變量
uint32PostSum;//正數和
uint32NegSum;//負數和
Temp[0] = 0;
Temp[1] = 0;
Temp[2] = 0;
PostSum = 0;
NegSum= 0;
if( PID.RK_Uint16 > PID.CK_Uint16 )//設定值大於實際值否?
{
if( PID.RK_Uint16 - PID.CK_Uint16 >10 )//偏差大於10否?
{
PID.Uk_Uint16 = 100;}//偏差大於10為上限幅值輸出(全速加熱)
else
{
Temp[0] = PID.RK_Uint16 - PID.CK_Uint16;//偏差<=10,計算E(k)
PID.EkFlag_Uint8[1]=0;//E(k)為正數
//數值移位
PID.Ek_Uint32[2] = PID.Ek_Uint32[1];
PID.Ek_Uint32[1] = PID.Ek_Uint32[0];
PID.Ek_Uint32[0] = Temp[0];

if( PID.Ek_Uint32[0] >PID.Ek_Uint32[1] )//E(k)>E(k-1)否?
{
Temp[0]=PID.Ek_Uint32[0] - PID.Ek_Uint32[1];//E(k)>E(k-1)
PID.EkFlag_Uint8[0]=0;}//E(k)-E(k-1)為正數
else
{
Temp[0]=PID.Ek_Uint32[0] - PID.Ek_Uint32[1];//E(k)PID.EkFlag_Uint8[0]=1;}//E(k)-E(k-1)為負數

Temp[2]=PID.Ek_Uint32[1]*2 ;// 2E(k-1)
if( (PID.Ek_Uint32[0] PID.Ek_Uint32[2])>Temp[2] )//E(k-2) E(k)>2E(k-1)否?
{
Temp[2]=(PID.Ek_Uint32[0] PID.Ek_Uint32[2])-Temp[2];//E(k-2) E(k)>2E(k-1)
PID.EkFlag_Uint8[2]=0;}//E(k-2) E(k)-2E(k-1)為正數
else
{
Temp[2]=Temp[2]-(PID.Ek_Uint32[0] PID.Ek_Uint32[2]);//E(k-2) E(k)<2E(k-1)
PID.EkFlag_Uint8[2]=1;}//E(k-2) E(k)-2E(k-1)為負數

Temp[0] = (uint32)PID.KP_Uint8 * Temp[0];// KP*[E(k)-E(k-1)]
Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[0];// KI*E(k)
Temp[2] = (uint32)PID.KD_Uint8 * Temp[2];// KD*[E(k-2) E(k)-2E(k-1)]



if(PID.EkFlag_Uint8[0]==0)
PostSum = Temp[0];//正數和
else
NegSum = Temp[0];//負數和

if(PID.EkFlag_Uint8[1]==0)
PostSum = Temp[1];//正數和
else
;//空操作,E(K)>0

if(PID.EkFlag_Uint8[2]==0)
PostSum = Temp[2];//正數和
else
NegSum = Temp[2];//負數和

PostSum = (uint32)PID.Uk_Uint16;

if(PostSum > NegSum )// 是否控制量為正數
{ Temp[0] = PostSum - NegSum;
if( Temp[0] < 100 )//小於上限幅值則為計算值輸出
PID.Uk_Uint16 = (uint16)Temp[0];
else
PID.Uk_Uint16 = 100;//否則為上限幅值輸出
}
else//控制量輸出為負數,則輸出0(下限幅值輸出)
PID.Uk_Uint16 = 0;
}
}
else
{ PID.Uk_Uint16 = 0;}

}


voidPIDOutput (void)
{
staticint i;
i=PID.Uk_Uint16;
if(i==0)
out=1;
else out=0;
if((count )==5)//如定時中斷為40MS,40MS*5=0.2S(輸出時間單位),加熱周期20S(100等份)
{//每20S PID運算一次
count=0;
i--;
}
}


相關焦點

  • 51單片機+PID算法水溫控制系統設計
    本系統設計採用基於PID算法的單片機控制來實現水溫的調控。單片機控制部分採用AT89C51單片機為核心,採用軟體編程,實現用PID算法來控制PWM波的產生,繼而控制電爐的加熱來實現溫度控制。通過編程對PID各參數的調整,來達到提高加溫速度,減小超調的目的。
  • 基於AT89S51單片機的PID溫度控制系統設計
    溫度控制技術不僅在工業生產有著非常重要的作用,而且在日常生活中也起著至關重要的作用。本文對系統進行硬體和軟體的設計,在建立溫度控制系統數學模型的基礎之上,通過對PID控制的分析設計了系統控制器,完成了系統的軟、硬體調試工作。
  • pid算法控制溫度四大保養秘訣
    pid算法控制溫度四大保養秘訣 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度的使用安全規範說明
    pid算法控制溫度的使用安全規範說明 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度中變壓器的發熱及冷卻原理
    pid算法控制溫度中變壓器的發熱及冷卻原理   pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度引起供熱不足的原因分析
    pid算法控制溫度引起供熱不足的原因分析 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度常見的故障以及維護事項
    pid算法控制溫度常見的故障以及維護事項 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度防液壓衝擊的有效方法
    pid算法控制溫度防液壓衝擊的有效方法 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。詳情諮詢進~pid算法控制溫度如果用強光照射洩漏的部分很容易被發現?
  • pid算法控制溫度出現高壓報警怎麼處理
    pid算法控制溫度出現高壓報警怎麼處理 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度有哪些錯誤操作可能導致出現故障
    pid算法控制溫度有哪些錯誤操作可能導致出現故障 ,「12vugqe」pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • pid算法控制溫度關故障原因及排除方法
    pid算法控制溫度關故障原因及排除方法    pid算法控制溫度,找無錫冠亞,pid算法控制溫度可以適應負荷變化,寬溫度範圍,-120℃~350℃。蒸汽專用的控制閥,換熱器等,運行可靠,壽命長。
  • 基於51單片機的兩路溫度控制器的設計方案
    本方案中所設計的溫度控制器,採用AT89C51單片機作為內核,採用DS18B20作為溫度傳感器,通過四位LED顯示,通過循環掃描實現了兩路溫度的採集與顯示。
  • PID控制算法精華總結
    本文引用地址:http://www.eepw.com.cn/article/201808/386413.htm1.PID是閉環控制算法因此要實現PID算法,必須在硬體上具有閉環控制比如控制一個電機的轉速,就得有一個測量轉速的傳感器,並將結果反饋到控制路線上,下面也將以轉速控制為例。2.PID是比例(P)、積分(I)、微分(D)控制算法但並不是必須同時具備這三種算法,也可以是PD,PI,甚至只有P算法控制。
  • PID控制算法之精華
    1.PID是閉環控制算法  因此要實現PID算法,必須在硬體上具有閉環控制,就是得有反饋。比如控制一個電機的轉速,就得有一個測量轉速的傳感器,並將結果反饋到控制路線上,下面也將以轉速控制為例。  2.PID是比例(P)、積分(I)、微分(D)控制算法  但並不是必須同時具備這三種算法,也可以是PD,PI,甚至只有P算法控制。我以前對於閉環控制的一個最樸素的想法就只有P控制,將當前結果反饋回來,再與目標相減,為正的話,就減速,為負的話就加速。現在知道這只是最簡單的閉環控制算法。
  • 基於PID算法的速熱式飲水機控制器設計
    針對目前市場上的速熱式飲水機存在的溫度控制問題和幹燒現象,設計基於STC1 5F204單片機的溫控系統,以水箱水溫、出水水溫、電源電壓和水流量為反饋量的PID控制,結合外圍控制電路,實現對飲用水的快速加熱和水溫的控制。重點介紹了控制器硬體電路的設計和工作原理以及程序的結構和實現。
  • 6種常見的單片機數字濾波算法
    單片機主要作用是控制外圍的器件,並實現一定的通信和數據處理。但在某些特定場合,不可避免地要用到數學運算,儘管單片機並不擅長實現算法和進行複雜的運算。下面主要是介紹如何用單片機實現數字濾波。
  • C51實現PID算法代碼
    真正要用PID算法的時候,發現書上的代碼在我們51上來實現還不是那麼容易的事情。簡單的說來,就是不能直接調用。仔細分析你可以發現,教材上的、網上現行的PID實現的C語言代碼幾乎都是用浮點型的數據來做的,可以想像,如果我們的計算使用浮點數據,那我們的51單片機來運行的話會有多痛苦。所以,本人自己琢磨著弄了一個整型變量來實現了PID算法,由於是用整型數來做的,所以也不是很精確,但是對於很多的使用場合,這個精度也夠了。關於係數和採樣電壓全部是放大10倍處理的。
  • 51單片機與esp8266例程實現的LED無線控制
    一、關於51單片機和無線WIFI模塊的接線方面   RXD、TXD、GND和51單片機的TXD、RXD、GND接好,模塊其他引腳均為高電平,電源VCC是3.3V左右(兩節1.5v乾電池),本人由於沒有穩壓模塊,偷懶了當時使用5V的直流源,測試結果目前沒有問題(不過不建議啊!)
  • 51單片機、STM32單片機、PIC單片機性能對比
    51單片機 應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel推出,由於其典型的結構和完善的總線專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代「經典」,為以後的其它單片機的發展奠定了基礎。
  • pid控制器的優點在溫度控制系統在真空鍍膜機冷卻應用
    pid控制器的優點在溫度控制系統在真空鍍膜機冷卻應用 ,「k1udj」   無錫冠亞恆溫製冷技術有限公司致力於致力於製冷加熱控溫系統、超低溫冷凍機、VOCs冷凝回收裝置等生產和銷售,pid控制器的優點在溫度控制系統,操作簡單方便,價格合理,如有需要,歡迎選購!