PID算法在STM32上的實(shí)現(xiàn)_第1頁
PID算法在STM32上的實(shí)現(xiàn)_第2頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 PID算法在STM32上的實(shí)現(xiàn)PID調(diào)節(jié)算法在STM32上的實(shí)現(xiàn)()PID控制算法(P:例 I:積分D:微分)()先先說明原理,使的是數(shù)字PID算法,模擬PID算法在計(jì)算機(jī)這樣的系統(tǒng)中是不能夠直接使的,數(shù)字PID算法分為位置式PID控制算法和增量式PID控制算法,那么下從原理上說明這兩種算法(三)原理分析如圖(四)從上圖中我們可以得到定義定義變量戶設(shè)定值: SV當(dāng)前值(實(shí)際值): PV偏差: E = SV - PV(五)如果我們在段時(shí)間內(nèi)就從傳感器讀取個(gè)值,那么我們就可以得到個(gè)實(shí)際值的數(shù)據(jù)序列,,那么我們也會得到個(gè)偏差值的序列.讀取時(shí)間:t(1) t(2)-t(k-1) t(k)讀取到的值:

2、 X(1) X(2)-X(k-1)X(k)偏差值:E(1) E(2)-E(k-1)E(k)那么我們從偏差值中可以知道:E(X) 0 說明未達(dá)標(biāo)E(X)= 0 說明正好達(dá)標(biāo)E(X) 0說明超標(biāo)(六)例控制(P),作:對偏差起到及時(shí)反映的作,旦產(chǎn)偏差,控制器即做出反映.定義:例系數(shù):Kp(根據(jù)系統(tǒng)進(jìn)調(diào)節(jié))例輸出:POUT= Kp * E(k) POUT = Kp * E(k) + OUT0 OUT0說明:OUT0是防E(K) = 0 時(shí)候例控制不作,所以添加個(gè)OUT0進(jìn)去,OUT0可以根據(jù)系統(tǒng)定義Kp說明:如果我們得到個(gè)偏差之后,將偏差進(jìn)放或者縮來讓控制器進(jìn)控制(七)積分控制(I),作:消除靜差.

3、從上我們得到偏差序列:偏差值: E(1) E(2)-E(k-1)E(k)定義,歷史偏差值之和:S(k) = E(1) + E(2) + . + E(k-1) + E(K)定義,積分輸出:IOUT= Kp * S(k) + OUT0)微分控制(D),作:反映偏差信號的變化趨勢.從上我們得到偏差序列:偏差值: E(1) E(2)-E(k-1)E(k)定義,偏差之差:D(k)= E(k) - E(k-1)定義,微分輸出:DOUT = Kp * D(k) + OUT0(九)那么我們從上就能得出PID的控制算法PIDOUT = POUT + IOUT + DOUT = (Kp * E(k) + OUT0

4、) + (Kp * S(k) + OUT0) + (Kp * D(k) +OUT0)= Kp * (E(k) + S(k) + D(k))+ OUT0OUT0防PIDOUT = 0 時(shí)候算法還有輸出,防失去控控制例(P):考慮當(dāng)前積分(I):考慮歷史微分(D):考慮未來()位置式PID,上只是簡單的說明了下原理,那么實(shí)際的數(shù)字PID控制算法中Ti:積分常數(shù)TD:微分常數(shù)T:計(jì)算周期上兩個(gè)是變化后的積分和微分的那個(gè),那么我們把上的兩個(gè)替換到第九點(diǎn)中,我們就得到位置上PIDOUT的公式,兩個(gè)式是樣的()增量式PID,本次基礎(chǔ)上加上多少偏差:OUT ()上的只是PID的原理說明,那么數(shù)字PID的公式

5、是(三)那么我們將上的公式通過通過C語寫出來1. 位置式PID#ifndef _pid_#define _pid_#include stm32f10 x_conf.h#define#define#defineMODEL_PMODEL_PIMODEL_PID123typedef structu8 choose_model;/使哪個(gè)模式調(diào)節(jié)float Sv;float Pv;/戶設(shè)定值/當(dāng)前值,實(shí)際值float Kp;float T;/例系數(shù)/PID計(jì)算周期-采樣周期u16 Tdata; /判斷PID周期到?jīng)]到float Ti;/積分時(shí)間常數(shù)/微分系數(shù)float Td; float Ek;/本次偏

