單片機(jī)常用算法設(shè)計_第1頁
單片機(jī)常用算法設(shè)計_第2頁
單片機(jī)常用算法設(shè)計_第3頁
單片機(jī)常用算法設(shè)計_第4頁
單片機(jī)常用算法設(shè)計_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第7章章 單片機(jī)常用算法設(shè)計單片機(jī)常用算法設(shè)計7.1 單片機(jī)濾波算法的設(shè)計單片機(jī)濾波算法的設(shè)計7.2 信號處理的信號處理的FFT變換變換7.3 SPWM正弦逆變算法的設(shè)計正弦逆變算法的設(shè)計7.4 PID控制算法控制算法7.5 51單片機(jī)單片機(jī)PID算法程序算法程序7.6 模糊控制算法模糊控制算法7.1 單片機(jī)濾波算法的設(shè)計單片機(jī)濾波算法的設(shè)計 電路的濾波分為電路的濾波分為模擬濾波模擬濾波與與數(shù)字濾波數(shù)字濾波。其中數(shù)字濾波器具有其中數(shù)字濾波器具有精度高、高可靠性和高精度高、高可靠性和高穩(wěn)定性穩(wěn)定性的特點的特點 ,因此被廣泛應(yīng)用。用數(shù)字濾波因此被廣泛應(yīng)用。用數(shù)字濾波算法克服隨機(jī)誤差主要有如下算法

2、克服隨機(jī)誤差主要有如下優(yōu)點優(yōu)點:u數(shù)字濾波由軟件程序?qū)崿F(xiàn)數(shù)字濾波由軟件程序?qū)崿F(xiàn) ,不需要硬件不需要硬件 ,因因此此 不存在阻抗匹配的問題不存在阻抗匹配的問題;u對于多路信號輸入通道對于多路信號輸入通道 ,可以共用一個軟件可以共用一個軟件“濾波器濾波器”,降低儀表的設(shè)計成本降低儀表的設(shè)計成本;u只要改變?yōu)V波器程序或元算參數(shù)只要改變?yōu)V波器程序或元算參數(shù) ,就能方便就能方便的改變?yōu)V波特性。的改變?yōu)V波特性。下面我們介紹幾種主要的數(shù)字濾波法:下面我們介紹幾種主要的數(shù)字濾波法:A.限幅濾波法限幅濾波法l對于對于隨機(jī)干擾隨機(jī)干擾 , 限幅濾波是一種有效的方法;限幅濾波是一種有效的方法;l基本方法基本方法:比

3、較相鄰:比較相鄰n 和和 n - 1時刻的兩個采時刻的兩個采樣值樣值y(n)和和 y(n 1),根據(jù)經(jīng)驗確定兩次采樣,根據(jù)經(jīng)驗確定兩次采樣允許的最大偏差。如果兩次采樣值的差值超過允許的最大偏差。如果兩次采樣值的差值超過最大偏差范圍最大偏差范圍 ,認(rèn)為發(fā)生可隨機(jī)干擾認(rèn)為發(fā)生可隨機(jī)干擾 ,并認(rèn)為后并認(rèn)為后一次采樣值一次采樣值y(n)為非法值為非法值 ,應(yīng)予刪除應(yīng)予刪除 ,刪除刪除y(n)后后 ,可用可用y(n 1) 代替代替y(n);若未超過所允許的;若未超過所允許的最大偏差范圍最大偏差范圍 ,則認(rèn)為本次采樣值有效。則認(rèn)為本次采樣值有效。下面是下面是限幅濾波程序限幅濾波程序:( A 值可根據(jù)實際情

4、況調(diào)值可根據(jù)實際情況調(diào)整,整,value 為有效值為有效值 ,new_value 為當(dāng)前采樣值為當(dāng)前采樣值濾波程序返回有效的實際值濾波程序返回有效的實際值 )#define A 10char value;char filter() char new_value; new_value = get_ad(); if ( ( new_value - value A ) | ( value - new_value A ) return value; return new_value;B.中位值濾波法中位值濾波法l中位值濾波法能有效克服中位值濾波法能有效克服偶然因素偶然因素引起的引起的波動或波動或采樣不

