欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)直流電機(jī)PWM(調(diào)速)控制系統(tǒng)仿真+程序設(shè)計(jì) [打印本頁]

作者: 人間2    時(shí)間: 2018-12-3 20:37
標(biāo)題: 單片機(jī)直流電機(jī)PWM(調(diào)速)控制系統(tǒng)仿真+程序設(shè)計(jì)

目錄

1 引言
2 系統(tǒng)論述
2.1 設(shè)計(jì)背景
2.2 設(shè)計(jì)思路
2.3 系統(tǒng)框架設(shè)計(jì)
3 PWM脈寬調(diào)制定理
3.1 PWM調(diào)速原理
3.2 PWM調(diào)速方法
3.3 PWM實(shí)現(xiàn)方法
4 系統(tǒng)硬件設(shè)計(jì)
4.1 系統(tǒng)基本組成
4.1.1 硬件模塊組成
4.1.1 單片機(jī)整個(gè)控制模塊
4.2 AT89S52單片機(jī)簡(jiǎn)介
4.2.1 AT89S52主要性能
4.2.2 AT89S52主要功能例舉
4.2.3 AT89S52各引腳功能介紹
4.2.4 AT89S52的內(nèi)部資源
4.3 L298電機(jī)驅(qū)動(dòng)模塊
4.3.1 L298電機(jī)驅(qū)動(dòng)簡(jiǎn)介
4.3.2 L298內(nèi)部原理圖
4.3.3 L298引腳符號(hào)及功能
4.3.4 L298邏輯功能
4.4 LED數(shù)碼管顯示
4.4.1 LED簡(jiǎn)介
4.4.2 LED七段數(shù)碼管的結(jié)構(gòu)
4.4.3 常見數(shù)字和字符的字段碼
4.4.4 LED數(shù)碼管與單片機(jī)的連接
4.4.5 簡(jiǎn)單的程序流程
4.4.6 本系統(tǒng)中單片機(jī)與LED的連接
4.5 獨(dú)立式鍵盤控制模塊
4.5.1 鍵盤的功能及分類
4.5.2 獨(dú)立式鍵盤
4.5.3 獨(dú)立式鍵盤與單片機(jī)的連接
5 系統(tǒng)軟件設(shè)計(jì)
結(jié)論
致謝
參考文獻(xiàn)
附錄
附錄1
附錄2


1 引言

早期直流傳動(dòng)的控制系統(tǒng)采用模擬分離器件構(gòu)成,由于模擬器件有其固有的缺點(diǎn),如存在溫漂、零漂電壓,構(gòu)成系統(tǒng)的器件較多,使得模擬直流傳動(dòng)系統(tǒng)的控制精度及可靠性較低。隨著計(jì)算機(jī)控制技術(shù)的發(fā)展,微處理器已經(jīng)廣泛使用于直流傳動(dòng)系統(tǒng),實(shí)現(xiàn)了全數(shù)字化控制。由于微處理器以數(shù)字信號(hào)工作,控制手段靈活方便,抗干擾能力強(qiáng)。所以,全數(shù)字直流調(diào)速控制精度、可靠性和穩(wěn)定性比模擬直流調(diào)速系統(tǒng)大大提高。所以,直流傳動(dòng)控制采用微處理器實(shí)現(xiàn)全數(shù)字化,使直流調(diào)速系統(tǒng)進(jìn)入一個(gè)嶄新的階段。

微處理器誕生于上個(gè)世紀(jì)七十年代,隨著集成電路大規(guī)模及超大規(guī)模集成電路制造工藝的迅速發(fā)展,微處理器的性價(jià)比越來越高。此外,由于電力電子技術(shù)的發(fā)展,制作工藝的提升,使得大功率電子器件的性能迅速提高。為微處理器普遍用于控制電機(jī)提供了可能,利用微處理器控制電機(jī)完成各種新穎的、高性能的控制策略,使電機(jī)的各種潛在能力得到充分的發(fā)揮,使電機(jī)的性能更符合工業(yè)生產(chǎn)使用要求,還促進(jìn)了電機(jī)生產(chǎn)商研發(fā)出各種如步進(jìn)電機(jī)、無刷直流電機(jī)、開關(guān)磁阻電動(dòng)機(jī)等便于控制且實(shí)用的新型電機(jī),使電機(jī)的發(fā)展出現(xiàn)了新的變化。