6、差float Ek_1;float SEk;/上次偏差/歷史偏差之和float Iout;float Pout;float Dout;/積分輸出/例輸出/微分輸出float OUT0;float OUT;/個(gè)維持的輸出,防失控/計(jì)數(shù)最終得到的值u16 pwmcycle;/pwm周期PID;extern PID pid; /存放PID算法所需要的數(shù)據(jù)void PID_Calc(void); /pid計(jì)算void PID_Init(void);/PID初始化#endif#include pid.h#include PWM_Config.h#include USART_Config.h /USART

7、設(shè)置PID pid; /存放PID算法所需要的數(shù)據(jù)void PID_Init()pid.choose_model = MODEL_PID;pid.T=330;/采樣周期,定時(shí)器使1ms,則最執(zhí)PID的周期為330mspid.Sv=280;pid.Kp=0.5;pid.Ti=180;pid.Td=1;/戶設(shè)定值/例系數(shù)/積分時(shí)間/微分時(shí)間pid.OUT0=0;/個(gè)維持的輸出pid.pwmcycle = 330; /PWM的周期void PID_Calc() /pid計(jì)算float DelEk;float ti,ki;float td;/本次和上次偏差,最近兩次偏差之差float kd;float

8、 out;if(pid.Tdata pid.pwmcycle)/不能PWM周期,最就是全嗎pid.OUT=pid.pwmcycle;else if(out0)/值不能為負(fù)數(shù)pid.OUT=pid.OUT0;elsepid.OUT=out;printf(實(shí)際輸出使的pid.OUT:t%drn,(int)pid.OUT) ;pid.Ek_1=pid.Ek; /更新偏差Turn_Angle(int)pid.OUT);/輸出PWM 2.增量式PID#ifndef _pid_#define _pid_#include stm32f10 x_conf.h#define#define#defineMODEL

9、_PMODEL_PIMODEL_PID123typedef structu8 choose_model; /使哪個(gè)模式調(diào)節(jié)float curr;float set;/當(dāng)前值/設(shè)定值float En;/當(dāng)前時(shí)刻float En_1;float En_2;/前時(shí)刻/前時(shí)刻float Kp;float T;/例系數(shù)/采樣周期-控制周期,每隔T控制器輸出次PID運(yùn)算結(jié)果u16 Tdata;float Ti;/判斷PID周期到?jīng)]到/積分時(shí)間常數(shù)float Td;/微分時(shí)間常數(shù)float Dout;float OUT0;/增量PID計(jì)算本次應(yīng)該輸出的增量值-本次計(jì)算的結(jié)果/個(gè)維持的輸出,防失控short

10、currpwm;u16 pwmcycle;/當(dāng)前的pwm寬度/pwm周期PID;extern u8 STATUS;extern PID pid;void PIDParament_Init(void); /*增量式PID初始化*/void pid_calc(void);/*pid計(jì)算 并輸出*/#endif#include pid.h#include PWM_Config.h#include USART_Config.h /USART設(shè)置PID pid;void PIDParament_Init() /pid.choose_model = MODEL_PID;pid.T=330;/采樣周期,定時(shí)

11、器使1ms,則最執(zhí)PID的周期為330mspid.set =280;pid.Kp=0.5;/戶設(shè)定值/例系數(shù) pid.Ti=40;pid.Td=10;pid.OUT0=0;/微分系數(shù)常數(shù)/積分時(shí)間常數(shù)/個(gè)維持的輸出pid.pwmcycle = 330;/PWM的周期void pid_calc() /pid?float dk1;float dk2;float t1,t2,t3;if(pid.Tdata pid.pwmcycle)/算出的值取值,肯定是在0-pid.pwmcycle之間,不然的話PWM怎么輸出pid.currpwm=pid.pwmcycle;if(pid.currpwm0)pid.