5、穩(wěn)定采樣不穩(wěn)定引起的誤碼等脈沖干擾;引起的誤碼等脈沖干擾;l對溫度對溫度 液位等液位等緩慢變化緩慢變化的被測參數(shù)用此法的被測參數(shù)用此法能收到良好的濾波效果能收到良好的濾波效果 ,但是對于流量壓力等但是對于流量壓力等快速變化的參數(shù)一般不宜采用中位值濾波法;快速變化的參數(shù)一般不宜采用中位值濾波法;l基本方法基本方法:對某一被測參數(shù)連續(xù)采樣:對某一被測參數(shù)連續(xù)采樣 n次次(一般一般 n 取奇數(shù)取奇數(shù)) ,然后再把采樣值按大小排列然后再把采樣值按大小排列 ,取中間值為本次采樣值。取中間值為本次采樣值。#define N 11char filter() char value_bufN, count,i,

6、j,temp; for ( count=0;countN;count+) value_bufcount = get_ad(); delay(); for (j=0;jN-1;j+) for (i=0;ivalue_bufi+1 ) temp = value_bufi; value_bufi = value_bufi+1; value_bufi+1 = temp; return value_buf(N-1)/2; 下面是下面是中位值濾波程序中位值濾波程序:C.算術(shù)平均濾波法算術(shù)平均濾波法l算術(shù)平均濾波法適用于對算術(shù)平均濾波法適用于對一般的具有隨機(jī)一般的具有隨機(jī)干擾的信號干擾的信號進(jìn)行濾波。這種信

7、號的特點是信進(jìn)行濾波。這種信號的特點是信號本身在某一數(shù)值范圍附近上下波動號本身在某一數(shù)值范圍附近上下波動 ,如如測量測量流量、流量、 液位液位;l基本方法基本方法:按輸入的:按輸入的N 個采樣數(shù)據(jù)個采樣數(shù)據(jù) ,尋找這尋找這樣一個樣一個 Y ,使得使得 Y 與各個采樣值之間的偏差與各個采樣值之間的偏差的平方和最小。的平方和最小。編寫算術(shù)平均濾波法程序時嚴(yán)格注意編寫算術(shù)平均濾波法程序時嚴(yán)格注意: 一一.為了加快數(shù)據(jù)測量的速度為了加快數(shù)據(jù)測量的速度 ,可采用先測可采用先測量數(shù)據(jù)量數(shù)據(jù) 存放在存儲器中存放在存儲器中 ,測完測完 N 點后點后 ,再對再對 N 個數(shù)據(jù)進(jìn)行平均值計算個數(shù)據(jù)進(jìn)行平均值計算;

8、二二.選取適當(dāng)?shù)臄?shù)據(jù)格式選取適當(dāng)?shù)臄?shù)據(jù)格式 ,也就是說采用定也就是說采用定點數(shù)還是采用浮點數(shù)。其程序如下所示:點數(shù)還是采用浮點數(shù)。其程序如下所示:#define N 12char filter()int sum = 0,count; for ( count=0;countN;count+) sum+=get_ad(); delay(); return (char)(sum/N);D.遞推平均濾波法遞推平均濾波法l基本方法基本方法:采用隊列作為測量數(shù)據(jù)存儲器:采用隊列作為測量數(shù)據(jù)存儲器 , 設(shè)隊列的長度為設(shè)隊列的長度為 N ,每進(jìn)行一次測量每進(jìn)行一次測量 ,把測量把測量結(jié)果放于隊尾結(jié)果放于隊尾

