基于51單片機(jī)的閉環(huán)控制附帶源程序剖析_第1頁
基于51單片機(jī)的閉環(huán)控制附帶源程序剖析_第2頁
基于51單片機(jī)的閉環(huán)控制附帶源程序剖析_第3頁
基于51單片機(jī)的閉環(huán)控制附帶源程序剖析_第4頁
基于51單片機(jī)的閉環(huán)控制附帶源程序剖析_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、電氣技術(shù)研究生課程設(shè)計報告題 目 基于51單片機(jī)的直流電機(jī)PID調(diào)速系統(tǒng) 學(xué) 院 機(jī)械與汽車工程學(xué)院 專業(yè)班級 車輛工程 學(xué) 號 221601852023 學(xué)生姓名 木飛 指導(dǎo)教師 完成日期 2017年01月12日 1 引言1.1研究對象介紹1.2選題的目的和意義直流電動機(jī)具有良好的起動、制動性能,宜于在大范圍內(nèi)平滑調(diào)速,在許多需要調(diào)速或快速正反向的電力拖動領(lǐng)域中得到了廣泛的應(yīng)用。從控制的角度來看,直流調(diào)速還是交流拖動系統(tǒng)的基礎(chǔ)。早期直流電動機(jī)的控制均以模擬電路為基礎(chǔ),采用運(yùn)算放大器、非線性集成電路以及少量的數(shù)字電路組成,控制系統(tǒng)的硬件部分非常復(fù)雜,功能單一,而且系統(tǒng)非常不靈活、調(diào)試?yán)щy,阻礙

2、了直流電動機(jī)控制技術(shù)的發(fā)展和應(yīng)用范圍的推廣。2 設(shè)計原理、方法及概述2.1 設(shè)計原理及方法直流電動機(jī)根據(jù)勵磁方式不同,直流電動機(jī)分為自勵和他勵兩種類型。不同勵磁方式的直流電動機(jī)機(jī)械特性曲線有所不同。但是對于直流電動機(jī)的轉(zhuǎn)速有以下公式: n=U/Ccf-TR內(nèi)/CrCcf 其中:U電壓;R內(nèi)勵磁繞組本身的電阻;f每極磁通(Wb);Cc電勢常數(shù);Cr轉(zhuǎn)矩常量。由上式可知,直流電機(jī)的速度控制既可采用電樞控制法,改變電樞回路電阻,也可采用磁場控制法。對于要求在一定范圍內(nèi)無級平滑調(diào)速系統(tǒng)來說,以調(diào)節(jié)電樞供電電壓的方式為最好。改變電阻只能是有級調(diào)速;減弱磁通雖然能夠平滑調(diào)速,但是調(diào)速范

3、圍不大,往往只是配合調(diào)壓方案,在基速(額定轉(zhuǎn)速)以上做小范圍的減弱升速。因此,自動控制的直流調(diào)速往往以變壓調(diào)速為主。本文主要研究了利用MCS-51系列單片機(jī),通過PWM方式控制直流電機(jī)調(diào)速的方法。PWM控制技術(shù)以其控制簡單、靈活和動態(tài)響應(yīng)好的優(yōu)點(diǎn)而成為電力電子技術(shù)最廣泛應(yīng)用的控制方式,也是人們研究的熱點(diǎn)。由于當(dāng)今科學(xué)技術(shù)的發(fā)展已經(jīng)沒有了學(xué)科之間的界限,結(jié)合現(xiàn)代控制理論思想或?qū)崿F(xiàn)無諧振軟開關(guān)技術(shù)將會成為PWM控制技術(shù)發(fā)展的主要方向之一。 2.2 設(shè)計總概述以直流電機(jī)電樞上電壓的占空比來改變平均電壓的大小,從而控制電動機(jī)的轉(zhuǎn)速為依據(jù),實(shí)現(xiàn)對直流電動機(jī)的平滑調(diào)速,并通過單片機(jī)控制速度的變化

