51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速_第1頁(yè)
51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速_第2頁(yè)
51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速_第3頁(yè)
51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速_第4頁(yè)
51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速.51單片機(jī)PID調(diào)增量式光電編碼器測(cè)速.16/1651單片機(jī)PID調(diào)增量式光電編碼器測(cè)速.編碼器輸出的A向脈沖接到單片機(jī)的外面中止INT0,B向脈沖接到I/O端口P1.0。當(dāng)系統(tǒng)工作時(shí),第一要把INT0設(shè)置成降落沿觸發(fā),并開(kāi)相應(yīng)中止。當(dāng)有有效脈沖觸發(fā)中止時(shí),進(jìn)行中止辦理程序,鑒別B脈沖是高電平仍是低電平,假如高電平則編碼器正轉(zhuǎn),加1計(jì)數(shù);假如低電平則編碼器反轉(zhuǎn),減1計(jì)數(shù)。鑒于51單片機(jī)的直流電機(jī)PID閉環(huán)調(diào)速系統(tǒng)原理詳解與程序(2013-08-0401:18:15)轉(zhuǎn)載標(biāo)簽:分類:?jiǎn)纹瑱C(jī)51單片機(jī)直流電機(jī)pidpcf8591鑒于51單片機(jī)的直流電機(jī)PID

2、閉環(huán)調(diào)速系統(tǒng)電機(jī)轉(zhuǎn)速反應(yīng):原理:利用光電編碼器作為轉(zhuǎn)速的反應(yīng)元件,設(shè)電機(jī)轉(zhuǎn)一周光電編碼器發(fā)送N個(gè)PWM波形,利用測(cè)周法丈量電機(jī)轉(zhuǎn)速。詳細(xì)實(shí)現(xiàn):將準(zhǔn)時(shí)器0設(shè)置在計(jì)數(shù)模式,用來(lái)統(tǒng)計(jì)必定的時(shí)間T內(nèi)接遇到的脈沖個(gè)數(shù)M個(gè),而準(zhǔn)時(shí)器0置在計(jì)時(shí)模式,用來(lái)計(jì)時(shí)T時(shí)間。則假如T時(shí)間接遇到M個(gè)PWM波形,而電機(jī)轉(zhuǎn)一圈發(fā)出N個(gè)PWM波形,則依據(jù)測(cè)周法原理,電機(jī)的實(shí)質(zhì)的轉(zhuǎn)速為:real_speed=M/(N*T),單位轉(zhuǎn)/秒。若將準(zhǔn)時(shí)器1置在計(jì)數(shù)模式,則PWM波形應(yīng)當(dāng)由P33腳輸入。代碼實(shí)現(xiàn):準(zhǔn)時(shí)器0初始化,用來(lái)準(zhǔn)時(shí)10msvoidInit_Timer0(void)TMOD|=0 x01;/使用模式1,16位準(zhǔn)時(shí)器,

3、且工作在計(jì)時(shí)模式TH0=(65536-10000)/256;/準(zhǔn)時(shí)10msTL0=(65536-10000)%6;EA=1;/總中止翻開(kāi)ET0=1;/準(zhǔn)時(shí)器中止翻開(kāi)TR0=1;/準(zhǔn)時(shí)器開(kāi)關(guān)翻開(kāi)計(jì)數(shù)器1初始化,用來(lái)統(tǒng)計(jì)準(zhǔn)時(shí)器1計(jì)時(shí)250ms內(nèi)PWM波形個(gè)數(shù)voidInit_Timer1(void)TMOD|=0 x50;/使用計(jì)數(shù)模式1,16位計(jì)數(shù)器模式TH1=0 x00;/給定初值,由0往上計(jì)數(shù)TL1=0 x00;EA=1;/總中止翻開(kāi)ET1=1;/準(zhǔn)時(shí)器中止翻開(kāi)TR1=1;/準(zhǔn)時(shí)器開(kāi)關(guān)翻開(kāi)準(zhǔn)時(shí)器0的中止服務(wù)子函數(shù),主要達(dá)成脈沖個(gè)數(shù)的讀取,實(shí)質(zhì)轉(zhuǎn)速的計(jì)算和PID控制以及控制結(jié)/果輸出等工作vo

4、idTimer0_isr(void)interrupt1unsignedcharcount;TH0=(65536-10000)/256;/從頭賦值10msTL0=(65536-10000)%6;count+;if(count=25)/假如達(dá)到250ms,則計(jì)算一次轉(zhuǎn)速并進(jìn)行一次控制運(yùn)算count=0;/清零以便于準(zhǔn)時(shí)下一個(gè)250msTR1=0;/封閉準(zhǔn)時(shí)器1,統(tǒng)計(jì)脈沖個(gè)數(shù)real_speed=(256*TH1+TL1)*4/N;/250ms內(nèi)脈沖個(gè)數(shù)并由此計(jì)算轉(zhuǎn)速TH1=0 x00;/計(jì)數(shù)器1清零,從頭開(kāi)始計(jì)數(shù)TL1=0 x00;TR1=1;OUT=contr_PID();/進(jìn)入PID控制,P