對(duì)于簡(jiǎn)單的微處理器控制電機(jī),只需利用用微處理器控制繼電器、電子開關(guān)元器件,使電路開通或關(guān)斷就可實(shí)現(xiàn)對(duì)電機(jī)的控制。現(xiàn)在帶微處理器的可編程控制器,已經(jīng)在各種的機(jī)床設(shè)備和各種的生產(chǎn)流水線中普遍得到應(yīng)用,通過對(duì)可編程控制器進(jìn)行編程就可以實(shí)現(xiàn)對(duì)電機(jī)的規(guī)律化控制。對(duì)于復(fù)雜的微處理器控制電機(jī),則要利用微處理器控制電機(jī)的電壓、電流、轉(zhuǎn)矩、轉(zhuǎn)速、轉(zhuǎn)角等,使電機(jī)按給定的指令準(zhǔn)確工作。通過微處理器控制,可使電機(jī)的性能有很大的提高。目前相比直流電機(jī)和交流電機(jī)他們各有所長(zhǎng),如直流電機(jī)調(diào)速性能好,但帶有機(jī)械換向器,有機(jī)械磨損及換向火花等問題;交流電機(jī),不論是異步電機(jī)還是同步電機(jī),結(jié)構(gòu)都比直流電機(jī)簡(jiǎn)單,工作也比直流電機(jī)可靠,但在頻率恒定的電網(wǎng)上運(yùn)行時(shí),它們的速度不能方便而經(jīng)濟(jì)地調(diào)節(jié)[2]。高性能的微處理器如DSP (DIGITAL SIGNAL PROCESSOR即數(shù)字信號(hào)處理器)的出現(xiàn),為采用新的控制理論和控制策略提供了良好的物質(zhì)基礎(chǔ),使電機(jī)傳動(dòng)的自動(dòng)化程度大為提高。在先進(jìn)的數(shù)控機(jī)床等數(shù)控位置伺服系統(tǒng),已經(jīng)采用了如DSP等的高速微處理器,其執(zhí)行速度可達(dá)數(shù)百萬兆以上每秒,且具有適合的矩陣運(yùn)算。

2系統(tǒng)論述
2.1設(shè)計(jì)背景

近年來,隨著科技的進(jìn)步,電力電子技術(shù)得到了迅速的發(fā)展,直流電機(jī)得到了越來越廣泛的應(yīng)用。直流它具有優(yōu)良的調(diào)速特性,調(diào)速平滑、方便,調(diào)速范圍廣;過載能力大,能承受頻繁的沖擊負(fù)載,可實(shí)現(xiàn)頻繁的無級(jí)快速起動(dòng)、制動(dòng)和反轉(zhuǎn);需要能滿足生產(chǎn)過程自動(dòng)化系統(tǒng)各種不同的特殊運(yùn)行要求,從而對(duì)直流電機(jī)的調(diào)速提出了較高的要求,改變電樞回路電阻調(diào)速,改變電樞電壓調(diào)速等技術(shù)已遠(yuǎn)遠(yuǎn)不能滿足要求,這時(shí)通過PWM方式控制直流電機(jī)調(diào)速的方法應(yīng)運(yùn)而生。


2.2 設(shè)計(jì)思路

直流電機(jī)PWM控制系統(tǒng)的主要功能包括:實(shí)現(xiàn)對(duì)直流電機(jī)的加速、減速以及電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和急停,并且可以調(diào)整電機(jī)的轉(zhuǎn)速,能夠很方便的實(shí)現(xiàn)電機(jī)的智能控制。

主體電路:即直流電機(jī)PWM控制模塊。這部分電路主要由AT89S52單片機(jī)的I/O端口、定時(shí)計(jì)數(shù)器、外部中斷擴(kuò)展等控制直流電機(jī)的加速、減速以及電機(jī)的正轉(zhuǎn)和反轉(zhuǎn),并且可以調(diào)整電機(jī)的轉(zhuǎn)速,能夠很方便的實(shí)現(xiàn)電機(jī)的智能控制。其間是通過AT89S52單片機(jī)產(chǎn)生脈寬可調(diào)的脈沖信號(hào)并輸入到L298驅(qū)動(dòng)芯片來控制直流電機(jī)工作的。該直流電機(jī)PWM控制系統(tǒng)由以下電路模塊組成:

設(shè)計(jì)輸入部分:這一模塊主要是利用帶中斷的獨(dú)立式鍵盤來實(shí)現(xiàn)對(duì)直流電機(jī)的加速、減速以及電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和急停控制。

設(shè)計(jì)控制部分:主要由AT89S52單片機(jī)的外部中斷擴(kuò)展電路組成。直流電機(jī)PWM控制實(shí)現(xiàn)部分主要由一些二極管、電機(jī)和L298直流電機(jī)驅(qū)動(dòng)模塊組成。

設(shè)計(jì)顯示部分: LED數(shù)碼顯示部分,實(shí)現(xiàn)對(duì)PWM脈寬調(diào)制占空比的實(shí)時(shí)顯示。


2.3 系統(tǒng)框架設(shè)計(jì)

直流電機(jī)PWM調(diào)速方案