9、,而扔掉原來隊首的一個數(shù)據(jù)而扔掉原來隊首的一個數(shù)據(jù) ,這樣在隊列中始終就有這樣在隊列中始終就有 N 個個 “最新最新” 的數(shù)的數(shù)據(jù)。當(dāng)計算平均值時據(jù)。當(dāng)計算平均值時 ,只要把隊列中的只要把隊列中的 N 個個數(shù)據(jù)進(jìn)行算數(shù)平均數(shù)據(jù)進(jìn)行算數(shù)平均 ,就可得到新的算數(shù)平均值。就可得到新的算數(shù)平均值。這樣每進(jìn)行一次測量這樣每進(jìn)行一次測量 ,就可得到一個新的算術(shù)就可得到一個新的算術(shù)平均值。平均值。#define N 12char value_bufN,i=0;char filter() char count; int sum=0; value_bufi+ = get_ad(); if ( i = N ) i

10、 = 0; for ( count=0;countN;count+) sum = value_bufcount; return (char)(sum/N);程序如下:程序如下:E.一階滯后濾波法一階滯后濾波法l優(yōu)點優(yōu)點:對周期性干擾具有良好的抑制作用:對周期性干擾具有良好的抑制作用,適用于波動頻率較高的場合;適用于波動頻率較高的場合;l缺點缺點:相位滯后,靈敏度低:相位滯后,靈敏度低.滯后程度取決滯后程度取決于于a值大小值大小.不能消除濾波頻率高于采樣頻率不能消除濾波頻率高于采樣頻率的的1/2的干擾信號。程序如下:的干擾信號。程序如下:#define a 50char value;char f

11、ilter() char new_value; new_value = get_ad(); return (100-a)*value + a*new_value;7.2 信號處理的信號處理的FFT變換變換快速傅里葉變換快速傅里葉變換(Fast Fourier Transfonn,F(xiàn)FT) 是為了減少離散傅里葉變換是為了減少離散傅里葉變換(Discrete Fourier Transform,DFT)計算次數(shù)的一種快速計算次數(shù)的一種快速有效的算法。它是根據(jù)離散傅氏變換的奇、偶、有效的算法。它是根據(jù)離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進(jìn)行虛、實等特性,對離散傅立葉變換的算法進(jìn)

12、行改進(jìn)獲得的。改進(jìn)獲得的。FFT變換算法的基本思想變換算法的基本思想:利用:利用WN的周期性的周期性和對稱性,把一個和對稱性,把一個N項序列(設(shè)項序列(設(shè)N=2k,k為正整為正整數(shù)),分為兩個數(shù)),分為兩個N/2項的子序列,每個項的子序列,每個N/2點點DFT變換需要(變換需要(N/2)2次運(yùn)算,再用次運(yùn)算,再用N次運(yùn)次運(yùn)算把兩個算把兩個N/2點的點的DFT變換組合成一個變換組合成一個N點的點的DFT變換。這樣變換以后,總的運(yùn)算次數(shù)就變換。這樣變換以后,總的運(yùn)算次數(shù)就變成變成N+2(N/2)2=N+N2/2。其程序片段如。其程序片段如下所示:下所示:#include #include #inc

13、lude typedef struct double r; double i;my_complex;/檢查a是否為2的整數(shù)次方數(shù)#define NOT2POW(a) (a)-1)&(a)|(a)=1) ex+; /len應(yīng)該等于2的ex次方 y=(my_complex*)malloc(len*sizeof(my_complex); if(!y) return NULL; /變址計算,庫里-圖基算法 for(i=0;i0) j=1; if(j=i) yi=xj; yj=xi; /用變址后的y向量進(jìn)行計算 for(i=0;iex;i+)t=1i; for(j=0;jlen;j+=t1) f

14、or(k=0;kt;k+)ti=-MYPI*k/t; rr=cos(ti); ri=sin(ti); tr=yj+k+t.r; ti=yj+k+t.i; yr=rr*tr-ri*ti; yi=rr*ti+ri*tr; tr=yj+k.r; ti=yj+k.i;yj+k.r=tr+yr; yj+k.i=ti+yi; yj+k+t.r=tr-yr; yj+k+t.i=ti-yi; return y; /以下為測試int main()int i,DATA_LEN; my_complex *x,*y; printf(基二FFT測試n輸入生成序列長度:); scanf(%d,&DATA_LEN)

15、; x=(my_complex*)malloc(DATA_LEN*sizeof(my_complex); for(i=0;iDATA_LEN;i+)xi.r=i; xi.i=i-1; printf(處理前.n實部tt虛部n);for(i=0;iDATA_LEN;i+) printf(%lft%lfn,xi.r,xi.i);y=fft(x,DATA_LEN);if(!y) printf(序列長度不為2的整數(shù)次方!n); return 0; printf(處理后.n實部tt虛部n);for(i=0;iDATA_LEN;i+) printf(%lft%lfn,yi.r,yi.i); free(y);

16、 free(x);return 0;7.3 SPWM正弦逆變算法的設(shè)計正弦逆變算法的設(shè)計lPWM的全稱是的全稱是Pulse Width Modulation(脈(脈沖寬度調(diào)制),它是通過改變輸出方波的占空沖寬度調(diào)制),它是通過改變輸出方波的占空比來改變等效的輸出電壓,廣泛地用于電動機(jī)比來改變等效的輸出電壓,廣泛地用于電動機(jī)調(diào)速和閥門控制;調(diào)速和閥門控制;lSPWM是在是在PWM的基礎(chǔ)上改變了調(diào)制脈沖方的基礎(chǔ)上改變了調(diào)制脈沖方式,脈沖寬度時間占空比按正弦規(guī)率排列,這式,脈沖寬度時間占空比按正弦規(guī)率排列,這樣輸出波形經(jīng)過適當(dāng)?shù)臑V波可以做到正弦波輸樣輸出波形經(jīng)過適當(dāng)?shù)臑V波可以做到正弦波輸出,它廣泛地

