0.png (46.04 KB, 下載次數: 33)
下載附件
2019-2-17 03:14 上傳
直流電機PWM調速系統的設計與仿真
1本課題設計的目的和要求 1. 直流電機PWM調速系統的目的: (1) 熟悉直流電機PWM調速系統的整體運行過程和總體布局 (2) 掌握該硬件電路的設計方法 (3) 掌握電機PWM調速系統程序的設計和調試 2. 直流電機PWM調速系統的要求 (1)可輸入0~1范圍的占空比,占空比可用電位器輸入、撥碼開關輸入或鍵盤輸入。 (2)設計電機驅動電路,根據輸入的占空比控制電機轉速。 (3)檢測電機轉速,并用LED或LCD顯示。 (4)在PROTUES下仿真。
二、系統總體框圖與原理說明 2.1 總體方案原理及設計框圖 本設計是基于AT89c51為核心的直流調速器,由單片機控制和產生適合要求的PWM信號,該PWM信號通過驅動芯片電路進行直流調速,使輸出電壓平均值和功率可以按照PWM信號的占空比而變化,從而達到對直流電機調速的目的。撥碼開關輸入0~1范圍的占空比,用LCD1602作為主液晶顯示器,顯示輸入的占空比控制電機轉速,能夠實現較好的人機交互。

總體方案設計框圖
三、硬件電路圖 
3.1 PWM產生方式 (1)PWM(脈沖寬度調制)是通過控制固定電壓的直流電源開關頻率,改變負載兩端的電壓,從而達到控制要求的一種電壓調整方法。PWM可以應用在很多方面,比如:電機調速、溫度控制、壓力控制等等。 在PWM驅動控制的調整系統中,按一個固定的頻率來接通和斷開的電源,并且根據需要改變一個周期內“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來達到改變平均電壓大小的目的,從而來控制電動機的轉速。正因為如此,PWM又被稱為“開關驅動裝置”。PWM波形如圖所示: 
PWM波形圖 設電機始終接通電路時,電機轉速最大為 ,設占空比為: 
則電機的平均轉速為 
其中 指的是電機的平均速度, 是指電機在全通電時最大速度,D指的是占空比。 由上面的公式可見,當改變占空比D時,就可以得到不同電機平均速度 ,從而達到調速的目的。 (2)單片機片內軟件生成PWM信號 PWM信號采用延時的方式產生,這樣實現比較容易,可以節約硬件成本。 if(Flag0) { for(a=0;a<N*PWM_percent;a++) { if(flag) k1=1;
else k2=1; } for(a=0;a<N*(1-PWM_percent);a++) { k1=k2=0; } } else { k1=k2=1; }
3.2撥碼開關模塊的設計 本設計輸入用4位的撥碼開關,能產生16數值,每一種數值對應于一個占空比的值,當輸入為16時,最大的占空比為100%,能調節到最大的電機轉速。


3.3顯示模塊的設計 本設計用LCD1602作為顯示模塊,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊,可以顯示兩行,提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能。

