電機測速系統 隨著科技的飛速發展,計算機應用技術日益滲透到社會生產生活的各個領域,而單片機的應用則起到了舉足輕重的作用。在工程實踐中,經常會遇到各種需要測量轉速的場合,例如在發動機、電動機、機床主軸等旋轉設備的試驗運轉和控制中,常需要分時或連續測量、顯示其轉速及瞬時速度。為了能精確地測量轉速,還要保證測量的實時性,要求能測得瞬時轉速。因此設計一種較為理想的電機測速控制系統是非常有價值的。 1.用按鍵控制電機起停; 2.電機有兩種速度,通過按鍵來改變速度; 3.通過數碼管顯示每分鐘或每秒的轉速。 三、設計器材 四、設計方案及分析(包含設計電路圖) 1. STC89C52單片機介紹 STC89C52是一種帶8K字節閃爍可編程可檫除只讀存儲器(FPEROM-Flash Programmable and Erasable Read Only Memory )的低電壓,高性能COMOS8的微處理器,俗稱單片機。該器件采用ATMEL搞密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。 (1)單片機最小系統 單片機最小系統電路如圖所示,由主控器STC89C52、時鐘電路和復位電路三部分組成。單片機STC89C52作為核心控制器控制著整個系統的工作,而時鐘電路負責產生單片機工作所必需的時鐘信號,復位電路使得單片機能夠正常、有序、穩定地工作。 圖 單片機最小系統 (2)晶振電路 
(3)復位電路 復位是單片機的初始化操作。其主要功能是把PC初始化為0000H,使單片機從0000H單元開始執行程序。除了進入系統的正常初始化之外,當由于程序運行出錯或操作錯誤使系統處于死鎖狀態時,為擺脫困境,也需按復位鍵重新啟動。 2. ST151 光電轉速傳感器是根據光敏二極管工作原理制造的一種感應接收光強度變化的電子器件,當它發出的光被目標反射或阻斷時,則接收器感應出相應的電信號。它包含調制光源,由光敏元件等組成的光學系統、放大器、開關或模擬量輸出裝置。光電式傳感器由獨立且相對放置的光發射器和收光器組成。當目標通過光發射器和收光器之間并阻斷光線時,傳感器輸出信號。由于葉輪的旋轉,當葉輪扇葉進入凹槽遮擋著發光二極管時,光敏三極管沒接收光,輸出為零;當葉輪扇葉通過光電傳感器時,光敏三極管接收光在ST151電路輸出為頻率信號。 3. 設計思路 通過ST151光電傳感器接收電機扇葉轉動切割的次數獲得脈沖,從而通過單片機T1口接收高低電平,計數器在定時器的定時范圍內記錄脈沖個數,通過計算將轉速送給數碼管并進行顯示。 4. 程序框圖 五. 程序 參見附錄一。 六.系統仿真 參見附錄二。 七、設計體會與收獲(小組成員每人一份) XXX 本次課程設計我主要負責電路板的焊接,電路板的焊接需要先了解整個電路的各個硬件的組成,并清楚它們各自的所在功能區域,然后要做的就是在電路板上為各硬件做一個整體的規劃,合適的規劃很重要,既要考慮到整體看上去的美觀,還要考慮到對以后的調試和調整方便的地方,本人具體是先在電路板上劃分開具體的功能區域,比如單片機在左邊占一塊適當的位置,它的左端還要留有晶振電路和復位電路,依此做好其他模塊的分配。關于電路的具體焊接,感覺只要按照電路仿真圖按一定的次序焊接,本人焊接時速度較慢,但是基本比較順利,沒有出現很大問題。 XX 本次課程設計我主要負責程序的編寫以及調試。編寫程序的主要是利用中斷來產生PWM,利用中斷統計ST151產生的頻率信號。 才拿到題目時面臨的一個問題是如何利用程序來改變點擊的速度,請教同學后知道一種方法叫 PWM,通過改變一個周期的電信號的占空比來實現。當然,在寫程序時還是遇到了不少問題,比方按鍵怎么判斷、改變 PWM 怎么實現、怎么再繼續產生等。 程序的第二重點則是利用中斷來統計電機轉動后由ST151產生的頻率信號。這個問題前前后后想了幾種方法,如用計數器統計再讀取計數值、通過計數定時時間的頻率再湊成1秒等。但是由于方法不當,結果做出來的效果很差。最終選定,定時時間直接1秒再來統計頻率,這樣的結果還是可以的。 程序的第三個重點,是中斷程序的設計。這是我第一次編C,所以在中斷方面有很多不懂的地方,參考資料、請教同學后有了一定的了解,再寫程序就不再那么不順了。
本次實習我們組是直流電機測速系統的設計,就是要通過轉速的改變將其速度顯示在led中,來體現其轉速的增大或減小。而如何改變其速率呢,就是通過pwm改變其占空比來實現的。 我主要負責仿真,即使用軟件Proteus 7 Professional測試仿真調試。這次實習的重點就是如何編寫程序以及仿真中的行騙各個管腳的連接問題,主要的芯片有89C52、uln2003、led顯示、電機。首先分清各管腳起什么作用,比如說晶振要與89C 2的XTAL1和XTAL2連接等等。其次還要知道那個管腳是高電平哪個是低電平、跟誰連才能達到選通。通過同組同學所編程序,就可以清楚的知道這些芯片的連接,再細心的對照各個管腳的初始化、定義來連接各個芯片。在仿真的時,我學到的就是熟練掌握使用proteus 7 Professional軟件,比如知道在proteus 7 Professional中如何正確的找出單片機、uln、led顯示、電機等這些芯片,怎么將keil中運行鏈接好的程序燒錄到proteus 7 Professional中,然后正確的運行。當同組的同學咁好板子后,接通電源時發現led顯示不夠亮,所以就進行改進,通過再接入放大器放大信號就可以使led更好的顯示出來。 總的來說這次實習,受益匪淺,不僅熟悉了兩個軟件的使用更進一步的將所學的知識實踐了出來,以前沒有怎么接觸過這兩個軟件,現在發現我索要學習的還很多。合作也是我收獲很多的一點。
在本次課程設計中,我們做的是“直流電機的測速系統”。 在實驗中,我們最先遇到的問題是在電機驅動中的頻率變化問題,一開始只使用了一個三極管,結果造成了電機轉動始終處于一個較穩定狀態,經過復位也沒有變化,后來在原基礎上增加了一個三極管,放大了頻率信號,使得返回INT0口的信號更明顯,得到了預想的結果使直流電機完成了變速。 在實驗的最后,我們的電機已經按照要求完成了改變轉速的功能,但是數碼管的亮度很暗,得用手擋著才可以看到其具體顯示,這是數碼管亮度不夠造成的,通過分析添加了第二個排阻,讓他來控制片選信號,通過這個排阻使得共陽極數碼管變得較亮。 這次實驗是對本學期所學的單片機課程的簡單應用,在實驗中運用了80c52單片機。通過它完成了電機的簡單驅動,調節轉速使之反饋及讓轉速具體的體現在數碼管上的功能。
附錄二 系統仿真電路圖 
單片機源程序如下:
- #include <reg52.h>
- unsigned char code TABLE[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void display();
- #define uint unsigned int
- #define uchar unsigned char
- #define V_TH1 (65535 - 1000) / 256
- #define V_TL1 (65535 - 1000) % 256
- sbit output = P2^7; //P2^7接ULN2003
- sbit key1 = P3^3; //P3^3接可以改變電機轉速的按鍵
-
- int frq = 0, frq1, flag;
- char pwm;
- int div = 0, p = 0;
- uchar a;
- uint c;
- void display();
-
- /*系統初始化*/
- void initial(void)
- {
- TMOD = 0x10; //設置定時器1在工作方式1下
- EA = 1; //開中斷
- EX0 = 1; //外部中斷0使能
- ET1 = 1; //定時器1使能
- IT0 = 1; //外部中斷0下降沿觸發
- IT1 = 1; //外部中斷1下降沿觸發
- TH1 = V_TH1; //裝載計數值
- TL1 = V_TL1;
- TR1=1; //定時器1可工作
- }
-
- /*延時程序*/
- void delay(unsigned int k)
- {
- unsigned int i,j;
- for(i = 0;i < k;i++)
- {
- for(j = 0;j < 110;j++)
- {
- ;
- }
- }
- }
-
- /*顯示子程序*/
- void display()
- {
- uchar qian,bai,shi,ge;
- qian = 0;
- bai = 0;
- shi = 0;
- ge = 0;
- c = frq1;
- qian = c / 1000;
- bai = c / 100 % 10;
- shi = c / 10 % 10;
- ge = c % 10;
- P2 = 0X01;
- P0 = TABLE[qian];
- delay(5);
- P2 = 0X02;
- P0 = TABLE[bai];
- delay(5);
- P2 = 0X04;
- P0 = TABLE[shi];
- delay(5);
- P2 = 0X08;
- P0 = TABLE[ge];
- delay(5);
- }
-
-
- /*主函數*/
- void main()
- {
-
- initial();
- while(1)
- {
- if(key1 == 0)
- delay(100); //按鍵消抖
- if(key1 == 0)
- {
- while(key1 == 0) ; //松手檢測
- div ++;
- }
- if(div % 2 == 0)
- flag = 0;
- if(div % 2 == 1)
- flag = 1;
- if(flag == 0)
- pwm = 30;
- if(flag == 1)
- pwm = 70;
-
- display();
- }
- }
-
-
- /*外部中斷0*/
- void int0isr() interrupt 0 //統計定時時間內的個數
- {
- frq ++;
- }
-
-
- /*定時器1中斷*/
- void time1isr() interrupt 3 //定時器1實現pwm
- {
- TH1 = V_TH1; //裝載計數值
- TL1 = V_TL1;
- EA = 0;
- a ++;
- p ++;
- if (a <= pwm)
- output = 1;
- else output = 0;
- if(a > 100)
- a = 0;
- if(p > 1000)
- {
- frq1 = frq;
- frq = 0;
- p = 0;
- }
- EA = 1;
- }
復制代碼
全部資料51hei下載地址:
單片機的直流電機測速系統.doc
(197 KB, 下載次數: 188)
2018-11-29 17:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|