17、用于直流交流逆變器等;出,它廣泛地用于直流交流逆變器等;lSPWM理論基礎(chǔ)理論基礎(chǔ):沖量相等而形狀不同的窄:沖量相等而形狀不同的窄脈沖加在具有慣性的環(huán)節(jié)上時脈沖加在具有慣性的環(huán)節(jié)上時, 其效果基本相其效果基本相同。同。實現(xiàn)實現(xiàn)SPWM法的幾種方案:法的幾種方案:A.等面積法等面積法l該方案是用同樣數(shù)量該方案是用同樣數(shù)量等幅而不等寬等幅而不等寬的矩形的矩形脈沖序列代替正弦波脈沖序列代替正弦波,然后計算各脈沖的寬度然后計算各脈沖的寬度和間隔和間隔,并把這些數(shù)據(jù)存于微機(jī)中并把這些數(shù)據(jù)存于微機(jī)中,通過查表通過查表的方式生成的方式生成PWM信號控制開關(guān)器件的通斷信號控制開關(guān)器件的通斷,以達(dá)到預(yù)期的目的;

18、以達(dá)到預(yù)期的目的;l優(yōu)點:優(yōu)點:可準(zhǔn)確計算出各開關(guān)器件的通斷時可準(zhǔn)確計算出各開關(guān)器件的通斷時刻刻,所得的波形很接近正弦波;所得的波形很接近正弦波;l缺點:缺點:計算繁瑣計算繁瑣,數(shù)據(jù)占用內(nèi)存大數(shù)據(jù)占用內(nèi)存大,不能實時不能實時控制??刂啤S妹娣e法實現(xiàn)用面積法實現(xiàn)SPWM正弦波逆變換的程序片段:正弦波逆變換的程序片段:void CalcSpwmWithArea(float32 a/*調(diào)制比*/,Uint16 w_Hz/*調(diào)制頻率*/,Uint32 z_Hz/*載波頻率*/) /Uint16 tmp_PR; /T1周期值 volatile Uint16 i,n,*p; float32 m,n1,n2