5、ID控制子函數(shù)代碼在后邊給出write_add(0 x40,OUT);/進(jìn)行DA變換,將數(shù)字量變換為模擬量,后邊會(huì)介紹到2.PID控制:PID的基來(lái)源理在這里不作詳細(xì)解說(shuō),這里主要給出PID算法的實(shí)現(xiàn),經(jīng)過(guò)調(diào)節(jié)構(gòu)造體中比率常數(shù)(Proportion)、積分常數(shù)(Integral)、微分常數(shù)(Derivative)使得轉(zhuǎn)速控制達(dá)到想要的精度。試湊法:注意這里參數(shù)調(diào)理采納實(shí)驗(yàn)湊試法,試湊法也有其規(guī)律,下邊做出解說(shuō):實(shí)驗(yàn)湊試法是經(jīng)過(guò)閉環(huán)運(yùn)轉(zhuǎn)或模擬,察看系統(tǒng)的輸出結(jié)果,而后依據(jù)各參數(shù)對(duì)系統(tǒng)的影響,頻頻湊試參數(shù),直至出現(xiàn)滿意的響應(yīng),進(jìn)而確立PID控制參數(shù)。實(shí)驗(yàn)湊試法的整定步驟為先比率,再積分,最后微分。

6、(1)整定比率控制將比率控制作用由小變到大,察看各次響應(yīng),直至獲取反響快、超調(diào)小的響應(yīng)曲線。(2)整定積分環(huán)節(jié)若在比率控制下穩(wěn)態(tài)偏差不可以知足要求,需加入積分控制。先將步驟(1)中選擇的比率系數(shù)減小為本來(lái)的5080,再將積分時(shí)間置一個(gè)較大值,觀察響應(yīng)曲線。而后減小積分時(shí)間,加大積分作用,并相應(yīng)調(diào)整比率系數(shù),頻頻試湊至獲取較滿意的響應(yīng),確立比率和積分的參數(shù)。(3)整定微分環(huán)節(jié)若經(jīng)過(guò)步驟(2),PI控制只好除去穩(wěn)態(tài)偏差,而動(dòng)向過(guò)程不可以令人滿意,則應(yīng)加入微分控制,組成PID控制。先置微分時(shí)間TD=0,漸漸加大TD,同時(shí)相應(yīng)地改變比率系數(shù)和積分時(shí)間,頻頻試湊至獲取滿意的控制成效和PID控制參數(shù)。代碼

7、實(shí)現(xiàn)unsignedintProportion=8;/比率常數(shù)ProportionalConstunsignedintIntegral=3;/積分常數(shù)IntegralConstunsignedintDerivative=1;/微分常數(shù)DerivativeConstunsignedintLastError=0;/Error-1unsignedintPrevError=0;/Error-2unsignedintError=0;/Error0intOut=0;/outcomeintcontr_PID()Error=expc_speed-real_speed;/計(jì)算偏差進(jìn)行增量式PID計(jì)算Out=Ou

8、t+Proportion*(Error-LastError)+Integral*Error+Derivative*(Error+PrevError-2*LastError);進(jìn)行偏差更新PrevError=LastError;LastError=Error;上下限幅辦理if(Out255)Out=255;/DA變換為8位,最大數(shù)值為255,故當(dāng)大于255時(shí),限制為255returnOut;電機(jī)驅(qū)動(dòng):原理:直流有刷電機(jī)既能夠用模擬電壓驅(qū)動(dòng),又能夠用PWM驅(qū)動(dòng).假如用PWM驅(qū)動(dòng)時(shí),剛才PID后的輸出能夠直接對(duì)應(yīng)到PWM高電平連續(xù)的時(shí)間,PWM周期為T,則低電平對(duì)應(yīng)為T-Out即可,這個(gè)實(shí)現(xiàn)比較簡(jiǎn)單

