基于AT89C51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)_第1頁
基于AT89C51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)_第2頁
基于AT89C51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)_第3頁
基于AT89C51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)_第4頁
基于AT89C51單片機(jī)的電機(jī)控制綜合課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 基于AT89C51單片機(jī)的電機(jī)控制綜合設(shè)計(jì)目錄1 系統(tǒng)的設(shè)計(jì)11.1設(shè)計(jì)的目的和要求11.2系統(tǒng)原理12 系統(tǒng)的構(gòu)成22.1控制器部分2控制器分析2控制器主要功能特性2控制器引腳功能描述32.2 數(shù)據(jù)顯示部分42.2.1 12864液晶顯示模塊概述42.2.2 基本參數(shù)4模塊引腳說明5 具體指令介紹:5顯示坐標(biāo)關(guān)系83 硬件電路設(shè)計(jì)83.1 LCD控制電路原理圖83.2電機(jī)控制電路93.3速度反饋電路103.4 MCU接口113.5 按鍵電路114 軟件設(shè)計(jì)124.1程序要求124.2 程序流程圖124.3 程序清單124.3.1 LCD驅(qū)動(dòng)程序124.3.2 主函數(shù)程序175程序的調(diào)試21

2、5.1 編程軟件KEIL C51簡介215.2 程序編譯和調(diào)試216 結(jié)語251 系統(tǒng)的設(shè)計(jì)1.1設(shè)計(jì)的目的和要求基于AT89C51單片機(jī)的電機(jī)控制綜合系統(tǒng),以電機(jī)為被控對(duì)象,由AT89C51單片機(jī)作為控制器,結(jié)合速度反饋和LCD液晶顯示模塊,組成一個(gè)有較好控制性和實(shí)時(shí)性的電機(jī)控制綜合系統(tǒng)。1.2系統(tǒng)原理MCU外圍電路電機(jī)速度反饋LCD模塊圖1.1 系統(tǒng)原理圖系統(tǒng)的原理如上圖1.2所示,控制器AT89C51通過外圍電路控制電機(jī)轉(zhuǎn)動(dòng)。由速度反饋電路反饋電機(jī)的速度信息,并進(jìn)行伺服計(jì)算和控制。整個(gè)系統(tǒng)的主要信息可以在LCD顯示模塊上顯示。2 系統(tǒng)的構(gòu)成2.1控制器部分控制器分析AT89C51是一種帶

3、4K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案??刂破髦饕δ芴匦?#183;與MCS-51 兼容 ·4K字節(jié)可編程閃爍存儲(chǔ)器 ·

4、;壽命:1000寫/擦循環(huán) ·數(shù)據(jù)保留時(shí)間:10年 ·全靜態(tài)工作:0Hz-24MHz ·三級(jí)程序存儲(chǔ)器鎖定 ·128×8位內(nèi)部RAM ·32可編程I/O線 ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器 ·5個(gè)中斷源 ·可編程串行通道 ·低功耗的閑置和掉電模式 ·片內(nèi)振蕩器和時(shí)鐘電路控制器引腳功能描述AT89C51 提供以下標(biāo)準(zhǔn)功能:4k 字節(jié)Flash 閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32 個(gè)IO 口線,兩個(gè)16位定時(shí)計(jì)數(shù)器,一個(gè)5向量兩級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),A

5、T89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))Vcc:電源電壓GND:地P0口是一組8 位漏極開路型雙向IO 口,也即地址數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口寫“1”可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。在FIash編程時(shí),P0口接

6、收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向IO口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。FIash編程和程序校驗(yàn)期間,P1接收低8位地址。P2口是一個(gè)帶有內(nèi)部上拉電阻的8位雙向IO口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引

7、腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。在訪問外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVXDPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVXRI 指令)時(shí),P2 口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中R2寄存器的內(nèi)容),在整個(gè)訪問期間不改變。Flash編程或校驗(yàn)時(shí),P2亦接收高位地址和其它控制信號(hào)。(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))P3口是一組帶有內(nèi)部上拉電阻的8 位雙向IO 口。P3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL邏輯門電路。對(duì)P3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉

8、低的P3 口將用上拉電阻輸出電流(IIL)。P3口除了作為一般的IO口線外,更重要的用途是它的第二功能,如下表所示:表2.1 P3口第二功能端口引腳第二功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2INT0(外中斷0)P3.3INT1(外中斷1)P3.4T0(定時(shí)計(jì)數(shù)器0外部輸入)P3.5T1(定時(shí)計(jì)數(shù)器1外部輸入)P3.6WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。RST :復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))AL

9、EPROG: 當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲(chǔ)器,ALE 仍以時(shí)鐘振蕩頻率的l6 輸出固定的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)ALE脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的DO 位置位,可禁止ALE 操作。該位置位后,只有一條MOVX和MOVC指令A(yù)LE才會(huì)被激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE無效。PSEN:程序儲(chǔ)存允許(PSEN)輸出

10、是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51 由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,這兩次有效的PSEN信號(hào)不出現(xiàn)。EA VPP: 外部訪問允許。欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000HFFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平(接VCC端),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。XTAL1: 振蕩器反相放大器的及內(nèi)部時(shí)鐘

11、發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。2.2 數(shù)據(jù)顯示部分2.2.1 12864液晶顯示模塊概述12864液晶顯示模塊是128×64 點(diǎn)陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內(nèi)置國標(biāo)GB2312 碼簡體中文字庫(16X16 點(diǎn)陣)、128 個(gè)字符(8X16 點(diǎn)陣)及64X256 點(diǎn)陣顯示RAM(GDRAM)??膳cCPU 直接接口,提供兩種界面來連接微處理機(jī):8-位并行及串行兩種連接方式。具有多種功能:光標(biāo)顯示、畫面移位、睡眠模式等。 基本參數(shù) 液晶屏類型 STN FSTN 模塊顯示效果: 黃綠底黑字 藍(lán)底白字 白底黑字 視角 6點(diǎn)鐘 12點(diǎn)鐘 驅(qū)動(dòng)方式 1/6

12、4 DUTY 1/9 BIAS 背光 LED白色 LED黃綠色 控制器 KS0108或兼容 ST7920 T6963C 數(shù)據(jù)總線 8 位并口/6800 方式 串口 溫度特性 工作溫度:-20+70 儲(chǔ)藏溫度:-30+80 點(diǎn)陣格式 128 x 64模塊引腳說明表2.2 LCD引腳說明引腳名稱方向說明引腳名稱方向說明1VSS-電源負(fù)極11DB4I/O數(shù)據(jù)42VDD-電源正極 (+5v)12DB5I/O數(shù)據(jù)53VO-LCD 偏壓輸入(懸空)13DB6I/O數(shù)據(jù)64RSH/L數(shù)據(jù)/命令選擇端(片選信號(hào)輸入)14DB7I/O數(shù)據(jù)75R/WH/L讀/寫控制信號(hào)(串行數(shù)據(jù)輸入)15PSBH/LH:并行數(shù)據(jù)