12、currpwm=0; printf(實(shí)際輸出使的OUT:t%drn,(int)pid.currpwm) ;pid.En_2=pid.En_1;pid.En_1=pid.En;Turn_Angle(pid.currpwm);/輸出PWM(五)上我們貼出來位置式PID算法和增量式PID算法的核部分了,但是上的理論上可以直接移植,添加些還沒有定義的變量就好了,下是具體的演程PID算法整定()先在使PID算法之前先進(jìn)基礎(chǔ)的設(shè)置1. PWM正脈沖控制輸出開2. 傳感器曲線隨著PWM占空越越3. 傳感器在環(huán)境下情況下最低數(shù)據(jù) ,和最數(shù)據(jù)。 設(shè)定值不能超過這兩個(gè)范圍()湊試法的基本法是:對參數(shù)實(shí)先例,后積分

13、,再微分的整定步踩具體步驟如下:1)先先只整定例部分。將例系數(shù)Kp由變,觀察系統(tǒng)響應(yīng)的變化情況,直到得到反應(yīng)快、超調(diào)的響應(yīng)曲線。如果系統(tǒng)沒有靜差或靜差到允許的范圍內(nèi),那么只需要例控制器即可滿要求。2)整定積分時(shí)間常數(shù)。在例控制下系統(tǒng)的靜差不滿設(shè)計(jì)要求時(shí),則需要采積分環(huán)節(jié)來消除靜差。整定時(shí),先置積分時(shí)間Ti為較值,并將經(jīng)第步整定很到的例系數(shù)略為縮(如縮為原值的4/5),觀察系統(tǒng)響應(yīng)的情況,然后根據(jù)觀察的情況來減積分時(shí)間常數(shù),同時(shí)例系數(shù)也可能縮,使系統(tǒng)消除靜差的同時(shí)能夠獲得良好的動態(tài)性值在此過程中,在此過程可根據(jù)響應(yīng)曲線的好壞反復(fù)改變例系數(shù)與積分時(shí)間常數(shù),以期得到滿意的控制過程與整定參數(shù)。3)整定

14、微分時(shí)間常數(shù)。若使例積分控制器消除了靜差,但動態(tài)過程經(jīng)反復(fù)調(diào)勝仍不能滿意(主要是響應(yīng)速度達(dá)不到要求),則可加微分環(huán)節(jié),構(gòu)成PID控制器。整定時(shí)先置.較的微分時(shí)間常數(shù),同時(shí)例系數(shù)略微減、 積分時(shí)間常數(shù)略微增,觀察系統(tǒng)師應(yīng)的情況。然后加微分時(shí)間常數(shù),例系數(shù)、積分時(shí)間常數(shù)相應(yīng)調(diào)整,反復(fù)調(diào)整,直到得滿意的控制過程和整定參數(shù)。(三)總結(jié)試湊法1. 例系數(shù)有到,然后找出超調(diào)的Kp2. 積分時(shí)間常數(shù)Ti由變,適當(dāng)調(diào)整Kp3. 微分時(shí)間常數(shù)Td由變,適當(dāng)調(diào)整Ti和Kp(四)實(shí)驗(yàn)總結(jié)1. KP設(shè)定,最初使1,假如控制之后實(shí)際值設(shè)定值不夠,那就增。反之就減少。2. TI設(shè)定,數(shù)據(jù)先很??葱Ч?). 如果TI加進(jìn)去之后數(shù)據(jù)很久才變化到標(biāo)值就逐漸減。如果TI減少到執(zhí)次都是設(shè)定值的時(shí)候那就逐漸增2). 如果剛加進(jìn)去變化很快,并且超調(diào)很,就增來調(diào)節(jié)3. 積分就看情況調(diào)節(jié)(五)增量式PID控制與位置式PID控制較,有如下優(yōu)點(diǎn):1)由式增量式PID控制與位置式PID可見,增量式PID控制算式只需要現(xiàn)時(shí)刻以及前兩個(gè)時(shí)刻的偏差采樣值,計(jì)算量和存儲量都,且計(jì)算的是增量,當(dāng)存在計(jì)算誤差或精度不時(shí),對控制量計(jì)算的影響較。位置式PID控制算式每次計(jì)算均與整個(gè)過去的狀態(tài)有關(guān),需要過去所有的偏差采樣值參與累積計(jì)算,容易產(chǎn)較的積累誤差,存儲量和計(jì)算量較。 2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論