版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 基于(jy)51單片機(jī)溫度自保護(hù)的直流電機(jī)控制系統(tǒng)一、實(shí)驗(yàn)(shyn)目的1了解直流電機(jī)控制的基本(jbn)方法。2通過本實(shí)驗(yàn)課程,進(jìn)一步掌握單片機(jī)的基本原理、以及擴(kuò)展微機(jī)系統(tǒng)多種接口的基本方法,具有基于微機(jī)和單片機(jī)系統(tǒng)進(jìn)行軟硬件綜合設(shè)計(jì)和實(shí)現(xiàn)的能力。 3了解微機(jī)系統(tǒng)的基本軟硬件結(jié)構(gòu),熟悉和掌握單片機(jī)系統(tǒng)串行口、并行口、定時(shí)器/計(jì)數(shù)器、中斷和LCD液晶顯示接口等一些基本芯片的使用方法,掌握基于89C51系列單片機(jī)指令系統(tǒng)的匯編語言程序設(shè)計(jì)或C語言程序設(shè)計(jì)和調(diào)試方法。 二、實(shí)驗(yàn)原理和內(nèi)容本系統(tǒng)使用到的硬件模塊有:LCD12864M液晶、簡單I/O、DS18B20溫度測控、蜂鳴器、直流電機(jī)、PW
2、M電壓功放器、LED指示燈等。8051單片機(jī)是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,P0.0P0.7 P0口8位雙向口線(在引腳的3932號端子)。 P1.0P1.7 P1口8位雙向口線(在引腳的18號端子)。P2.0P2.7 P2口8位雙向口線(在引腳的2128號端子)。P3.0P3.7 P3口8位雙向口線(在引腳的1017號端子)。 本實(shí)驗(yàn)通過利用定時(shí)器T0,控制IO口輸出高電平和低電平的時(shí)間,產(chǎn)生PWM方波來控制直流電機(jī)轉(zhuǎn)速。通過DS18B20溫度測控讀取當(dāng)前溫度,如果在電機(jī)運(yùn)轉(zhuǎn)過程中,溫度超過警報(bào)溫度,則電機(jī)停止旋轉(zhuǎn)。下面簡要的介紹下本系統(tǒng)的各個(gè)模塊:DS18B20是DALLAS生產(chǎn)的
3、一線制串行接口數(shù)字式溫度計(jì)。它的溫度測量范圍是-55C125C,-10C85C內(nèi)誤差為正負(fù)0.5C;912位轉(zhuǎn)換精度,轉(zhuǎn)換時(shí)間100ms750ms,通常為500ms。本系統(tǒng)利用DS18B20對電機(jī)溫度進(jìn)行實(shí)時(shí)的模擬檢測采集。LCD12864M是將液晶顯示器件、連接件、集成電路、背光源結(jié)構(gòu)裝配在一起的組件。它的分辨率為12864,可顯示圖形或4行共32個(gè)1616點(diǎn)陣的漢字,并且內(nèi)置8192個(gè)1616點(diǎn)陣的漢字庫、128個(gè)字符、64256點(diǎn)陣的顯示RAM。12864M與單片機(jī)之間使用串行接口方式(PSB=0),RS(CS)為串行的片選信號,R/W(SID)為串行數(shù)據(jù)口,E(CLK)為串行同步時(shí)鐘。
4、串行數(shù)據(jù)傳送一幀分三個(gè)字節(jié):串行控制指令、數(shù)據(jù)的高4位和數(shù)據(jù)的低4位。PWM是通過定時(shí)器T0,控制IO口輸出(shch)高電平的時(shí)間TH和低電平的時(shí)間TL,其占空比為TH/(TH+TL)。LED指示燈鏈接P2口,當(dāng)P2位口輸出低電平時(shí),指示燈電亮,用以指示速度檔。當(dāng)溫度超過警報(bào)溫度時(shí),P2反復(fù)(fnf)輸出高電平和低電平,指示燈閃爍報(bào)警。蜂鳴器接P17口,當(dāng)溫度超過警報(bào)(jngbo)溫度時(shí),P17輸出低電平,蜂鳴器警報(bào)。三、實(shí)驗(yàn)設(shè)備和軟件平臺(tái)硬件:實(shí)驗(yàn)箱(一臺(tái))、示波器(一臺(tái))、單片機(jī)仿真器(一臺(tái))、連接線(若干)軟件:星研集成環(huán)境軟件四、實(shí)驗(yàn)各模塊連接結(jié)構(gòu)1、系統(tǒng)的總體框架圖:80C51LC
5、D顯示溫度DS18B20簡單I/O撥碼開關(guān)LED燈蜂鳴器PWM功放器直流電機(jī)2、實(shí)驗(yàn)(shyn)連線:LCD液晶(yjng): CSP10 SIDP11 SCLKP12 PSBP13撥碼開關(guān)(kigun):P0LED燈: P2蜂鳴器: P17PWM: P16溫度DS18B20: P35五、實(shí)驗(yàn)注意事項(xiàng)及總結(jié)在本系統(tǒng)的調(diào)試完善過程中,發(fā)現(xiàn)了不少的問題,主要有:1、在調(diào)試時(shí),要把P2調(diào)為I/O模式。2、晶振要設(shè)置為12MHZ。3、不要帶電操作實(shí)驗(yàn)箱。4、不能存太多全局變量,會(huì)使51單片機(jī)內(nèi)部RAM不夠,導(dǎo)致地址溢出,程序出錯(cuò)。5、各種芯片初始化要十分注意,特別是溫度DS18B20的初始化過程中不能
6、有中斷出現(xiàn),而步進(jìn)電機(jī)是需要定時(shí)中斷來定時(shí)驅(qū)動(dòng)的,很難讓它們不互相影響,這也是在實(shí)驗(yàn)中為什么有時(shí)會(huì)出現(xiàn)溫度很大或?yàn)榱愕脑?。最好的解決方法就是不使用中斷。六、附錄實(shí)驗(yàn)程序/ 頭文件#include#include#include#include /*接線說明*/* 液 晶: CSP10 SIDP11 SCLKP12 PSBP13 調(diào)速檔撥碼開關(guān): P0 指示燈: P2 蜂鳴器: P17*/ 宏定義#define uchar unsigned char#define uint unsigned int/ 函數(shù)(hnsh)聲明void LCDString(unsigned char *pStr);
7、void W_1byte(unsigned char RW, unsigned char RS, unsigned char W_data) ;void Alarm(void);/ 警報(bào)(jngbo)溫度大小定義#define TEMPERATURE_ALARM 21.0/ 液晶(yjng)接口 sbit CS = P10;sbit SID = P11;sbit SCLK = P12; sbit PSB = P13;/ 溫度/TOUT接T1,T1口即為P3.5sbit DQ=P35;unsigned int T; /溫度測量 float radio; /占空比unsigned char tim
8、eH=0 x3c,timeL=0 xb0;unsigned int flag0; /PWM標(biāo)志位unsigned int flag1; /溫度警報(bào)標(biāo)志,1for超過/ 蜂鳴器sbit Beeper = P17;/ 直流電機(jī)CTRL接功放E2的OUT(OUT1),功放E2的IN(IN1)接P1.6sbit Dianji = P16;/ 液晶顯示器顯示的內(nèi)容code unsigned char lcd_data80= Motor Control;code unsigned char lcd_data88=ALM 溫度: 21.0;/ 存儲(chǔ)測量溫度值unsigned char Temp_Value=
9、0 x00,0 x00; / 延時(shí) void delay(unsigned char i)while(i-); / 溫度測量模塊/ 初始化unsigned char Init_DS18B20() unsigned char status;DQ = 1; delay(8); DQ = 0; delay(90); DQ = 1;delay(8); status = DQ;delay(100);DQ = 1; return status;/ 讀字節(jié)(z ji)unsigned char ReadOneByte() unsigned char i,dat = 0;DQ = 1;_nop_();for(
10、i = 0;i = 1; DQ = 1;_nop_();_nop_();if(DQ) dat |= 0 x80;delay(30);DQ = 1; return dat; / 寫字節(jié)(z ji)void WriteOneByte(unsigned char dat) unsigned char i;for(i = 0;i = 1; / 讀取溫度(wnd)值void Read_Temperature() if(Init_DS18B20() != 1); WriteOneByte(0 xcc);WriteOneByte(0 x44); Init_DS18B20(); delay(100);Writ
11、eOneByte(0 xcc);WriteOneByte(0 xbe);Temp_Value0 = ReadOneByte();Temp_Value1 = ReadOneByte(); / 溫度值顯示及警報(bào)操作void Display_Temperature() bit flag;uchar DisplayBuf20;uchar NotAlarmBuf20;uchar lsb,msb;uint temp,t1;float t2;msb = Temp_Value1; / Sign byte + lsbitlsb = Temp_Value0; / Temp data plus lsbif(msb
12、& 0 xF0) 0) /判斷(pndun)是否為負(fù)溫度flag = 1;elseflag = 0;if(flag) /如果(rgu)為負(fù)溫度取反加1temp = (uint)msb 8) | lsb;temp = temp + 1;msb = temp / 256;lsb = temp % 256;t1 = msb 4); / t1為溫度值的整數(shù)(zhngsh)部分t2 = (lsb & 0 x0F) * 0.0625 + t1;T=t1;/ 液晶顯示當(dāng)前溫度值sprintf(DisplayBuf, 電機(jī)溫度: %2.1f0, t2);W_1byte(0,0,0 x88); LCDStrin
13、g(DisplayBuf);/ 判斷溫度是否超過警報(bào)值if(t2 = TEMPERATURE_ALARM)Alarm(); / 警報(bào)函數(shù)flag1=1;else flag1=0;/ 溫度正常情況操作,液晶顯示,電機(jī)轉(zhuǎn)動(dòng),蜂鳴器關(guān)閉sprintf(NotAlarmBuf,設(shè)定占空比:%2.0f%,radio);W_1byte(0,0,0 x98);LCDString(NotAlarmBuf);Beeper=1;/ LCD液晶顯示/函數(shù)作用:負(fù)責(zé)向SID串行寫入8個(gè)bit位 void Write_8bits(unsigned int W_bits) unsigned int i; unsigned
14、 int Temp_data;for(i = 0; i 8; i+) Temp_data = W_bits;Temp_data = i;if(Temp_data & 0 x80) = 0) /bit7 is zero SID = 0;_nop_(); SCLK = 1;_nop_();_nop_();SCLK = 0;_nop_();SID = 0; else /bit7 is one SID = 1; _nop_(); SCLK = 1; _nop_(); _nop_(); SCLK = 0; _nop_(); SID = 0; /函數(shù)作用(zuyng):寫一個(gè)字節(jié)的數(shù)據(jù)到12864液晶(y
15、jng),包括指令和數(shù)據(jù) /說 明:RW=1,從液晶(yjng)讀數(shù)據(jù)到MCU;RW=0,寫一個(gè)數(shù)據(jù)到液晶; / (一般RW都設(shè)為0,即只向液晶寫數(shù)據(jù),不讀數(shù)據(jù)) / RS=1,寫入的是數(shù)據(jù);RS=0,寫入的是指令; / 一般模式:RW=0,RS=1;寫數(shù)據(jù) / RW=0,RS=0;寫指令void W_1byte(unsigned char RW, unsigned char RS, unsigned char W_data) unsigned int H_data,L_data,S_ID = 0 xf8; /11111RWRS0 if(RW = 0) S_ID &= 0 x04; else
16、/if(RW=1) S_ID |= 0X04; if(RS = 0) S_ID &= 0 x02;else /if(RS=1) S_ID |= 0X02; H_data = W_data; H_data &= 0 xf0; /屏蔽低4位的數(shù)據(jù) L_data = W_data; /xxxx0000格式(g shi)L_data &= 0 x0f; /屏蔽(pngb)高4位的數(shù)據(jù)(shj) L_data = 4; /xxxx0000格式 CS = 1; Write_8bits(S_ID); /發(fā)送S_ID Write_8bits(H_data); /發(fā)送H_data Write_8bits(L_d
17、ata); /發(fā)送L_data CS = 0; / 向液晶屏寫入字符串void LCDString(unsigned char *pStr)for(; *pStr != 0; pStr+)W_1byte(0,1, *pStr); / LCD初始化void LCD_init(void) unsigned char cmd; cmd=0 x30; /功能設(shè)置 8位數(shù)據(jù),基本指令 W_1byte(0,0,cmd); delay(2); cmd=0 x0C; /顯示狀態(tài) ON,游標(biāo)OFF,反白OFF W_1byte(0,0,cmd); /寫指令 delay(2); cmd=0 x01; /清除顯示 W
18、_1byte(0,0,cmd); /寫指令 delay(2); cmd=0 x02; /地址歸位W_1byte(0,0,cmd); /寫指令 delay(2); cmd=0 x80; /設(shè)置DDRAM地址 W_1byte(0,0,cmd); /寫指令 delay(2); /延時(shí) / LCD初始化void init_LCD() /SP = 0X60;/* 指針地址 CS = 0; SCLK = 0; SID = 0; PSB=0; LCD_init(); / 將一、二行字符串寫入LCDvoid LCD_mess_display() unsigned char i; W_1byte(0,0,0 x
19、80); _nop_();for(i=0;lcd_data80i!=0;i+) W_1byte(0,1,lcd_data80i); W_1byte(0,0,0 x90); for(i=0;lcd_data88i!=0;i+) W_1byte(0,1,lcd_data88i); / LCD顯示(xinsh)void DisplayLcd()LCD_mess_display(); delay(100); / LCD顯示(xinsh)溫度 void ShowTemperature() Read_Temperature(); Display_Temperature(); / 溫度(wnd)警報(bào)void
20、 Alarm(void)/uchar i;uchar AlarmBuf20;/LED_GREEN = 1; /LED_RED = 0;sprintf(AlarmBuf,智能調(diào)速:%2.0f%,radio); W_1byte(0,0,0 x98); LCDString(AlarmBuf);Beeper=0;/*T0定時(shí),T1計(jì)數(shù)*void Time_Init()TMOD=0 x51; /工作方式2EA=1; /使能ET0=1; /開發(fā)中斷,可到中斷程序執(zhí)行/ET1=1;TL0=timeH;TH0=timeL; /時(shí)間=(216-TH*28-TL)*1usTR0=1; /開TO定時(shí)flag0=1;
21、 /TH1=0 xff;TL1=0 xff; /1ms中斷/TR1=1;/ 主函數(shù)main() unsigned int i;/LED_GREEN = 0; Time_Init(); /定時(shí)器計(jì)數(shù)器初始化init_LCD(); /*輸出(shch)作品信息*/*sprintf(biaoti1,廈門大學(xué)(sh mn d xu)自動(dòng)化系); W_1byte(0,0,0 x80); LCDString(biaoti1);sprintf(biaoti2,陳福feng); W_1byte(0,0,0 x90); LCDString(biaoti2);sprintf(biaoti3,23220131153
22、339); W_1byte(0,0,0 x88); LCDString(biaoti3);sprintf(biaoti4,2013-12-30); W_1byte(0,0,0 x98); LCDString(biaoti4);delay(0 xef);delay(0 xef);*/*DisplayLcd(); /顯示(xinsh)前兩行while(1) if(flag1=0) /沒有警報(bào) switch(P0) case 0 x01:timeH=0 xe0;timeL=0 xe0;radio=12.5;break; case 0 x03:timeH=0 xc0;timeL=0 xc0;radio
23、=25.0;break; case 0 x07:timeH=0 xa0;timeL=0 xa0;radio=37.5;break; case 0 x0f:timeH=0 x80;timeL=0 x80;radio=50.0;break; case 0 x1f:timeH=0 x60;timeL=0 x60;radio=62.5;break; case 0 x3f:timeH=0 x40;timeL=0 x40;radio=75.0;break; case 0 x7f:timeH=0 x20;timeL=0 x20;radio=87.5;break; case 0 xff:timeH=0 x00;timeL=0 x00;radio=100;break; default: timeH=0 xff;timeL=0 xff;radio=00;break; P2=P0; /P2指示燈,表示檔數(shù) else i=T-TEMPERATURE_ALARM; /智能降速 switch(i) case 1:timeH=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第1單元 古代亞非文明(高頻非選擇題25題)(原卷版)
- 《波蘭歪屋設(shè)計(jì)》課件
- 《證券市場概述周》課件
- 玩具設(shè)計(jì)美工工作總結(jié)
- 2023-2024年項(xiàng)目管理人員安全培訓(xùn)考試題帶答案(黃金題型)
- 關(guān)于認(rèn)識(shí)實(shí)習(xí)報(bào)告匯編六篇
- 《系統(tǒng)安全評價(jià)概述》課件
- 《婦產(chǎn)科學(xué)緒論》課件
- 《監(jiān)理工作程序》課件
- 《應(yīng)用開發(fā)和管理》課件
- 機(jī)電樣板施工主要技術(shù)方案
- 涉稅風(fēng)險(xiǎn)管理方案
- 青島市2022-2023學(xué)年七年級上學(xué)期期末道德與法治試題
- 高空作業(yè)安全免責(zé)協(xié)議書范本
- 石油化學(xué)智慧樹知到期末考試答案章節(jié)答案2024年中國石油大學(xué)(華東)
- 手術(shù)后如何防止排尿困難
- 特種設(shè)備“日管控、周排查、月調(diào)度”表格
- 重點(diǎn)關(guān)愛學(xué)生幫扶活動(dòng)記錄表
- 2021年10月自考00850廣告設(shè)計(jì)基礎(chǔ)試題及答案含解析
- 結(jié)構(gòu)化面試表格
- 地?zé)崮苜Y源的潛力及在能源領(lǐng)域中的應(yīng)用前景
評論
0/150
提交評論