13、模式 L:串行數(shù)據(jù)模式6EH,H/L使能信號(hào)(串行移位脈沖輸入)16NC-空腳7DB0I/O數(shù)據(jù)017/RSTH/L復(fù)位端(L:復(fù)位)8DB1I/O數(shù)據(jù)118NC-空腳9DB2I/O數(shù)據(jù)219BLA-背光源正極10DB3I/O數(shù)據(jù)320BLK-背光源負(fù)極 具體指令介紹:1、清除顯示(指令代碼為01H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLL H功能:清除顯示屏幕,把DDRAM 位址計(jì)數(shù)器調(diào)整為“00H”。2、位址歸位(02H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLH

14、X功能:把DDRAM 位址計(jì)數(shù)器調(diào)整為“00H”,游標(biāo)回原點(diǎn),該功能不影響顯示DDRAM。3、點(diǎn)設(shè)定(07H/04H/05H/06H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLHI/D S功能:設(shè)定光標(biāo)移動(dòng)方向并指定整體顯示是否移動(dòng)。I/D=1 光標(biāo)右移,I/D=0 光標(biāo)左移。SH=1 且DDRAM 為寫狀態(tài):整體顯示移動(dòng),方向由I/D 決定(I/D=1 左移,I/D=0 右移)SH=0 或DDRAM 為讀狀態(tài):整體顯示不移動(dòng)4、顯示狀態(tài)開/關(guān)(08H/0CH/0EH/0FH)CODE: RW RS DB7 DB6 DB5 DB4 DB

15、3 DB2 DB1 DB0LLLLLLHDC B功能: D=1;整體顯示ON C=1;游標(biāo)ON B=1;游標(biāo)位置ON.5、游標(biāo)或顯示移位控制(10H/14H/18H/1CH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLHS/CR/LX X功能:10H/14H:光標(biāo)左/右移動(dòng);18H/1CH:整體顯示左右移動(dòng),光標(biāo)跟隨移動(dòng),AC 值不變6、功能設(shè)定(36H/30H/34H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLHDL XO REX X功能:DL=1(必須設(shè)為1) RE=1;擴(kuò)充指令集動(dòng)作

16、RE=0:基本指令集動(dòng)作5、游標(biāo)或顯示移位控制(10H/14H/18H/1CH)7、設(shè)定CGRAM 位址(40H-7FH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLH AC5AC4AC3AC2AC1 AC0功能:設(shè)定CGRAM 位址到位址計(jì)數(shù)器(AC)8、設(shè)定DDRAM 位址(80H-9FH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHAC6AC5AC4AC3AC2AC1 AC0功能:設(shè)定 DDRAM 位址到位址計(jì)數(shù)器(AC)9、讀取忙碌狀態(tài)(BF)和位址(BF=1, 狀態(tài)忙)CODE: RW R

17、S DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0H LBFAC6AC5AC4AC3AC2AC1 AC0功能:讀取忙碌狀態(tài)(BF)可以確認(rèn)內(nèi)部動(dòng)作是否完成,同時(shí)可以讀出位址計(jì)數(shù)器(AC)的值10、寫資料到RAM(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LHD7D6D5D4D3D2D1 D0功能:寫入資料到內(nèi)部的 RAM(DDRAM/CGRAM/TRAM/GDRAM)11、讀出RAM 的值CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HHD7D6D5D4D3D2D1

18、D0功能:從內(nèi)部 RAM 讀取資料(DDRAM/CGRAM/TRAM/GDRAM)12、待命模式(01H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLL H功能:進(jìn)入待命模式,執(zhí)行其他命令都可終止待命模式13、卷動(dòng)位址或IRAM 位址選擇(02H/03H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLLLLH SR功能:SR=1;允許輸入卷動(dòng)位址 SR=0;允許輸入IRAM 位址14、反白選擇(04H05H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1

19、DB0LLLLLLLHR1 R0功能:選擇 4 行中的任一行作反白顯示,并可決定反白的與否15、睡眠模式(08H/0CH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLHHX1REG L功能:SL=1;脫離睡眠模式 SL=0;進(jìn)入睡眠模式16、擴(kuò)充功能設(shè)定(36H/30H/34H)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLLLHS/CR/LX X功能:RE=1;擴(kuò)充指令集動(dòng)作 RE=0;基本指令集動(dòng)作 G=1;繪圖顯示ON G=0;繪圖顯示OFF17、設(shè)定IRAM 位址或卷動(dòng)位址(40H-7FH)

20、CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLHAC5AC4AC3AC2AC1 AC0 功能:SR=1;AC5AC0 為垂直卷動(dòng)位址 SR=0;AC3AC0 寫ICONRAM 位址18、設(shè)定繪圖RAM 位址(80H-FFH)CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHAC6AC5AC4AC3AC2AC1 AC0功能:設(shè)定 GDRAM 位址到位址計(jì)數(shù)器(AC)顯示坐標(biāo)關(guān)系X 坐標(biāo)Line1 80H 81H 82H 83H 84H 85H 86H 87HLine2 90H 91H 92H 93H 94H

21、95H 96H 97HLine3 88H 89H 8AH 8BH 8CH 8DH 8EH 8FHLine4 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH3 硬件電路設(shè)計(jì)3.1 LCD控制電路原理圖圖3.1 LCD控制電路原理圖3.2電機(jī)控制電路電機(jī)H橋控制電路如下圖3.2所示。當(dāng)DCMotorA為高電平時(shí),NPN型三極管Q4導(dǎo)通,則PNP型三極管Q2和NPN型三極管Q6會(huì)同時(shí)導(dǎo)通;同時(shí)DCMotorB為低電平,NPN型三極管Q5關(guān)閉,則PNP型三極管Q3和NPN型三極管Q7會(huì)同時(shí)關(guān)閉。此時(shí),電流將從MOTOR B經(jīng)過電機(jī)向MOTORA方向流動(dòng),如此驅(qū)動(dòng)電機(jī)正向轉(zhuǎn)動(dòng)。反之,DC

22、MotorA為低電平,DCMotorB為高電平,電機(jī)為反向轉(zhuǎn)動(dòng)。如此可以實(shí)現(xiàn)電機(jī)的正反轉(zhuǎn)控制。調(diào)節(jié)DCMotorA或DCMotorB的導(dǎo)通時(shí)間,可以實(shí)現(xiàn)電機(jī)的調(diào)速控制。(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))圖3.2 電機(jī)控制電路圖3.3 速度反饋電路3.3速度反饋電路速度反饋電路如上圖3.3所示。當(dāng)光耦Optoisolator1導(dǎo)通時(shí),PNP型三極管Q1導(dǎo)通,指示燈LED1發(fā)光,此時(shí)DCMotorSpeed端口為低電平。當(dāng)光耦Optoisolator1不導(dǎo)通時(shí),指示燈LED1不發(fā)光,此時(shí)DCMotorSpeed端口為高電平。電機(jī)帶了一個(gè)有四個(gè)缺口的轉(zhuǎn)盤,如此。當(dāng)電機(jī)轉(zhuǎn)動(dòng)一圈時(shí),會(huì)有4個(gè)脈沖輸入給單片機(jī)

23、,對(duì)這些脈沖進(jìn)行計(jì)數(shù),可以計(jì)算出電機(jī)的轉(zhuǎn)動(dòng)速度。(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))由于裝在電機(jī)上的碼盤格數(shù)比較少,而我們程序中速度的級(jí)數(shù)為255,相對(duì)較大。給速度計(jì)數(shù)的T0計(jì)數(shù)器,為滿足系統(tǒng)的實(shí)時(shí)控制性,則獲取速度數(shù)據(jù)的時(shí)間應(yīng)該盡量短(即程序中T0定時(shí)器初始化程序中的Delay延時(shí))。同時(shí),這一時(shí)間又要滿足當(dāng)給定速度最大時(shí),仍有足夠的時(shí)間能夠?qū)λ俣确答佒颠M(jìn)行正確的計(jì)數(shù)。所以這一時(shí)間不能夠太短。合理的確定這一時(shí)間的方法是,給定電機(jī)速度為255,讓其全速轉(zhuǎn)動(dòng)。此時(shí),從小到大更改計(jì)數(shù)延時(shí)Delay()的時(shí)間,然后在液晶顯示器上觀察反饋的速度值,當(dāng)其剛好為255時(shí),此時(shí)的延時(shí)Delay()時(shí)間為系統(tǒng)的的最

24、佳速度采樣時(shí)間。經(jīng)過上述處理后,我們發(fā)現(xiàn)獲得的這個(gè)延時(shí)時(shí)間是相對(duì)比較長的,這是因?yàn)楫?dāng)給定速度較大時(shí),電機(jī)需要轉(zhuǎn)幾十圈才能反饋出實(shí)際的速度值,所以反饋速度所需的時(shí)間比較長,實(shí)時(shí)控制的能力相對(duì)較差。為克服以上系統(tǒng)的缺點(diǎn),可以通過減少速度的級(jí)數(shù),即減小Pwm_MAX的值來實(shí)現(xiàn)。但是速度的級(jí)數(shù)減少后,電機(jī)調(diào)速的連續(xù)性就必然會(huì)降低,電機(jī)在速度動(dòng)態(tài)變化過程中的穩(wěn)定性就會(huì)相應(yīng)降低。另外,還可以采用增加電機(jī)碼盤格數(shù)的方法來實(shí)現(xiàn)速度反饋的快速性和準(zhǔn)確性,借此可以在較合理的時(shí)間內(nèi)得到電機(jī)速度的準(zhǔn)備值。第二種改進(jìn)方案更為合理和科學(xué)。3.4 MCU接口圖3.4 MCU接口3.5 按鍵電路圖3.5 按鍵電路按鍵電路如上

25、圖3.5所示。當(dāng)任意一個(gè)按鍵KEY被按下時(shí),P2.0P2.2引腳會(huì)對(duì)應(yīng)的的產(chǎn)生一個(gè)低電平。4 軟件設(shè)計(jì)4.1程序要求開啟中斷開始LCD初始化顯示預(yù)處理初值設(shè)定按鍵處理速度計(jì)算數(shù)據(jù)處理返回中斷服務(wù)電機(jī)控制圖4.1 程序流程圖我們使用語言對(duì)AT89C51進(jìn)行控制程序的編寫。程序中使用到的資源有兩個(gè)定時(shí)器資源,T0工作在16位外部計(jì)數(shù)模式,用于速度的反饋和計(jì)算等數(shù)據(jù)處理。T1工作在8位定時(shí)器自動(dòng)重載模式,引腳P3.4接計(jì)數(shù)信息輸入端口。在T1的定時(shí)溢出中斷程序中進(jìn)行速度的產(chǎn)生及對(duì)電機(jī)的控制操作。系統(tǒng)使用到5個(gè)普通I/O口資源。P1.6和P1.7為控制電機(jī)轉(zhuǎn)動(dòng)的兩路控制信號(hào)。P2.0作為加速按鍵信息輸

26、入端口,P2.1作為減速按鍵信息輸入端口,P2.2作為方向控制鍵信息輸入端口。(本文由 點(diǎn)夢(mèng)時(shí)刻 傾情奉獻(xiàn))程序運(yùn)行時(shí),先進(jìn)行LCD控制程序的初始化并對(duì)顯示進(jìn)行預(yù)處理。然后讀預(yù)設(shè)速度初值,由T1中斷服務(wù)程序產(chǎn)生PWM速度控制信號(hào),T0反饋速度信息并進(jìn)行速度的計(jì)算處理。KEY1和KEY2可對(duì)速度進(jìn)行加減操作。KEY3可對(duì)電機(jī)進(jìn)行正反轉(zhuǎn)的控制操作。程序的編寫要遵循性保證系統(tǒng)穩(wěn)定性的前提下消耗盡量少消耗資源的原則,并要考慮實(shí)際的可操作性和滿足系統(tǒng)在各種工作環(huán)境下能穩(wěn)定正常運(yùn)行的要求。4.2 程序流程圖4.3 程序清單4.3.1 LCD驅(qū)動(dòng)程序/*LCD.C128×64 LCD驅(qū)動(dòng)程序頭文件

27、*/#ifndef LCD_H_#define LCD_H_#include<REG51.H>sbit LCD_BL=P14; /定義背光控制信號(hào)void LcdLightOn();/點(diǎn)亮背光燈void LcdLightOff();/熄滅背光燈void LcdClear();/清屏void LcdInit();/初始化void LcdPutChar(unsigned char c);/顯示ASC碼void LcdPuts(unsigned char*s); /顯示字符串#endif /LCD_H_/*LCD.C128×64 LCD驅(qū)動(dòng)程序*/#include <IN

28、TRINS.H>#include <ABSACC.H>unsigned char LcdCursor; /定義屏幕光標(biāo)(取值063,光標(biāo)本身不可見)int i,j;void LcdLightOn() /功能:點(diǎn)亮背光燈LCD_BL = 1;void LcdLightOff() /功能:熄滅背光燈LCD_BL = 0;/*函數(shù):LcdGetBF()返回:BF=1,表示忙,不可進(jìn)行任何操作BF=0,表示不忙,可以進(jìn)行正常操作*/bit LcdGetBF()/功能:讀出狀態(tài)位BFunsigned char dat;dat = XBYTE0xD002;/XBYTE的定義見<AB

29、SACC.H>return (bit)(dat & 0x80);void LcdWriteCmd(unsigned char cmd) /功能:向LCD發(fā)送命令while ( LcdGetBF() );XBYTE0xD000 = cmd;void LcdWriteDat(unsigned char dat)/ 功能:向LCD寫入數(shù)據(jù)while ( LcdGetBF() );XBYTE0xD001 = dat;unsigned char LcdReadDat() /功能:從LCD讀出數(shù)據(jù)volatile unsigned char dat;while ( LcdGetBF() );

30、dat = XBYTE0xD003;dat = XBYTE0xD003;/需要連續(xù)執(zhí)行兩次才能夠讀出真正的數(shù)據(jù)return dat;/*函數(shù):LcdSetAC()功能:設(shè)置DDRAM(顯示數(shù)據(jù)RAM)的AC(地址計(jì)數(shù)器)值*/void LcdSetAC(unsigned char ac)ac &= 0x3F;ac |= 0x80;LcdWriteCmd(ac);void LcdClear()/功能:LCD清屏,并使光標(biāo)回到0LcdWriteCmd(0x01);/清屏命令LcdCursor = 0;void LcdDelay(unsigned char t) /功能:延時(shí)(t*100)個(gè)

31、機(jī)器周期unsigned char n;don = 49;while ( -n != 0 ); while ( -t != 0 );void LcdInit()/功能:LCD初始化LcdWriteCmd(0x30);/設(shè)置基本指令集LcdDelay(3);LcdWriteCmd(0x30);/設(shè)置基本指令集(需要再執(zhí)行一次)LcdDelay(1);LcdWriteCmd(0x0C);/開啟顯示LcdDelay(3);LcdClear();/清屏LcdDelay(250);LcdWriteCmd(0x06);/設(shè)置進(jìn)入點(diǎn)LcdDelay(10);void LcdCheckAC() /功能:根據(jù)光

32、標(biāo)位置調(diào)整ACswitch ( LcdCursor )case 16:LcdSetAC(16);break;case 32:LcdSetAC(8);break;case 48:LcdSetAC(24);break;case 64:LcdCursor = 0;LcdSetAC(0);break;default:break;void LcdPutChar(unsigned char c) /功能:顯示ASCII碼LcdWriteDat(c);LcdCursor+;LcdCheckAC();void LcdPutHZ(unsigned char ch, unsigned char cl) /功能:顯

33、示漢字if ( LcdCursor & 0x01 )/顯示漢字時(shí),必須偶地址對(duì)準(zhǔn),即光標(biāo)位置不能是奇數(shù)LcdPutChar(' ');/額外輸出一個(gè)空格LcdWriteDat(ch);LcdWriteDat(cl);LcdCursor += 2;LcdCheckAC();void LcdPuts(unsigned char *s) /功能:顯示字符串unsigned char ch, cl;for (;)ch = *s+;if ( ch = '0' ) break;if ( ch < 0x80 )LcdPutChar(ch);elsecl = *s

34、+;LcdPutHZ(ch,cl);4.3.2 主函數(shù)程序/*顯示主程序*/#include<REG51.H>unsigned char SD4='1','2','3','4'/速度設(shè)定unsigned char FK4='2','2','3','4'/速度反饋unsigned int D=0; /方向控制中間變量unsigned int Pwm=0; /速度產(chǎn)生中間變量unsigned int Pwm_Value=0; /速度計(jì)算中間量 unsigned

35、 int Value=0; /速度初值 sbit KEY1=P20; /按鍵sbit KEY2=P21;sbit KEY3=P22;sbit MotorA=P16; /兩個(gè)電機(jī)控制端sbit MotorB=P17; bit SWTR; /延時(shí)程序變量bit SWTF;unsigned int SWTV; #define Pwm_MAX 255 /速度級(jí)數(shù)/*/函數(shù):Delay()延時(shí)1ms 65.53st>0時(shí),延時(shí)(t*0.001)st=0時(shí)。延時(shí)65.53s/*/void Delay(unsigned int T) /延時(shí)程度SWTV=T;SWTR=1;while(!SWTF);SW

36、TR=0;SWTF=0;void KEY() /按鍵處理函數(shù)if(KEY1=0)Pwm_Value=Pwm_Value+1;if(KEY2=0)Pwm_Value=Pwm_Value-1; if(Pwm_Value>255) Pwm_Value=255; if(Pwm_Value<0) Pwm_Value=0;if(KEY3=0) if(D=0) D=1;else D=0;void PWM_Init() /速度產(chǎn)生函數(shù)staticunsigned char t=0;t+;if(t>Pwm_MAX) t=0;if(t<=Pwm_Value) Pwm=1;else Pwm=

37、0;if(D=0)MotorA=0;MotorB=Pwm;elseMotorA=Pwm;MotorB=0; void Show_Value(unsigned char CH) /數(shù)據(jù)顯示函數(shù) int i; for(i=0;i<4;i+) LcdPutChar(CHi);void Show_Init() /數(shù)據(jù)顯示預(yù)處理函數(shù)LcdWriteCmd(0x80);LcdPuts("速度設(shè)定");LcdWriteCmd(0x90);LcdPuts("速度反饋");LcdWriteCmd(0x88);LcdPuts("速度方向");Lcd

38、WriteCmd(0x98);LcdPuts("測(cè)控071 ");LcdWriteCmd(0x9c);LcdPuts(" 29號(hào) ");void T_int()/定時(shí)器初始化函數(shù)TMOD&=0x00;TMOD=0x25;TH1=TL1=0xa4;TH0=TL0=0;ET1=1;TR1=1;EA=1;void MeasureSpeed()/速度反饋及信息處理函數(shù)unsigned int m; TH0=TL0=0; TR0=1; Delay(2400); TR0=0; TF0=0; m=2*(TH0*255+TL0);if(m>Value) P

39、wm_Value+;if(m<Value) Pwm_Value-;FK3=(m%10)+48;FK2=(m/10%10)+48;FK1=(m/100%10)+48;FK0=(m/1000%10)+48;SD3=(Pwm_Value%10)+48;SD2=(Pwm_Value/10%10)+48;SD1=(Pwm_Value/100%10)+48;SD0=(Pwm_Value/1000%10)+48;void main()/主函數(shù)部分 unsigned char i; MotorA=0; MotorB=0;EA=0; T_int(); /定時(shí)器初始化 Delay(50); LcdInit(

40、);/LCD初始化 /*/ for(i=0;i<2;i+)LcdLightOff();Delay(660);LcdLightOn();Delay(660); Delay(660); LcdClear(); Delay(660);/*/ Show_Init(); Delay(20); Value=90;/速度初值 Pwm_Value=Value; EA=1; for(;)KEY();/按鍵處理MeasureSpeed(); /速度反饋LcdWriteCmd(0x94);Show_Value(FK); /顯示實(shí)時(shí)速度LcdWriteCmd(0x84);Show_Value(SD); /顯示設(shè)

41、定值LcdWriteCmd(0x8c); /顯示方向 if(D=0)LcdPuts("正向"); if(D=1)LcdPuts("反向");void T1ZD() interrupt 3 /T1中斷服務(wù)程序unsigned char m=0;TR1=0;PWM_Init(); /電機(jī)控制if(SWTR) /延時(shí)程序控制 if(-SWTV=0) SWTF=1;TR1=1;5程序的調(diào)試5.1 編程軟件Keil C51簡介我們使用KEIL C51軟件來對(duì)程序進(jìn)行編譯和調(diào)試。Keil C51是德國知名軟件公司Keil(現(xiàn)已并入ARM公司)開發(fā)的基于8051內(nèi)核的

42、微控制器軟件開發(fā)平臺(tái),是目前開發(fā)8051內(nèi)核單片機(jī)的主流編譯工具。5.2 程序編譯和調(diào)試圖5.1 工程的建立(1)運(yùn)行Keil C51軟件。新建工程。選擇Keil C51軟件的菜單“Project | New |u Vision Project”,參考圖5.1。彈出一個(gè)名為“Create New Project”的對(duì)話框,為工程取名為“SOK”。然后存放到指定文件夾。(2)緊接著,Keil C51提示您選擇CPU器件。8051內(nèi)核單片機(jī)最早是由Intel公司研發(fā)的。因此,在這里您可以選擇Intel公司的第1個(gè)器件“80/87C52”,參見圖 5.2。接下來彈出一個(gè)對(duì)話框。我們不需要添加啟動(dòng)代碼

43、,所以這里選擇 “否(N)”。圖5.2 器件的選擇(3)選擇Keil C51軟件的菜單“File | New”,將出現(xiàn)的新文檔命名為“SOK”。選擇菜單“File | Save”,彈出一個(gè)名為“Save As”的對(duì)話框。建議將文件名改為“SOK.c”, 如此,我們建立了一個(gè)C語言的程序文本。如圖5.3所示。圖5.3 C語言程序的建立(4)單擊Keil C51軟件左邊“Project Workspace”項(xiàng)目工作窗口的“”,然后右擊“Source Group 1”文件夾,會(huì)彈出如圖5.4所示的選擇菜單。單擊其中的“Add Files to Group 'Source Group 1'”項(xiàng),將彈出如圖5.5所示的對(duì)話框。選擇文件類型為“C Source file

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論