

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 智能儀表綜合訓練設計說明書</p><p> 題 目:數字PID控制器設計(LCD顯示)</p><p><b> 學生姓名:</b></p><p><b> 學 號:</b></p><p> 專 業(yè):測控技術與儀器</p><
2、p><b> 班 級:</b></p><p><b> 指導教師:</b></p><p><b> 摘 要</b></p><p> 目前工業(yè)自動化水平已成為衡量各行各業(yè)現代化水平的一個重要標志。同時,控制理論的發(fā)展也經歷了古典控制理論、現代控制理論和能控制理論三個段。在工業(yè)
3、過程控制中,由于控制對象的精確數學模型難以建立,系統的參數又經常發(fā)生變化,運用現代控制理論分析綜合要耗費很大代價進行模型辨識,建立系統的數學模型十分困難,應用直接數字控制方法比較困難,所以人們在過程控制系統中大部分采用PID(Proportion Integration Differentiation.比例-積分-微分控制器)數字調節(jié)器。</p><p> 此次智能儀表課程設計要求是設計一種數字PID控制器,該
4、數字調節(jié)器采用 STC89C51單片機作為主控單元,采用ADC0832作為A/D轉換器,具有數字濾波等功能,通過PID算法實現調節(jié)功能,調節(jié)器設定值、參數可通過四個獨立按鍵設置,采用DS1602 LCD數字顯示,用PWM脈寬調制電路輸出電壓信號。</p><p> 關鍵詞:數字調節(jié)器;A/D轉換器;PID控制算法;四獨立按鍵;PWM脈寬調制電路。</p><p><b> 第
5、一章 前言</b></p><p> 1.1數字PID控制器概述</p><p> 在過程控制中按偏差的比例(P)、積分(I)和微分(D)進行控制的PID調節(jié)器(亦稱PID控制器)是應用頗為廣泛的一種調節(jié)器。它具有原理簡單,易于實現,健壯性強和適用面廣等優(yōu)點。在計算機應用于生產過程以前,過程控制中采用的氣動、液動和電動PID調節(jié)器幾乎一直占壟斷地位。計算機的出現和它在過程
6、控制中的應用使這種情況開始有所改變。20多年來相繼出現一批復雜的、只有計算機才能實現的控制算法。然而目前在工業(yè)過程控制中,由于工業(yè)對象的動態(tài)特性未被完全掌握,得不到精確的數學模型,難以滿足控制理論的分析要求,在決定系統參數時,往往要借助現場調試及經驗,在這種場合,PID調節(jié)器就更能顯示出它的威力,應用范圍越來越廣。即使在過程計算機控制中,PID控制仍然是應用最廣泛的控制算法。不過,用計算機實現PID控制,就不僅僅是簡單地把PID控制規(guī)律
7、數字化,而是進一步與計算機的邏輯判斷能力結合起來,使PID控制更加靈活多樣,更能滿足生產過程提出的各種各樣的要求。PID調節(jié)的實質就是根據輸入的偏差值,按比例、積分、微分的函數關系進行運算,運算結果用以控制輸出。這里需要說明的是數字式PID應用是有條件的。在系統的時間常</p><p> 在現代工業(yè)控制中, 過程控制技術是一歷史較為久遠的分支。目前,在某些工業(yè)及其他領域的過程控制系統中,簡單的單回路控制已不能滿
8、足控制的要求。因此又設計出了串級控制系統、比值控制系統、均勻控制系統、前饋控制系統、選擇性控制系統、分程及閥位控制系統和一些新型控制系統等來對一些參數(如壓力、流量、溫度、成分、物位等)進行檢測控制。在各種控制系統中控制器是必不可少的部分,數字PID控制器更是發(fā)揮著它靈活多樣的特性。在實際應用中,根據被控對象的特性和控制要求,可以靈活地改變PID的結構,取其中的一部分環(huán)節(jié)構成控制規(guī)律,比如比例(P)調節(jié)、比例積分(PI)調節(jié)、比例積分微
9、分(PID)調節(jié)等。特別是在計算機控制系統中,更可以靈活應用,以充分發(fā)揮計算機作用。</p><p> 1.2 PID調節(jié)器簡介</p><p> 1.2.1比例調節(jié)(P)</p><p> 比例調節(jié)器的微分方程為:</p><p><b> (1-1)</b></p><p> 式中:
10、y為調節(jié)器的輸出,e(t)為調節(jié)器的輸入,一般為偏差值,即e(t)=U(R)-Ui(k),kp為比列系數。</p><p> 由上式可以看出,調節(jié)器的輸出y與輸入偏差e(t)成正比。因此,只要偏差e(t)一出現,就能及時地產生與之成比例的調節(jié)作用,具有調節(jié)及時的特點,它是最基本的一種調節(jié)規(guī)律。</p><p> 比例調節(jié)的特性曲線,如圖1.1所示。</p><p&g
11、t; 比例調節(jié)作用的大小,除了與偏差e(t)有關外,主要取決于比例系數Kp,比例系數愈大,調節(jié)作用愈強,動態(tài)特性也愈好。反之,比例系統愈小,調節(jié)作用愈弱。但對于大多數慣性環(huán)節(jié)Kp太大時會引起白激振蕩。 [1]</p><p> 圖1.1階躍響應特性曲線 </p><p> 1.2.2 比例-積分調節(jié)器(PI)</p><p>
12、 積分作用是指調節(jié)器的輸出與輸入偏差的積分成比例的作用,其積分方程為:</p><p><b> (1-2)</b></p><p> Ti為積分時間常數,它表示積分速度的大小,Ti越大,積分速度越慢,積分作用越弱。反之Ti越小,積分速度越快,積分作用越強,積分作用的響應特性曲線,如圖1.2所示。積分作用的特點是調節(jié)器的輸出與偏差存在時間有關,只要有偏差存在,輸出
13、就會隨時間不斷增長,直到偏差消除,調節(jié)器的輸出才不再變化。因此,積分作用能消除靜差,這是它的主要優(yōu)點。但從圖1.2中可以看出,積分作用的動作緩慢,而且在偏差剛一出現時,調節(jié)器作用很弱,不能及時克服擾動的影響,致使被調參數的動態(tài)偏差增大,調節(jié)過程增長,因此,它很少被單獨使用。</p><p> 圖1.2 積分作用相應曲線圖 </p><p> PI調節(jié)器綜合了P、I
14、兩種調節(jié)的優(yōu)點,利用P調節(jié)快速抵消干擾的影響,同時利用I調節(jié)消除靜差。</p><p> 1.2.3 比例-微分調節(jié)器(PD)</p><p> 自動控制系統在克服誤差的調節(jié)過程中可能會出現振蕩甚至失穩(wěn)。解決的辦法是使抑制誤差的作用的變化“超前”,即在誤差接近零時,抑制誤差的作用就應該是零。這就是說,在控制器中僅引入 “比例”項往往是不夠的,比例項的作用僅是放大誤差的幅值,而目前需要增
15、加的是“微分項”,它能預測誤差變化的趨勢,這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負值,從而避免了被控量的嚴重超調。所以對有較大慣性或滯后的被控對象,比例+微分(PD)控制器能改善系統在調節(jié)過程中的動態(tài)特性。 </p><p><b> 微分方程為:</b></p><p><b> ?。?-3)</b><
16、;/p><p> 式中,TD為微分時間常數。</p><p> 微分作用響應曲線,如圖1.3所示。</p><p> 圖1.3微分作用相應特性曲線 圖1.4 PD調節(jié)器的階躍響應特性曲線</p><p> 從圖1.3中可以看出,在t=to時加入階躍信號,此時輸出值y變化的速度很大(理論上為無窮大),當t>
17、to時,其輸出值y迅速變?yōu)?。這里需要說明,微分作用的特點是,輸出只能反應偏差輸入變化的速度,而對于一個固定不變的偏差,不管其數值多大,根本不會有微分作用輸出。因此,微分作用不能消除靜差,而只能在偏差剛剛出現的時刻產生一個很大的調節(jié)作用。</p><p> 微分調節(jié)只能起輔助的調節(jié)作用,需要與比例作用配合使用,構成PD調節(jié)器。實際PD調節(jié)器的階躍響應曲線,如圖1.4所示,從圖1.4曲線可以看出,當偏差剛出現的瞬
18、間,PD調節(jié)器輸出一個很大的階躍信號,然后按指數下降,以至最后微分作用完全消失,變成一個純比例調節(jié)。微分作用的強弱可以用改變微分時間常數Td來進行調節(jié)。</p><p> 1.2.4比例-積分-微分調節(jié)器(PID)</p><p> 為了進一步改善調節(jié)品質,往往把比例、積分、微分三種作用組合起來,形成PID三作用調節(jié)器。理想的P1D微分方程為:</p><p>
19、<b> ?。?-4)</b></p><p> 對于一個PID三作用調節(jié)器,在階躍信號作用下,首先是比例和微分作用,使其調節(jié)作用加強,然后再進行積分,直到最后消除靜差為止。因此,采用PID調節(jié)器,無論從靜態(tài),還是從動態(tài)的角度來說,調節(jié)品質均得到了改善,從而使得PID調節(jié)器成為一種應用最為廣泛的調節(jié)器。</p><p> 這里要說明的是,并非所有系統都需要使用PI
20、D調節(jié)器,在工業(yè)控制系統中, PI、PD調節(jié)器也常常被人們所采用,因為它們比較簡單。究競使用哪一種調節(jié)器合適,只有根據具體情況,并根據現場實驗進行選定。</p><p> 第二章 數字PID控制器總體方案設計</p><p> 2.1數字PID調節(jié)器的構成</p><p> 數字PID 調節(jié)器就是將模擬信號( 包括電流、電壓) 通過AD 轉換變?yōu)閿底中盘? 微
21、處理器(本設計采用單片機)再將數字信號通過一定的算法進行一定的處理, 然后將處理過后的數字信號通過DA 轉換為模擬信號輸出。該數字調節(jié)器采用 STC89C51單片機作為主控單元,采用ADC0832作為A/D轉換器,具有數字濾波等功能,通過PID算法實現調節(jié)功能,調節(jié)器的參數可通過四個獨立按鍵設置,采用DS1602 LCD數字顯示,用PWM脈寬調制電路輸出電壓信號以驅動執(zhí)行機構。傳統的調節(jié)器多為模擬調節(jié)器,這種調節(jié)器多用電動或氣動單元組合
22、儀表來完成隨著微機的不斷發(fā)展和應用,特別是單片機在控制領域廣泛應用,利用計算機軟件實現控制算法,具有更大的靈活性、可靠性和更好的控制效果。因此,以單片機為中心、采用數字算法的數字調節(jié)器正不斷代替模擬調節(jié)器。如圖2.1所示單片機系統首先通過轉換電路采集過程變量,然后計算偏差和輸出控制變量,最后將控制變量、經轉換后輸出到執(zhí)行機構控制輸入量,使過程變量穩(wěn)定在設定值,達到控制目的。</p><p> 圖2.1 所示的P
23、ID調節(jié)器以單片機STC89C51(實現PID算法)為核心,其他還包括:A/D 模塊、1602 LCD顯示模塊、按鍵模塊和PWM輸出模塊。</p><p> 圖2.1調節(jié)器結構框圖</p><p> 2.2 PID調節(jié)器的控制原理</p><p> 在工程實際中,應用最為廣泛的調節(jié)器控制規(guī)律為比例、積分、微分控制,簡稱PID控制。PID控制器自問世以來以其結構
24、簡單、穩(wěn)定性好、工作可靠、調整方便而成為工業(yè)控制的主要技術之一。當被控對象的結構和參數不能完全掌握,或得不到精確的數學模型時,控制理論的其它技術難以采用時,系統控制器的結構和參數必須依靠經驗和現場調試來確定,這時應用PID控制技術最為方便。即當我們不完全了解一個系統和被控對象﹐或不能通過有效的測量手段來獲得系統參數時,最適合用PID控制技術。</p><p> PID控制器實質就是根據輸入的偏差值,按比例、積分
25、、微分的函數關系進行運算,運算結果用以控制輸出,其輸出值再經過PWM輸出電壓信號送給執(zhí)行機構進行調節(jié)控制。</p><p> 第三章 數字PID控制器硬件設計</p><p> 3.1 主處理器的選擇</p><p> 本次課程設計的主處理器是宏晶科技推出的新一代超強抗干擾、高速、低功耗的STC89C51 RC單片機,指令代碼完全兼容傳統8051單片機,12時
26、鐘/機器周期和6時鐘/機器周期可任意選擇。</p><p><b> 其主要參數如下:</b></p><p> 最高時鐘頻率范圍為:0~80M</p><p> FLASH存儲器:4K</p><p> 片上集成1280字節(jié)/512字節(jié)RAM</p><p> E2P ROM:2K+&
27、lt;/p><p> 工作電壓:5.5V~3.4V(5V單片機)</p><p> 共三個16位定時器/計數器,其中定時器0還可以當成2個8位定時器使用。</p><p> 通用I/O口(32/36個),復位后為:P1/P2/P3/P4是準雙向口/弱上拉(普通8051傳統I/O口),P0口是開漏輸出,作為總線擴展時,不用加上拉電阻,作為I/O口時需加上拉電阻。&l
28、t;/p><p> 中斷源:8個,優(yōu)先級:4個。</p><p> 其管腳圖如下圖3.1所示。</p><p> 圖3.1 STC89C51管腳圖</p><p> 3.2 A/D轉換器ADC0832簡介 </p><p> 3.2.1 ADC0832 的特點</p><p>
29、 ADC0832 為8位分辨率A/D轉換芯片,其最高分辨可達256級,可以適應一般的模擬量轉換要求。其內部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉換時間僅為32μS,據有雙數據輸出可作為數據校驗,以減少數據誤差,轉換速度快且穩(wěn)定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數據輸入端,可以輕易的實現通道功能的選擇。</p><p><b>
30、其主要參數如下:</b></p><p><b> 8位分辨率;</b></p><p><b> 雙通道A/D轉換;</b></p><p> 輸入輸出電平與TTL/CMOS相兼容;</p><p> 5V電源供電時輸入電壓在0~5V之間;</p><p&g
31、t; 工作頻率為250KHZ,轉換時間為32μS;</p><p> 一般功耗僅為15mW;</p><p> 8P、14P—DIP(雙列直插)、PICC 多種封裝;</p><p> 商用級芯片溫寬為0°C~+70°C,工業(yè)級芯片溫寬為?40°C~+85°C;</p><p><b>
32、; 芯片接口說明:</b></p><p> 片選使能,低電平芯片使能;</p><p> CH0 模擬輸入通道0,或作為IN+/-使用;</p><p> CH1 模擬輸入通道1,或作為IN+/-使用;</p><p> GND 芯片參考0 電位(地);</p><p> DI 數據信號輸入,
33、選擇通道控制;</p><p> DO 數據信號輸出,轉換數據輸出;</p><p> CLK 芯片時鐘輸入;</p><p> Vcc/REF 電源輸入及參考電壓輸入(復用)。</p><p> 3.2.2單片機對ADC0832 的控制原理</p><p> 正常情況下ADC0832 與單片機的接口應為4條
34、數據線,分別是、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。當ADC0832未工作時其輸入端應為高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行A/D轉換時,須先將使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的
35、數據信號。在第1 個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2 位數據用于選擇通道功能。作為單通道模擬信號輸入時ADC0832的輸入電壓是0~5V且8位分辨率時的電壓精度為19.53mV。如果作為由IN+與IN-輸入的輸入時,可是將電壓值設定在某一個較大范圍之內,從而提高轉換的寬度。但值得注意的是,在進行IN+與IN-的輸入時,如果IN-的電壓大于IN+的電壓則轉換后的數據結果始終為00H
36、。</p><p> 3.2.3 標度變換</p><p> 由于種物理參數有不同的量綱,如溫度為℃;壓力采用Pa;流量用m3/n 等。這些參數經A/D轉換后,變成數字量信息輸出,這個數字量雖然代表參數值的大小,但并不一定等于原來帶有量綱的參數值,必須將它轉換成原來參數的真實值才能進行顯示,打印或使用,而這就需要標度變換。</p><p> 線性標度變換公式
37、如下:</p><p><b> Ax:參數測量值</b></p><p> Ao:參數量程起點值 </p><p> Am:參數量程終點值 </p><p> No:量程起點對應的A/D轉換值</p><p> Nm:量程終點對應的A/D轉換值</p>
38、<p> Nx:測量值對應的A/D值(采樣值),即濾波器的輸出值 </p><p> 此次課程設計要求將4-20mA的電流信號轉化為1-5V電壓信號,8位的ADC0832對應的數字量是51-255,(AD-51)/(255-51)=(v-1)/(5-1) 變換完的電壓電壓v=AD/51,而要顯示的是液位信號,1-5v電壓對應液位0-500mm,即:</p><p>
39、 (Ax-Ao)/(Am-Ao)=(V-1)/(5-1)(Ao=0液位最小值,Am=500mm最大值) </p><p> Ax=(V-1)*(Am-Ao)/4 +Ao=(AD-51)*(Am-Ao)/204.0 +Ao</p><p> 3.3 PID算法的實現</p><p> 3.3.1 PID算法的數字化</p><p> 在
40、模擬系統中,PID算法的表達式為:</p><p><b> (3-1)</b></p><p> 式中p(t)—調節(jié)器的輸出信號;</p><p> e(t)—調節(jié)器的偏差信號,它等于給定值與測量值之差;</p><p> kp—調節(jié)器的比例系數;</p><p> Ti—調節(jié)器的積分
41、時間;</p><p> TD—調節(jié)器的微分時間。</p><p> 由于計算機控制是一種采樣控制,它只能根據采樣時刻的偏差來計算所需控制量。因此,在計算機控制系統中,必須首先對式(3-1)進行離散化處理,用數字形式的差分方程代替連續(xù)系統的微分方程,此時積分項和微分項可用求和及增量式表示:</p><p> (3-2) </p>
42、<p><b> (3-3)</b></p><p> 將式(3-2)和式(3-3)代入式(3-1),則得到離散化的PID表達式:</p><p> (3-4) 式中 △t=T—采樣周期,必須使T足夠小,才能保證系統有一定的精度;</p><p> E(k)—第k次采樣時的偏差值;</p><p>
43、 E(k-1)—第(k-1)次采樣時的偏差值;</p><p> k—采樣序號,k=0,1,2, ….;</p><p> p(k)—第k次采樣時的調節(jié)器的輸出。</p><p> 由式(3-4)可以看出,要想計算p(k),不僅需要本次與上次的偏差信號E(k)和E(k-1),而且還要在積分項中把歷次的偏差信號E(j)進行相加,即E(j)。這樣,不僅計算煩瑣,
44、而且為保存E(j)還要占用很多內存。因此,用式(3-4)直接進行控制很不方便。為此,我們做如下改動</p><p><b> (3-5)</b></p><p> 用式(3-4)減去式(3-5),可得:(3-6)</p><p> 式中,----積分系數;</p><p><b> ----微分系數。&
45、lt;/b></p><p> 由式(3-6)可知,要計算第k次輸出值p(k),只需知道p(k-1), E(k), E(k-1), E(k-2)即可。在很多控制系統中,由于執(zhí)行機構式采用步進電機或多圈電位器進行控制的,所以,只要給一個增量信號即可。</p><p> = (3-7)</p><p> 式(3-7)表示第K次輸出的增量△p(k),等于
46、第K-1次調節(jié)器的輸出值,即在第(K-1)次的基礎上增加(或減少)的量,所以式(3-7)叫增量型PID控制式。</p><p> 3.3.2 PID算法的程序設計</p><p> 由式(3-7)可知,增量型PID算式為:</p><p><b> (3-8)</b></p><p><b> =<
47、;/b></p><p><b> 設 </b></p><p><b> 所以,有 </b></p><p> △p(k)= △Pp(k)+ △Pi(k)+ △PD(k) (3-9)</p><p> 上式為離散化的增量型PID編程表達式。<
48、/p><p> 3.4 四獨立按鍵設計</p><p> 用四個獨立按鍵K1、K2、K3、K4實現PID調節(jié)器的設定值及Kp,Ki和Kd三個參數的設定。按鍵位置如圖(3.2)所示,仿真如圖(3.3)所示。PID調節(jié)的實質就是根據輸入的偏差值,按比例、積分、微分的函數關系進行運算,運算結果用以控制輸出。</p><p> K1 K2 K3
49、 K4</p><p> 圖3.2 按鍵位置圖</p><p> 圖3.3 按鍵仿真圖</p><p> 四個按鍵:K1接P1.4、K2接P1.5、K3接P1.6、K4接P1.7。K1是功能鍵,實現Sv、Kp、Ki、Kd四種模式選擇。K2是確認鍵,當鍵按下時可進行相應參數設置,設置完后按下鍵即可確認保存相應數據。K3是加計數鍵,K4是減計數鍵。通過鍵
50、盤更改PID參數來選擇不同的PID控制算法。</p><p> 3.5 LCD顯示模塊</p><p> LCD 1602是指顯示的內容為16*2,即可以顯示兩行,每行16個字符液晶模塊。1602字符型液晶顯示模塊是一種專門用于顯示字母、數字、符號等點陣式LCD,一般1602字符型液晶顯示器實物如下圖3.4所示:</p><p> 圖3.4 LCD 1602實
51、物圖</p><p> 1602采用標準的16腳接口,其中: </p><p> 1腳:VSS為電源地 ; </p><p> 2腳:VCC接5V電源正極 ; </p><p> 3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高?! ?lt;/p><p> 4腳:RS為寄存器
52、選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。 </p><p> 5腳:RW為讀寫信號線,高電平1時進行讀操作,低電平0時進行寫操作。 </p><p> 6腳:EN端為使能端。 </p><p> 7~14腳:D0~D7為8位雙向數據端。 </p><p> 15~16腳:空腳或背燈電源。15腳
53、背光正極,16腳背光負極。</p><p><b> 3.6 PWM電路</b></p><p> PWM脈寬調制(Pulse Width Modulation,PWM)是通過對一系列脈沖的寬度進行調制,等效地獲得所需要的波形(含形狀和幅值)。脈寬調制是一種應用比較普通的控制方式,脈寬調制是保持逆變器的工作頻率不變,即載波頻率不變,而通過改變導通時間或截至時間
54、來改變占空比的調制方式。三個參量:幅值,載波,占空比,主要是傳函于占空比,即脈沖的寬度。PWM信號進行RC處理輸出電壓信號,一般用于電機調速控制。</p><p> PWM變頻電路具有以下特點:1.可以得到相當接近正弦波的輸出電壓。2.整流電路采用二極管,可獲得接近1的功率因數。3.電路結構簡單。4.通過對輸出脈沖寬度的控制可改變輸出電壓,加快了變頻過程的動態(tài)響應。</p><p&g
55、t; 此次設計所用PWM電路板是同學自己設計焊接而成,將輸出電壓信號進行放大2倍, 用以驅動執(zhí)行機構。</p><p> 第四章 數字PID控制器軟件設計</p><p> 4.1 單回路調節(jié)器主程序流程圖</p><p> 圖4.1 單回路調節(jié)器主程序流程圖</p><p> 4.2 各部分子程序流程圖</p>
56、<p> 4.2.1 A\D轉換子程序流程圖</p><p> 圖4.2 A\D轉換子程序流程圖</p><p> 4.2.2 PID算法子程序流程圖</p><p> 圖4.3 PID算法子程序流程圖 </p><p> 4.2.3 四獨立按鍵子程序流程圖</p><p> 圖4.4 四獨立
57、按鍵子程序流程圖</p><p> 4.2.4 LCD顯示子程序流程圖</p><p> 圖4.5 LCD顯示子程序流程圖</p><p> 4.2.5 PWM子程序流程圖</p><p> 圖4.6 PWM子程序流程圖</p><p><b> 第五章 總結</b></p&g
58、t;<p> 通過此次PID數字控制器設計,對控制系統總體方案設計、硬件設計、軟件設計以及編程調試有了整體詳盡的了解,對數字PID控制技術有了更加深刻的認識。</p><p> 在整個設計過程中,硬件大部分都是本專業(yè)老師提供的,只有PWM脈寬調制電路是同學自己焊的。主處理器選用的芯片是STC89C51/2RC。A/D轉換部分選用的芯片是ADC0832,A/D接收的模擬信號來自電位器,將0-5V的
59、模擬量轉換成0-255的數字量。PID算法采用增量型算式,用數字形式的差分方程代替連續(xù)系統的微分方程。LCD顯示部分選用DS1602顯示模塊。四個獨立按鍵實現對調節(jié)器參數的設定功能。</p><p> 此次設計是以小組為單位進行的,我們五個人一組,每個人負責一部分。在組長的帶領下,經過討論將各子程序模塊以子程序調用的方式組合到一起,軟件編程調試最終成功。在程序調試過程中,我深刻認識到團隊合作精神的重要性,團隊合
60、作的力量是無窮盡的,只有融入集體我們才能將自身的價值最大化,進而推動社會更好更快發(fā)展。</p><p><b> 參考文獻</b></p><p> [1] 潘新民,《微型計算機控制技術》,北京:電子工業(yè)出版社, 1988年03月 第二版。</p><p> [2] 王凌強.基于數字PID控制器的仿真[J].科技信息(學術版).2006(
61、04)</p><p> [3] 王燕芳、潘新民,《微型計算機控制技術》,北京:電子工業(yè)出版社,2006.1。</p><p> [4] 姚永平,《STC89C51/RC+系列單片機器件手冊》,宏晶科技,2007年11月17日。</p><p> [5] 董永祥,智能儀器的設計及發(fā)展,山西電子技術,2006年第1期。</p><p>
62、 [6] 郝長勝,《C語言程序設計》,內蒙古大學出版社,2005年12月 第一版。</p><p> [7] 趙茂泰,《智能儀器原理及應用》,北京:電子工業(yè)出版社,2004年7月 第二版。</p><p> [8] 潘永雄,《新編單片機原理與應用》,西安電子科技大學出版社,2007年02月 第二版。</p><p> [9] 雷力鳴,單片機在數字調節(jié)器中的應用
63、,西南自動化研究所,兵工自動化,1997年 第3期。</p><p> [10] 蔡杏山,《Protel 99 SE 電路設計》,北京:人民郵電出版社,2007年07月 第一版。 </p><p> [11] 俞云奎,《可編程序
64、調節(jié)器、控制器原理與應用》,1997年05月 第一版。</p><p><b> 附錄A</b></p><p><b> 硬件原理圖 </b></p><p><b> 附錄B</b></p><p><b> 源程序</b></p>
65、<p> #include <reg52.h></p><p> #include <intrins.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> #define delay
66、4us() {_nop_();_nop_();_nop_();_nop_();}</p><p> sbit RS = P1^0;</p><p> sbit RW = P1^1;</p><p> sbit E = P1^2;</p><p> sbit CS = P2^3;</p><p>
67、; sbit CLK = P2^4;</p><p> sbit DIO = P2^5;</p><p> uchar ZKB1=0;</p><p> uchar Display_Buffer[] = "0000";</p><p> void init_sys(void); /*系統初始化函數*/<
68、;/p><p> void PWMOUT(void);</p><p> void button(void);</p><p> void Set_Disp_Pos(uchar pos);</p><p> void L1602_char(uchar row,uchar col,char sign);</p><p&g
69、t; void L1602_string(uchar row,uchar col,uchar *p);</p><p> int yewei_PID(int SP);</p><p> /*************************************************/</p><p> void DelayMS(uint ms)<
70、/p><p><b> {</b></p><p><b> uchar i;</b></p><p> while(ms--)</p><p><b> {</b></p><p> for(i=0;i<120;i++);</p>
71、;<p><b> }</b></p><p><b> }</b></p><p> /*************************************************/</p><p> bit LCD_Busy_Check(void)</p><p>&
72、lt;b> {</b></p><p> bit result;</p><p><b> RS = 0;</b></p><p><b> RW = 1;</b></p><p><b> E = 1;</b></p><p&
73、gt; delay4us();</p><p> result = (bit)(P0&0x80);</p><p><b> E = 0;</b></p><p> return result;</p><p><b> }</b></p><p> /
74、*************************************************/</p><p> void LCD_Write_Command(uchar cmd)</p><p><b> {</b></p><p> while(LCD_Busy_Check());</p><p><
75、;b> RS = 0;</b></p><p><b> RW = 0;</b></p><p><b> E = 0;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b&
76、gt;</p><p><b> P0 = cmd;</b></p><p> delay4us();</p><p><b> E = 1;</b></p><p> delay4us();</p><p><b> E = 0;</b>&l
77、t;/p><p><b> }</b></p><p> /*************************************************/</p><p> void Set_Disp_Pos(uchar pos)</p><p><b> {</b></p>
78、<p> LCD_Write_Command(pos | 0x80);</p><p><b> }</b></p><p> /*************************************************/</p><p> void LCD_Write_Data(uchar dat)</p&g
79、t;<p><b> {</b></p><p> while(LCD_Busy_Check());</p><p><b> RS = 1;</b></p><p><b> RW = 0;</b></p><p><b> E = 0;&
80、lt;/b></p><p><b> P0 = dat;</b></p><p> delay4us();</p><p><b> E = 1;</b></p><p> delay4us();</p><p><b> E = 0;</b
81、></p><p><b> }</b></p><p> /*************************************************/</p><p> void LCD_Initialise(void)</p><p><b> {</b></p&g
82、t;<p> LCD_Write_Command(0x38); DelayMS(1);</p><p> LCD_Write_Command(0x0c); DelayMS(1);</p><p> LCD_Write_Command(0x06); DelayMS(1);</p><p> LCD_Write_Command(0x01); Del
83、ayMS(1);</p><p><b> }</b></p><p> /*************************************************/</p><p> void L1602_char(uchar row,uchar col,char sign)</p><p><b
84、> {</b></p><p><b> uchar a;</b></p><p> if(row == 1)a = 0x80;</p><p> if(row == 2)a = 0xc0;</p><p> a = a + col - 1;</p><p> LCD
85、_Write_Command(a);</p><p> LCD_Write_Data(sign);</p><p><b> }</b></p><p> /*************** 顯 示 字 符 串 ******************/</p><p> void L1602_string(uchar
86、 row,uchar col,uchar *p)</p><p><b> {</b></p><p> uchar a,b=0;</p><p> if(row == 1)a = 0x80;</p><p> if(row == 2)a = 0xc0;</p><p> a = a +
87、 col - 1;</p><p><b> while(1)</b></p><p><b> {</b></p><p> LCD_Write_Command(a++);</p><p><b> b++;</b></p><p> if(
88、(*p == '\0')||(b == 16))break;</p><p> LCD_Write_Data(*p);</p><p><b> p++;</b></p><p><b> }</b></p><p><b> }</b></p&g
89、t;<p> /*-----------------------------------------</p><p> AD 采 樣 函 數</p><p> -----------------------------------------*/</p><p> uchar Get_AD_Result(void)</p><
90、;p><b> {</b></p><p> uchar i,dat1=0,dat2=0;</p><p><b> CS = 0;</b></p><p><b> CLK = 0;</b></p><p> DIO = 1; _nop_(); _nop_(
91、);</p><p> CLK = 1; _nop_(); _nop_();</p><p> CLK = 0;DIO = 1; _nop_(); _nop_();</p><p> CLK = 1; _nop_(); _nop_();</p><p> CLK = 0;DIO = 1; _nop_(); _nop_();</p
92、><p> CLK = 1;DIO = 1; _nop_(); _nop_();</p><p> CLK = 0;DIO = 1; _nop_(); _nop_();</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> CLK
93、= 1; _nop_(); _nop_();</p><p> CLK = 0; _nop_(); _nop_();</p><p> dat1 = dat1 << 1 | DIO;</p><p><b> }</b></p><p> for(i=0;i<8;i++)</p>
94、<p><b> {</b></p><p> dat2 = dat2 << ((uchar)(DIO)<<i);</p><p> CLK = 1; _nop_(); _nop_();</p><p> CLK = 0; _nop_(); _nop_();</p><p>&
95、lt;b> }</b></p><p><b> CS = 1;</b></p><p> return (dat1 == dat2) ? dat1:0;</p><p><b> }</b></p><p> /************ 主 函 數 **********
96、*****/</p><p> void main(void)</p><p><b> {</b></p><p> unsigned int d;</p><p> init_sys(); /* PWMOUT 初始化函數*/</p><p> //ZKB1=40;
97、 /*占空比初始值設定*/ </p><p> LCD_Initialise();</p><p> //DelayMS(10);</p><p><b> while(1)</b></p><p><b> {</b></p><p> d = Get_
98、AD_Result()*500.0/255;/* d 為 0-5V 的 電 壓 值 */</p><p> button(); /* 按 鍵 調 值 */</p><p> //DelayMS(30);</p><p> yewei_PID(d);/* 液 位 PID 計 算 */</p>
99、<p> PWMOUT();/* PWM 輸 出 */</p><p><b> }</b></p><p><b> }</b></p><p> #include <reg52.h></p><p> #include <intrins.h>
100、;</p><p> unsigned int KKp = 220;</p><p> unsigned int KKi = 50;</p><p> unsigned int KKd = 0;</p><p> unsigned int Err1 = 0;</p><p> unsigned int Err
101、2 = 0;</p><p> unsigned int Err3 = 0;</p><p> unsigned int pid_out_Last;</p><p> unsigned int iyewei_Feedback; //pid計算后的液位值</p><p> float iyewei; //當前測的液
102、位值</p><p> int yewei_PID(int SP)</p><p><b> {</b></p><p> int Feedback_P = 0;</p><p> int Feedback_I = 0;</p><p> int Feedback_D = 0;</
103、p><p> Err1 = SP - (int)iyewei; // 偏差=給定-實測 </p><p> Feedback_P = KKp * (Err1 - Err2)/100.0;</p><p> Feedback_I = KKi * Err1/100.0;</p><p> if(Feedback_I >= 80)<
104、;/p><p><b> {</b></p><p> Feedback_I = 80;</p><p><b> }</b></p><p> if (Feedback_I <= -80)</p><p><b> {</b></p&
105、gt;<p> Feedback_I = -80;</p><p><b> }</b></p><p> Feedback_D = KKd * (Err1 - Err2 * 2 + Err3)/100.0;</p><p> Err3 = Err2;</p><p> Err2 = Err1;
106、</p><p> iyewei_Feedback =(int)( Feedback_P + Feedback_I - Feedback_D + pid_out_Last) ;</p><p> //-----------------Limit------------------------</p><p> if(iyewei_Feedback >
107、38)</p><p><b> {</b></p><p> iyewei_Feedback = 38;</p><p><b> }</b></p><p> else if (iyewei_Feedback < 0)</p><p><b>
108、{</b></p><p> iyewei_Feedback = 0;</p><p><b> }</b></p><p> pid_out_Last = iyewei_Feedback;</p><p> return(iyewei_Feedback);</p><p>
109、<b> }</b></p><p> //----------------------------------------------</p><p> #include <reg52.h></p><p> #include <intrins.h></p><p> #define
110、uint unsigned int</p><p> #define uchar unsigned char</p><p> sbit mode = P1^4; // 功能鍵</p><p> sbit shift = P1^5; //確認</p><p> sbit add = P1^6; // 加 “ + ”</p&
111、gt;<p> sbit sub = P1^7; // 減 “ - ”</p><p> uint countmode=0;</p><p> uint sv = 0;</p><p> uint kp = 0;</p><p> uint ki = 0;</p><p> uint kd
112、 = 0;</p><p><b> uint x;</b></p><p> extern uchar Display_Buffer[4];</p><p> int set(x);</p><p> void button(void);</p><p> void L1602_st
113、ring(uchar row,uchar col,uchar *p);</p><p> void DelayMS(uint ms);</p><p> /*---------------------------------------------</p><p> 對sv kp ki kd 的值進行加減計算</p><p> ---
114、--------------------------------------------*/</p><p> int set(x)</p><p><b> {</b></p><p> if(add == 0)</p><p><b> {</b></p><p>
115、; DelayMS(10);</p><p> if(add == 0){</p><p><b> x ++;</b></p><p> Display_Buffer[0]=(x/1000)%10+48;</p><p> Display_Buffer[1]=(x/100)%10+48;</p>
116、<p> Display_Buffer[2]=(x/10)%10+48;</p><p> Display_Buffer[3]=x%10+48;//顯示x的值;</p><p><b> }</b></p><p><b> }</b></p><p>
117、if(sub == 0)</p><p><b> {</b></p><p> DelayMS(10);</p><p> if(sub == 0){</p><p><b> x --;</b></p><p> Display_Buffer[0]=(x/100
118、0)%10+48;</p><p> Display_Buffer[1]=(x/100)%10+48;</p><p> Display_Buffer[2]=(x/10)%10+48;</p><p> Display_Buffer[3]=x%10+48;//顯示x的值;</p><p><b> }</b>&l
119、t;/p><p><b> }</b></p><p><b> return x;</b></p><p><b> }</b></p><p> //-----------------------------------------------</p>&
120、lt;p> void button(void)</p><p><b> {</b></p><p> if(mode == 0)</p><p><b> {</b></p><p> DelayMS(10);</p><p> if(mode == 0)
121、{</p><p> countmode ++;</p><p><b> }</b></p><p><b> }</b></p><p> switch( countmode )</p><p><b> {</b></p>
122、<p><b> case 0:</b></p><p> L1602_string(2,1,"SP: PV: ");</p><p><b> break;</b></p><p><b> case 1:</b></p><p
123、> L1602_string(1,7,Display_Buffer);</p><p> L1602_string(1,1,"SP:");</p><p><b> set(sv);</b></p><p> sv = set(sv);</p><p><b> break;
124、</b></p><p><b> case 2:</b></p><p> L1602_string(1,7,Display_Buffer);</p><p> L1602_string(1,1,"Kp:");</p><p> set(kp); </p>&
125、lt;p> kp = set(kp);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> L1602_string(1,7,Display_Buffer);</p><p> L1602_string(1,1,&quo
126、t;Ki:"); </p><p> set(ki); </p><p> ki = set(ki);</p><p><b> break;</b></p><p><b> case 4:</b></p><p> L1602_st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能儀表課程設計報告
- 智能儀表課程設計 (2)
- 智能儀表課程設計報告
- 智能儀表原理與設計
- 智能儀表綜合訓練課程設計--數據采集器(led顯示)
- 智能儀表課程設計--基于ds18b20的溫度采集系統
- 過程控制課程設計--鍋爐溫度定值智能儀表控制系統
- 《智能溫控儀表設計》課程設計
- 雙方向檢測智能儀表的設計.pdf
- 電力智能儀表的設計與實現.pdf
- 雙方向檢測智能儀表的設計(1)
- 基于Internet的智能儀表的設計.pdf
- 現場總線智能儀表其應用
- 基于MODBUS協議的智能儀表的設計.pdf
- 基于WinCE的車載智能儀表系統設計.pdf
- 基于CAN總線的汽車智能儀表設計.pdf
- 多通道智能儀表的設計與開發(fā).pdf
- 基于ARM的智能儀表設計與開發(fā).pdf
- ff現場總線與智能儀表技術
- 柱柵智能儀表的研究.pdf
評論
0/150
提交評論