19、; m = z_Hz/w_Hz ; /求出載波比 g_SPWM_Table.SpwmSize =(Uint16)m; /tmp_PR = g_T1_Clk /(2*z_Hz); /計算出其周期值 p=g_SPWM_Table.p_HeadTable; /得到數(shù)據(jù)表頭指針 n=m; m/=2; /除去一半 計算半波 n1=(float32)g_T1_Clk/(8.0*m*w_Hz); / 計算首相 n2=(float32)g_T2_Clk/(8.0*PI*w_Hz)*a; for(i=0;in;i+) *p=n1-n2*(cos(i*PI/m)-cos(i+1)*PI/m); p+; B.硬件調(diào)

20、制法硬件調(diào)制法l方案原理:方案原理:把所希望的波形作為調(diào)制信號把所希望的波形作為調(diào)制信號, 把接受調(diào)制的信號作為載波把接受調(diào)制的信號作為載波,通過對載波的調(diào)通過對載波的調(diào)制得到所期望的制得到所期望的PWM波形波形.用等腰三角波作用等腰三角波作為載波為載波,當(dāng)調(diào)制信號波為正弦波時當(dāng)調(diào)制信號波為正弦波時,所得到的所得到的就是就是SPWM波形;波形;l優(yōu)點:優(yōu)點:實現(xiàn)方法簡單,可以解決等面積法實現(xiàn)方法簡單,可以解決等面積法計算繁瑣的缺點;計算繁瑣的缺點;l缺點:缺點:模擬電路結(jié)構(gòu)復(fù)雜模擬電路結(jié)構(gòu)復(fù)雜,難以實現(xiàn)精確的難以實現(xiàn)精確的控制??刂啤.自然采樣法自然采樣法l方案原理:方案原理:以正弦波為調(diào)制

21、波以正弦波為調(diào)制波,等腰三角波等腰三角波為載波進(jìn)行比較為載波進(jìn)行比較,在兩個波形的自然交點時刻在兩個波形的自然交點時刻控制開關(guān)器件的通斷;控制開關(guān)器件的通斷;l優(yōu)點:優(yōu)點:所得所得SPWM波形最接近正弦波;波形最接近正弦波;l缺點:缺點:脈寬表達(dá)式是一個超越方程脈寬表達(dá)式是一個超越方程,計算繁計算繁瑣瑣,難以實時控制。難以實時控制。D.規(guī)則采樣法規(guī)則采樣法l方案原理:方案原理:用三角波對正弦波進(jìn)行采樣得用三角波對正弦波進(jìn)行采樣得到階梯波到階梯波,再以階梯波與三角波的交點時刻控再以階梯波與三角波的交點時刻控制開關(guān)器件的通斷制開關(guān)器件的通斷,從而實現(xiàn)從而實現(xiàn)SPWM法;按照法;按照三角波在其頂點或

