第1章 緒論 隨著科學技術的進步和社會的發展,人類所接觸的信息也在不斷增加并且日益復雜。面對浩如煙海的信息,人們已經能夠利用計算機等工具高效準確地對之進行處理。小小的音樂盒可以給人們帶來美好的回憶,提高人們的精神文化享受。傳統音樂盒是機械型的,體積笨重,發音單調,不能實現批量生產。本文設計的音樂盒是以單片機為核心元件的電子式音樂盒,體積小,重量輕,能演奏和旋音樂,功能多,外觀效果多彩,使用方便,并具有一定的商業價值。 第2章 系統論述
2.1 總體方案本次設計是一個基于AT89C51單片機的音樂盒,該音樂盒主要由按鍵電路、復位電路、時鐘電路、蜂鳴器以及顯示電路組成。使用其中兩個按鍵來控制播放和暫停另外兩個按鍵用來控制換曲。利在液晶上顯示曲目的更換,共三首音樂,蜂鳴器每播放一首歌時液晶上顯示相對應的歌曲次序。系統組成框圖如圖2-1。 2.2 基本原理1)主體電路: 直流電機PWM控制模塊:這部分電路主要由89C51單片機的I/O端口、定時計數器、外部中斷擴展等控制直流電機的加速、減速以及電機的正轉和反轉,并且可以調整電機的轉速,還可以方便的讀出電機轉速的大小和了解電機的轉向,能夠很方便的實現電機的智能控制。 此外,還包括直流電機的直接清零、啟動(置數)、暫停、連續功能。其間是通過89C51單片機產生脈寬可調的脈沖信號并輸入到L298驅動芯片來控制直流電機工作的。 2)各部分電路模塊的組成: (a)設計輸入部分:這一模塊主要是利用帶中斷的獨立式鍵盤來實現。 (c)設計控制部分:主要由89C51單片機的外部中斷擴展電路組成。 (b)設計顯示部分:是直接采用SM410564四位共陽數碼管組成顯示模塊。 3)直流電機PWM控制實現部分: 主要由一些二極管、電機和L298直流電機驅動模塊組成。 2.3 原理框圖1)系統組成:如圖2-1所示 
圖2-1 直流電機PWM調速方案 2)方案說明: 直流電機PWM調速系統以AT89C51單片機為控制核心,由命令輸入模塊、LED顯示模塊及電機驅動模塊組成。采用帶中斷的獨立式鍵盤作為命令的輸入,單片機在程序控制下,定時不斷給直流電機驅動芯片發送PWM波形,H型驅動電路完成電機正,反轉控制;同時單片機不停的將從鍵盤讀取的數據送到LED顯示模塊去顯示,從中不僅能讀取其速度,而且能知道它的轉向。 第3章 系統的硬件設計 3.1 單片機最小系統的設計1)單片機AT89C51: AT89C51是一種帶4K字節閃爍可編程可擦出只讀存儲器的低電壓,高性能 CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術,與工業標準MCS-51指令集合輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且廉價的方案。 2)復位電路及時鐘電路: 復位電路和時鐘電路是維持單片機最小系統運行的基本模塊。 兩種常用復位電路:上電復位和手動復位。 其中:上電復位,如圖3-1所示;手動復位,如圖3-2所示。  圖3-1 上電復位 圖3-2 手動復位 有時系統在運行過程中出現程序跑飛的情況,在程序開發過程中,經常需要手動復位。所以本次設計選用手動復位。 高頻率的時鐘有利于程序更快的運行,也有利于實現更高的信號采樣率,從而實現更多的功能。但是高速對系統的要求較高,而且功耗大,運行環境苛刻?紤]到單片機本身用于控制,而并非高速信號采樣處理,所以選取合適的頻率即可。合適頻率的晶振對于選頻信號強度準確度都有好處。 本次設計選取12.0M無源晶振接入XTAL1和XTAL2引腳。并聯2個30pF陶瓷電容幫助起振。單片機最小系統如圖3-3所示:
圖3-3 單片機最小系統 3.2 電源電路設計直流穩壓電源的基本原理:直流穩壓電源一般有電源變壓器T、整流濾波電路及穩壓電路所組成,基本框圖如圖3-4所示。 
圖3-4 直流電源原理 1)電源變壓器T: 將220V的交流電壓變換成整流濾波電路所需要的交流電壓Ui,變壓器副邊與原邊的功率比為P2/P1=n,式中n是變壓器的效率。 2)整流電路: 整流電路將交流電壓Ui變換成脈動的直流電壓。再經濾波電路濾除較大的波紋成分,輸出波紋較小的直流電壓U1。常用的整流濾波電路有全波整流濾波、橋式整流濾波等。 3)濾波電路: 各濾波電路C滿足RL-C=(3~5)T/2,式中T為輸入交流信號周期,RL為整流濾波電路的等效負載電阻。 4)穩壓電路: 常用的穩壓電路有兩種形式:一是穩壓管穩壓電路,二是串聯型穩壓電路。二者的工作原理有所不同。穩壓管穩壓電路其工作原理是利用穩壓管兩端的電壓稍有變化,會引起其電流有較大變化這一特點,通過調節與穩壓管串聯的限流電阻上的壓降來達到穩定輸出電壓的目的。它一般適用于負載電流變化較小的場合。串聯型穩壓電路是利用電壓串聯負反饋的原理來調節輸出電壓的。集成穩壓電源事實上是串聯穩壓電源的集成化。 3.3 直流電機驅動電路設計 由于單片機P3口輸出的電壓最高才有5V,難以直接驅動直流電機。所以我們需要使用恒壓恒流橋式2A驅動芯片L298N來驅動電機。 本設計所采用的L298N,可接受標準TTL邏輯電平信號VSS,VSS可接4.5~7V電壓。4腳VS接電源電壓,VS電壓范圍VIH為+2.5~46V,輸出電流可達2.5A,可驅動電感性負載。1腳和15腳下管的發射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。 L298可驅動2個電動機,OUT1,OUT2和OUT3,OUT4之間可分別接電動機,本實驗裝置我們選用驅動一臺電動機,連接于OUT1和OUT2端口之間(電動機在子圖中未畫出)。 此外,5,7腳接輸入控制電平,控制電機的正反轉。EnA,EnB接控制使能端,控制電機的停轉。同時,需要加四個二極管在電機的兩端,防止電機反轉的時候產生強大的沖擊電流燒壞電機。具體直流電機驅動電路,如圖3-5所示。 
圖3-5 驅動電路 3.4 顯示模塊設計本次設計顯示模塊直接采用的是SM410564 四位共陽數碼管顯示。又因為單片機的輸出端口輸出的電流較小,點亮數碼管的能力不大,所以需要采用三極管對輸出電流進行放大,此次三極管采用的是C9013,具體放大電路如圖3-6所示: 
圖3-6 放大電路 3.5 按鈕電路設計正轉、反轉、急停、加速、減速五個開關分別與單片機的P1.0,P1.1,P1.2,P1.3,P1.4相連,然后再與地相連。急停實現直流電機的停轉,正轉實現直流電機的正轉,反轉實現直流電機的反轉,加速實現直流電機的加速,減速實現直流電機的減速,其電路如圖3-7所示。 
圖3-7 控制按鈕電路 3.6 元件參數選擇1)實際計算過程 (a)變壓器選擇:變壓器選擇雙15V變壓,考慮到電流不需要太大,最大電流為1A,實際選擇變壓器輸出功率為10W,可以很好的滿足要求。 (b)整流橋:考慮到電路中會出現沖擊電流,整流橋的額定電流是工作電流的2~3倍。選取RS301(100V,3A)即可,實際購買過程中選擇了RS30(700V,3A)也符合設計要求。 (c)濾波電容:考慮到對紋波電壓要求比較高,故選擇了2200μF耐壓值為25V以及100μF耐壓值50v的電解電容。 (d)去耦電容:去耦電容的選擇是7812及7805芯片要求的,查手冊可知分別為0.01μF,用來濾除高頻分量防止產生自激。 (e)電解電容:為了防止負載產生沖擊電流,故在輸出端加入2200μF、耐壓值為25V的電解電容。 (f)7805支路的元件參數基本相同。 直流電源產生電路:12V如圖3-7所示、5V如圖3-8所示: 
圖3-7 12V電源 
圖3-8 5V電源 第4章 系統的軟件設計 4.1 總體方案利用P3口,編制程序輸出一串脈沖,經放大后驅動直流電機,改變輸出脈沖的電平的持續時間,達到使電機正轉、反轉、加速、減速、停轉等目的。由軟件編程從P3.0/P3.1管腳產生PWM 信號,經驅動電路輸出給電機,從而控制電機得電與失電。軟件采用延時法進行設計。單片機上電后,系統進入準備狀態。當按動啟動按鈕后,根據P3.0為高電平時實現電機正轉,P3.1為高電平時實現電機反轉。根據不同的加減速按鈕,調整P3.0/ P3.1輸出高低電平時的占空比,從而可以控制P3.0/ P3.1輸出高低電平時的有效值,進而控制電機的加減速。 
其總體流程圖如圖4-1所示:圖4-1 總體程序流程圖 P3.0/P3.1脈沖寬度調制器(PWM) 通道,它們產生可由編程決定寬度和間隔的脈沖。脈沖的間隔周期是由一個FOR循環控制,來產生不同的占空比。單片機產生的PWM信號不能直接驅動電機,這就需要設計合適的驅動電路,用以可以間接地驅動電機,使其能夠正常運行。為此,我們可借助于恒壓恒流橋式2A驅動芯片L298N來完成對電動機的驅動。具體的設計方法是通過Keil C編程,Proteus聯合仿真來實現的。 4.2 相關軟件介紹1)Proteus Proteus是一種低投資的電子設計自動化軟件,提供Schematic Drawing,SPICE仿真與PCB設計功能,這一點Proteus與multisim比較類似,只不過它可以仿真單片機和周邊設備,可以仿真51系列、AVR,PIC等常用的MCU,與Keil和MPLAB不同的是它還提供了周邊設備的仿真,只要給出電路圖就可以仿真,例如373,led,示波器,Proteus提供了大量的元件庫有RAM,ROM,鍵盤,馬達,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,編譯方面支持Keil和MPLAB,里面有大量的例子參考。 (a)Proteus可提供的仿真元件資源Proteus軟件提供了可仿真數字和模擬、交流和直流等數千種元器件和多達30多個元件庫; (b)Proteus可提供的仿真儀表資源虛擬儀器儀表的數量、類型和質量,是衡量仿真軟件實驗室是否合格的一個關鍵因素。在Proteus軟件中,理論上同一種儀器可以在一個電路中隨意的調用; (c)除了現實存在的儀器外,Proteus還提供了一個圖形顯示功能,可以將線路上變化的信號,以圖形的方式實時地顯示出來; (d)Proteus還提供了比較豐富的測試信號用于電路的測試。這些測試信號包括模擬信號和數字信號。 2)Keil Keil是德國開發的一個51單片機開發軟件平臺,最開始只是一個支持C語言和匯編語言的編譯器軟件。后來隨著開發人員的不斷努力以及版本的不斷升級,使它已經成為了一個重要的單片機開發平臺,不過KEIL的界面并不是非常復雜,操作也不是非常困難,很多工程師的開發的優秀程序都是在KEIL的平臺上編寫出來的。可以說它是一個比較重要的軟件,熟悉他的人很多很多,用戶群極為龐大,要遠遠超過偉福等廠家軟件用戶群,操作有不懂的地方只要找相關的書看看,到相關的單片機技術論壇問問,很快就可以掌握它的基本使用了。 (a)Keil的UVision2可以進行純粹的軟件仿真(仿真軟件程序,不接硬件電路),也可以利用硬件仿真器,搭接上單片機硬件系統,在仿真器中載入項目程序后進行實時仿真; (b)可以使用UVision2的內嵌模塊Keil Monitor-51,在不需要額外的硬件仿真器的條件下,搭接單片機硬件系統對項目程序進行實時仿真; (c)uVision2調試器具備所有常規源極調試,符號調試特性以及歷史跟蹤,代碼覆蓋,復雜斷點等功能。DDE界面和shift語言支持自動程序測試。 4.3 應用軟件的編制、調試 使用Keil 軟件工具時,項目開發流程和其它軟件開發項目的流程極其相似。 1)創建一個項目,從器件庫中選擇目標器件,配置工具設置; 2)用C語言或匯編語言創建源程序; 3)用項目管理器生成應用; 4)修改源程序中的錯誤; 5)測試,連接應用。 第5章 仿真結果與分析5.1仿真電路圖 如圖5-1所示: 圖5-1 仿真電路圖 5.2 仿真結果1)半速運行狀態,運行結果如圖5-1所示:  圖5-1 電機半速運行 2)按下急停鍵,停止運行如圖5-2所示: 
圖5-2 電機停止運行 3)按下加速鍵,加速運行如圖5-3所示: 
圖5-3 電機加速運行 4)按下減速鍵,減速運行如5-4所示: 
圖5-4 電機減速運行 按下反轉鍵,反轉運行如圖5-5所示: 
圖5-5 電機反向運行 第6章總結這次設計,運用AT89C51單片機為核心硬件,設計了直流電機的轉速控制系統。實現了對直流電機的停止、加速、減速、正轉、反轉等多種控制功能,基本滿足設系統計的要求。同時,在驅動芯片和電動機的連接之間我有加入續流二極管,在電機反向運轉時進行續流,避免燒壞電機及其他元件。在此設計中P0口作為輸出端口,我們在P0口接入了排阻使電路復位后P0口輸出的為高電平。 通過本次設計,學習與掌握了AT98C51單片機的基本原理及其各種應用,對它的各種硬件接口與軟件設計方法有較深入的認識。對自動控制系統的動、靜態性能及其控制有了一定的認識。本設計重點在于應用,因此在設計過程中使自己的動手能力得到鍛煉,同時提高了解決實際問題的能力 感謝兩周以來每一位指導過自己的人,謝謝他們給自己的知識,以及在專業知識和學習方法方面給我的許多的指導和啟發,使我受益匪淺。謝謝他們的教導,謝謝他們幫我成長。
單片機源程序如下:
- #include<at89x51.h>
- #define unchar unsigned char
- #define unint unsigned int
- unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x84,0xff,0xbf}; //顯示代碼
- unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7}; //位選口
- unsigned char dispbuf[4]={0,0,0,0};
- unsigned char dispbitcnt;
- unint mstcnt;
- unint i;
-
- unint count=0;
- unchar tp=0;
- void ledshow();
- void keyscan();
- void delay();
- void just();
- void turn();
- void motorstop();
- void speedup();
- void speeddown();
-
- void main(void)
- {
- P3_0=1;
- P3_1=0;
- dispbuf[0]=16;
- TMOD=0x02;
- TH0=0x06;
- TL0=0x06;
- TR0=1;
- ET0=1;
- EA=1;
- while(1)
- {
- ledshow();//數碼管顯示
- keyscan();//鍵盤掃描
- }
- }
- //延時10ms程序
- void delay()
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- //鍵盤掃描程序
- void keyscan()
- {
- unchar temp=0;
- P1=0xff;
- if((P1&0x1f)!=0x1f)
- {
- delay();
- if((P1&0x1f)!=0x1f)
- {
- temp=P1&0x1f;
- switch(temp)
- {
- case 0x1e:
- just();break;
- case 0x1d:
- turn();break;
- case 0x1b:
- motorstop();break;
- case 0x17:
- speedup();break;
- case 0x0f:
- speeddown();break;
- }
- }
- }
- while((P1&0x1f)!=0x1f);
- }
- //數碼管顯示程序
- void ledshow()
- {
- P0=dispcode[dispbuf[dispbitcnt]];
- P2=dispbitcode[dispbitcnt];
- dispbitcnt++;
- if(dispbitcnt==4)
- {
- dispbitcnt=0;
- }
-
- P2=0x01;P0=dispcode[dispbuf[0]];
- for(i=0;i<700;i++);
-
- P2=0x02;P0=dispcode[dispbuf[1]];
- for(i=0;i<700;i++);
-
- P2=0x04;P0=dispcode[dispbuf[2]];
- for(i=0;i<700;i++);
-
- P2=0x08;P0=dispcode[dispbuf[3]];
- for(i=0;i<700;i++);
-
- dispbuf[1]=tp/100;
- dispbuf[2]=(tp%100)/10;
- dispbuf[3]=tp%10;
- }
- //中斷服務程序
- void t0(void) interrupt 1 using 0</font>
復制代碼
word文檔下載:
數字音樂盒全套說明書及源代碼.doc
(346.89 KB, 下載次數: 0)
2025-5-22 09:59 上傳
點擊文件名下載附件
數字音樂盒全套說明書及源代碼 下載積分: 黑幣 -5
|