在進行寫入數據時,我們設計了一個函數將要輸入的字符串整個寫入,減少了代碼量,也使程序看起來更加簡潔 void lcd_show_str(unsigned char *str) {
while (*str != '\0') { LED_data(*str++); //同一優先級,先取內容后自增 } } 因為要顯示測得的速度,而速度又是一個不止1位的整數,所以必須分離速度的各個位數值并寫入LCD1602中。程序實現如下。 void display() { LED_start(0x86); if(speed/10000==0) { s[0]=' '; } else { s[0]=speed/10000+0x30; } if(speed/1000==0) { s[1]=' '; } else { s[1]= speed%10000/1000+0x30; } if(speed/100==0) { s[2]= ' '; } else { s[2]=speed%10000%1000/100+0x30; } if(speed/10==0) { s[3]=' '; } else { s[3]=speed%10000%1000%100/10+0x30; } s[4]=speed%10000%1000%100%10+0x30;
lcd_show_str(s);
}
3.4直流電機驅動模塊 本設計采用L298芯片來驅動電機,內部含有四通道邏輯驅動電路,是一種二相和四相的專用驅動器,PWM配合橋式L298可以較為容易的實現電機的調速,其中還用到了二極管對電機進行保護作用。電路圖如下。 
3.3模擬直流電機測速模塊 利用MOTOR-ENCODER每轉一圈1/2引腳輸出一次高電平的性能,我們將1/2引腳接入異或門的兩個輸入端,再將輸出端接到外部中斷1處,外部中斷1每次收到一個高電平則進入中斷,中斷內是將speed加一,另外定時器0中斷控制1s中記一次數,因此可以得到電動機每秒的轉速,另外設置定時器1中斷,使得T1計數十次的時候也就是1s時Speed清零。程序如下,電路圖也如下 - ////****************************************************************************----1秒計時//
- void int1_isr(void)interrupt 2//中斷1函數
- {
- speed++;
- }
- timer0()interrupt 1 using 1 //T0中斷函數
- {
- P2_1=~P2_1;
- TH0=(65535-65050)/256;
- TL0=(65335-65050)%256;
- }
- timer1()interrupt 3 using 2 //T1中斷函數
- {
- display();
- speed=0;
- }
復制代碼
  MORTOR-ENCODER電機 中斷引腳設置 3.4 電動機調速功能實現模塊 電動機調速功能分為以下四種: 1.加速模塊利用增加PWM波的占空比增加電機速度,每按一次按鍵加速5%。程序設計是利用對按鍵按下的判斷處理占空比變量加一。代碼如下 

- 反轉模塊利用L298N的引腳IN0,IN1輸入0,1實現反轉,代碼中設置了反轉標志位flag,如果flag為1進行正轉,如果flag為0進行反轉。在主函數生成pwm波時對flag進行判斷以輸出0,1實現電機的反轉。


剎停功能的實現同樣利用L298芯片實現,同時也將占空比變為0。同樣設置一個剎停標志位Flag0,當剎停按鍵按下時Flag0置零并將占空比變量置零,而在PWM波形輸出模塊中,Flag0為1是輸出PWM波輸出的條件,因此不輸出PWM波且,IN1和IN2都為高電平因此達到剎停效果。 
自定義速度功能通過設置占空比實現,這里將PWM波的占空比分為了16檔,用到了撥碼開關,共4位二進制數也就是 =16種情況。最高占空比為100%,低電平有效,而這些利用單片機P1引腳的高四位實現,具體代碼如下。 if(P1_2==0) //自定義速度(15個檔) { delay(5); //消抖 PWM_percent=(((0xf0)&(~P1))*100)/(0xf0); PWM_percent=PWM_percent*0.01; //將輸入的二進制數轉換成為占空比 }
3.5按鍵設計模塊 在設計過程中,我們利用外部中斷0,將接了五個按鍵的引腳連線同時接入一個與門,與門的輸出則接到外部中斷0,使得每次按下按鍵都會進入中斷0函數,執行相應的功能代碼。  題目要求實現五種功能,
四、仿真說明 (1)初始界面時,撥碼開關沒有設置PWM,直流電機處于停止狀態,LCD1602顯示PWM為0%,電機速度也為0,示波器顯示波形也為低電平。 
(2)按一次加速按鍵,占空比增加5%

按一次減速按鍵,速度減小5%(之前占空比為20%) 
按剎停按鍵,速度減小至0,占空比為0 
調節撥碼開關設置自定義占空比 
按反轉鍵,電機反轉并在LCD中由Z變為F 測速模塊

利用encode電機的轉一圈上方兩側引腳輸出高電平接一個異或門從而通過上升沿反映電機轉一圈,并給中斷1送信號speed+1,記出一秒內speed表轉速。

P3.1口輸出PWM波形
六、心得體會 巧妙運用計時器可以達到預想中的計時效果,運用各元件的特性可以最優化電路圖,在設計的過程中如果遇到問題別灰心,靜下來想一想,或者在網上找找他人的做法,也許對你的設計有異曲同工之妙。程序設計需細致,符號一錯全盤出錯。中斷是個好東西,如果巧妙利用外部中斷可以使得你的程序更加具有可辯性和通用性。
全部資料51hei下載地址:
第四組PWM電機調速系統.rar
(618.66 KB, 下載次數: 244)
2019-2-16 16:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|