4、。本文所研究的直流電機(jī)調(diào)速系統(tǒng)主要是由硬件和軟件兩大部分組成。硬件部分是前提,是整個系統(tǒng)執(zhí)行的基礎(chǔ),它主要為軟件提供程序運(yùn)行的平臺。而軟件部分,是對硬件端口所體現(xiàn)的信號,加以采集、分析、處理,最終實(shí)現(xiàn)控制器所要實(shí)現(xiàn)的各項功能,達(dá)到控制器自動對電機(jī)速度的有效控制。但是此設(shè)計中電機(jī)只需要正轉(zhuǎn),所以相對來說簡單點(diǎn)。3硬件設(shè)計3.1 8051單片機(jī)簡介AT89C52是一個低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指

5、令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2 個讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的 Flash存儲器可有效地降低開發(fā)成本。部分功能如下:(1)8kB可反復(fù)擦寫(大于1000次)Flash ROM;(2)32個雙向I/O口;(3)256x8bit內(nèi)部RAM;(4)3個16位可編程定時/計數(shù)器中斷;(5)

6、時鐘頻率0-24MHz;(6)2個串行中斷,可編程UART串行通道;(7)2個外部中斷源,共8個中斷源;(8)2個讀寫中斷口線,3級加密位;3.2直流電機(jī)設(shè)計中采用直流電機(jī),自帶高精度的磁編碼器,性能介紹如圖一所示,接線說明如圖二所示: 性能介紹圖一 接線圖二3.3 L298N恒壓恒流橋式2A驅(qū)動芯片L298N,簡稱H橋。L298是SGS公司的產(chǎn)品,比較常見的是15腳Multiwatt封裝的L298N,內(nèi)部同樣包含4通道邏輯驅(qū)動電路。可以方便的驅(qū)動兩個直流電機(jī),或一個兩相步進(jìn)電機(jī)。L298N芯片可以驅(qū)動兩個二相電機(jī),也可以驅(qū)動一個四相電機(jī),輸出電壓最高可達(dá)50V,可以直接通過電源來調(diào)節(jié)輸出電壓

7、;可以直接用單片機(jī)的IO口提供信號;而且電路簡單,使用比較方便。L298N可接受標(biāo)準(zhǔn)TTL邏輯電平信號VSS,VSS可接457 V電壓。4腳VS接電源電壓,VS電壓范圍VIH為2546 V。輸出電流可達(dá)25 A,可驅(qū)動電感性負(fù)載。1腳和15腳下管的發(fā)射極分別單獨(dú)引出以便接入電流采樣電阻,形成電流傳感信號。L298可驅(qū)動2個電動機(jī),OUT1,OUT2和OUT3,OUT4之間可分別接電動機(jī),本實(shí)驗(yàn)裝置我們選用驅(qū)動一臺電動機(jī)。5,7,10,12腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn)。EnA,EnB接控制使能端,控制電機(jī)的停轉(zhuǎn)。L298芯片驅(qū)動電路圖如下:圖1 L298芯片驅(qū)動電路圖3.4 系統(tǒng)總體電路圖

8、中控制器模塊為系統(tǒng)的核心部件,電位器和顯示器是用來實(shí)現(xiàn)人機(jī)交換功能,其中通過鍵盤將需要設(shè)置的參數(shù)和狀態(tài)輸入到單片機(jī)中,并且通過控制器顯示到顯示器上。在運(yùn)行過程中控制器產(chǎn)生PWM脈沖送到電機(jī)驅(qū)動電路中,經(jīng)過放大后控制直流電機(jī)轉(zhuǎn)速,同時利用速度檢測模塊將當(dāng)前轉(zhuǎn)速反饋到控制器中,控制器經(jīng)過數(shù)字PID運(yùn)算后改變PWM脈沖的占空比,實(shí)現(xiàn)電機(jī)轉(zhuǎn)速實(shí)時控制的目的。顯示模塊 電機(jī)驅(qū)動模塊控制器模塊電位器直流電機(jī)PWM脈沖速度檢測模塊圖1系統(tǒng)方案框圖4 軟件設(shè)計4.1 PID算法PI調(diào)節(jié)器是電力拖動自動控制中最常用的的一種,在微機(jī)數(shù)字控制系統(tǒng)中,當(dāng)采樣頻率足夠高時,可以先按模擬系統(tǒng)的設(shè)計方法設(shè)計,然后再離散化,

