




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 基于(jy)51單片機(jī)溫度自保護(hù)的直流電機(jī)控制系統(tǒng)一、實(shí)驗(yàn)(shyn)目的1了解直流電機(jī)控制的基本(jbn)方法。2通過(guò)本實(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)的匯編語(yǔ)言程序設(shè)計(jì)或C語(yǔ)言程序設(shè)計(jì)和調(diào)試方法。 二、實(shí)驗(yàn)原理和內(nèi)容本系統(tǒng)使用到的硬件模塊有:LCD12864M液晶、簡(jiǎn)單I/O、DS18B20溫度測(cè)控、蜂鳴器、直流電機(jī)、PW
2、M電壓功放器、LED指示燈等。8051單片機(jī)是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,P0.0P0.7 P0口8位雙向口線(在引腳的3932號(hào)端子)。 P1.0P1.7 P1口8位雙向口線(在引腳的18號(hào)端子)。P2.0P2.7 P2口8位雙向口線(在引腳的2128號(hào)端子)。P3.0P3.7 P3口8位雙向口線(在引腳的1017號(hào)端子)。 本實(shí)驗(yàn)通過(guò)利用定時(shí)器T0,控制IO口輸出高電平和低電平的時(shí)間,產(chǎn)生PWM方波來(lái)控制直流電機(jī)轉(zhuǎn)速。通過(guò)DS18B20溫度測(cè)控讀取當(dāng)前溫度,如果在電機(jī)運(yùn)轉(zhuǎn)過(guò)程中,溫度超過(guò)警報(bào)溫度,則電機(jī)停止旋轉(zhuǎn)。下面簡(jiǎn)要的介紹下本系統(tǒng)的各個(gè)模塊:DS18B20是DALLAS生產(chǎn)的
3、一線制串行接口數(shù)字式溫度計(jì)。它的溫度測(cè)量范圍是-55C125C,-10C85C內(nèi)誤差為正負(fù)0.5C;912位轉(zhuǎn)換精度,轉(zhuǎn)換時(shí)間100ms750ms,通常為500ms。本系統(tǒng)利用DS18B20對(duì)電機(jī)溫度進(jìn)行實(shí)時(shí)的模擬檢測(cè)采集。LCD12864M是將液晶顯示器件、連接件、集成電路、背光源結(jié)構(gòu)裝配在一起的組件。它的分辨率為12864,可顯示圖形或4行共32個(gè)1616點(diǎn)陣的漢字,并且內(nèi)置8192個(gè)1616點(diǎn)陣的漢字庫(kù)、128個(gè)字符、64256點(diǎn)陣的顯示RAM。12864M與單片機(jī)之間使用串行接口方式(PSB=0),RS(CS)為串行的片選信號(hào),R/W(SID)為串行數(shù)據(jù)口,E(CLK)為串行同步時(shí)鐘。
4、串行數(shù)據(jù)傳送一幀分三個(gè)字節(jié):串行控制指令、數(shù)據(jù)的高4位和數(shù)據(jù)的低4位。PWM是通過(guò)定時(shí)器T0,控制IO口輸出(shch)高電平的時(shí)間TH和低電平的時(shí)間TL,其占空比為T(mén)H/(TH+TL)。LED指示燈鏈接P2口,當(dāng)P2位口輸出低電平時(shí),指示燈電亮,用以指示速度檔。當(dāng)溫度超過(guò)警報(bào)溫度時(shí),P2反復(fù)(fnf)輸出高電平和低電平,指示燈閃爍報(bào)警。蜂鳴器接P17口,當(dāng)溫度超過(guò)警報(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簡(jiǎn)單I/O撥碼開(kāi)關(guān)LED燈蜂鳴器PWM功放器直流電機(jī)2、實(shí)驗(yàn)(shyn)連線:LCD液晶(yjng): CSP10 SIDP11 SCLKP12 PSBP13撥碼開(kāi)關(guān)(kigun):P0LED燈: P2蜂鳴器: P17PWM: P16溫度DS18B20: P35五、實(shí)驗(yàn)注意事項(xiàng)及總結(jié)在本系統(tǒng)的調(diào)試完善過(guò)程中,發(fā)現(xiàn)了不少的問(wè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的初始化過(guò)程中不能
6、有中斷出現(xiàn),而步進(jìn)電機(jī)是需要定時(shí)中斷來(lái)定時(shí)驅(qū)動(dòng)的,很難讓它們不互相影響,這也是在實(shí)驗(yàn)中為什么有時(shí)會(huì)出現(xiàn)溫度很大或?yàn)榱愕脑?。最好的解決方法就是不使用中斷。六、附錄實(shí)驗(yàn)程序/ 頭文件#include#include#include#include /*接線說(shuō)明*/* 液 晶: CSP10 SIDP11 SCLKP12 PSBP13 調(diào)速檔撥碼開(kāi)關(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; /溫度測(cè)量 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超過(guò)/ 蜂鳴器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ǔ)測(cè)量溫度值unsigned char Temp_Value=
9、0 x00,0 x00; / 延時(shí) void delay(unsigned char i)while(i-); / 溫度測(cè)量模塊/ 初始化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; / 寫(xiě)字節(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ù)溫度f(wàn)lag = 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);/ 判斷溫度是否超過(guò)警報(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串行寫(xiě)入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):寫(xiě)一個(gè)字節(jié)的數(shù)據(jù)到12864液晶(y
15、jng),包括指令和數(shù)據(jù) /說(shuō) 明:RW=1,從液晶(yjng)讀數(shù)據(jù)到MCU;RW=0,寫(xiě)一個(gè)數(shù)據(jù)到液晶; / (一般RW都設(shè)為0,即只向液晶寫(xiě)數(shù)據(jù),不讀數(shù)據(jù)) / RS=1,寫(xiě)入的是數(shù)據(jù);RS=0,寫(xiě)入的是指令; / 一般模式:RW=0,RS=1;寫(xiě)數(shù)據(jù) / RW=0,RS=0;寫(xiě)指令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; / 向液晶屏寫(xiě)入字符串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); /寫(xiě)指令 delay(2); cmd=0 x01; /清除顯示 W
18、_1byte(0,0,cmd); /寫(xiě)指令 delay(2); cmd=0 x02; /地址歸位W_1byte(0,0,cmd); /寫(xiě)指令 delay(2); cmd=0 x80; /設(shè)置DDRAM地址 W_1byte(0,0,cmd); /寫(xiě)指令 delay(2); /延時(shí) / LCD初始化void init_LCD() /SP = 0X60;/* 指針地址 CS = 0; SCLK = 0; SID = 0; PSB=0; LCD_init(); / 將一、二行字符串寫(xiě)入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; /開(kāi)發(fā)中斷,可到中斷程序執(zhí)行/ET1=1;TL0=timeH;TH0=timeL; /時(shí)間=(216-TH*28-TL)*1usTR0=1; /開(kāi)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,廈門(mén)大學(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) /沒(méi)有警報(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)四史考試題型及答案
- 客房文員培訓(xùn)課件內(nèi)容
- 美術(shù)關(guān)于體積的課件設(shè)計(jì)
- 車間安全隱患排查表
- 天然氣安全知識(shí)培訓(xùn)
- 安全生產(chǎn)管理人員證書(shū)考試
- 生產(chǎn)管理心得體會(huì)
- 黃石市東方山旅游公路改建工程監(jiān)理大綱
- 2025至2030中國(guó)旋轉(zhuǎn)變壓器行業(yè)發(fā)展分析及產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)氨酚偽麻那敏片行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 肝硬化門(mén)靜脈高壓癥食管、胃底靜脈曲張破裂出血診治專家共識(shí)(2025版)解讀
- 企業(yè)管理-某公司虛擬股份管理暫行辦法
- 青少年心理健康發(fā)展調(diào)研報(bào)告
- 交警交通安全培訓(xùn)
- 現(xiàn)場(chǎng)管理四大指標(biāo):安全、品質(zhì)、成本、交期
- 新企業(yè)節(jié)能減排月工作計(jì)劃
- 密閉空間環(huán)氧樹(shù)脂防腐施工方案
- 董事長(zhǎng)給應(yīng)屆生培訓(xùn)
- 2025年湖北省技能高考(計(jì)算機(jī)類)專業(yè)知識(shí)考試題(附答案)
- 酒吧裝修施工方案
- 初中生田徑隊(duì)訓(xùn)練計(jì)劃
評(píng)論
0/150
提交評(píng)論