0.png (41.25 KB, 下載次數: 139)
下載附件
2018-12-3 22:43 上傳
目錄 1 引言
2 系統論述
2.1 設計背景
2.2 設計思路
2.3 系統框架設計
3 PWM脈寬調制定理
3.1 PWM調速原理
3.2 PWM調速方法
3.3 PWM實現方法
4 系統硬件設計
4.1 系統基本組成
4.1.1 硬件模塊組成
4.1.1 單片機整個控制模塊
4.2 AT89S52單片機簡介
4.2.1 AT89S52主要性能
4.2.2 AT89S52主要功能例舉
4.2.3 AT89S52各引腳功能介紹
4.2.4 AT89S52的內部資源
4.3 L298電機驅動模塊
4.3.1 L298電機驅動簡介
4.3.2 L298內部原理圖
4.3.3 L298引腳符號及功能
4.3.4 L298邏輯功能
4.4 LED數碼管顯示
4.4.1 LED簡介
4.4.2 LED七段數碼管的結構
4.4.3 常見數字和字符的字段碼
4.4.4 LED數碼管與單片機的連接
4.4.5 簡單的程序流程
4.4.6 本系統中單片機與LED的連接
4.5 獨立式鍵盤控制模塊
4.5.1 鍵盤的功能及分類
4.5.2 獨立式鍵盤
4.5.3 獨立式鍵盤與單片機的連接
5 系統軟件設計
結論
致謝
參考文獻
附錄
附錄1
附錄2
1 引言早期直流傳動的控制系統采用模擬分離器件構成,由于模擬器件有其固有的缺點,如存在溫漂、零漂電壓,構成系統的器件較多,使得模擬直流傳動系統的控制精度及可靠性較低。隨著計算機控制技術的發展,微處理器已經廣泛使用于直流傳動系統,實現了全數字化控制。由于微處理器以數字信號工作,控制手段靈活方便,抗干擾能力強。所以,全數字直流調速控制精度、可靠性和穩定性比模擬直流調速系統大大提高。所以,直流傳動控制采用微處理器實現全數字化,使直流調速系統進入一個嶄新的階段。 微處理器誕生于上個世紀七十年代,隨著集成電路大規模及超大規模集成電路制造工藝的迅速發展,微處理器的性價比越來越高。此外,由于電力電子技術的發展,制作工藝的提升,使得大功率電子器件的性能迅速提高。為微處理器普遍用于控制電機提供了可能,利用微處理器控制電機完成各種新穎的、高性能的控制策略,使電機的各種潛在能力得到充分的發揮,使電機的性能更符合工業生產使用要求,還促進了電機生產商研發出各種如步進電機、無刷直流電機、開關磁阻電動機等便于控制且實用的新型電機,使電機的發展出現了新的變化。 對于簡單的微處理器控制電機,只需利用用微處理器控制繼電器、電子開關元器件,使電路開通或關斷就可實現對電機的控制。現在帶微處理器的可編程控制器,已經在各種的機床設備和各種的生產流水線中普遍得到應用,通過對可編程控制器進行編程就可以實現對電機的規律化控制。對于復雜的微處理器控制電機,則要利用微處理器控制電機的電壓、電流、轉矩、轉速、轉角等,使電機按給定的指令準確工作。通過微處理器控制,可使電機的性能有很大的提高。目前相比直流電機和交流電機他們各有所長,如直流電機調速性能好,但帶有機械換向器,有機械磨損及換向火花等問題;交流電機,不論是異步電機還是同步電機,結構都比直流電機簡單,工作也比直流電機可靠,但在頻率恒定的電網上運行時,它們的速度不能方便而經濟地調節[2]。高性能的微處理器如DSP (DIGITAL SIGNAL PROCESSOR即數字信號處理器)的出現,為采用新的控制理論和控制策略提供了良好的物質基礎,使電機傳動的自動化程度大為提高。在先進的數控機床等數控位置伺服系統,已經采用了如DSP等的高速微處理器,其執行速度可達數百萬兆以上每秒,且具有適合的矩陣運算。 2系統論述 2.1設計背景 近年來,隨著科技的進步,電力電子技術得到了迅速的發展,直流電機得到了越來越廣泛的應用。直流它具有優良的調速特性,調速平滑、方便,調速范圍廣;過載能力大,能承受頻繁的沖擊負載,可實現頻繁的無級快速起動、制動和反轉;需要能滿足生產過程自動化系統各種不同的特殊運行要求,從而對直流電機的調速提出了較高的要求,改變電樞回路電阻調速,改變電樞電壓調速等技術已遠遠不能滿足要求,這時通過PWM方式控制直流電機調速的方法應運而生。
2.2 設計思路 直流電機PWM控制系統的主要功能包括:實現對直流電機的加速、減速以及電機的正轉、反轉和急停,并且可以調整電機的轉速,能夠很方便的實現電機的智能控制。 主體電路:即直流電機PWM控制模塊。這部分電路主要由AT89S52單片機的I/O端口、定時計數器、外部中斷擴展等控制直流電機的加速、減速以及電機的正轉和反轉,并且可以調整電機的轉速,能夠很方便的實現電機的智能控制。其間是通過AT89S52單片機產生脈寬可調的脈沖信號并輸入到L298驅動芯片來控制直流電機工作的。該直流電機PWM控制系統由以下電路模塊組成: 設計輸入部分:這一模塊主要是利用帶中斷的獨立式鍵盤來實現對直流電機的加速、減速以及電機的正轉、反轉和急?刂。 設計控制部分:主要由AT89S52單片機的外部中斷擴展電路組成。直流電機PWM控制實現部分主要由一些二極管、電機和L298直流電機驅動模塊組成。 設計顯示部分: LED數碼顯示部分,實現對PWM脈寬調制占空比的實時顯示。
2.3 系統框架設計 
直流電機PWM調速方案 方案說明:直流電機PWM調速系統以AT89S52單片機為控制核心,由命令輸入模塊、LED顯示模塊及電機驅動模塊組成。采用帶中斷的獨立式鍵盤作為命令的輸入,單片機在程序控制下,定時不斷給L298直流電機驅動芯片發送PWM波形,H型驅動電路完成電機正,反轉和急?刂;同時單片機不停的將PWM脈寬調制占空比送到LED數碼管完成實時顯示。
3PWM脈寬調制原理 3.1PWM調速原理 載兩端的電壓,從而達到控制要求的一種電壓調整方法。PWM可以應用在許多方面,比如:電機調PWM(脈沖寬度調制)是通過控制固定電壓的直流電源開關頻率,改變負速、溫度控制、壓力控制等等[7]。 在PWM驅動控制的調整系統中,按一個固定的頻率來接通和斷開電源,并且根據需要改變一個周期內“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來達到改變平均電壓大小的目的,從而來控制電動機的轉速。也正因為如此,PWM又被稱為“開關驅動裝置”。 如圖1所示: 
圖1 PWM信號的占空比 設電機始終接通電源時,電機轉速最大為Vmax,設占空比為D= t1 / T,則電機的平均速度為Va = Vmax * D,其中Va指的是電機的平均速度;Vmax 是指電機在全通電時的最大速度;D = t1 / T是指占空比。 由上面的公式可見,當我們改變占空比D=t1/T時,就可以得到不同的電機平均速度Vd,從而達到調速的目的。嚴格來說,平均速度Vd與占空比D并非嚴格的線性關系,但是在一般的應用中,我們可以將其近似的看成是線性關系。 3. 2 PWM調速方法 基于單片機類由軟件來實現PWM:在PWM調速系統中占空比D是一個重要參數在電源電壓 不變的情況下,電樞端電壓的平均值取決于占空比D的大小,改變D的值可以改變電樞端電壓的平均值從而達到調速的目的。改變占空比D的值有三種方法: A、定寬調頻法:保持 不變,只改變t,這樣使周期(或頻率)也隨之改變[。 B、調寬調頻法:保持t不變,只改變 ,這樣使周期(或頻率)也隨之改變[。 C、定頻調寬法:保持周期T(或頻率)不變,同時改變 和t。 前兩種方法在調速時改變了控制脈沖的周期(或頻率),當控制脈沖的頻率與系統的固有頻率接近時,將會引起振蕩,因此常采用定頻調寬法來改變占空比從而改變直流電動機電樞兩端電壓。利用單片機的定時計數器外加軟件延時等方式來實現脈寬的自由調整,此種方式可簡化硬件電路,操作性強等優點。 3.3 PWM實現方式 方案一:采用定時器做為脈寬控制的定時方式,這一方式產生的脈沖寬度極其精確,誤差只在幾個us。 方案二:采用軟件延時方式,這一方式在精度上不及方案一,特別是在引入中斷后,將有一定的誤差。故采用方案一。
4系統硬件設計 4.1系統基本組成 4.1.1 硬件模塊組成 (1)單片機控制模塊 (2)L298電機驅動模塊 (3)LED顯示模塊 (4)獨立鍵盤控制模塊3.3系統硬件各模塊電路 4.1.2 單片機整個控制模塊 單片機整個控制模塊 這里利用定時計數器讓單片機P2口的P2.6、P2.7引腳輸出占空比不同的方波,然后經驅動芯片L298放大后控制直流電機。驅動芯片的輸入電壓是兩引腳的電壓差,在調速時一根引腳線為低電平,另一個引腳產生調速方波,這樣兩個引腳的電壓差就可通過控制其中一個引腳來控制。當需要改變電機轉動方向時,兩個引腳的輸出相反。 定時計數器若干時間(1us)中斷一次,就使P2.6或P2.7產生一個高電平或低電平。直流電機的速度分成100個等級,因此一個周期就有100個脈沖,周期為一百個脈沖的時間,速度等級對應一個周期的高電平脈沖的個數。占空比為高電平脈沖個數占一個周期總脈沖個數的百分數。一個周期加在電機兩端的電壓為脈沖高電壓乘以占空比。占空比越大,加在電機兩端的電壓越大,電機轉動越快。電機的平均速度等于在一定的占空比下電機的最大速度乘以占空比。當我們改變占空比時,就可以得到不同的電機平均速度,從而達到調速的目的。精確的講,平均速度與占空比并不是嚴格的線性關系,在一般的應用中,可以將其近似看成線性關系。 4.2 AT89S52的簡介 4.2.1 AT89S52主要性能 AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 與MCS-51單片機產品兼容;8K字節在系統可編程Flash存儲器;1000次擦寫周期;全靜態操作:0Hz~33Hz;三級加密程序存儲器;32個可編程I/O口線;三個16位定時器/計數器;八個中斷源;全雙工UART串行通道;低功耗空閑和掉電模式;掉電后中斷可喚醒;看門狗定時器;雙數據指針;掉電標識符。
4.2.2 AT89S52主要功能列舉 1、擁有靈巧的8位CPU和在系統可編程Flash 2、晶片內部具時鐘振蕩器(傳統最高工作頻率可至 12MHz) 3、內部程序存儲器(ROM)為 8KB 4、內部數據存儲器(RAM)為 256字節 5、32 個可編程I/O 口線 6、8 個中斷向量源 7、三個 16 位定時器/計數器 8、三級加密程序存儲器 9、全雙工UART串行通道 4.2.3 AT89S52各引腳功能介紹 4. 3 L298電機驅動模塊 4. 3.1 L298電機驅動簡介 L298是SGS公司的產品,L298N為15個管角的單塊集成電路,高電壓,高電流,四通道驅動,設計用L298N來接收DTL或者TTL邏輯電平,驅動感性負載(比如繼電器,直流和步進馬達)和開關電源晶體管。內部包含4通道邏輯驅動電路,其額定工作電流為 1 A,最大可達 1.5 A,Vss 電壓最小 4.5 V,最大可達 36 V;Vs 電壓最大值也是 36 V。L298N可直接對電機進行控制,無須隔離電路,可以驅動雙電機。  4. 3.2 L298內部的原理圖
4. 3.3 L298 引腳符號及功能 4. 3.4 L298的邏輯功能 當使能端為高電平時,輸入端IN1為PWM信號,IN2為低電平信號時,電機正轉;輸入端IN1為低電平信號,IN2為PWM信號時,電機反轉;;IN1與IN2相 同時,電機快速停止。當使能端為低電平時,電動機停止轉動。 在對直流電動機電壓的控制和驅動中,半導體功率器件(L298)在使用上可以分為兩種方式:線性放大驅動方式和開關驅動方式在線性放大驅動方式。 半導體功率器件工作在線性區優點是控制原理簡單,輸出波動小,線性好,對鄰近電路干擾小,缺點為功率器件工作在線性區,功率低和散熱問題嚴重。開關驅動方式是使半導體功率器件工作在開關狀態,通過脈調制(PWM)來控制電動機的電壓,從而實現電動機轉速的控制。 4. 4 LED數碼管顯示 4. 4.1 LED簡介 LED(Light Emitting Diode),發光二極管,是一種固態的半導體器件,它可以直接把電轉化為光。LED的心臟是一個半導體的晶片,晶片的一端附在一個支架上,一端是負極,另一端連接電源的正極,使整個晶片被環氧樹脂封裝起來。半導體晶片由兩部分組成,一部分是P型半導體,在它里面空穴占主導地位,另一端是N型半導體,在這邊主要是電子。但這兩種半導體連接起來的時候,它們之間就形成一個“P-N結”。 當電流通過導線作用于這個晶片的時候,電子就會被推向P區,在P區里電子跟空穴復合,然后就會以光子的形式發出能量,這就是LED發光的原理。而光的波長也就是光的顏色,是由形成P-N結的材料決定的。除半導體激光器外,當電流激勵時能發射光學輻射的半導體二極管。嚴格地講,術語LED應該僅應用于發射可見光的二極管;發射近紅外輻射的二極管叫紅外發光二極管(IRED,Infrared Emitting Diode);發射峰值波長在可見光短波限附近,由部份紫外輻射的二極管稱為紫外發光二極管;但是習慣上把上述三種半導體二極管統稱為發光二極管。 4. 4.2 LED七段數碼管的結構
共陰極 共陽極 管腳圖 其中:圖(a)為共陰極結構,8斷發光二極管的陰極端連接在一起,陽極端分開控制,使用時公共端接地,要使哪根發光二極管,則對應的陽極端接高電平。圖(b)為共陽極結構,8端發光二極管的陽極端連接在一起,陰極端分開控制,使用時公共端接電源。要使哪根發光二極管,則對應的陰極端接地。其中7段發光二極管構成7筆的字形“8”,1根發光二極管構成小數點。圖“c”為引腳圖,從a-g引腳輸入不同的8位二進制編碼,可顯示不同的數字或字符。通常把控制發光二極管的7(或8)位二極管編制稱為字段碼。不同數字或字符其字段碼不一樣,對于同一個數字或字符,共陰極連接和共陽極連接的字段碼也不一樣,共陰極和共陽極的字段碼互為反碼。 4. 4.3常見數字和字符的字段碼 4. 4.4 LED數碼管和單片機的連接 電路的接法決定了必須采用逐位掃描顯示方式。即從段選口送出某位LED的字型碼,然后選通該位LED, 并保持一段延時時間。然后選通下一位,直到所有位掃 描完。 4. 4.5簡單的程序流程 4. 4.6本系統中單片機與LED的連接
4.5獨立式鍵盤控制模塊 4.5.1鍵盤的功能及分類 鍵盤是一種最常用的輸入設備,它是一組按鍵的集合,從功能上可分為數字鍵和功能鍵兩種,作用是輸入數據與命令,查詢和控制系統的工作狀態,實現簡單的人機對話。 鍵盤的分類 (a)鍵盤按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類。這兩類鍵盤的主要區別是識別鍵符及給出相應鍵碼的方法。 編碼鍵盤主要是用硬件來實現對鍵的識別; 非編碼鍵盤主要是由軟件來實現鍵盤的定義與識別。 (b)鍵盤按照其結構可分為獨立式鍵盤與矩陣式鍵盤兩類。 獨立式鍵盤主要用于按鍵較少的場合,矩陣式鍵盤主要用于按鍵較多的場合,也稱行列式鍵盤 4.5.2獨立式鍵盤  獨立式鍵盤的按鍵相互獨立,每個按鍵接一根I/O口線,一根I/O口線上的按鍵工作狀態不會影響其它I/O口線的工作狀態。因此,通過檢測I/O口線的電平狀態,即可判斷鍵盤上哪個鍵被按下
4.5.3獨立式鍵盤與單片機的鏈接
5系統軟件設計 直接應用AT89S52的軟件方法實現PWM信號輸出,這比硬件實現PWM信號成本低。限制少。實現便捷。其流程圖如下所示。
5.1流程圖 5.1.1主程序流程圖
圖5.1系統主單片機總程序框圖
結論 通過本次畢業設計,使我學到了許多書本上無法學到的知識,也使我深刻體會到單片機技術應用領域的廣泛。不僅讓我對學過的單片機知識有了很多的鞏固,同時也對單片機這一門課程產生了更大的興趣。在本次課程設計過程中,我學會了在網絡上查找有關本設計的各硬件的資源,其中包括:直流電機PWM調速、AT89S52單片機、L289引腳圖及其引腳功能等,LED數碼管顯示,為本次畢業設計提供了一定的資料。 在做畢業設計的初期階段,難度很大,沒有頭緒。通過求助于陳老師、理清了思路。同時,在圖書館里、網上查閱資料,攻克了畢業設計中的道道難題。通過本次科技創新實踐,我學到了許多東西,知道光靠書本上的東西是不夠的,需額外去查資料。無論是在硬件還是軟件設計上,我都遇到了不少的問題,在克服困難的過程中,我學到了許多,特別是在課堂上學不到的東西如(PWM)。也鍛煉了我的protel畫圖能力,以前學的時候元器件都是給定的只要到庫里面找出名字就可以,只要連線就可以,而這次是根據自己的設計需要去畫,感覺不同。本次設計我能獨立完成,算是有了很大的收獲。總的感受有以下幾方面: 1、通過本次畢業設計,我不但對單片機有了更為深入的了解,對一個課題如何畫流程圖,編程序等有了一定的認識。 2、進一步加強了我的動手能力和運用專業知識的能力,從中學習到如何去思考和解決問題,以及如何靈活地改變方法去實現設計方案。特別是深刻體會到了軟件和硬件結合的重要性,以及兩者的聯系和配合作用。 3、讓我了解到單片機技術對當今人們生活的重要性。同時這次做畢業設計的經歷也使我受益匪淺,讓我知道做任何事情都應腳踏實地,刻苦努力地去做,只有這樣,才能做好。
附錄2:原理圖
單片機源程序如下: - *********************************************************************
- 直流電機PWM調速
- 功能描述:使用單片機T0定時器產生(xxxHz)脈寬調制信號,輸到L298N的EN_A
- 實現雙直流電機的速度調控。
- 修訂日期:2011-5-7
- *********************************************************************/
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- /**********************************************************************
- L298n接口定義
- **********************************************************************/
- sbit MOTOR_A_2=P3^6;
- sbit MOTOR_A_1=P3^7;
- sbit EN_MOTOR_A =P3^4;
- sbit k1=P1^5; //定義k1為p1.5口
- sbit k2=P3^1; //定義k2為p3.1口
- sbit k3=P3^2; //定義k3為p3.2口
- sbit k4=P3^3; //定義k4為p3.3口
- uchar T=0; //定時標記
- uchar W=0; //脈寬值 0~100
- uchar A=0; //方向標記 0,1
- uchar k=0; //按鍵標記
- uchar i=0; //計數變量
-
-
- uchar code table1[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
-
- uchar code table2[]={0xef,0xbf,0xdf,0x7f};
-
- void delayms(uint t);
- /**********************************************************************
- 數碼管顯示
- **********************************************************************/
- void disp(void)
- {
- P0=table2[3];
- P2=table1[W%10]; //顯示占空比個位
- delayms(1); //延時1ms
- P0=0xff; //P0清1
-
- P0=table2[2];
- P2=table1[W/100]; //顯示占空比百位
- delayms(1); //延時1ms
- P0=0xff; //P0清1
-
- P0=table2[1];
- P2=table1[W/10%10]; //顯示占空比十位
- delayms(1); //延時1ms
- P0=0xff; //P0清1
-
- P0=table2[0];
- P2=table1[A]; //顯示方向
- delayms(1); //延時1ms
- P0=0xff; //P0清1
- }
-
- /**********************************************************************
- 定時器變量定義
- **********************************************************************/
-
-
- void init(void)
- {
- //啟動中斷
- TMOD=0x01;
- EA=1;
- ET0=1;
- TR0=1;
- //設置定時時間
- TH0=0xfd;
- TL0=0x17;
- }
-
- void timer0() interrupt 1
- {
- //重置定時器時間
- TL0=0x17;
- TH0=0xff;
- T++; //定時標記加1
- disp(); //數碼管顯示
- if(T>W)
- EN_MOTOR_A =1;
- else
- EN_MOTOR_A =0;
- if(T==100)
- T=0;
-
- }
- /**********************************************************************
- 延時1ms
- **********************************************************************/
- void delayms(uint t)
- {
- uchar j;
- while(t--)
- {
- for(j=0;j<250;j++) //循環250次
- {
- _nop_(); //系統延時
- _nop_(); //系統延時
- _nop_(); //系統延時
- _nop_(); //系統延時
- }
- }
- }
- /**********************************************************************
- 獨立按鍵檢測
- **********************************************************************/
- void key(void) //按鍵判斷程序
- {
- if(k1==0) //按鍵1按下
- {
- while(k1==0); //按鍵1抬起
- if(W==100) //如果脈寬為100
- W=0; //脈寬置0
- else
- W+=1; //否則加1
- }
- else if(k2==0) //按鍵2按下
- {
- while(k2==0); //按鍵2抬起
- if(W==0) //如果脈寬為0
- W=100; //脈寬設置成100
- else
- W-=1; //否則減1
- }
- else if(k3==0) //按鍵3按下
- {
- while(k3==0); //按鍵3抬起
- A=!A; //方向標記取反
- k=0; //按鍵標記清0
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
|