9、得到數(shù)字控制器的算法。PI調(diào)節(jié)器的傳遞函數(shù)如4.1式所示: (4.1)若輸入誤差函數(shù)為e(t),輸出函數(shù)為u(t),則e(t) 和u(t)的關(guān)系時域表達(dá)式可寫成 : (4.2)式子中為比例系數(shù), 為比例系數(shù)。將式4.2轉(zhuǎn)化為差分方程,得到數(shù)字PI調(diào)節(jié)器的表達(dá)式,其第k拍輸出為 : (4.3)式中 為采樣周期。增量式算法只需要當(dāng)前的和上一拍的偏差即可計算出輸出值。增量式PI調(diào)節(jié)器算法為: (4.4) 在控制系統(tǒng)中,常需要對調(diào)節(jié)器的輸出實(shí)施限幅。在數(shù)字控制算法中,要對u限幅,只需要在程序中設(shè)置限幅值。不考慮限幅時,位置式和增量式兩種算法完全等同,考慮限幅時,則兩者略有差異。增量式PI調(diào)節(jié)器算法只需

10、要輸出限幅,而位置式算法必須同時設(shè)置積分限幅和輸出限幅。若沒有積分限幅,積分項可能很大,將產(chǎn)生較大的退飽和超調(diào)。 算法模塊如下 :int e=0,e1=0,e2=0;float uk=0,uk1=0.0,duk=0.0;/PID輸出值float kp=5,ki=1.5,kd=0.9;/PID控制系數(shù) 上面是初始化部分void PIDControl() /PID偏差計算 e=temp-num;/變量temp 是AD采集過來的值,num是通過M法測出點(diǎn)值duk=(kp*(e-e1)+ki*e+kd*(e-2e1+e2)uk=uk1+duk;out=(int)uk;if(out>250)out

11、=100;else if(out<0)out=0;uk1=uk;e2=e1;e1=e; value=out; /value最后送給PWM。這部分是子程序4.2 M法測速 在一定時間Tc內(nèi)測取旋轉(zhuǎn)編碼器輸出脈沖個數(shù)M1,用以計算這段時間內(nèi)的轉(zhuǎn)速,稱作M法測速。把M1除以Tc就可以得到旋轉(zhuǎn)編碼器輸出脈沖的頻率f1=M1/Tc,所以又稱頻率法。電機(jī)每轉(zhuǎn)一圈共產(chǎn)生Z個脈沖(Z=倍頻系數(shù)*編碼器光柵數(shù)),把f1除以Z就得到在單位時間內(nèi)電機(jī)的轉(zhuǎn)速。在習(xí)慣上,時間Tc以s為單位,而轉(zhuǎn)速是以r/min為單位,則電動機(jī)的轉(zhuǎn)速為:n=60M1/ZTc (4.5) 由于Z和Tc都是常數(shù),因此轉(zhuǎn)速n與計數(shù)值M1

12、成正比,故此測速方法稱M法測速。具體程序部分用外部中斷計數(shù)和定時器來完成,程序如下:void exter0() interrupt 0 /外部中斷脈沖計數(shù) /M法測速度(外部中斷0和定時器0用在M法測速上)Inlpuse+;void timer0() interrupt 1 TH0 = 0x3c;/重裝初值 TL0 = 0xb0; time+;if(time>=20) /1s鐘讀取一次轉(zhuǎn)速 (2*60ms) EX0 = 0;TR0 = 0;num=Inlpuse; /計算轉(zhuǎn)速 Inlpuse=0;PIDControl();/ 100ms 控制一次 Inlpuse=0; EX0 = 1;T

13、R0 = 1; 4.3 參數(shù)設(shè)定在程序中修改PID調(diào)節(jié)算法中的比例系列、積分系數(shù)和微分系數(shù)可以得到不同特性的轉(zhuǎn)速曲線。參數(shù)改變,轉(zhuǎn)速響應(yīng)的超調(diào)量和調(diào)整時間發(fā)生變化。系統(tǒng)的穩(wěn)定性和快速性是一對矛盾,因此我們必須選擇一個合適的PI參數(shù)。 在調(diào)試過程中,當(dāng)令kp =5、ki =1.5、kd=0.9時系統(tǒng)的快速性和穩(wěn)定性達(dá)到最佳狀態(tài)。4.4 電位器的AD采集模塊 AD 采集模塊利用是我是直接調(diào)用了開發(fā)板里面的程序,這個模塊可以也可以自己制作。我用的 XPT2046是一款4線制電阻式觸摸屏控制器,內(nèi)含12位分辨率125KHz轉(zhuǎn)換速率逐步逼近型A/D轉(zhuǎn)換器。此芯片支持從1.5V到5.2V的低電壓I/O接口

14、。XPT2046能通過執(zhí)行兩次A/D轉(zhuǎn)換查出被按屏幕位置,除此之外,還可以測量加在觸摸屏上的壓力。主要特性如下:(1) 工作電壓范圍為1.5V到5.25V(2) 支持1.5V-5.25V的數(shù)字I/O口(3) 內(nèi)建2.5V參考電壓(4) 內(nèi)建結(jié)溫測量功能(5) 觸摸壓力測量,具有自動省電功能(6) 采用3線制SPI通信接口程序見最后的程序清單。5 課題總結(jié)從課題選定開始,先是看了一遍課本以及網(wǎng)上找了對應(yīng)的論文,然后看了老師發(fā)的試驗(yàn)資料以及各個元器件的原理和用法,最后把硬件焊接起來,然后想如何測測速,如何給定,如何用PID進(jìn)行控制,最后如何通過PID去控制PWM的占空比。在調(diào)試的過程中遇到一個很簡

15、單和致命的問題,就是我用的開發(fā)板和L298N開始的時候沒有共接地導(dǎo)致調(diào)速一直失敗,最后通過用示波器觀測PWM輸出的波形發(fā)現(xiàn)了問題,當(dāng)真正的實(shí)現(xiàn)調(diào)速的時候感覺很好,終于通過自己的努力完成了一項有點(diǎn)技術(shù)含量的事情。繼續(xù)加油。全部程序如下:對于程序,每個讀者的I/0口或者用的ad采集方式不一樣,程序可能不同,但是解決閉環(huán)問題的核心是讀取給定值用AD轉(zhuǎn)換,讀取測速值用外部中斷和定時器中段,PWM輸出也用一個定時器。#include"reg51.h"#include"XPT2046.h"/-定義使用的IO-/#define GPIO_DIG P0sbit PWM=

16、P10;int e=0,e1=0,e2=0;/PID偏 float uk=0,uk1=0.0,duk=0.0;/PID輸出值float kp=5,ki=1.5,kd=0.9;/PID控制系數(shù) int out=0;sbit IN2=P11;/-定義一個全局變量-/ unsigned int value,timer1;uint num;uint Inlpuse=0,num=0;/脈沖計數(shù)單元uint temp,count,temp1;unsigned int time=0;sbit zhongduan=P32;sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;/-定義全

17、局變量-/unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼uchar DisplayData8;/用來存放要顯示的8位數(shù)的值void DigDisplay(void); void PIDControl() /PID偏差計算 e=temp-num;duk=(kp*(e-e1)+ki*e+kd*(e-2e1+e2)uk=uk1+duk;out=(int)uk

18、;if(out>250)out=100;else if(out<0) out=0;uk1=uk;e2=e1;e1=e; value=out; void SetSpeed(void)temp1= Read_AD_Data(0x94);/ AIN0 電位器(100us 采集一次temp=2*temp1>>5;/temp的變化范圍在0-250之間 void DigDisplay(void)unsigned char i;unsigned int j; DisplayData7=DIG_CODEnum%10000/1000; DisplayData6=DIG_CODEnum%1

19、000/100; DisplayData5=DIG_CODEnum%100/10; DisplayData4=DIG_CODEnum%10/1; DisplayData3=DIG_CODEtemp%10000/1000; DisplayData2=DIG_CODEtemp%1000/100; DisplayData1=DIG_CODEtemp%100/10; DisplayData0=DIG_CODEtemp%10/1;for(i=0;i<8;i+)switch(i) /位選,選擇點(diǎn)亮的數(shù)碼管,case(0):LSA=0;LSB=0;LSC=0; break;/顯示第0位case(1):

20、LSA=1;LSB=0;LSC=0; break;/顯示第1位case(2):LSA=0;LSB=1;LSC=0; break;/顯示第2位case(3):LSA=1;LSB=1;LSC=0; break;/顯示第3位case(4):LSA=0;LSB=0;LSC=1; break;/顯示第4位case(5):LSA=1;LSB=0;LSC=1; break;/顯示第5位case(6):LSA=0;LSB=1;LSC=1; break;/顯示第6位case(7):LSA=1;LSB=1;LSC=1; break;/顯示第7位GPIO_DIG=DisplayDatai;/發(fā)送段碼j=50; /掃

21、描間隔時間設(shè)定while(j-);GPIO_DIG=0x00;/消隱void exter0() interrupt 0 /外部中斷脈沖計數(shù) /M法測速度(外部中斷0和定時器0用在M法測速上)Inlpuse+;void timer0() interrupt 1 TH0 = 0x3c;/重裝初值TL0 = 0xb0; time+;if(time>=20) /1s鐘讀取一次轉(zhuǎn)速 (2*60ms) EX0 = 0;TR0 = 0;num=Inlpuse; /計算轉(zhuǎn)速 Inlpuse=0;PIDControl();/ 100ms 控制一次 Inlpuse=0; EX0 = 1;TR0 = 1; v

22、oid T1_time() interrupt 3count1+;if(count1 >= 100) count1 = 0; /計時100us*100=10ms=100Hzif(count1 < value) pwm = 1;/占空比else pwm = 0;void SystemInit() TMOD = 0x21; /設(shè)定時器0為工作方式1,定時器1為工作方式2(自動重裝初值)TH0 = 0x3c;/設(shè)定50ms一次中斷TL0 = 0xb0; TH1 = 0x9c;/設(shè)定100us一次中斷TL1 = 0x9c; EA = 1;/開總中斷 ET0 = 1;/開定時器0中斷 ET1

23、 = 1;/開定時器1中斷EX0 = 1;/開外部中斷0IT0 = 1;/啟動下降沿觸發(fā)有效 TR1 = 1;/啟動定時器1 TR0 = 1;/啟動定時器0 void main() SystemInit();while(1) DigDisplay(); AD采集模塊:(這一部分程序只是AD采集模塊,用的芯片是XPT2046,用spi通信方式,最后改變電位器可以改變temp的值,這部分程序讀者可以自己解決,)#ifndef _XPT2046_H_#define _XPT2046_H_/-包含頭文件-/#include<reg51.h>#include<intrins.h>/-重定義關(guān)鍵詞-/#ifndef uchar#define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endif#ifndef ulong#define ulong unsigned long#endif/-定義使用的IO口-/sbit DOUT = P37; /輸出sbit CLK = P36; /時鐘sbit DIN = P34; /輸入sbit CS = P35; /片選uint Read_AD_Data(uchar cmd);uint SPI_Read(void);void SPI_W

溫馨提示

  • 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

提交評論