方案說明:直流電機(jī)PWM調(diào)速系統(tǒng)以AT89S52單片機(jī)為控制核心,由命令輸入模塊、LED顯示模塊及電機(jī)驅(qū)動(dòng)模塊組成。采用帶中斷的獨(dú)立式鍵盤作為命令的輸入,單片機(jī)在程序控制下,定時(shí)不斷給L298直流電機(jī)驅(qū)動(dòng)芯片發(fā)送PWM波形,H型驅(qū)動(dòng)電路完成電機(jī)正,反轉(zhuǎn)和急停控制;同時(shí)單片機(jī)不停的將PWM脈寬調(diào)制占空比送到LED數(shù)碼管完成實(shí)時(shí)顯示。


3PWM脈寬調(diào)制原理
3.1PWM調(diào)速原理

載兩端的電壓,從而達(dá)到控制要求的一種電壓調(diào)整方法。PWM可以應(yīng)用在許多方面,比如:電機(jī)調(diào)PWM(脈沖寬度調(diào)制)是通過控制固定電壓的直流電源開關(guān)頻率,改變負(fù)速、溫度控制、壓力控制等等[7]。

在PWM驅(qū)動(dòng)控制的調(diào)整系統(tǒng)中,按一個(gè)固定的頻率來接通和斷開電源,并且根據(jù)需要改變一個(gè)周期內(nèi)“接通”和“斷開”時(shí)間的長(zhǎng)短。通過改變直流電機(jī)電樞上電壓的“占空比”來達(dá)到改變平均電壓大小的目的,從而來控制電動(dòng)機(jī)的轉(zhuǎn)速。也正因?yàn)槿绱耍琍WM又被稱為“開關(guān)驅(qū)動(dòng)裝置”。

如圖1所示:

圖1  PWM信號(hào)的占空比

設(shè)電機(jī)始終接通電源時(shí),電機(jī)轉(zhuǎn)速最大為Vmax,設(shè)占空比為D= t1 / T,則電機(jī)的平均速度為Va = Vmax * D,其中Va指的是電機(jī)的平均速度;Vmax 是指電機(jī)在全通電時(shí)的最大速度;D = t1 / T是指占空比。

由上面的公式可見,當(dāng)我們改變占空比D=t1/T時(shí),就可以得到不同的電機(jī)平均速度Vd,從而達(dá)到調(diào)速的目的。嚴(yán)格來說,平均速度Vd與占空比D并非嚴(yán)格的線性關(guān)系,但是在一般的應(yīng)用中,我們可以將其近似的看成是線性關(guān)系。

3. 2  PWM調(diào)速方法

基于單片機(jī)類由軟件來實(shí)現(xiàn)PWM:在PWM調(diào)速系統(tǒng)中占空比D是一個(gè)重要參數(shù)在電源電壓不變的情況下,電樞端電壓的平均值取決于占空比D的大小,改變D的值可以改變電樞端電壓的平均值從而達(dá)到調(diào)速的目的。改變占空比D的值有三種方法:

A、定寬調(diào)頻法:保持不變,只改變t,這樣使周期(或頻率)也隨之改變[。

B、調(diào)寬調(diào)頻法:保持t不變,只改變,這樣使周期(或頻率)也隨之改變[。

C、定頻調(diào)寬法:保持周期T(或頻率)不變,同時(shí)改變和t。

前兩種方法在調(diào)速時(shí)改變了控制脈沖的周期(或頻率),當(dāng)控制脈沖的頻率與系統(tǒng)的固有頻率接近時(shí),將會(huì)引起振蕩,因此常采用定頻調(diào)寬法來改變占空比從而改變直流電動(dòng)機(jī)電樞兩端電壓。利用單片機(jī)的定時(shí)計(jì)數(shù)器外加軟件延時(shí)等方式來實(shí)現(xiàn)脈寬的自由調(diào)整,此種方式可簡(jiǎn)化硬件電路,操作性強(qiáng)等優(yōu)點(diǎn)。

3.3 PWM實(shí)現(xiàn)方式

方案一:采用定時(shí)器做為脈寬控制的定時(shí)方式,這一方式產(chǎn)生的脈沖寬度極其精確,誤差只在幾個(gè)us。

方案二:采用軟件延時(shí)方式,這一方式在精度上不及方案一,特別是在引入中斷后,將有一定的誤差。故采用方案一。


     4系統(tǒng)硬件設(shè)計(jì)
4.1系統(tǒng)基本組成
4.1.1 硬件模塊組成

(1)單片機(jī)控制模塊

(2)L298電機(jī)驅(qū)動(dòng)模塊

(3)LED顯示模塊

(4)獨(dú)立鍵盤控制模塊3.3系統(tǒng)硬件各模塊電路
4.1.2 單片機(jī)整個(gè)控制模塊
單片機(jī)整個(gè)控制模塊

    這里利用定時(shí)計(jì)數(shù)器讓單片機(jī)P2口的P2.6、P2.7引腳輸出占空比不同的方波,然后經(jīng)驅(qū)動(dòng)芯片L298放大后控制直流電機(jī)。驅(qū)動(dòng)芯片的輸入電壓是兩引腳的電壓差,在調(diào)速時(shí)一根引腳線為低電平,另一個(gè)引腳產(chǎn)生調(diào)速方波,這樣兩個(gè)引腳的電壓差就可通過控制其中一個(gè)引腳來控制。當(dāng)需要改變電機(jī)轉(zhuǎn)動(dòng)方向時(shí),兩個(gè)引腳的輸出相反。

    定時(shí)計(jì)數(shù)器若干時(shí)間(1us)中斷一次,就使P2.6或P2.7產(chǎn)生一個(gè)高電平或低電平。直流電機(jī)的速度分成100個(gè)等級(jí),因此一個(gè)周期就有100個(gè)脈沖,周期為一百個(gè)脈沖的時(shí)間,速度等級(jí)對(duì)應(yīng)一個(gè)周期的高電平脈沖的個(gè)數(shù)。占空比為高電平脈沖個(gè)數(shù)占一個(gè)周期總脈沖個(gè)數(shù)的百分?jǐn)?shù)。一個(gè)周期加在電機(jī)兩端的電壓為脈沖高電壓乘以占空比。占空比越大,加在電機(jī)兩端的電壓越大,電機(jī)轉(zhuǎn)動(dòng)越快。電機(jī)的平均速度等于在一定的占空比下電機(jī)的最大速度乘以占空比。當(dāng)我們改變占空比時(shí),就可以得到不同的電機(jī)平均速度,從而達(dá)到調(diào)速的目的。精確的講,平均速度與占空比并不是嚴(yán)格的線性關(guān)系,在一般的應(yīng)用中,可以將其近似看成線性關(guān)系。

