版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于單片機的直流電機轉(zhuǎn)速pid控制系統(tǒng)設(shè)計單片機原理課程設(shè)計任務(wù)書班級:自動化07 姓名: 指導教師:曹利鋼 2010年6月7日設(shè)計題目:基于單片機的直流電機轉(zhuǎn)速pid控制系統(tǒng)設(shè)計設(shè)計任務(wù)和要求1.直流電機型號自選2.對直流電機轉(zhuǎn)速實時顯示3.對轉(zhuǎn)速實現(xiàn)恒值控制4.轉(zhuǎn)速控制范圍:1090,其中為電機額定轉(zhuǎn)速5.穩(wěn)態(tài)精度達:5r/min。設(shè)計成果設(shè)計說明書一份電路圖一份參考資料1.胡漢才.單片機原理及接口技術(shù)(第2版)m.北京:機械工業(yè)出版社,20042.陳光東,趙性初.單片機微型計算機原理與接口技術(shù)(第2版)m.武漢:華中科技大學出版社,1999教研室主任簽字: 年 月 日目 錄第一章直流電機
2、工作原理41.1 工作原理41.2、直流電機pid控制原理方框圖5第二章硬件設(shè)計與實現(xiàn)82.1 硬件設(shè)計82.2系統(tǒng)面板圖15第三章流程設(shè)計173.1 軟件設(shè)計流程圖17第四章程序說明204.1 直流電機部分程序204.2 溫度檢測部分程序28第五章說明及調(diào)試366.1 調(diào)試過程366.2 運行結(jié)果37第6章 課程設(shè)計體會39第7章 參考文獻 39 第一章 直流電機工作原理1.1 工作原理 本設(shè)計中的電子鐘的核心是at89c51。硬件電路主要由六部分構(gòu)成:pid控制電路、復位電路、鍵盤電路、顯示電路、串行通信電路以及溫度檢測電路。 pid控制電路是電子鐘硬件電路的核心,沒有pid控制電路,直流
3、電機無法正常穩(wěn)定運行。本系統(tǒng)電路采用的晶振11.0592mhz,一號單片機定時器采用的是定時器0工作在方式2定時,用于實現(xiàn)一定時間的計時,定時時間為10ms。復位電路可使單片機回復到初始狀態(tài)。鍵盤可實現(xiàn)對直流電機轉(zhuǎn)速的設(shè)定及啟動的操作。溫度檢測是通過ds18b20芯片實現(xiàn),在溫度顯示中還要注意數(shù)的轉(zhuǎn)換。在該設(shè)計中還用到定時器1工作在方式2用來產(chǎn)生9600的波特率,用在兩片單片機之間串行傳送數(shù)據(jù)。1、 外部中斷int1當電機轉(zhuǎn)一圈時向外部中斷進行一次中斷計數(shù),從而實現(xiàn)電機轉(zhuǎn)速的測量。2、 一號單片機轉(zhuǎn)速顯示 當電機轉(zhuǎn)動時,顯示部分可以把電機的設(shè)定轉(zhuǎn)速或者是通過通信由溫度計算的轉(zhuǎn)速顯示出來,同時在
4、右側(cè)部分顯示電機當下的轉(zhuǎn)速。 二號單片機的溫度顯示與之類似。3、 溫度測量溫度測量有專門的芯片ds18b20。ds18b20 可編程溫度傳感器有 3 個管腳。gnd 為接地線,dq 為數(shù)據(jù)輸入輸出接口, 通過一個較弱的上拉電阻與單片機相連。vdd 為電源接口,既可由數(shù)據(jù)線提供電源,又可 由外部提供電源,范圍 3o55 v。當 dsi8b20 接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以 16 位帶 符號擴展的二進制補碼形式存儲在高速暫存存儲器的 0,1 字節(jié)。單片機可通過單線接口讀 到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式以 0062 5lsb 形式表示。4、 按鍵選擇一號單
5、片機的鍵盤采用44的按鍵方式檢測按鍵。p0、p1口不斷掃描按鍵的行和列從而計算出所選擇的數(shù)值,進而執(zhí)行相關(guān)的程序。二號單片機原理類似。5、 直流電機驅(qū)動部分一號單片機根據(jù)端口采集到的電機的轉(zhuǎn)速,經(jīng)過pid計算,通過另一端口發(fā)送pwm波,從而使電機改變轉(zhuǎn)速。1.2、直流電機pid控制原理方框圖 圖2.2 電路連接圖第二章 硬件設(shè)計與實現(xiàn)2.1硬件設(shè)計直流電機pid控制電路的核心是兩塊89c51,用兩塊89c51作控制是為了電機控制和溫度檢測互不干擾,其中一塊控制電機,另一塊實現(xiàn)溫度檢測。2.1.1 按鍵電路設(shè)計根據(jù)功能需要,本控制電路需要設(shè)置一下功能鍵:按鍵設(shè)定轉(zhuǎn)速。在鍵盤中按鍵數(shù)量較多時,為了
6、減少i/o口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如p1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。 矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復雜一些,識別也要復雜一些,下圖中,列線通過電阻接正電源,并將行線所接的單片機的i/o口作為輸出端,而列線所接的i/o口則作為輸入。這樣,當按鍵沒有按下時,所有的輸入端都是高
7、電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。 圖2.1 按鍵電路參見表2.1。按鍵鍵名功能屬性09設(shè)定設(shè)定轉(zhuǎn)速值自動復位確定確定確定設(shè)定值自動復位清除清除去除設(shè)定值自動復位運行運行開始運行自動復位表2.1 按鍵功能表 按鍵操作說明如下: 09鍵:通過此按鍵設(shè)定要求電機轉(zhuǎn)速的設(shè)定值。設(shè)定過程中數(shù)值依次左移,實現(xiàn)百十個位的設(shè)定。 確定鍵:該鍵為自動復位鍵,當設(shè)定完成后按確定鍵就可以使設(shè)定值賦給相應變量。 清除鍵:清除已經(jīng)設(shè)定的轉(zhuǎn)速值。運行鍵:設(shè)定值完畢則可以點此鍵進行相應的運行。2.1.2 復位電路 復位是單片機的初始化
8、操作,以便使cpu和系統(tǒng)中其他部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。除了進入系統(tǒng)的正常初始化之外,當單片機系統(tǒng)在運行出錯或操作錯誤使系統(tǒng)處于思索狀態(tài)時,也可按復位鍵重新啟動。 復位后,pc內(nèi)容初始化為0000h,使單片機從0000h單元開始執(zhí)行程序。89c51單片機復位信號的輸入端是rst引腳,高電平有效。rst端的外部復位電路有兩種操作方式:上電自動復位和按鍵手動復位。按鍵手動復位有電平方式和脈沖方式兩種。本設(shè)計用的是按鍵電平復位時相當于rst端接高電平。如圖2.2所示。需要注意的是單片機連接了8255a,復位電路也需與8255a的reset相連。電路為上電復位電路,它是利用電
9、容充電來實現(xiàn)的。在接電瞬間,reset端的電位與vcc相同,隨著充電電流的減少,reset的電位逐漸下降。只要保證reset為高電平的時間大于兩個機器周期,便能正常復位。該電路除具有上電復位功能外,若要復位,只需按reset鍵,此時電源vcc經(jīng)電阻r1、r2分壓,在reset端產(chǎn)生一個復位高電平。2.1.3顯示電路本設(shè)計中使用led數(shù)碼管顯示電機的設(shè)定和實際轉(zhuǎn)速以及溫度值。電路設(shè)計如下: 圖2.3 轉(zhuǎn)速的顯示電路溫度的顯示電路在另一個單片機中完成,圖相似。2.1.4溫度檢測系統(tǒng)設(shè)置了一路溫度檢測在該系統(tǒng)中,圖4.6是一路溫度硬件圖。圖2.4 ds18b20測溫原理框圖圖2.5 溫度檢測的硬件圖
10、2.1.5串行通訊 該系統(tǒng)用到兩片單片機,因此單片機還需要連接串行接口,電路略。2.1.6晶振電路設(shè)計在at89s51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳xtal1,輸出端為引腳xtal2。而在芯片內(nèi)部,xtal1和xtal2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個穩(wěn)定的自激振蕩器。時鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進行二分頻之后,才成為單片機的時鐘脈沖信號。其電路如圖2.7。圖2.7 晶振電路2.1.7 電機驅(qū)動電路通過端口采集電機轉(zhuǎn)速進而輸出pwm波完成電機控制。pwm(pulse width modulation)控制技術(shù)就是對脈沖的寬度進行調(diào)制的技術(shù),即通過對一系列脈沖的
11、寬度進行調(diào)制,來等效的獲得所需要的波形(含形狀和幅值);面積等效原理是pwm技術(shù)的重要基礎(chǔ)理論;一種典型的pwm控制波形spwm:脈沖的寬度按正弦規(guī)律變化而和正弦波等效的pwm波形稱為spwm波。 圖2.7 電機驅(qū)動電路2.1.8報警電路當溫度過高或者過低時,報警電路會自動報警。圖2.8 報警電路2.2系統(tǒng)面板圖時間控制模塊面板圖如圖2.8,溫度測量模塊面板圖如圖2.9。圖2.9 直流電機控制模塊面板圖圖2.10 溫度測量模塊面板圖第三章 流程設(shè)計 3.1 軟件設(shè)計流程圖3.1.1 主程序流程圖電機調(diào)試程序流程:溫度測量程序流程:3.1.2 速度顯示子程序流程圖 圖5.2速度顯示子程序流程圖3
12、.1.3 溫度采集程序流程圖 3.3 溫度采集程序流程圖 3.4 報警子程序流程圖3.1.4串行通信接受與發(fā)送流程圖 第四章 程序說明4.1 直流電機部分程序#include #define uint unsigned int#define uchar unsigned charsbit p34=p34;sbit p26=p26;sbit p36=p36;uchar code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f ; uchar code chose=0x01,0x02,0x04,0x08,0x10,0x20;uin
13、t shu6=1,2,3,4,5,6;uchar q=0,i=0,m=0,n=0;uint count,miaoshu,sv,k=0,k2=0,sv1,sv2; /定義計數(shù)值,實際溫度值,設(shè)定的溫度值uchar sec,tcnt,flag,flag1;int rk,yk,uk,uk_1=0,ek,ek_1=0,ek_2=0; /pid計算參數(shù)signed char t=20,kp=30,td=8,ti=100,q0,q1,q2; /pid參數(shù)其值經(jīng)反復調(diào)試得來uchar data buf4=0,1,1,1;/字型顯示中間變量/*/延時子程序用來產(chǎn)生1ms的延時,用于在程序中的等待/*/延時1m
14、s子程序void delay(uchar z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*/顯示子程序用來在數(shù)碼管中顯示電機的設(shè)定轉(zhuǎn)速或計算轉(zhuǎn)速以及實際轉(zhuǎn)速/*/顯示子程序void display(uint a,uint b)char i;shu0=a/100;shu1=a%100/10;shu2=a%10;shu3=b/100;shu4=b%100/10;shu5=b%10;for(i=0;i6;i+)p2=chosei;p0=tableshui;delay(5); /*/定時器中斷子程序用來產(chǎn)生0.1秒的中斷,以此來測量電機的轉(zhuǎn)速/*/ 定時器中斷
15、0子程序void t0(void) interrupt 1 using 0 /定時t0中斷服務(wù)函數(shù)tcnt+; /每過250ust tcnt 加一if(tcnt=40) /計滿40 次(1/100 秒)時tcnt=0; /重新再計sec+;if(sec=10) /定時0.1 秒,在從零開始計時sec=0; th0=0x06; /對th0 tl0 賦值 tl0=0x06;miaoshu=count; count=0;/*/用來記錄中斷數(shù),從而得到轉(zhuǎn)速/*/void sdf(void) interrupt 2 using 0 /外部中斷服務(wù)函數(shù) count=count+1; /*/接收來自另一個單
16、片機的中斷并放入一個數(shù)組中以便在顯示函數(shù)中方便調(diào)用此數(shù)據(jù),其中加了容錯程序,通過一個特殊字符11,來區(qū)別哪一個是三位數(shù)的百位,十位,個位。/*/void jieshou()/接收子程序uchar g; if(ri=1) g=sbuf; if(g=11) m=0; bufm=g; m+; if(m=4) m=0; ri=0;/ren=1; /*/檢測按鍵值計算對應的數(shù)值/*/左移一位void yishu(uchar num)uchar bai,shi,ge;bai=sv1%100/10;shi=sv1%10;ge=num;sv1=bai*100+shi*10+ge;k2=sv1;/xinjia/
17、*/檢測對應的按鍵/*/按鍵子程序void key()uchar i,temp,lie,hang,shu;for(i=0;i4;i+) /求出按鍵值p1=chosei;temp=p1;temp=temp&0xf0;if(temp!=0xf0)hang=i;if(temp=0xe0)lie=1;else if(temp=0xd0)lie=2;else if(temp=0xb0)lie=3;else if(temp=0x70)lie=4;break; shu=hang*4+lie;/數(shù)為對應的按鍵switch(shu) case 1: if(!flag)yishu(0);break; case 2
18、: if(!flag) yishu(1);break; case 3: if(!flag) yishu(2);break; case 4: if(!flag) yishu(3);break; case 5: if(!flag) yishu(4);break; case 6: if(!flag) yishu(5);break; case 7: if(!flag) yishu(6);break; case 8: if(!flag) yishu(7);break;case 9: if(!flag) yishu(8);break;case 10: if(!flag) yishu(9);break;ca
19、se 11: flag+;/*flag1+*/; break;case 12: sv1=0;miaoshu=0;flag=0;flag1=0;break;case 13: flag1+; break; default: break;while(temp!=0xf0)/放鍵檢測temp=p1;temp=temp&0xf0;for(i=0;i501) uk=501; /限定輸出上限 if(uk100)p34=1; else if(ek=0)p34=1;delay(uk/10);display(sv,miaoshu);p34=0;delay(50-uk/10);/else if(ek0)/p34=0
20、; if(p26=0)display(sv1,miaoshu);else display(sv2,miaoshu); 4.2 溫度檢測部分程序#include#include #define uchar unsigned char #define uint unsigned intsbit data = p11; /ds18b20接入口uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共陰極字型碼int temp,temp2; /溫度值int ss;
21、/中間的一個變量int dd;int j,i0=0,k;uchar sec,tcnt,flag0,flag1,sec2;uchar data b;/定時器中斷次數(shù)uchar data buf4=0,0,0,0;/字型顯示中間變量uchar data buf24=11,0,0,0;int alarmh=500; /默認報警值int alarml=-10;/定義開關(guān)的接入口sbit k1=p25;/+sbit k2=p26;/-sbit k3=p27;/確認sbit k4=p24;sbit bell=p10;sbit hlight=p12;sbit llight=p13;sbit red=p16;
22、sbit green=p17;sbit p36=p36;bit set=0;bit flag=0;int n;/函數(shù)的聲明區(qū)void key_to1();void key_to2();void delay(uint);void key();void show();/函數(shù)的定義區(qū)/*延時子函數(shù)*/*/延時子程序用來產(chǎn)生延時,用于在程序中的等待/*/void delay(uint num)while(num-) ;/*/ds18b20溫度傳感器所需函數(shù),分為初始化,讀寫字節(jié),讀取溫度4個函數(shù)/*/init_ds18b20(void) /傳感器初始化 uchar x=0; data = 1; /dq
23、復位 delay(10); /稍做延時 data = 0; /單片機將dq拉低 delay(80); /精確延時 大于 480us /450 data = 1; /拉高總線 delay(20); x=data; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay(30);readonechar(void) /讀一個字節(jié)uchar i=0;uchar dat = 0;for (i=8;i0;i-) data = 0; / 給脈沖信號 dat=1; data = 1; / 給脈沖信號 if(data) dat|=0x80; delay(8); return(dat);writeo
24、nechar(unsigned char dat)/寫一個字節(jié) uchar i=0; for (i=8; i0; i-) data = 0; data = dat&0x01; delay(10); data = 1; dat=1; delay(8);int readtemperature(void) /讀取溫度uchar a=0;uchar b=0;int t=0;float tt=0;init_ds18b20();writeonechar(0xcc); / 跳過讀序號列號的操作writeonechar(0x44); / 啟動溫度轉(zhuǎn)換init_ds18b20();writeonechar(0x
25、cc); /跳過讀序號列號的操作writeonechar(0xbe); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=readonechar();/低位b=readonechar();/高位t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; return(t);/*/根據(jù)采集到的溫度的實際值來分別進行正負溫度的顯示,精確到小數(shù)點后一位/*/void display00() /*顯示負值子函數(shù) dd=-(temp-1); buf1=dd/100;buf2=dd/100;buf3=dd%100/10;buf0=dd%10; buf21=0;buf22=0;b
26、uf23=0;/動態(tài)顯示for(j=0;j5;j+) p2=0xff; / 初始燈為滅的 p0=0x00;p2=0xfd; /顯示小數(shù)點p0=0x80; /顯示小數(shù)點delay(100); p2=0xff; / 初始燈為滅的 p0=0x00; p2=0xf7; /片選lcd1 p0=0x40;delay(100); p2=0xff; p0=0x00; p2=0xfb; /片選lcd2 p0=tablebuf2;delay(100);p2=0xff; p0=0x00;p2=0xfd; /片選lcd3p0=tablebuf3;delay(100);p2=0xff; p0=0x00;p2=0xfe;
27、p0=tablebuf0; /片選lcd4delay(100);p2=0xff; /顯示正值子函數(shù)void display()buf1=temp/1000;/顯示百位buf2=temp/100%10;/顯示十位buf3=temp%100/10;/顯示個位buf0=temp%10; /第4位 南北秒個位temp2=temp*7; buf21=temp2/1000;/顯示百位buf22=temp2/100%10;/顯示十位buf23=temp2%100/10;/顯示個位for(j=0;j3;j+) p2=0xff; / 初始燈為滅的 p0=0x00;p2=0xfd; /顯示小數(shù)點p0=0x80;
28、/顯示小數(shù)點delay(300); p2=0xff; / 初始燈為滅的 p0=0x00; p2=0xf7; /片選lcd1 p0=tablebuf1;delay(300); p2=0xff; p0=0x00; p2=0xfb; /片選lcd2 p0=tablebuf2;delay(300);p2=0xff; p0=0x00;p2=0xfd; /片選lcd3p0=tablebuf3;delay(300);p2=0xff; p0=0x00;p2=0xfe;p0=tablebuf0; /片選lcd4delay(300);p2=0xff;/*/掃描按鍵,進行上下限的設(shè)定/*/void key()/按鍵
29、掃描子程序 if(k1!=1) delay(20); if(k1!=1) while(k1!=1) key_to1(); for(n=0;n8;n+) show(); if(k2!=1)delay(20);if(k2!=1) while(k2!=1) key_to2(); for(n=0;n=1100) temp=-550; if(set=0)alarmh=temp;else alarml=temp;void key_to2() tr0=0; /關(guān)定時器 temp-=10;if(tempalarmh|temp=0)hlight=1;llight=0;display();/顯示函數(shù)if(temp
30、0)hlight=0;llight=1;display00();/*/主函數(shù)/*/void main() tcon=0x05; tmod=0x21; scon=0x40;th0=0xd8;tl0=0xf0;th1=0xfc;tl1=0xfc;ea=1;et0=1;tr0=1; tr1=1;/ex0=1;for(n=0;n500;n+)/顯示啟動logo- - - -bell=0;logo(); red=0;while(1) key(); ss=readtemperature(); show();alarm();if(flag=1)bell=!bell; /蜂鳴器滴滴響else bell=0; /*/延時子程序用來產(chǎn)生10ms的延時,用于在程序中的等待,并且每10ms進行一次串行通信,把電機應有的轉(zhuǎn)速值發(fā)給另一個單片機。/*/ void time0(void) interrupt 1 using 1 /每隔10ms執(zhí)行一次此子程序 th0=0x56;tl0=0xdc;temp=ss;ti=0;sbuf=buf2i0;i0+;if(i0=4)i0=0;/*if(i0=3)sbuf=buf2i0;i0=0;else
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《計算機病毒與木馬》課件
- 睪丸觸痛的臨床護理
- 丹毒絲菌病的臨床護理
- 堵奶的健康宣教
- 維生素營養(yǎng)障礙的健康宣教
- JJF(陜) 113-2024 低頻電磁場測量儀校準規(guī)范
- 函數(shù)復習課課件
- 新課程標準學習與落實計劃
- 數(shù)字在線服務(wù)相關(guān)項目投資計劃書范本
- 新型膜材料及其裝置行業(yè)相關(guān)投資計劃提議
- 【企業(yè)盈利能力探析的國內(nèi)外文獻綜述2400字】
- 危急值的考試題及答案
- 法務(wù)崗位招聘面試題及回答建議(某大型央企)2024年
- 職業(yè)生涯規(guī)劃-體驗式學習智慧樹知到期末考試答案章節(jié)答案2024年華僑大學
- 大學生國家安全教育智慧樹知到期末考試答案2024年
- 陜09J01 建筑用料及做法圖集
- 三方比價單74440
- 標準人手孔面積與土方表
- UNI 鋼材對照表
- 管道保護工試題5.實際操作題
- 市紀檢監(jiān)察機關(guān)辦案安全工作規(guī)定
評論
0/150
提交評論