版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計報告</b></p><p> 題目:基于單片機的直流電機測速、調(diào)速及顯示系統(tǒng)設(shè)計</p><p> 學(xué) 院: 機電工程學(xué)院</p><p> 專業(yè)班級: 測控071班</p><p> 學(xué) 號: 16</p><p><b>
2、 摘要</b></p><p> 本文主要研究了利用Quick51系列單片機控制PWM信號從而實現(xiàn)對直流電機轉(zhuǎn)速進行控制的方法。單片機具有體積小、功能強、成本低、應(yīng)用面廣泛等優(yōu)點,可以說,智能控制與自動控制的核心就是單片機。目前,一個學(xué)習(xí)與應(yīng)用單片機的高潮在全社會大規(guī)模地興起。學(xué)習(xí)單片機的最有效方法就是理論與實踐并重,本文用8051單片機自制了一個采用了專門的芯片組成了PWM信號的發(fā)生系統(tǒng),并且對
3、PWM信號的原理、產(chǎn)生方法以及如何通過軟件編程對PWM信號占空比進行調(diào)節(jié),從而控制其輸入信號波形等均作了詳細的闡述。還對直流電機的速度進行了測量和顯示。</p><p> 關(guān)鍵詞:單片機、 PWM、調(diào)速、測速、顯示系統(tǒng) </p><p><b> 目錄</b></p><p><b> 摘要1</b></p&
4、gt;<p><b> 目錄2</b></p><p><b> 第一章概述3</b></p><p><b> 1.1概述3</b></p><p> 1.2 Quick51的技術(shù)簡介和發(fā)展前景3</p><p> 1.2.1 Smar
5、tSOPC與Quick513</p><p> 1.2.2 Quick51特性4</p><p> 第二章 總體方案設(shè)計5</p><p> 2.1 8051單片機簡介6</p><p> 2.2 PWM信號發(fā)生電路設(shè)計12</p><p> 2.2.1 PWM的基本原理12</p&
6、gt;<p> 2.3 128*64液晶顯示13</p><p> 第三章 硬件設(shè)計與連接14</p><p> 3.1傳感器電路設(shè)計14</p><p> 3.2 信號處理電路設(shè)計16</p><p> 3.3存儲器電路設(shè)計17</p><p> 3.3.1 I2C總線概述17&
7、lt;/p><p> 3.3.2 存儲器電路18</p><p> 3.4 顯示電路設(shè)計18</p><p> 3.5 PWM信號發(fā)生電路設(shè)計19</p><p> 第四章 軟件設(shè)計20</p><p> 4.1系統(tǒng)軟件總流程圖20</p><p> 4.2程序清單21<
8、;/p><p> 第五章 結(jié)論與展望31</p><p><b> 附錄32</b></p><p> 附一 速度控制子程序32</p><p><b> 附二 電路圖35</b></p><p><b> 參考文獻36</b></
9、p><p><b> 答辯問題37</b></p><p><b> 概述</b></p><p><b> 概述</b></p><p> 本文主要研究了利用Quick51系列單片機,通過PWM方式控制直流電機調(diào)速的方法。</p><p> 沖
10、量相等而形狀不同的窄脈沖加在具有慣性的環(huán)節(jié)上時,其效果基本相同。PWM控制技術(shù)就是以該結(jié)論為理論基礎(chǔ),使輸出端得到一系列幅值相等而寬度不相等的脈沖,用這些脈沖來代替正弦波或其他所需要的波形。按一定的規(guī)則對各脈沖的寬度進行調(diào)制,既可改變逆變電路輸出電壓的大小,也可改變輸出頻率。</p><p> PWM控制的基本原理很早就已經(jīng)提出,但是受電力電子器件發(fā)展水平的制約,在上世紀(jì)80年代以前一直未能實現(xiàn)。直到進入上世紀(jì)
11、80年代,隨著全控型電力電子器件的出現(xiàn)和迅速發(fā)展,PWM控制技術(shù)才真正得到應(yīng)用。隨著電力電子技術(shù)、微電子技術(shù)和自動控制技術(shù)的發(fā)展以及各種新的理論方法,如現(xiàn)代控制理論、非線性系統(tǒng)控制思想的應(yīng)用,PWM控制技術(shù)獲得了空前的發(fā)展。到目前為止,已經(jīng)出現(xiàn)了多種PWM控制技術(shù)。</p><p> PWM控制技術(shù)以其控制簡單、靈活和動態(tài)響應(yīng)好的優(yōu)點而成為電力電子技術(shù)最廣泛應(yīng)用的控制方式,也是人們研究的熱點。由于當(dāng)今科學(xué)技術(shù)的
12、發(fā)展已經(jīng)沒有了學(xué)科之間的界限,結(jié)合現(xiàn)代控制理論思想或?qū)崿F(xiàn)無諧振軟開關(guān)技術(shù)將會成為PWM控制技術(shù)發(fā)展的主要方向之一。本文就是利用這種控制方式來改變電壓的占空比實現(xiàn)直流電機速度的控制。</p><p> 1.2 Quick51的技術(shù)簡介和發(fā)展前景</p><p> 1.2.1 SmartSOPC與Quick51 </p><p> SmartSOPC教學(xué)實驗開
13、發(fā)平臺集眾多功能于一體,是SOPC、DSP、EDA、ARM、ARM7 SOC以及8051教學(xué)實驗、科研開發(fā)的最佳選擇。開發(fā)平臺采用“主板+核心板”的模式,更換不同的核心板即可實驗不同平臺的功能。 </p><p> Quick51正是跟SmartSOPC相配套的8051單片機核心板。Quick51是一款自由的、開放全部系統(tǒng)資源的單片機實驗板。單片機芯片采用Philips最新推出的擁有64KB Flash的增強型
14、8052內(nèi)核單片機P89LV51RD2,工作電壓3.3V(3V邏輯是大趨勢)。Quick51與SmartSOPC配合,可以做各種單片機教學(xué)實驗,如LED點陣掃描顯示、鍵盤檢測、動態(tài)數(shù)碼管、液晶屏、電機驅(qū)動、I2C總線、紅外收發(fā)、蜂鳴器、數(shù)字溫度計、電子鐘,等等。</p><p> 1.2.2 Quick51特性</p><p> 采用Philips半導(dǎo)體新型單片機P89LV51RD2
15、,增強型Intel 8052 CPU內(nèi)核。具有許多增強功能,如內(nèi)置64KB用戶程序Flash,8KB引導(dǎo)Flash(用來支持ISP和IAP功能),1KB片內(nèi)靜態(tài)RAM,雙倍速模式,雙DPTR,4個中斷優(yōu)先級,進入掉電模式后外部中斷可喚醒(8052只有復(fù)位,不方便),硬件SPI,增強型UART,等等。 </p><p> 配備的P89LV51RD2單片機支持ISP(在系統(tǒng)可編程)方式下載用戶程序。Quick51只
16、需要一根普通電腦RS-232通信電纜(該電纜已經(jīng)隨SmartSOPC實驗箱標(biāo)配)就能實現(xiàn)ISP下載,不需要制作專門的下載線。</p><p> 配備1片專門的仿真芯片。在目前最流行的8051內(nèi)核單片機Windows環(huán)境軟件開發(fā)工具Keil C51的支持下,能夠方便地進行硬件在線仿真,而且并不需要安裝特別的驅(qū)動程序。該仿真芯片能夠全面支持單步、全速、斷點、跳出、變量觀察、外圍設(shè)備訪問等仿真功能。</p>
17、;<p> 晶振(默認11.0592MHz)采用插座式安裝,為用戶替換成其它頻點的晶振來做實驗提供了方便。</p><p> 復(fù)位方式可選:RC復(fù)位、按鍵復(fù)位、看門狗復(fù)位。此外,看門狗芯片還內(nèi)置有256B的EEPROM。</p><p> 單片機的4組I/O端口全部用雙排插針引出,方便用戶做實驗。</p><p> 擴展32KB靜態(tài)RAM。&l
18、t;/p><p> 擴展512KB大容量Flash存儲器,可以用作程序Flash或者大容量數(shù)據(jù)存儲。</p><p> 擴展1個8位并行高阻輸入端口、1個8位并行推挽輸出端口。</p><p> 采用PLD器件作為譯碼器。提供8組輸出,地址范圍已經(jīng)印在PCB上,一目了然。在產(chǎn)品光盤里提供譯碼器內(nèi)部結(jié)構(gòu)的等效電路原理圖。</p><p>
19、第二章 總體方案設(shè)計</p><p> 本速度表由信號預(yù)處理電路、8051單片機、LCD顯示電路、串口數(shù)據(jù)存儲電路和系統(tǒng)軟件組成。其中信號預(yù)處理電路包含信號放大、波形變換和波形整形。信號預(yù)處理電路中的放大器用于對待測信號進行放大,以降低對待測信號的幅度要求;波形變換和波形整形電路則用來將放大的信號轉(zhuǎn)換成可與單片機接口的TTL 信號;通過單片機的設(shè)置可使INT0 引腳能夠?qū)?nèi)部定時器T0 的工作進行控制,這樣能精
20、確地測出加到INT0 引腳的正脈沖寬度(即測出脈沖信號的周期);速度顯示部分采用數(shù)碼顯示模塊, 所得的數(shù)據(jù)采用I2C總線, 并通過E2PROM來存儲, 因而節(jié)省了所需單片機的口線和外圍器件, 同時也簡化了顯示部分的軟件編程。</p><p> 系統(tǒng)軟件包括單片機和液晶模塊的初始化模塊、液晶模塊的寫數(shù)據(jù)/ 命令子模塊、數(shù)據(jù)顯示模塊以及實時中斷服務(wù)模塊等。</p><p> 該設(shè)計能實時地
21、將所測的速度顯示出來。該速度表能將傳感器輸入到單片機的脈沖信號的寬度(傳感器將車速轉(zhuǎn)變成相應(yīng)寬度的脈沖信號) 實時地測量出來,然后通過單片機計算出速度, 再將所得的數(shù)據(jù)存儲到串口數(shù)據(jù)存儲器, 并由動態(tài)數(shù)碼顯示模塊實時顯示出所測速度。本設(shè)計用兩個按鍵來控制顯示速度??紤]到信號的衰減、干擾等影響,在信號送入單片機前應(yīng)對其進行放大整形, 然后再輸入到單片機進行測速。系統(tǒng)方框圖如圖2-1所示。</p><p> 圖2-
22、1 系統(tǒng)方框圖</p><p> 2.1 8051單片機簡介</p><p> 一、8051單片機的基本組成</p><p> 8051單片機由CPU和8個部件組成,它們都通過片內(nèi)單一總線連接,其基本結(jié)構(gòu)依然是通用CPU加上外圍芯片的結(jié)構(gòu)模式,但在功能單元的控制上采用了特殊功能寄存器的集中控制方法。</p><p> 二、CPU及
23、8個部件的作用功能介紹如下</p><p> 中央處理器CPU:它是單片機的核心,完成運算和控制功能。</p><p> 內(nèi)部數(shù)據(jù)存儲器:8051芯片中共有256個RAM單元,能作為存儲器使用的只是前128個單元,其地址為00H—7FH。通常說的內(nèi)部數(shù)據(jù)存儲器就是指這前128個單元,簡稱內(nèi)部RAM。</p><p> 特殊功能寄存器:是用來對片內(nèi)各部件進行管理
24、、控制、監(jiān)視的控制寄存器和狀態(tài)寄存器,是一個特殊功能的RAM區(qū),位于內(nèi)部RAM的高128個單元,其地址為80H—FFH。</p><p> 內(nèi)部程序存儲器:8051芯片內(nèi)部共有4K個單元,用于存儲程序、原始數(shù)據(jù)或表格,簡稱內(nèi)部ROM。</p><p> 并行I/O口:8051芯片內(nèi)部有4個8位的I/O口(P0,P1,P2,P3),以實現(xiàn)數(shù)據(jù)的并行輸入輸出。</p><
25、;p> 串行口:它是用來實現(xiàn)單片機和其他設(shè)備之間的串行數(shù)據(jù)傳送。</p><p> 定時器:8051片內(nèi)有2個16位的定時器,用來實現(xiàn)定時或者計數(shù)功能,并且以其定時或計數(shù)結(jié)果對計算機進行控制。</p><p> 中斷控制系統(tǒng):該芯片共有5個中斷源,即外部中斷2個,定時/計數(shù)中斷2個和串行中斷1個。</p><p> 振蕩電路:它外接石英晶體和微調(diào)電容即
26、可構(gòu)成8051單片機產(chǎn)生時鐘脈沖序列的時鐘電路。系統(tǒng)允許的最高晶振頻率為12MHz。</p><p> 三、8051單片機引腳圖</p><p> 四、單片機系統(tǒng)中所用其他芯片簡介</p><p> 地址鎖存器74LS373</p><p> 74LS373片內(nèi)是8個輸出帶三態(tài)門的D鎖存器。其結(jié)構(gòu)如下圖所示:</p>&
27、lt;p> 當(dāng)使能端G呈高電平時,鎖存器中的內(nèi)容可以更新,而在返回低電平的瞬間實現(xiàn)鎖存。如果此時芯片的輸出控制端為低,也即是輸出三態(tài)門打開,鎖存器中的地址信息便可以通過三態(tài)門輸出。以下是其引腳圖:</p><p> 2.程序存儲器27128</p><p><b> (1)芯片引腳</b></p><p><b> ?。?
28、)功能表</b></p><p> 3.?dāng)?shù)據(jù)存儲器6264</p><p><b> ?。?)芯片引腳</b></p><p><b> (2)芯片功能表</b></p><p> 五、8051單片機擴展電路及分析</p><p><b> 接線
29、分析</b></p><p> P0.7---P0.0:這8個引腳共有兩種不同的功能,分別使用于兩種不同的情況。第一種情況是8051不帶片外存儲器,P0口可以作為通用I/O口使用,P0.7---P0.0用于傳送CPU的I/O數(shù)據(jù)。第二種情況是8051帶片外存儲器,P0.7---P0.0在CPU訪問片外存儲器時先是用于傳送片外存儲器的低8位地址,然后傳送CPU對片外存儲器的讀寫數(shù)據(jù)。</p>
30、;<p> P2.7---P2.0:這組引腳的第一功能可以作為通用的I/O使用。它的第二功能和P0口引腳的第二功能相配合,用于輸出片外存儲器的高8位地址,共同選中片外存儲器單元,但是并不能像P0口那樣還可以傳送存儲器的讀寫數(shù)據(jù)。</p><p> P3.7---P3.0:這組引腳的第一功能為傳送用戶的輸入/輸出數(shù)據(jù)。它的第二功能作為控制用,每個引腳不盡相同,如下表所示:</p>&
31、lt;p> VCC為+5V電源線,VSS為接地線。</p><p> ALE/:地址鎖存允許/編程線,配合P0口引腳的第二功能使用,在訪問片外存儲器時,8051CPU在P0.7---P0.0引腳線上輸出片外存儲器低8位地址的同時還在ALE/線上輸出一個高電位脈沖,其下降沿用于把這個片外存儲器低8位地址鎖存到外部專用地址鎖存器,以便空出P0.7---P0.0引腳線去傳送隨后而來的片外存儲器的讀寫數(shù)據(jù)。在不
32、訪問片外存儲器時,8051自動在ALE/線上輸出頻率為1/6 fOSC的脈沖序列。該脈沖序列可以用作外部時鐘源或者作為定時脈沖源使用。</p><p> / VPP:允許訪問片外存儲器/編程電源線,可以控制8051使用片內(nèi)ROM還是片外ROM。如果=1,那么允許使用片內(nèi)ROM;如果=0,那么允許使用片外ROM。</p><p> ?。浩釸OM選通線,在執(zhí)行訪問片外ROM的指令MOVC時
33、,8051自動在線上產(chǎn)生一個負脈沖,用于片外ROM芯片的選通。其他情況下,線均為高電平封鎖狀態(tài)。</p><p> RST/VPD:復(fù)位備用電源線,可以使8051處于復(fù)位工作狀態(tài)。</p><p> XTAL1和XTAL2:片內(nèi)振蕩電路輸入線,這兩個端子用來外接石英晶體和微調(diào)電容,即用來連接8051片內(nèi)OSC的定時反饋電路。石英晶振起振后,應(yīng)能在XTAL2線上輸出一個3V左右的正弦波,
34、以便于8051片內(nèi)的OSC電路按石英晶振相同頻率自激振蕩,電容C1、C2可以幫助起振,調(diào)節(jié)它們可以達到微調(diào)fOSC的目的。</p><p> 2.2 PWM信號發(fā)生電路設(shè)計</p><p> 2.2.1 PWM的基本原理</p><p> PWM(脈沖寬度調(diào)制)是通過控制固定電壓的直流電源開關(guān)頻率,改變負載兩端的電壓,從而達到控制要求的一種電壓調(diào)整方法。P
35、WM可以應(yīng)用在許多方面,比如:電機調(diào)速、溫度控制、壓力控制等等。</p><p> 在PWM驅(qū)動控制的調(diào)整系統(tǒng)中,按一個固定的頻率來接通和斷開電源,并且根據(jù)需要改變一個周期內(nèi)“接通”和“斷開”時間的長短。通過改變直流電機電樞上電壓的“占空比”來達到改變平均電壓大小的目的,從而來控制電動機的轉(zhuǎn)速。也正因為如此,PWM又被稱為“開關(guān)驅(qū)動裝置”。</p><p><b> 如下圖所
36、示:</b></p><p> 設(shè)電機始終接通電源時,電機轉(zhuǎn)速最大為Vmax,設(shè)占空比為D= t1 / T,則電機的平均速度為Va = Vmax * D,其中Va指的是電機的平均速度;Vmax 是指電機在全通電時的最大速度;D = t1 / T是指占空比。</p><p> 由上面的公式可見,當(dāng)我們改變占空比 D = t1 / T時,就可以得到不同的電機平均速度Vd,從而達
37、到調(diào)速的目的。嚴(yán)格來說,平均速度Vd 與占空比D并非嚴(yán)格的線性關(guān)系,但是在一般的應(yīng)用中,我們可以將其近似地看成是線性關(guān)系。</p><p> 2.3 128*64液晶顯示</p><p> LCD顯示器工作原理就是利用液晶的物理特性;通電時排列變得有序,使光線容易通過;不通電時排列混亂,阻止光線通過,說簡單點就是讓液晶如閘門般地阻隔或讓光線穿透。 LCD的好處有:與CRT顯示器相比,L
38、CD的優(yōu)點主要包括零輻射、低功耗、散熱小、體積小、圖像還原精確、字符顯示銳利等。其接口信號說明如下:</p><p> 第三章 硬件設(shè)計與連接</p><p> 3.1傳感器電路設(shè)計</p><p> 在信號脈沖發(fā)生源上,本系統(tǒng)采用的是開關(guān)型霍爾傳感器。</p><p> 以磁場作為媒介,利用霍爾傳感器可以檢測多種物理量,如位移、振動
39、、轉(zhuǎn)速、加速度、流量、電流、電功率等。它不僅可以實現(xiàn)非接觸測量,并且采用永久磁鐵產(chǎn)生磁場,不需附加能源。另外霍爾傳感器尺寸小、價格便宜、應(yīng)用電路簡單、性能可靠,因而獲得極為廣泛的應(yīng)用。除了直接利用霍爾傳感器外,還利用它開發(fā)出各種派生的傳感器。</p><p> 金屬或半導(dǎo)體薄片的兩個端面通以控制電流Ic,并在薄片的垂直方向上施加磁感應(yīng)強度為B的磁場,則在垂直于電流和磁場的方向上將產(chǎn)生電勢Uh,稱為霍爾電勢或霍爾
40、電壓(如圖l所示)?;魻栯妱軺h=KhIcB(其中Kh為霍爾元件靈敏度,它與所用的材料及幾何尺寸有關(guān))。這種現(xiàn)象稱為霍爾效應(yīng),而用這種效應(yīng)制成的元件稱為霍爾元件。由于霍爾元件輸出的電壓信號較小,并且有一定溫度誤差,目前已較少直接使用霍爾元件作傳感器?;魻杺鞲衅髟韴D如圖3-6所示。</p><p> 圖3-6 霍爾傳感器磁場效應(yīng)</p><p> 本系統(tǒng)采用開關(guān)型霍爾傳感器A04E。開
41、關(guān)型霍爾傳感器是一種集成傳感器,它內(nèi)部含有霍爾元件、放大器、穩(wěn)壓電源、帶一定滯后特性的比較器及集電極開路輸出部分等,如圖3-7所示。開關(guān)型霍爾傳感器的工作特性如圖3-8 所示。</p><p> 圖3-7 開關(guān)型霍爾傳感器內(nèi)部結(jié)構(gòu)圖</p><p> 圖3-8 開關(guān)型霍爾傳感器工作特性</p><p> 當(dāng)外加的磁感應(yīng)強度超過動作點Bop時,傳感器輸出低電平,
42、但磁感應(yīng)強度降到動作點Bop以下時,傳感器輸出電平不變,一直要降到釋放點BRE時,傳感器才由低電平躍變?yōu)楦唠娖?。Bop與Bre之間的滯后(或稱為回差)使開關(guān)動作更為可靠。 </p><p> 圖3-9 霍爾傳感器檢測轉(zhuǎn)速示意圖</p><p> 霍爾傳感器檢測轉(zhuǎn)速示意圖3-9如下。在非磁材料的圓盤邊上粘貼一塊磁鋼,霍爾傳感器固定在圓盤外緣附近。圓盤每轉(zhuǎn)動一圈霍爾傳感器便輸出一個脈沖。通
43、過單片機測量產(chǎn)生脈沖的頻率,就可以得出圓盤的轉(zhuǎn)速。同樣道理,根據(jù)圓盤(車輪)的轉(zhuǎn)速,再結(jié)合圓盤的周長就是計算出物體的位移。如果要增加測量位移精度,可以在圓盤(車輪)上多增加幾個磁鋼。</p><p> 由于傳感器內(nèi)部為集電極開路輸出,所以需外接一個上拉電阻,其阻值與電源電壓大小有關(guān),一般取1~2k,如圖3-10所示。</p><p> 圖3-10 傳感器輸出電路</p>
44、<p> 3.2 信號處理電路設(shè)計</p><p> 系統(tǒng)的信號預(yù)處理電路由二級電路構(gòu)成,第一級是由開關(guān)三極管組成的零偏置放大器,采用開關(guān)三極管可以保證放大器具有良好的高頻響應(yīng)。當(dāng)輸入信號為零或負電壓時,三極管截止,電路輸出高電平;而當(dāng)輸入信號為正電壓時,三極管導(dǎo)通,此時輸出電壓隨著輸入電壓的上升而下降,這使得速度里程表既可以測量任意方波信號的頻率,也可以測量正弦波信號的頻率。由于放大器的放大功能
45、降低了對待測信號的幅度要求,因此,系統(tǒng)能對任意大于0.5V的正弦波和脈沖信號進行測量。預(yù)處理電路的第二級采用帶施密特觸發(fā)器的反相器DM74LS14來把放大器生成的單相脈沖轉(zhuǎn)換成與COMS電平相兼容方波信號,同時將輸出信號加到單片機的P3.4口上。</p><p> 利用施密特觸發(fā)器狀態(tài)轉(zhuǎn)換過程中的正反饋作用,可以把邊沿變化緩慢的周期性信號變換為邊沿很陡的矩形脈沖信號。輸入的信號只要幅度大于VT+,即可在施密特觸
46、發(fā)器的輸出端得到同等頻率的矩形脈沖信號。</p><p> 從傳感器得到的矩形脈沖經(jīng)傳輸后往往發(fā)生波形畸變。當(dāng)傳輸線上的電容較大時,波形的上升沿將明顯變壞;當(dāng)傳輸線較長,而且接受端的阻抗與傳輸線的阻抗不匹配時,在波形的上升沿和下降沿將產(chǎn)生振蕩現(xiàn)象;當(dāng)其他脈沖信號通過導(dǎo)線間的分布電容或公共電源線疊加到矩形脈沖信號時,信號上將出現(xiàn)附加的噪聲。無論出現(xiàn)上述的那一種情況,都可以通過用施密特反相觸發(fā)器整形而得到比較理想的
47、矩形脈沖波形。只要施密特觸發(fā)器的VT+和VT-設(shè)置得合適,均能受到滿意的整形效果。信號預(yù)處理電路如圖3-11所示。 </p><p> 圖3-11 信號預(yù)處理電路圖</p><p> 3.3存儲器電路設(shè)計 </p><p> 3.3.1 I2C總線概述</p><p> I2C總線是一種用于IC器件之間連接的二線制總線。它通過SDA(
48、串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線在連到總線上器件之間傳送信息,并根據(jù)地址識別每個器件,不管是單片機、存儲器、LCD驅(qū)動器還是鍵盤接口。采用I2C總線標(biāo)準(zhǔn)單片機或IC器件,其內(nèi)部不僅有I2C接口電路,而且將內(nèi)部各單元電路按功能劃分為若干相對獨立模塊,通過軟件尋址實現(xiàn)片選,減少了器件片選線連接。CPU不僅能通過指令將某個功能單元電路掛靠或摘離總線,還可對該單元的工作狀況進行檢測,從而實現(xiàn)對硬件系統(tǒng)的既簡單又靈活的擴展與控制。<
49、/p><p> I2C總線則根據(jù)器件的功能通過軟件程序使其可工作于發(fā)送或接收方式。當(dāng)某個器件向總線上發(fā)送信息時,它就是發(fā)送器(也叫主器件),而當(dāng)其從總線上接收信息時,又成為接收器(也叫從器件)。主器件用于啟動總線上傳送數(shù)據(jù)并產(chǎn)生時鐘以開放傳送的器件,此時任何被尋址的器件均被認為是從器件。I2C總線的控制完全由掛接在總線上的主器件送出的地址和數(shù)據(jù)決定。在總線上,既沒有中心機,也沒有優(yōu)先機。</p>&l
50、t;p> I2C總線的數(shù)據(jù)傳送格式是:在I2C總線開始信號后,送出的第一個字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件;方向位為“1”表示主器件將從從器件讀信息。開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/
51、W)確定。</p><p> 3.3.2 存儲器電路</p><p> 圖3-12 AT24CO2與單片機的接口電路 </p><p> 3.4 顯示電路設(shè)計</p><p> 3.5 PWM信號發(fā)生電路設(shè)計</p><p> PWM波可以由具有PWM輸出的單片機通過編程來得以產(chǎn)生,也可以采用PW
52、M專用芯片來實現(xiàn)。當(dāng)PWM波的頻率太高時,它對直流電機驅(qū)動的功率管要求太高,而當(dāng)它的頻率太低時,其產(chǎn)生的電磁噪聲就比較大,在實際應(yīng)用中,當(dāng)PWM波的頻率在18KHz左右時,效果最好。在本系統(tǒng)內(nèi),采用了兩片4位數(shù)值比較器4585和一片12位串行計數(shù)器4040組成了PWM信號發(fā)生電路。</p><p> 兩片數(shù)值比較器4585,即圖上U2、U3的A組接12位串行4040計數(shù)輸出端Q2—Q9,而U2、U3的B組接到單
53、片機的P1端口。只要改變P1端口的輸出值,那么就可以使得PWM信號的占空比發(fā)生變化,從而進行調(diào)速控制。</p><p> 12位串行計數(shù)器4040的計數(shù)輸入端CLK接到單片機C51晶振的振蕩輸出XTAL2。計數(shù)器4040每來8個脈沖,其輸出Q2—Q9加1,當(dāng)計數(shù)值小于或者等于單片機P1端口輸出值X時,圖中U2的(A>B)輸出端保持為低電平,而當(dāng)計數(shù)值大于單片機P1端口輸出值X時,圖中U2的(A>B)
54、輸出端為高電平。隨著計數(shù)值的增加,Q2—Q9由全“1”變?yōu)槿?”時,圖中U2的(A>B)輸出端又變?yōu)榈碗娖?,這樣就在U2的(A>B)端得到了PWM的信號,它的占空比為(255 -X / 255)*100%,那么只要改變X的數(shù)值,就可以相應(yīng)的改變PWM信號的占空比,從而進行直流電機的轉(zhuǎn)速控制。</p><p><b> 第四章 軟件設(shè)計</b></p><p
55、> 4.1系統(tǒng)軟件總流程圖</p><p> 圖4.1 系統(tǒng)軟件主程序流程圖</p><p><b> 4.2程序清單</b></p><p><b> /*</b></p><p><b> LCD.C</b></p><p> 12
56、8×64 LCD驅(qū)動程序頭文件</p><p><b> */</b></p><p> #ifndef LCD_H_</p><p> #define LCD_H_</p><p> #include<REG51.H></p><p> //定義背光控制信號<
57、;/p><p> sbit LCD_BL=P1^4;</p><p><b> //點亮背光燈</b></p><p> void LcdLightOn();</p><p><b> //熄滅背光燈</b></p><p> void LcdLightOff();&l
58、t;/p><p><b> //清屏</b></p><p> void LcdClear();</p><p><b> //初始化</b></p><p> void LcdInit();</p><p><b> //顯示ASCⅡ碼</b>&
59、lt;/p><p> void LcdPutChar(unsigned char c);</p><p><b> //顯示字符串</b></p><p> void LcdPuts(unsigned char*s);</p><p> #endif //LCD_H_</p><p><
60、b> /*</b></p><p><b> LCD.C</b></p><p> 128×64 LCD驅(qū)動程序</p><p><b> */</b></p><p> #include <INTRINS.H></p><p&g
61、t; #include <ABSACC.H></p><p> //#include "LCD.H"</p><p> //定義屏幕光標(biāo)(取值0~63,光標(biāo)本身不可見)</p><p> unsigned char LcdCursor;</p><p><b> int i,j;</b
62、></p><p><b> /*</b></p><p> 函數(shù):LcdLightOn()</p><p><b> 功能:點亮背光燈</b></p><p><b> */</b></p><p> void LcdLightOn()
63、</p><p><b> {</b></p><p> LCD_BL = 1;</p><p><b> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdLightOff()</p><p
64、><b> 功能:熄滅背光燈</b></p><p><b> */</b></p><p> void LcdLightOff()</p><p><b> {</b></p><p> LCD_BL = 0;</p><p><
65、b> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdGetBF()</p><p> 功能:讀出狀態(tài)位BF</p><p><b> 返回:</b></p><p> BF=1,表示忙,不可進行任何操作<
66、/p><p> BF=0,表示不忙,可以進行正常操作</p><p><b> */</b></p><p> bit LcdGetBF()</p><p><b> {</b></p><p> unsigned char dat;</p><p&
67、gt; dat = XBYTE[0xD002];//XBYTE的定義見<ABSACC.H></p><p> return (bit)(dat & 0x80);</p><p><b> }</b></p><p><b> /*</b></p><p> 函數(shù):Lc
68、dWriteCmd()</p><p> 功能:向LCD發(fā)送命令</p><p><b> 參數(shù):</b></p><p> cmd:命令字,詳見器件的數(shù)據(jù)手冊</p><p><b> */</b></p><p> void LcdWriteCmd(unsign
69、ed char cmd)</p><p><b> {</b></p><p> while ( LcdGetBF() );</p><p> XBYTE[0xD000] = cmd;</p><p><b> }</b></p><p><b> /*&
70、lt;/b></p><p> 函數(shù):LcdWriteDat()</p><p> 功能:向LCD寫入數(shù)據(jù)</p><p> 參數(shù):dat,要寫入的數(shù)據(jù)</p><p> 說明:目標(biāo)地址由地址計數(shù)器AC隱含指定,寫完后AC自動加1</p><p><b> */</b></p
71、><p> void LcdWriteDat(unsigned char dat)</p><p><b> {</b></p><p> while ( LcdGetBF() );</p><p> XBYTE[0xD001] = dat;</p><p><b> }</
72、b></p><p><b> /*</b></p><p> 函數(shù):LcdReadDat()</p><p> 功能:從LCD讀出數(shù)據(jù)</p><p><b> 返回:讀出的數(shù)據(jù)</b></p><p><b> */</b></
73、p><p><b> /*</b></p><p> unsigned char LcdReadDat()</p><p><b> {</b></p><p> volatile unsigned char dat;</p><p> while ( LcdGetBF
74、() );</p><p> dat = XBYTE[0xD003];</p><p> dat = XBYTE[0xD003];//需要連續(xù)執(zhí)行兩次才能夠讀出真正的數(shù)據(jù)</p><p> return dat;</p><p><b> }</b></p><p><b>
75、 */</b></p><p><b> /*</b></p><p> 函數(shù):LcdSetAC()</p><p> 功能:設(shè)置DDRAM(顯示數(shù)據(jù)RAM)的AC(地址計數(shù)器)值</p><p><b> 參數(shù):</b></p><p> ac:地址計
76、數(shù)器值,范圍0~63</p><p><b> */</b></p><p> void LcdSetAC(unsigned char ac)</p><p><b> {</b></p><p> ac &= 0x3F;</p><p> ac |= 0x
77、80;</p><p> LcdWriteCmd(ac);</p><p><b> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdClear()</p><p> 功能:LCD清屏,并使光標(biāo)回到0</p><
78、p><b> */</b></p><p> void LcdClear()</p><p><b> {</b></p><p> LcdWriteCmd(0x01);//清屏命令</p><p> LcdCursor = 0;</p><p><b
79、> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdDelay()</p><p> 功能:延時(t*100)個機器周期</p><p><b> */</b></p><p> void LcdDelay(un
80、signed char t)</p><p><b> {</b></p><p> unsigned char n;</p><p><b> do</b></p><p><b> {</b></p><p><b> n = 4
81、9;</b></p><p> while ( --n != 0 );</p><p> } while ( --t != 0 );</p><p><b> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdInit()
82、</p><p><b> 功能:LCD初始化</b></p><p><b> */</b></p><p> void LcdInit()</p><p><b> {</b></p><p> LcdWriteCmd(0x30);//設(shè)
83、置基本指令集</p><p> LcdDelay(3);</p><p> LcdWriteCmd(0x30);//設(shè)置基本指令集(需要再執(zhí)行一次)</p><p> LcdDelay(1);</p><p> LcdWriteCmd(0x0C);//開啟顯示</p><p> LcdDelay(3);&
84、lt;/p><p> LcdClear();//清屏</p><p> LcdDelay(250);</p><p> LcdWriteCmd(0x06);//設(shè)置進入點</p><p> LcdDelay(10);</p><p><b> }</b></p><
85、;p><b> /*</b></p><p> 函數(shù):LcdCheckAC()</p><p> 功能:根據(jù)光標(biāo)位置調(diào)整AC</p><p><b> */</b></p><p> void LcdCheckAC()</p><p><b> {
86、</b></p><p> switch ( LcdCursor )</p><p><b> {</b></p><p><b> case 16:</b></p><p> LcdSetAC(16);</p><p><b> break;
87、</b></p><p><b> case 32:</b></p><p> LcdSetAC(8);</p><p><b> break;</b></p><p><b> case 48:</b></p><p> LcdS
88、etAC(24);</p><p><b> break;</b></p><p><b> case 64:</b></p><p> LcdCursor = 0;</p><p> LcdSetAC(0);</p><p><b> break;<
89、;/b></p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
90、; /*</b></p><p> 函數(shù):LcdPutChar()</p><p> 功能:顯示ASCII碼</p><p><b> 參數(shù):</b></p><p> c為可顯示的ASCII碼(0x20~0x7F)</p><p><b> */</b&g
91、t;</p><p> void LcdPutChar(unsigned char c)</p><p><b> {</b></p><p> LcdWriteDat(c);</p><p> LcdCursor++;</p><p> LcdCheckAC();</p>
92、<p><b> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdPutHZ()</p><p><b> 功能:顯示漢字</b></p><p><b> 參數(shù):</b></p>&l
93、t;p> ch,cl:漢字編碼</p><p><b> */</b></p><p> void LcdPutHZ(unsigned char ch, unsigned char cl)</p><p><b> {</b></p><p> if ( LcdCursor &
94、; 0x01 )</p><p> {//顯示漢字時,必須偶地址對準(zhǔn),即光標(biāo)位置不能是奇數(shù)</p><p> LcdPutChar(' ');//額外輸出一個空格</p><p><b> }</b></p><p> LcdWriteDat(ch);</p><p>
95、 LcdWriteDat(cl);</p><p> LcdCursor += 2;</p><p> LcdCheckAC();</p><p><b> }</b></p><p><b> /*</b></p><p> 函數(shù):LcdPuts()</p&
96、gt;<p><b> 功能:顯示字符串</b></p><p><b> 參數(shù):</b></p><p> *s:要顯示的字符串(可同時包含ASCII碼和漢字)</p><p><b> */</b></p><p> void LcdPuts(uns
97、igned char *s)</p><p><b> {</b></p><p> unsigned char ch, cl;</p><p><b> for (;;)</b></p><p><b> {</b></p><p> ch
98、= *s++;</p><p> if ( ch == '\0' ) break;</p><p> if ( ch < 0x80 )</p><p><b> {</b></p><p> LcdPutChar(ch);</p><p><b> }&l
99、t;/b></p><p><b> else</b></p><p><b> {</b></p><p> cl = *s++;</p><p> LcdPutHZ(ch,cl);</p><p><b> }</b></p&g
100、t;<p><b> }</b></p><p><b> }</b></p><p><b> /*</b></p><p><b> 顯示主程序</b></p><p><b> */</b></p&
101、gt;<p> //#include"LCD.H"</p><p> #include<REG51.H></p><p> //#include "DELAY.H" /* 包含延時函數(shù)的頭部文件delay_us();delay_ms(); */ </p><p><b> /
102、*</b></p><p> 函數(shù):Delay()</p><p> 延時1ms 65.53s</p><p> t>0時,延時(t*0.001)s</p><p> t=0時。延時65.53s</p><p><b> */</b></p><p&
103、gt; /********************************************************/</p><p> unsigned char SD[4]={'1','2','3','4'};//速度設(shè)定</p><p> unsigned char FK[4]={'2',
104、39;2','3','4'};//速度反饋</p><p> int D=0;//方向控制中間變量</p><p> unsigned int Pwm=0;//速度產(chǎn)生中間變量</p><p> unsigned int p=0;</p><p> unsigned int Value=0;
105、 </p><p> unsigned int Pwm_Value=0; </p><p> unsigned int m;</p><p> //unsigned int a,b,c,d;</p><p> sbit KEY1=P2^0;</p><p> sbit KEY2=P2^1;</p>
106、;<p> sbit KEY3=P2^2;</p><p> sbit MotorA=P1^6;</p><p> sbit MotorB=P1^7; </p><p><b> bit SWTR;</b></p><p><b> bit SWTF;</b>
107、</p><p> unsigned int SWTV;</p><p> #define Pwm_MAX 255</p><p> void Delay(unsigned int T)</p><p><b> {</b></p><p><b> SWTV=T;<
108、/b></p><p><b> SWTR=1;</b></p><p> while(!SWTF);</p><p><b> SWTR=0;</b></p><p><b> SWTF=0;</b></p><p><b>
109、 }</b></p><p> void KEY()</p><p><b> {</b></p><p> if(KEY1==0)</p><p><b> {</b></p><p> Value=Value+1;</p><p&
110、gt;<b> }</b></p><p> if(KEY2==0)</p><p><b> {</b></p><p> Value=Value-1;</p><p><b> }</b></p><p> if(KEY3==0)<
111、/p><p><b> {</b></p><p><b> if(D==0)</b></p><p><b> {</b></p><p><b> D=1;</b></p><p><b> }</b>
112、;</p><p><b> else</b></p><p><b> {</b></p><p><b> D=0;</b></p><p><b> }</b></p><p><b> }</b&g
113、t;</p><p><b> }</b></p><p> void PWM_Init() </p><p><b> {</b></p><p> staticunsigned char t=0;</p><p><b> t++;</b&g
114、t;</p><p> if(t>Pwm_MAX)t=0;</p><p> if(t<=Pwm_Value)</p><p><b> {</b></p><p><b> Pwm=1;</b></p><p><b> }</b>
115、;</p><p><b> else</b></p><p><b> {</b></p><p><b> Pwm=0;</b></p><p><b> }</b></p><p><b> if(D==0
116、)</b></p><p><b> {</b></p><p><b> MotorA=0;</b></p><p> MotorB=Pwm;</p><p><b> }</b></p><p><b> else&l
117、t;/b></p><p><b> {</b></p><p> MotorA=Pwm;</p><p><b> MotorB=0;</b></p><p><b> }</b></p><p><b> }</b&g
118、t;</p><p> void Show_Value(unsigned char CH[])</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<4;i++)</p><p><b&
119、gt; {</b></p><p> LcdPutChar(CH[i]);</p><p><b> }</b></p><p><b> }</b></p><p> void Show_Init()</p><p><b> {</
120、b></p><p> LcdWriteCmd(0x80);</p><p> LcdPuts("速度設(shè)定");</p><p> LcdWriteCmd(0x90);</p><p> LcdPuts("速度反饋");</p><p> LcdWriteCmd(
121、0x88);</p><p> LcdPuts("速度方向");</p><p> LcdWriteCmd(0x98);</p><p> LcdPuts("測控071 ");</p><p> LcdWriteCmd(0x9c);</p><p> LcdPuts(&
122、quot;14號");</p><p><b> }</b></p><p> void T_int()//定時器初始化</p><p><b> {</b></p><p> TMOD&=0x00;</p><p> TMOD=0x25;&
123、lt;/p><p> TH1=TL1=0xa4;</p><p> TH0=TL0=0;</p><p><b> ET1=1;</b></p><p><b> TR1=1;</b></p><p><b> EA=1;</b></p>
124、;<p><b> }</b></p><p> void MeasureSpeed()</p><p><b> {</b></p><p> TH0=TL0=0;</p><p><b> TR0=1;</b></p><p>
125、; Delay(2420);</p><p><b> TR0=0;</b></p><p><b> TF0=0;</b></p><p> m=2*(TH0*255+TL0);</p><p> if(m>Value)</p><p><b>
126、 {</b></p><p> Pwm_Value=Pwm_Value-1;</p><p><b> }</b></p><p> if(m<Value)</p><p><b> {</b></p><p> Pwm_Value=Pwm_Val
127、ue+1;</p><p><b> }</b></p><p> FK[3]=(m%10)+48;</p><p> FK[2]=(m/10%10)+48;</p><p> FK[1]=(m/100%10)+48;</p><p> FK[0]=(m/1000%10)+48;<
128、/p><p> SD[3]=(Value%10)+48;</p><p> SD[2]=(Value/10%10)+48;</p><p> SD[1]=(Value/100%10)+48;</p><p> SD[0]=(Value/1000%10)+48;</p><p><b> }</b&
129、gt;</p><p> void main()</p><p><b> { </b></p><p> unsigned char i;</p><p><b> MotorA=0;</b></p><p><b> MotorB=0;</
130、b></p><p><b> EA=0; </b></p><p><b> T_int();</b></p><p> Delay(50);</p><p> LcdInit();//LCD初始化</p><p> /******************
131、***********************/</p><p> for(i=0;i<2;i++)</p><p><b> {</b></p><p> LcdLightOff();</p><p> Delay(660);</p><p> LcdLightOn();<
132、/p><p> Delay(660);</p><p><b> }</b></p><p> Delay(660);</p><p> LcdClear();</p><p> Delay(660);</p><p> /*********************
133、*******************/</p><p><b> EA=1;</b></p><p> Show_Init();</p><p> Delay(20);</p><p> Value=200;</p><p> Pwm_Value=Value;</p>&
134、lt;p><b> for(;;)</b></p><p><b> { </b></p><p> KEY();//按鍵處理</p><p> MeasureSpeed();</p><p> LcdWriteCmd(0x94);</p><p> Sho
135、w_Value(FK);</p><p> LcdWriteCmd(0x84);</p><p> Show_Value(SD);</p><p> LcdWriteCmd(0x8c);</p><p><b> if(D==0)</b></p><p><b> {</
136、b></p><p> LcdPuts("正向");</p><p><b> }</b></p><p><b> if(D==1)</b></p><p><b> {</b></p><p> LcdPuts(&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計---基于單片機的直流電機測速、調(diào)速及顯示系統(tǒng)設(shè)計
- 課程設(shè)計--單片機直流電機調(diào)速系統(tǒng)設(shè)計
- 單片機課程設(shè)計論文--直流電機調(diào)速
- 單片機課程設(shè)計---基于單片機直流電機測速及其控制系統(tǒng)
- 單片機直流電機調(diào)速系統(tǒng)設(shè)計
- 小直流電機調(diào)速實驗單片機課程設(shè)計
- 單片機課程設(shè)計-直流電機
- 基于單片機pwm直流電機調(diào)速系統(tǒng)的設(shè)計
- 單片機課程設(shè)計---基于單片機的直流電機控制
- 直流電機測速系統(tǒng)課程設(shè)計
- 單片機pwm直流電機調(diào)速
- 畢業(yè)設(shè)計--基于單片機的直流電機調(diào)速系統(tǒng)
- 畢業(yè)設(shè)計--基于單片機的直流電機調(diào)速系統(tǒng)
- 基于51單片機課程設(shè)計報告--小直流電機調(diào)速控制系統(tǒng)
- 基于單片機的直流電機測速系統(tǒng) 畢業(yè)論文
- 單片機課程設(shè)計--單片機控制直流電機的轉(zhuǎn)動
- pwm直流電機調(diào)速單片機程序
- 基于單片機的直流電機調(diào)速系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于單片機的直流電機調(diào)速系統(tǒng)
- 基于單片機系統(tǒng)的直流電機調(diào)速系統(tǒng)設(shè)計與實踐
評論
0/150
提交評論