4.2  AT89S52的簡(jiǎn)介
4.2.1 AT89S52主要性能

AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51   產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。

與MCS-51單片機(jī)產(chǎn)品兼容;8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器;1000次擦寫周期;全靜態(tài)操作:0Hz~33Hz;三級(jí)加密程序存儲(chǔ)器;32個(gè)可編程I/O口線;三個(gè)16位定時(shí)器/計(jì)數(shù)器;八個(gè)中斷源;全雙工UART串行通道;低功耗空閑和掉電模式;掉電后中斷可喚醒;看門狗定時(shí)器;雙數(shù)據(jù)指針;掉電標(biāo)識(shí)符。


4.2.2 AT89S52主要功能列舉

1、擁有靈巧的8位CPU和在系統(tǒng)可編程Flash

2、晶片內(nèi)部具時(shí)鐘振蕩器(傳統(tǒng)最高工作頻率可至 12MHz)

3、內(nèi)部程序存儲(chǔ)器(ROM)為 8KB

4、內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)為 256字節(jié)

5、32 個(gè)可編程I/O 口線

6、8 個(gè)中斷向量源

7、三個(gè) 16 位定時(shí)器/計(jì)數(shù)器

8、三級(jí)加密程序存儲(chǔ)器

9、全雙工UART串行通道

4.2.3 AT89S52各引腳功能介紹

            

4. 3 L298電機(jī)驅(qū)動(dòng)模塊
4. 3.1 L298電機(jī)驅(qū)動(dòng)簡(jiǎn)介
   L298是SGS公司的產(chǎn)品,L298N為15個(gè)管角的單塊集成電路,高電壓,高電流,四通道驅(qū)動(dòng),設(shè)計(jì)用L298N來接收DTL或者TTL邏輯電平,驅(qū)動(dòng)感性負(fù)載(比如繼電器,直流和步進(jìn)馬達(dá))和開關(guān)電源晶體管。內(nèi)部包含4通道邏輯驅(qū)動(dòng)電路,其額定工作電流為 1 A,最大可達(dá) 1.5 A,Vss 電壓最小 4.5 V,最大可達(dá) 36 V;Vs 電壓最大值也是 36 V。L298N可直接對(duì)電機(jī)進(jìn)行控制,無須隔離電路,可以驅(qū)動(dòng)雙電機(jī)。
4. 3.2 L298內(nèi)部的原理圖