9、。這里介紹利用DA將數(shù)字量Out轉(zhuǎn)變?yōu)槟M電壓驅(qū)動(dòng)電機(jī)的方法。模擬電壓驅(qū)動(dòng)實(shí)現(xiàn):將數(shù)字量轉(zhuǎn)變?yōu)槟M量的最常用方法就是使用DA變換。在一般的使用中我比較喜愛(ài)的一款芯片是PCF8591。它內(nèi)部集成了4路8位AD變換和1路8位DA變換,與單片機(jī)之間使用IIC通信方式。因?yàn)镮IC通信只要要SDA和SCL兩根信號(hào)線,所以很省IO口,而且一個(gè)芯片AD,DA都有了,很方便。詳細(xì)的PCF8591資料請(qǐng)參照其datasheet,這里直接給出其封裝好的IIC通信代碼,使用直接就能夠了。這里面其余的函數(shù)不用管,因?yàn)樗鼈冏詈笤趦蓚€(gè)函數(shù)中被調(diào)用,即write_add()和read_add()中。前者實(shí)現(xiàn)DA變換,有兩個(gè)

10、參數(shù),第一個(gè)參數(shù)是控制DA變換對(duì)應(yīng)存放器地點(diǎn),取0 x40,第二個(gè)是要變換的數(shù)據(jù),即返回的OUT,使用時(shí)直接一句代碼:write_add(0 x40,OUT)就能將數(shù)字信號(hào)變換為模擬電壓信號(hào)。后者實(shí)現(xiàn)AD變換,只有一個(gè)參數(shù),就是選擇AD變換的4個(gè)通道,經(jīng)過(guò)宏定義能夠定義出其四個(gè)通道:#defineAD_IN00 x40#defineAD_IN10 x41#defineAD_IN20 x42#defineAD_IN30 x43使用時(shí)只要要一句代碼:dat=read_add(AD_IN2)就能實(shí)現(xiàn)將第二個(gè)通道的模擬信號(hào)變換為數(shù)字信號(hào)。代碼實(shí)現(xiàn):/PCF8591.h#defineucharunsig

11、nedchar/延時(shí)4usvoiddelay(void);/iic初始化voidinit(void);/iic開(kāi)始信號(hào)voidstart(void);/iic停止信號(hào)voidstop(void);iic應(yīng)答相當(dāng)于一個(gè)智能的延時(shí)函數(shù)voidrespons(void);/iic讀一個(gè)字節(jié)數(shù)據(jù)ucharread_byte(void);/iic寫(xiě)一字節(jié)數(shù)據(jù)voidwrite_byte(uchardate);控制DA變換voidwrite_add(ucharcontrol,uchardate);控制AD變換ucharread_add(ucharcontrol);/PCF8591.c#include#in

12、clude#definePCF85910 x90/默以為寫(xiě),假如為讀,則為0 x91sbitSDA=P20;sbitSCL=P21;/延時(shí)4usvoiddelay(void)unsignedchari;for(i=1;i0;i-);/iicvoidinit()初始化SDA=1;delay();SCL=1;delay();/iicvoidstart()SDA=1;delay();SCL=1;delay();SDA=0;delay();開(kāi)始信號(hào)/iic停止信號(hào)voidstop()SDA=0;delay();SCL=1;delay();SDA=1;delay();iic應(yīng)答相當(dāng)于一個(gè)智能的延時(shí)函數(shù)v

13、oidrespons()uchari;SCL=1;delay();while(SDA=1)&(i250)i+;SCL=0;delay();/iic讀一個(gè)字節(jié)數(shù)據(jù)ucharread_byte()uchari,k;SCL=0;delay();SDA=1;delay();for(i=0;i8;i+)SCL=1;delay();k=(k1)|SDA;/先左移一位,再在最低位接受目前位SCL=0;delay();returnk;/iic寫(xiě)一字節(jié)數(shù)據(jù)voidwrite_byte(uchardate)uchari,temp;temp=date;for(i=0;i8;i+)temp=temp1;/左移一位移出

14、的一位在CY中SCL=0;/只有在scl=0時(shí)sda能變化值delay();SDA=CY;delay();SCL=1;delay();SCL=0;delay();SDA=1;delay();控制DA變換voidwrite_add(ucharcontrol,uchardate)start();write_byte(PCF8591);respons();write_byte(control);respons();write_byte(date);respons();stop();控制AD變換ucharread_add(ucharcontrol)uchardate;start();write_byt

15、e(PCF8591);respons();write_byte(control);respons();start();write_byte(PCF8591+1);/把最后一位變?yōu)?,讀數(shù)據(jù)respons();date=read_byte();stop();returndate;主函數(shù):主函數(shù)中主假如一些初始化工作,還有按鍵檢測(cè)和實(shí)質(zhì)轉(zhuǎn)速和希望轉(zhuǎn)速顯示。對(duì)于顯示部分能夠用液晶或許數(shù)碼管,這里不再詳細(xì)解說(shuō)。#include#include#include#defineuintunsignedint#defineucharunsignedchar#definePCF85910 x90/默以為寫(xiě),假如