22、底點的位置不同又分為三角波在其頂點或底點的位置不同又分為對對稱規(guī)則采樣稱規(guī)則采樣和和非對稱規(guī)則采樣非對稱規(guī)則采樣;l優(yōu)點:優(yōu)點:計算簡單計算簡單,便于在線實時運(yùn)算便于在線實時運(yùn)算,其中非其中非對稱規(guī)則采樣法因階數(shù)多而更接近正弦;對稱規(guī)則采樣法因階數(shù)多而更接近正弦;l缺點:缺點:直流電壓利用率較低直流電壓利用率較低,線性控制范圍線性控制范圍較小。較小。用對稱規(guī)則采樣實現(xiàn)用對稱規(guī)則采樣實現(xiàn)SPWM正弦波逆變換的程序正弦波逆變換的程序片段:片段:void CalcSpwmWithSym(float32 a/*調(diào)制比*/,float32 w_Hz/*調(diào)制頻率*/,float32 z_Hz/*載波頻率*

23、/)Uint16 tmp_PR; /T1周期值 volatile Uint16 i,n,*p;float32 m; m = z_Hz/w_Hz ; /求出載波比 g_SPWM_Table.SpwmSize =(Uint16)m; tmp_PR = g_T1_Clk /(2*z_Hz); /計算出其周期值 p=g_SPWM_Table.p_HeadTable; /得到數(shù)據(jù)表頭指針 for(i=0;i(Uint16)m;i+) n=tmp_PR*(0.5-0.5*a*sin(i+0.75)*2*PI/m); *p=n; p+;用非對稱規(guī)則采樣實現(xiàn)用非對稱規(guī)則采樣實現(xiàn)SPWM正弦波逆變換的程正弦波逆

24、變換的程序片段:序片段:void CalcSpwmWithImSym(float32 a/*調(diào)制比*/,Uint16 w_Hz/*調(diào)制頻率*/,Uint32 z_Hz/*載波頻率*/)Uint16 tmp_PR; /T1周期值 volatile Uint16 i,n,*p; float32 m; m = z_Hz/w_Hz ; /求出載波比 g_SPWM_Table.SpwmSize =(Uint16)m;tmp_PR = g_T1_Clk /(2*z_Hz); /計算出其周期值 p=g_SPWM_Table.p_HeadTable; /得到數(shù)據(jù)表頭指針 for(i=0;i(Uint16)m;

25、i+) n=tmp_PR*(0.5-0.25*a*(sin(i+0.25)*2*PI/m)+sin(i+0.75)*2*PI/m); *p=n; p+;E.梯形波與三角波比較法梯形波與三角波比較法l方案原理:方案原理:采用梯形波作為調(diào)制信號采用梯形波作為調(diào)制信號,三角三角波為載波波為載波,且使兩波幅值相等且使兩波幅值相等,以兩波的交點以兩波的交點時刻控制開關(guān)器件的通斷實現(xiàn)時刻控制開關(guān)器件的通斷實現(xiàn)PWM控制;控制;l優(yōu)點:優(yōu)點:可以有效地提高直流電壓利用率;可以有效地提高直流電壓利用率;l缺點:缺點:輸出波形中含有輸出波形中含有5次次,7次等低次諧波。次等低次諧波。7.4 PID控制算法控制算

26、法l在過程控制中,按偏差的比例(在過程控制中,按偏差的比例(P)、積分)、積分(I)和微分()和微分(D)進(jìn)行控制的)進(jìn)行控制的PID控制器控制器(亦(亦稱稱PID調(diào)節(jié)器)是應(yīng)用最為廣泛的一種自動控調(diào)節(jié)器)是應(yīng)用最為廣泛的一種自動控制器制器;l對于過程控制的典型對象對于過程控制的典型對象“一階滯后一階滯后純滯后純滯后”與與“二階滯后純滯后二階滯后純滯后”的控制對的控制對象,象,PID控制器是一種最優(yōu)控制控制器是一種最優(yōu)控制;lPID調(diào)節(jié)規(guī)律調(diào)節(jié)規(guī)律是連續(xù)系統(tǒng)動態(tài)品質(zhì)校正的一是連續(xù)系統(tǒng)動態(tài)品質(zhì)校正的一種有效方法,它的參數(shù)整定方式簡便,結(jié)構(gòu)種有效方法,它的參數(shù)整定方式簡便,結(jié)構(gòu)改變靈活(改變靈活(

27、PI、PD、)。)。一一 模擬模擬PID調(diào)節(jié)器調(diào)節(jié)器模擬模擬PID控制系統(tǒng)原理框圖控制系統(tǒng)原理框圖l比例環(huán)節(jié)比例環(huán)節(jié):即時成比例地反應(yīng)控制系統(tǒng)的偏:即時成比例地反應(yīng)控制系統(tǒng)的偏差信號差信號e(t),偏差一旦產(chǎn)生,調(diào)節(jié)器立即產(chǎn)生,偏差一旦產(chǎn)生,調(diào)節(jié)器立即產(chǎn)生控制作用以減小偏差;控制作用以減小偏差;l積分環(huán)節(jié)積分環(huán)節(jié):主要用于消除靜差,提高系統(tǒng)的:主要用于消除靜差,提高系統(tǒng)的無差度。積分時間常數(shù)無差度。積分時間常數(shù)TI越大,積分作用越弱,越大,積分作用越弱,反之則越強(qiáng);反之則越強(qiáng);l微分環(huán)節(jié)微分環(huán)節(jié):能反應(yīng)偏差信號的變化趨勢:能反應(yīng)偏差信號的變化趨勢(變化變化速率速率),并能在偏差信號的值變得太大