4. 3.3 L298 引腳符號(hào)及功能
引 腳
功 能
SENSA、SENSB
分別為兩個(gè)H橋的電流反饋腳,不用時(shí)可以直接接地
ENA 、ENB
使能端,輸入PWM信號(hào)
IN1、IN2、IN3、IN4
輸入端,TTL邏輯電平信號(hào)
OUT1、OUT2、OUT3、OUT4
輸出端,與對(duì)應(yīng)輸入端同邏輯
VCC
邏輯控制電源,4.5~7V
VSS
電機(jī)驅(qū)動(dòng)電源,最小值需比輸入的低電平電壓高
GND
4. 3.4 L298的邏輯功能
IN1
IN2
ENA
電機(jī)狀態(tài)
X
X
0
停止
1
0
1
順時(shí)針
0
1
1
逆時(shí)針
0
0
0
停止
1
1
0
停止
當(dāng)使能端為高電平時(shí),輸入端IN1為PWM信號(hào),IN2為低電平信號(hào)時(shí),電機(jī)正轉(zhuǎn);輸入端IN1為低電平信號(hào),IN2為PWM信號(hào)時(shí),電機(jī)反轉(zhuǎn);;IN1與IN2相 同時(shí),電機(jī)快速停止。當(dāng)使能端為低電平時(shí),電動(dòng)機(jī)停止轉(zhuǎn)動(dòng)。
在對(duì)直流電動(dòng)機(jī)電壓的控制和驅(qū)動(dòng)中,半導(dǎo)體功率器件(L298)在使用上可以分為兩種方式:線性放大驅(qū)動(dòng)方式和開關(guān)驅(qū)動(dòng)方式在線性放大驅(qū)動(dòng)方式。
半導(dǎo)體功率器件工作在線性區(qū)優(yōu)點(diǎn)是控制原理簡(jiǎn)單,輸出波動(dòng)小,線性好,對(duì)鄰近電路干擾小,缺點(diǎn)為功率器件工作在線性區(qū),功率低和散熱問題嚴(yán)重。開關(guān)驅(qū)動(dòng)方式是使半導(dǎo)體功率器件工作在開關(guān)狀態(tài),通過脈調(diào)制(PWM)來控制電動(dòng)機(jī)的電壓,從而實(shí)現(xiàn)電動(dòng)機(jī)轉(zhuǎn)速的控制。
4. 4 LED數(shù)碼管顯示
4. 4.1 LED簡(jiǎn)介
LED(Light Emitting Diode),發(fā)光二極管,是一種固態(tài)的半導(dǎo)體器件,它可以直接把電轉(zhuǎn)化為光。LED的心臟是一個(gè)半導(dǎo)體的晶片,晶片的一端附在一個(gè)支架上,一端是負(fù)極,另一端連接電源的正極,使整個(gè)晶片被環(huán)氧樹脂封裝起來。半導(dǎo)體晶片由兩部分組成,一部分是P型半導(dǎo)體,在它里面空穴占主導(dǎo)地位,另一端是N型半導(dǎo)體,在這邊主要是電子。但這兩種半導(dǎo)體連接起來的時(shí)候,它們之間就形成一個(gè)“P-N結(jié)”。
  當(dāng)電流通過導(dǎo)線作用于這個(gè)晶片的時(shí)候,電子就會(huì)被推向P區(qū),在P區(qū)里電子跟空穴復(fù)合,然后就會(huì)以光子的形式發(fā)出能量,這就是LED發(fā)光的原理。而光的波長(zhǎng)也就是光的顏色,是由形成P-N結(jié)的材料決定的。除半導(dǎo)體激光器外,當(dāng)電流激勵(lì)時(shí)能發(fā)射光學(xué)輻射的半導(dǎo)體二極管。嚴(yán)格地講,術(shù)語LED應(yīng)該僅應(yīng)用于發(fā)射可見光的二極管;發(fā)射近紅外輻射的二極管叫紅外發(fā)光二極管(IRED,Infrared Emitting Diode);發(fā)射峰值波長(zhǎng)在可見光短波限附近,由部份紫外輻射的二極管稱為紫外發(fā)光二極管;但是習(xí)慣上把上述三種半導(dǎo)體二極管統(tǒng)稱為發(fā)光二極管。
4. 4.2 LED七段數(shù)碼管的結(jié)構(gòu)

          共陰極                    共陽極                   管腳圖
其中:圖(a)為共陰極結(jié)構(gòu),8斷發(fā)光二極管的陰極端連接在一起,陽極端分開控制,使用時(shí)公共端接地,要使哪根發(fā)光二極管,則對(duì)應(yīng)的陽極端接高電平。圖(b)為共陽極結(jié)構(gòu),8端發(fā)光二極管的陽極端連接在一起,陰極端分開控制,使用時(shí)公共端接電源。要使哪根發(fā)光二極管,則對(duì)應(yīng)的陰極端接地。其中7段發(fā)光二極管構(gòu)成7筆的字形“8”,1根發(fā)光二極管構(gòu)成小數(shù)點(diǎn)。圖“c”為引腳圖,從a-g引腳輸入不同的8位二進(jìn)制編碼,可顯示不同的數(shù)字或字符。通常把控制發(fā)光二極管的7(或8)位二極管編制稱為字段碼。不同數(shù)字或字符其字段碼不一樣,對(duì)于同一個(gè)數(shù)字或字符,共陰極連接和共陽極連接的字段碼也不一樣,共陰極和共陽極的字段碼互為反碼。
4. 4.3常見數(shù)字和字符的字段碼
顯示字符
共陰極字段碼
共陽極字段碼
顯示字符
共陰極字段碼
共陽極字段碼
0
3FH
C0H
C
39H
C6H
1
06H
F9H
D
5EH
A1H
2
5BH
A4H
E
79H
86H
3
4FH
B0H
F
71H
8EH
4
66H
99H
P
73H
8CH
5
6DH
92H
U
3EH
C1H
6
7DH
82H
T
31H
CEH
7
07H
F8H
Y
6EH
91H
8
7FH
80H
L
38H
C7H
9
6FH
90H
8.
FFH
00H
A
77H
88H
“滅”
00
FFH
B
7CH
83H
……
……
……
4. 4.4 LED數(shù)碼管和單片機(jī)的連接
電路的接法決定了必須采用逐位掃描顯示方式。即從段選口送出某位LED的字型碼,然后選通該位LED, 并保持一段延時(shí)時(shí)間。然后選通下一位,直到所有位掃 描完。
4. 4.5簡(jiǎn)單的程序流程
                     