16、為讀,則為0 x91#defineAD_IN00 x40#defineAD_IN10 x41#defineAD_IN20 x42#defineAD_IN30 x43#defineKeyPortP1#defineCYCLE100/限制的最大轉(zhuǎn)速unsignedintProportion=8;/比率常數(shù)ProportionalConstunsignedintIntegral=3;/積分常數(shù)IntegralConstunsignedintDerivative=1;/微分常數(shù)DerivativeConstunsignedintLastError=0;/Error-1unsignedintPrevErr

17、or=0;/Error-2unsignedintError=0;/Error0intOut=0;/outcomeunsignedintexpc_speed=0;unsignedintreal_speed=0;main()unsignedcharnum;Init_Timer0();/初始化準(zhǔn)時(shí)器Init_Timer1();/初始化計(jì)數(shù)器lcd_init();init();01while(1)/主循環(huán)num=KeyScan();/循環(huán)調(diào)用按鍵掃描switch(num)case1:if(expc_speed0)expc_speed-;lcd_display(4,expc_speed);lcd_dis

18、play(5,real_speed);按鍵掃描函數(shù),返回掃描鍵值unsignedcharKeyScan(void)unsignedcharkeyvalue;if(KeyPort!=0 xff)delay_ms(10);if(KeyPort!=0 xff)keyvalue=KeyPort;while(KeyPort!=0 xff);switch(keyvalue)case0 xfe:return1;break;case0 xfd:return2;break;case0 xfb:return3;break;case0 xf7:return4;break;case0 xef:return5;brea

19、k;case0 xdf:return6;break;case0 xbf:return7;break;case0 x7f:return8;break;default:return0;break;return0;分享:我個(gè)人對(duì)MCS-51單片機(jī)準(zhǔn)時(shí)器和計(jì)數(shù)器區(qū)其余理解2008-02-2518:43:30|分類:默認(rèn)分類|字號(hào)定閱在51單片機(jī)的學(xué)習(xí)過(guò)程中,我們常常會(huì)發(fā)現(xiàn)中止、計(jì)數(shù)器/準(zhǔn)時(shí)器、串口是學(xué)習(xí)單片機(jī)的難點(diǎn),對(duì)于初學(xué)者來(lái)說(shuō),這幾部分的內(nèi)容很難理解。可是我個(gè)人感覺(jué)這幾部分內(nèi)容是單片機(jī)學(xué)習(xí)的要點(diǎn),假如在一個(gè)學(xué)期的講堂學(xué)習(xí)或許自學(xué)中沒(méi)有理解這幾部分內(nèi)容,那就等于還沒(méi)有掌握51單片機(jī),那更談不上單片機(jī)

20、的開(kāi)發(fā)了,我們都知道在成品的單片機(jī)項(xiàng)目中,有好多是以這幾部分為理論基礎(chǔ)的,萬(wàn)年歷是以準(zhǔn)時(shí)器為主的,報(bào)警器是以中止為主的,聯(lián)機(jī)通信是以串口為主的。在這幾部分內(nèi)容中,計(jì)數(shù)器/準(zhǔn)時(shí)器對(duì)于初學(xué)者說(shuō)很簡(jiǎn)單搞混雜,下邊我將對(duì)這方面的內(nèi)容聯(lián)合自己的學(xué)習(xí)經(jīng)驗(yàn)談幾點(diǎn)見(jiàn)解。計(jì)數(shù)器和準(zhǔn)時(shí)器的實(shí)質(zhì)是相同的,他們都是對(duì)單片機(jī)中產(chǎn)生的脈沖入行計(jì)數(shù),只可是計(jì)數(shù)器是單片機(jī)外面觸發(fā)的脈沖,準(zhǔn)時(shí)器是單片機(jī)內(nèi)部在晶振的觸發(fā)下產(chǎn)生的脈沖。當(dāng)他們的脈沖間隔相同的時(shí)候,計(jì)數(shù)器和準(zhǔn)時(shí)器就是一個(gè)觀點(diǎn)。在準(zhǔn)時(shí)器和計(jì)數(shù)器中都有一個(gè)溢出的觀點(diǎn),那什么是溢出了。呵呵,我們能夠從一個(gè)生活小知識(shí)獲取答案,當(dāng)一個(gè)碗放在水龍頭下接水的時(shí)候,過(guò)了一會(huì)兒,碗的水滿了,就發(fā)生溢出。相同的道理,假定水龍頭的水是一滴滴的往碗里滴,那么總有一滴水是致使碗中的水溢出的。在碗中溢出的水就浪費(fèi)了,可是在單片機(jī)的準(zhǔn)時(shí)計(jì)數(shù)器中溢出將致使一次中止,至于什么是中止我們下次再講,這里不過(guò)初步的提下觀點(diǎn),中止就是能夠打斷系

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論