|
89C52單片機控制PWM調速電路實現小功率直流電機的轉速調節,并要將其實時轉速用LED管顯示出來。而本系統必須符合以下幾點要求:
(1) 在(1000—5500)轉/分 內對直流電機進行任意調速,最小調速級差為1轉/分。
(2) 電機能在所設速度下穩定運轉,運轉速度與設定速度之差小于±20轉/分。
(3) 電機啟動和加減80%額定負載時,其轉速能迅速回到設定值,轉速超調±5%內。
(4) 利用按鍵和LED數碼管設置速度,設置方便,快捷。
(5) 利用LED數碼管實時顯示電機速度。
(6) 電機能進行正反轉控制。
控制方面,本設計是采用定時器控制I/O口輸出PWM信號驅動斬波電路控制電機運轉和調速;利用單片機外部中斷引腳的捕獲功能、電機同軸帶缺口的圓盤、光電耦合器來測量轉速;并將測得轉速和設定轉速進行PI運算后輸出,實現閉環控制;轉向調節則是用的橋式電路。顯示是利用8位LED數碼管,用按鍵進行設定。
下面簡單介紹下硬件組成和一些軟件原理:
一、硬件電路。
1、單片機選用的是STC的89C52,20MHz晶振。
2、顯示部分比較簡單,用的8位7段數碼管同時顯示設定速度和實時速度。采用74LS164串行移位輸出,只占用單片機3個I/O口,刷新頻率100Hz。
3、PWM驅動電路。使用了9012和8050兩個三極管來驅動,相信網上很多的,也不用我多說,只是別忘了加上續流二極管和兩個三極管之間的限流電阻就是。

4、測速電路。測速電路用的是光耦測量轉動圓盤引起的脈沖寬度,從而可得單片機的實時速度,精度很高,可達千分之一。用的是外部中斷的。。。好像是捕獲模式,忘記了~呵呵!

5、轉向調節電路。轉向調節,由于是后來加上去的,所以就沒有使用單片機控制,直接用硬件實現,但其實原理是一樣的。原理是利用開關控制繼電器,然后控制橋路對電機實施轉向控制。另外用一個同軸電機按正反方向接2個LED用來指示方向。PS:因為這是小功率電機,所以就算沒有制動電路,強制轉向,也不會對電機造成損壞。

二、軟件方面
中斷方面,本程序一共用了3個中斷源:定時器0,定時器2以及外部中斷1,它們的優先級分別為:定時器0、外部中斷1為高優先級,定時器2為低優先級。另外還用了計數器1,用做計算脈沖寬度,與外部中斷1一起構成測速系統。
顯示部分程序不多說,按鍵消抖動什么的也是街知巷聞的了。本設計中,重點是3個,PWM調速和測速,還有PI運算。
1、PWM的調速原理是通過調節一個斬波周期中的脈沖占空比來調節電機功率而達到調速目的。本設計中,PWM的斬波周期為1ms,那也就是說斬波頻率為1KHz,在理論上能達到1‰線性可調,也就是能以0.1%的調節精度來調節PWM占空比。程序如下:(放中斷中進行)
void time0_int(void) interrupt 1
{ TH0= (time0_tmp/256);
TL0= (time0_tmp%256);
if(cut == 1)
{
time0_tmp = 65536-time0_set*20/12;
cut = 0;
}
else
{
time0_tmp = 65536-(time0 - time0_set)*20/12;
cut = 1;
}
}
2、測速系統的工作原理為:利用電機軸上帶的圓盤的缺口,引起光電開關產生高電平脈沖,單片機就采集此脈沖的寬度,加以計算,得出其實時速度。
獲取脈沖寬度值子函數如下:
void getwidth_1()
{
TH1 = 0;
TL1 = 0;
n = 0;
n1 = n;
while(INT1==1&&((n-n1)<30))//n為每1MS +2
{}
if(INT1==0)
TR1 = 1; //計數器1打開
else
goto out;
//IE1 = 0;//中斷請求標志
EX1 = 1;//外部中斷1啟動
n = 0;
n1 = n;
while(m==0&&((n-n1)<30))
{}
if(m==0)//M=1,則已經進入out_int1中斷,若等于0,則說明30MS延時已過
{
TH1_1 = 0;
TL1_1 = 0;
}
out:
IE1 = 0;//中斷請求標志
m = 0;
EX1 = 0;//外部中斷允許位
TR1 = 0;
width_1 = (TH1_1*256+TL1_1);//timepr=脈沖寬度 /μS
}
另外為了穩定測得的轉速值,在程序中加了一個取平均值的函數(幾乎在整個程序中都有感覺,程序寫得不精煉,有點累贅,呵呵,但總算功能是能實現嘛~反正畢業設計對程序執行效率沒要求。)
void getwidth()
{
int gw,gw1;
width = 0;
gw1 = 0;
for(gw=0;gw<6;gw++)
{
GG: getwidth_1();
if(width_1 != 0)
widthbuf[gw] = width_1;
else
goto GG;
}
width = (widthbuf[0] + widthbuf[1] + widthbuf[2] + widthbuf[3] + widthbuf[4] + widthbuf[5])/6;將測得的連續6個不為零的脈沖寬度取平均值,以消除偶然的不穩定因素,使轉速顯示更加穩定
3、PI調節
PI調節計算公式如下[5]:
YK = KP*EK + KI*EK2
YK:要輸出的數據增量
EK:設定值和實測值的差值
EK1:上次的EK值
EK2:EK-EK1的差值
KP:比例系數(本程序中設KP=1.6)經反復湊試的結果
KI:積分系數(本程序中設KI=1.5)經反復湊試的結果
當KP和KI為以上值時,系統處于最佳運行狀態,實驗中表現為:電機原來速度為2000,當設置為4500轉時,可以在2秒之內迅速上升并穩定于4500±20,而超調量也僅為+300轉/分,出現在第一次上升的時候,下來之后便穩定了。
速度變化曲線:
實物圖:
 

嘿嘿,希望對廣大單片機初學者有那么點幫助~順便再做做廣告,有興趣購買的
可以+QQ:54281963(注明畢業設計),或者發郵件至:upssure@126.com
或者,本人也可代做51單片機系列的設計,詳談。
沒學其他,呵呵,能把一樣做精也很不錯了,反正現在51系列單片機功能已經是今非昔比了,什么看門狗,PWM,AD,EEPROM,雙串口,N外部中斷口的,一應俱全。STC剛出一款速度號稱是經典51速度的480倍的單指令周期單片機呢。
對研究啊,創新啊什么的,當然是AVR,DSP好,但是對于做產品來說,就當然是價格低廉的51系列好啦~只要51能實現的,就盡量用51,對產品來說,成品很重要啊~^_^!
|