4. 4.6本系統(tǒng)中單片機(jī)與LED的連接

4.5獨(dú)立式鍵盤控制模塊
4.5.1鍵盤的功能及分類
鍵盤是一種最常用的輸入設(shè)備,它是一組按鍵的集合,從功能上可分為數(shù)字鍵和功能鍵兩種,作用是輸入數(shù)據(jù)與命令,查詢和控制系統(tǒng)的工作狀態(tài),實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話。
鍵盤的分類
(a)鍵盤按照接口原理可分為編碼鍵盤與非編碼鍵盤兩類。這兩類鍵盤的主要區(qū)別是識(shí)別鍵符及給出相應(yīng)鍵碼的方法。
    編碼鍵盤主要是用硬件來實(shí)現(xiàn)對(duì)鍵的識(shí)別;
    非編碼鍵盤主要是由軟件來實(shí)現(xiàn)鍵盤的定義與識(shí)別。
(b)鍵盤按照其結(jié)構(gòu)可分為獨(dú)立式鍵盤與矩陣式鍵盤兩類。
    獨(dú)立式鍵盤主要用于按鍵較少的場(chǎng)合,矩陣式鍵盤主要用于按鍵較多的場(chǎng)合,也稱行列式鍵盤
4.5.2獨(dú)立式鍵盤
獨(dú)立式鍵盤的按鍵相互獨(dú)立,每個(gè)按鍵接一根I/O口線,一根I/O口線上的按鍵工作狀態(tài)不會(huì)影響其它I/O口線的工作狀態(tài)。因此,通過檢測(cè)I/O口線的電平狀態(tài),即可判斷鍵盤上哪個(gè)鍵被按下

4.5.3獨(dú)立式鍵盤與單片機(jī)的鏈接



5系統(tǒng)軟件設(shè)計(jì)
    直接應(yīng)用AT89S52的軟件方法實(shí)現(xiàn)PWM信號(hào)輸出,這比硬件實(shí)現(xiàn)PWM信號(hào)成本低。限制少。實(shí)現(xiàn)便捷。其流程圖如下所示。

5.1流程圖
5.1.1主程序流程圖

圖5.1系統(tǒng)主單片機(jī)總程序框圖


結(jié)論
通過本次畢業(yè)設(shè)計(jì),使我學(xué)到了許多書本上無法學(xué)到的知識(shí),也使我深刻體會(huì)到單片機(jī)技術(shù)應(yīng)用領(lǐng)域的廣泛。不僅讓我對(duì)學(xué)過的單片機(jī)知識(shí)有了很多的鞏固,同時(shí)也對(duì)單片機(jī)這一門課程產(chǎn)生了更大的興趣。在本次課程設(shè)計(jì)過程中,我學(xué)會(huì)了在網(wǎng)絡(luò)上查找有關(guān)本設(shè)計(jì)的各硬件的資源,其中包括:直流電機(jī)PWM調(diào)速、AT89S52單片機(jī)、L289引腳圖及其引腳功能等,LED數(shù)碼管顯示,為本次畢業(yè)設(shè)計(jì)提供了一定的資料。
在做畢業(yè)設(shè)計(jì)的初期階段,難度很大,沒有頭緒。通過求助于陳老師、理清了思路。同時(shí),在圖書館里、網(wǎng)上查閱資料,攻克了畢業(yè)設(shè)計(jì)中的道道難題。通過本次科技創(chuàng)新實(shí)踐,我學(xué)到了許多東西,知道光靠書本上的東西是不夠的,需額外去查資料。無論是在硬件還是軟件設(shè)計(jì)上,我都遇到了不少的問題,在克服困難的過程中,我學(xué)到了許多,特別是在課堂上學(xué)不到的東西如(PWM)。也鍛煉了我的protel畫圖能力,以前學(xué)的時(shí)候元器件都是給定的只要到庫里面找出名字就可以,只要連線就可以,而這次是根據(jù)自己的設(shè)計(jì)需要去畫,感覺不同。本次設(shè)計(jì)我能獨(dú)立完成,算是有了很大的收獲。總的感受有以下幾方面:
1、通過本次畢業(yè)設(shè)計(jì),我不但對(duì)單片機(jī)有了更為深入的了解,對(duì)一個(gè)課題如何畫流程圖,編程序等有了一定的認(rèn)識(shí)。
2、進(jìn)一步加強(qiáng)了我的動(dòng)手能力和運(yùn)用專業(yè)知識(shí)的能力,從中學(xué)習(xí)到如何去思考和解決問題,以及如何靈活地改變方法去實(shí)現(xiàn)設(shè)計(jì)方案。特別是深刻體會(huì)到了軟件和硬件結(jié)合的重要性,以及兩者的聯(lián)系和配合作用。
3、讓我了解到單片機(jī)技術(shù)對(duì)當(dāng)今人們生活的重要性。同時(shí)這次做畢業(yè)設(shè)計(jì)的經(jīng)歷也使我受益匪淺,讓我知道做任何事情都應(yīng)腳踏實(shí)地,刻苦努力地去做,只有這樣,才能做好。