28、之前,并能在偏差信號的值變得太大之前,在系統(tǒng)中引入一個有效的早期修正信號,從而在系統(tǒng)中引入一個有效的早期修正信號,從而加快系統(tǒng)的動作速度,減小調(diào)節(jié)時間。加快系統(tǒng)的動作速度,減小調(diào)節(jié)時間。PID調(diào)節(jié)器各校正環(huán)節(jié)的作用:調(diào)節(jié)器各校正環(huán)節(jié)的作用: PID調(diào)節(jié)器是一種調(diào)節(jié)器是一種線性調(diào)節(jié)器線性調(diào)節(jié)器,它將,它將給給定值定值r(t)與與實際輸出值實際輸出值c(t)的偏差的比例的偏差的比例(P)、積分積分(I)、微分微分(D)通過線性組合構(gòu)成控制量,通過線性組合構(gòu)成控制量,對控制對象進(jìn)行控制。對控制對象進(jìn)行控制。lPID調(diào)節(jié)器的微分方程調(diào)節(jié)器的微分方程 【其中其中 】tDIPdttdeTdtteTteKt

29、u0)()(1)()()()()(tctrtelPID調(diào)節(jié)器的傳遞函數(shù)調(diào)節(jié)器的傳遞函數(shù)STSTKSESUSDDIP11)()()(二二 數(shù)字?jǐn)?shù)字PID控制器控制器模擬形式模擬形式離散化形式離散化形式)()()(tctrte)()()(ncnrnedTtde)(Tnene)1()(tdtte0)(niniieTTie00)()(l模擬模擬PID控制規(guī)律的離散化形式控制規(guī)律的離散化形式l數(shù)字?jǐn)?shù)字PID控制器的差分方程:控制器的差分方程:000)()()() 1()()()()(unununuuneneTTieTTneKnuDIPniDIP式中:式中: ,為比例項;,為比例項; ,為積分項;,為積分

30、項; ,為微分項。,為微分項。)()(neKnuPPniIPIieTTKnu0)()() 1()()(neneTTKnuDPDl常用的控制方式:常用的控制方式: P控制控制 PI控制控制 PD控制控制 PID控制控制 0)()(ununuP0)()()(unununuIP0)()()(unununuDP0)()()()(ununununuDIPlPID算法的兩種類型算法的兩種類型 位置型控制位置型控制 增量型控制增量型控制00) 1()()()()(uneneTTieTTneKnuniDIP) 2() 1(2)()() 1()() 1()()(neneneTTKneTTKneneKnununu

31、DPIPP三三 PID算法的程序流程算法的程序流程l增量型增量型PID算法的程序流程算法的程序流程) 2() 1()()(210neaneaneanu)1 (0TTTTKaDIP)21 (1TTKaDPTTKaDP2算式:算式:式中:式中:l位置型位置型PID算法的程序流程算法的程序流程遞推形式:遞推形式:) 2() 1()() 1()() 1()(210neaneaneanunununul對控制量的限制對控制量的限制 控制算法總是受到一定運(yùn)算字長的限制;控制算法總是受到一定運(yùn)算字長的限制; 執(zhí)行機(jī)構(gòu)的實際位置不允許超過上執(zhí)行機(jī)構(gòu)的實際位置不允許超過上/下極限。下極限。maxmin)()(un

32、uunumaxmaxminmin)()()(unuunuuunu7.5 51單片機(jī)單片機(jī)PID算法程序算法程序一一 位置式位置式PID控制算法控制算法位置式位置式PID控制算法的簡化示意圖控制算法的簡化示意圖上圖中上圖中傳遞函數(shù)傳遞函數(shù)為:為:在時域的傳遞函數(shù)表達(dá)式:在時域的傳遞函數(shù)表達(dá)式:對上式中的微分和積分進(jìn)行近似:對上式中的微分和積分進(jìn)行近似:于是傳遞函數(shù)可以簡化為于是傳遞函數(shù)可以簡化為:其中其中:u(n)第第k個采樣時刻的控制;個采樣時刻的控制; KP 比例放大系數(shù);比例放大系數(shù); Ki 積分放大系數(shù);積分放大系數(shù);Kd 微分放大系數(shù);微分放大系數(shù); 由于全量輸出,所以每次輸出均與過去

33、狀由于全量輸出,所以每次輸出均與過去狀態(tài)有關(guān),計算時要對態(tài)有關(guān),計算時要對e(k)(k=0,1,n)進(jìn)行累進(jìn)行累加,工作量大;加,工作量大; 因為計算機(jī)輸出的因為計算機(jī)輸出的u(n)對應(yīng)的是執(zhí)行機(jī)構(gòu)對應(yīng)的是執(zhí)行機(jī)構(gòu)的實際位置,如果計算機(jī)出現(xiàn)故障,輸出的實際位置,如果計算機(jī)出現(xiàn)故障,輸出u(n)將大幅度變化,會引起執(zhí)行機(jī)構(gòu)的大幅將大幅度變化,會引起執(zhí)行機(jī)構(gòu)的大幅度變化,有可能因此造成嚴(yán)重的生產(chǎn)事故,度變化,有可能因此造成嚴(yán)重的生產(chǎn)事故,這在實際生產(chǎn)中是不允許的。這在實際生產(chǎn)中是不允許的。l這種算法有以下這種算法有以下缺點缺點:l程序片段如下程序片段如下:#include #include typ

34、edef struct PID double SetPoint; / 設(shè)定目標(biāo)Desired value double Proportion; / 比例常數(shù)Proportional Const double Integral; / 積分常數(shù)Integral Const double Derivative; / 微分常數(shù)Derivative Const double LastError; / Error-1 double PrevError; / Error-2 double SumError; / Sums of Errors PID; PID計算部分:計算部分:double PIDCalc(

35、 PID *pp, double NextPoint ) double dError, Error; Error = pp-SetPoint - NextPoint; / 偏差 pp-SumError += Error; / 積分 dError = Error - pp-LastError; / 當(dāng)前微分 pp-PrevError = pp-LastError; pp-LastError = Error; return (pp-Proportion * Error / 比例項 + pp-Integral * pp-SumError / 積分項 + pp-Derivative * dError

36、); / 微分項 void PIDInit (PID *pp) memset ( pp,0,sizeof(PID); double sensor (void) return 100.0; void actuator(double rDelta) void main(void) PID sPID; double rOut; double rIn; PIDInit ( &sPID ); sPID.Proportion = 0.5;sPID.Derivative = 0.0; sPID.SetPoint = 100.0; for (;) rIn = sensor (); rOut = PID

37、Calc ( &sPID,rIn ); actuator ( rOut ); 主程序:主程序:二二 增量式增量式PID控制算法控制算法增量式增量式PID控制控制算法公式算法公式為:為:其中:其中:l程序如下程序如下:typedef struct PID int SetPoint; /設(shè)定目標(biāo)long SumError; /誤差累計 double Proportion; /比例常數(shù)double Integral; /積分常數(shù)double Derivative; /微分常數(shù)int LastError; /Error-1 int PrevError; /Error-2 PID;static PID sPID; static PID *sptr = &sPID; /*PID參數(shù)初始化*/ void IncPIDInit(void) sptr-SumError = 0; sptr-LastError = 0; /Error-1 sptr-PrevError = 0; /Error-2 sptr-Proportion = 0; /比例常數(shù)sptr-Integral = 0; /積分常數(shù)sptr-Derivative = 0; /微分常數(shù)sptr-SetPoint = 0; /*增量式PID計算部分*/ int IncPIDCalc(int NextP

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論