附錄2:原理圖

單片機(jī)源程序如下:
  1. *********************************************************************
  2.                                                                                                   直流電機(jī)PWM調(diào)速
  3. 功能描述:使用單片機(jī)T0定時(shí)器產(chǎn)生(xxxHz)脈寬調(diào)制信號(hào),輸?shù)絃298N的EN_A
  4.                               實(shí)現(xiàn)雙直流電機(jī)的速度調(diào)控。
  5. 修訂日期:2011-5-7
  6. *********************************************************************/
  7. #include<reg52.h>   
  8. #include<intrins.h>                       
  9. #define uchar unsigned char            
  10. #define uint unsigned int
  11.                            
  12. /**********************************************************************
  13.                                                                                                   L298n接口定義
  14. **********************************************************************/
  15. sbit MOTOR_A_2=P3^6;
  16. sbit MOTOR_A_1=P3^7;
  17. sbit EN_MOTOR_A =P3^4;                                                                                                                                                                                                                                 
  18. sbit k1=P1^5;                            //定義k1為p1.5口
  19. sbit k2=P3^1;   //定義k2為p3.1口
  20. sbit k3=P3^2;   //定義k3為p3.2口
  21. sbit k4=P3^3;   //定義k4為p3.3口
  22. uchar T=0;                 //定時(shí)標(biāo)記
  23. uchar W=0;                 //脈寬值              0~100
  24. uchar A=0;                 //方向標(biāo)記 0,1
  25. uchar k=0;                 //按鍵標(biāo)記
  26. uchar i=0;                  //計(jì)數(shù)變量


  27. uchar code table1[]={
  28. 0x3f,0x06,0x5b,0x4f,
  29. 0x66,0x6d,0x7d,0x07,
  30. 0x7f,0x6f,0x77,0x7c,
  31. 0x39,0x5e,0x79,0x71};

  32. uchar code table2[]={0xef,0xbf,0xdf,0x7f};
  33.                            
  34. void delayms(uint t);                                                                                                               
  35. /**********************************************************************
  36.                                                                                     數(shù)碼管顯示
  37. **********************************************************************/
  38. void disp(void)
  39. {
  40.               P0=table2[3];                                                                     
  41.               P2=table1[W%10];                                          //顯示占空比個(gè)位
  42.               delayms(1);                                                                       //延時(shí)1ms
  43.               P0=0xff;                                                                                                  //P0清1

  44.               P0=table2[2];
  45.               P2=table1[W/100];                             //顯示占空比百位
  46.               delayms(1);                                                                       //延時(shí)1ms
  47.               P0=0xff;                                                                                                  //P0清1

  48.               P0=table2[1];
  49.               P2=table1[W/10%10];  //顯示占空比十位
  50.               delayms(1);                                                         //延時(shí)1ms
  51.               P0=0xff;                                                                         //P0清1

  52.               P0=table2[0];
  53.               P2=table1[A];                                            //顯示方向
  54.               delayms(1);                                                         //延時(shí)1ms
  55.               P0=0xff;                                                                                    //P0清1
  56. }

  57. /**********************************************************************
  58.                                                                                                   定時(shí)器變量定義
  59. **********************************************************************/


  60. void init(void)
  61. {
  62.               //啟動(dòng)中斷
  63.               TMOD=0x01;            
  64.               EA=1;                                                                                   
  65.               ET0=1;
  66.               TR0=1;
  67.               //設(shè)置定時(shí)時(shí)間
  68.               TH0=0xfd;
  69.               TL0=0x17;
  70. }

  71. void timer0() interrupt 1
  72. {                                                            
  73.               //重置定時(shí)器時(shí)間
  74.               TL0=0x17;
  75.               TH0=0xff;
  76.               T++;                                          //定時(shí)標(biāo)記加1
  77.               disp();                            //數(shù)碼管顯示
  78.               if(T>W)
  79.                             EN_MOTOR_A =1;
  80.               else
  81.                             EN_MOTOR_A =0;
  82.               if(T==100)
  83.                             T=0;

  84. }                                         
  85. /**********************************************************************
  86.                                                                                                   延時(shí)1ms
  87. **********************************************************************/
  88. void delayms(uint t)
  89. {
  90.               uchar j;
  91.               while(t--)
  92.               {
  93.                             for(j=0;j<250;j++)                                          //循環(huán)250次
  94.                             {
  95.                                           _nop_();             //系統(tǒng)延時(shí)         
  96.        _nop_();                                                                                                  //系統(tǒng)延時(shí)
  97.        _nop_();                                                                                                  //系統(tǒng)延時(shí)
  98.        _nop_();                                                                                                  //系統(tǒng)延時(shí)
  99.                             }
  100.               }
  101. }
  102. /**********************************************************************
  103.                                                                                                   獨(dú)立按鍵檢測(cè)
  104. **********************************************************************/
  105. void key(void)           //按鍵判斷程序
  106. {
  107.               if(k1==0)                                                                                                  //按鍵1按下
  108.               {
  109.                             while(k1==0);                                                        //按鍵1抬起
  110.                             if(W==100)                                                                      //如果脈寬為100
  111.                                           W=0;                                                                                                  //脈寬置0
  112.                             else
  113.                                           W+=1;                                                                                                  //否則加1
  114.               }
  115.               else if(k2==0)                                                        //按鍵2按下
  116.               {                                                      
  117.                             while(k2==0);                                                        //按鍵2抬起
  118.                             if(W==0)                                                                                    //如果脈寬為0
  119.                                           W=100;                                                                                    //脈寬設(shè)置成100
  120.                             else
  121.                                           W-=1;                                                                                                  //否則減1
  122.               }
  123.               else if(k3==0)                                                        //按鍵3按下
  124.               {                                            
  125.                             while(k3==0);                                                        //按鍵3抬起
  126.                             A=!A;                                                                                                                //方向標(biāo)記取反
  127.                             k=0;                                                                                                                //按鍵標(biāo)記清0
  128. ……………………

  129. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī)直流電機(jī)PWM控制系統(tǒng).rar (498.4 KB, 下載次數(shù): 699)



作者: ZZAKI    時(shí)間: 2019-4-25 01:08
感謝,分享。
作者: 2038507077    時(shí)間: 2019-6-24 15:52
感謝分享,支持
作者: yxrnzzz    時(shí)間: 2019-9-24 13:43
xx謝謝分享
作者: ls147258    時(shí)間: 2019-11-28 15:26
很好,學(xué)習(xí)了。非常棒。
作者: tlzyytc    時(shí)間: 2019-11-28 19:30
感謝分享,支持
作者: bydqcdz    時(shí)間: 2019-11-28 20:02
非常詳細(xì)。感謝
作者: llk123    時(shí)間: 2019-12-5 14:28
感謝分享
作者: rabitzhang    時(shí)間: 2019-12-15 20:02
謝謝分享!!!!
作者: rabitzhang    時(shí)間: 2019-12-15 20:05
謝謝分享!!
作者: Ada1540627258    時(shí)間: 2019-12-23 20:00
非常感謝
作者: Ada1540627258    時(shí)間: 2019-12-24 10:10
有很大的幫助 謝謝
作者: lindeijun1    時(shí)間: 2020-2-17 18:38
謝謝樓主分享!!!
作者: zhang1109408530    時(shí)間: 2020-3-1 14:26
很喜歡這個(gè)!!
作者: 闞大白    時(shí)間: 2020-3-22 18:41
樓主,我想問一下,為什么仿真時(shí)按獨(dú)立按鍵時(shí),數(shù)碼管沒有轉(zhuǎn)速顯示呢?

作者: 闞大白    時(shí)間: 2020-3-22 18:44
樓主您好 我有個(gè)問題想請(qǐng)教您
將hex文件導(dǎo)入之后 按獨(dú)立按鍵速度加1 在不連硬件的情況下 數(shù)碼管會(huì)有速度顯示嗎
作者: xzyr121    時(shí)間: 2020-4-29 14:51

感謝,分享。
作者: xzyr121    時(shí)間: 2020-4-29 14:53
樓主,我想問一下,為什么仿真時(shí)按獨(dú)立按鍵時(shí),數(shù)碼管沒有轉(zhuǎn)速顯示呢?
作者: xzyr121    時(shí)間: 2020-4-29 14:54

很喜歡這個(gè)!!
作者: 小兇許    時(shí)間: 2020-5-1 18:33
謝謝分享
作者: qqzwsx    時(shí)間: 2020-5-17 17:15
感謝大佬,分享
作者: 單片機(jī)之路    時(shí)間: 2020-6-4 18:52
樓主的過程十分詳細(xì),非常有幫助。謝謝!
作者: lmx00513    時(shí)間: 2020-6-6 11:58
謝謝分享




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1