




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 基于51單片機(jī)溫度自保護(hù)的直流電機(jī)控制系統(tǒng)一、實(shí)驗(yàn)?zāi)康?了解直流電機(jī)控制的基本方法。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)串行口、并行口、定時器/計(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ī)、PWM電壓功放器、LED指示燈等。
2、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)通過利用定時器T0,控制IO口輸出高電平和低電平的時間,產(chǎn)生PWM方波來控制直流電機(jī)轉(zhuǎn)速。通過DS18B20溫度測控讀取當(dāng)前溫度,如果在電機(jī)運(yùn)轉(zhuǎn)過程中,溫度超過警報(bào)溫度,則電機(jī)停止旋轉(zhuǎn)。下面簡要的介紹下本系統(tǒng)的各個模塊:DS18B20是DALLAS生產(chǎn)的一線制串行接口數(shù)字式溫度計(jì)。它
3、的溫度測量范圍是-55C125C,-10C85C內(nèi)誤差為正負(fù)0.5C;912位轉(zhuǎn)換精度,轉(zhuǎn)換時間100ms750ms,通常為500ms。本系統(tǒng)利用DS18B20對電機(jī)溫度進(jìn)行實(shí)時的模擬檢測采集。LCD12864M是將液晶顯示器件、連接件、集成電路、背光源結(jié)構(gòu)裝配在一起的組件。它的分辨率為12864,可顯示圖形或4行共32個1616點(diǎn)陣的漢字,并且內(nèi)置8192個1616點(diǎn)陣的漢字庫、128個字符、64256點(diǎn)陣的顯示RAM。12864M與單片機(jī)之間使用串行接口方式(PSB=0),RS(CS)為串行的片選信號,R/W(SID)為串行數(shù)據(jù)口,E(CLK)為串行同步時鐘。串行數(shù)據(jù)傳送一幀分三個字節(jié):串
4、行控制指令、數(shù)據(jù)的高4位和數(shù)據(jù)的低4位。PWM是通過定時器T0,控制IO口輸出高電平的時間TH和低電平的時間TL,其占空比為TH/(TH+TL)。LED指示燈鏈接P2口,當(dāng)P2位口輸出低電平時,指示燈電亮,用以指示速度檔。當(dāng)溫度超過警報(bào)溫度時,P2反復(fù)輸出高電平和低電平,指示燈閃爍報(bào)警。蜂鳴器接P17口,當(dāng)溫度超過警報(bào)溫度時,P17輸出低電平,蜂鳴器警報(bào)。三、實(shí)驗(yàn)設(shè)備和軟件平臺硬件:實(shí)驗(yàn)箱(一臺)、示波器(一臺)、單片機(jī)仿真器(一臺)、連接線(若干)軟件:星研集成環(huán)境軟件四、實(shí)驗(yàn)各模塊連接結(jié)構(gòu)1、系統(tǒng)的總體框架圖:80C5180C51LCD顯示溫度DS18B20簡單I/O撥碼開關(guān)LED燈蜂鳴器
5、PWM功放器直流電機(jī)2、實(shí)驗(yàn)連線:LCD液晶: CSP10 SIDP11 SCLKP12 PSBP13撥碼開關(guān):P0LED燈: P2蜂鳴器: P17PWM: P16溫度DS18B20: P35五、實(shí)驗(yàn)注意事項(xiàng)及總結(jié)在本系統(tǒng)的調(diào)試完善過程中,發(fā)現(xiàn)了不少的問題,主要有:1、在調(diào)試時,要把P2調(diào)為I/O模式。2、晶振要設(shè)置為12MHZ。3、不要帶電操作實(shí)驗(yàn)箱。4、不能存太多全局變量,會使51單片機(jī)內(nèi)部RAM不夠,導(dǎo)致地址溢出,程序出錯。5、各種芯片初始化要十分注意,特別是溫度DS18B20的初始化過程中不能有中斷出現(xiàn),而步進(jìn)電機(jī)是需要定時中斷來定時驅(qū)動的,很難讓它們不互相影響,這也是在實(shí)驗(yàn)中為什么有
6、時會出現(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ù)聲明void LCDString(unsigned char *pStr);void W_1byte(unsigned char RW, unsigned char RS, unsi
7、gned char W_data) ;void Alarm(void);/ 警報(bào)溫度大小定義#define TEMPERATURE_ALARM 21.0/ 液晶接口 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 timeH=0 x3c,timeL=0 xb0;unsigned int flag0; /PWM標(biāo)志位unsigned int flag1
8、; /溫度警報(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;/ 存儲測量溫度值unsigned char Temp_Value=0 x00,0 x00; / 延時 void delay(unsigned char i)while(i-); / 溫度測量模塊/
9、初始化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é)unsigned char ReadOneByte() unsigned char i,dat = 0;DQ = 1;_nop_();for(i = 0;i = 1; DQ = 1;_nop_();_nop_();if(DQ) dat |= 0 x80;delay(30);DQ = 1
10、; return dat; / 寫字節(jié)void WriteOneByte(unsigned char dat) unsigned char i;for(i = 0;i = 1; / 讀取溫度值void Read_Temperature() if(Init_DS18B20() != 1); WriteOneByte(0 xcc);WriteOneByte(0 x44); Init_DS18B20(); delay(100);WriteOneByte(0 xcc);WriteOneByte(0 xbe);Temp_Value0 = ReadOneByte();Temp_Value1 = ReadO
11、neByte(); / 溫度值顯示及警報(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 & 0 xF0) 0) /判斷是否為負(fù)溫度flag = 1;elseflag = 0;if(flag) /如果為負(fù)溫度取反加1temp = (uint)msb 8)
12、| lsb;temp = temp + 1;msb = temp / 256;lsb = temp % 256;t1 = msb 4); / t1為溫度值的整數(shù)部分t2 = (lsb & 0 x0F) * 0.0625 + t1;T=t1;/ 液晶顯示當(dāng)前溫度值sprintf(DisplayBuf, 電機(jī)溫度: %2.1f0, t2);W_1byte(0,0,0 x88); LCDString(DisplayBuf);/ 判斷溫度是否超過警報(bào)值if(t2 = TEMPERATURE_ALARM)Alarm(); / 警報(bào)函數(shù)flag1=1;else flag1=0;/ 溫度正常情況操作,液晶顯
13、示,電機(jī)轉(zhuǎn)動,蜂鳴器關(guān)閉sprintf(NotAlarmBuf,設(shè)定占空比:%2.0f%,radio);W_1byte(0,0,0 x98);LCDString(NotAlarmBuf);Beeper=1;/ LCD液晶顯示/函數(shù)作用:負(fù)責(zé)向SID串行寫入8個bit位 void Write_8bits(unsigned int W_bits) unsigned int i; unsigned int Temp_data;for(i = 0; i 8; i+) Temp_data = W_bits;Temp_data = i;if(Temp_data & 0 x80) = 0) /bit7 is
14、 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ù)作用:寫一個字節(jié)的數(shù)據(jù)到12864液晶,包括指令和數(shù)據(jù) /說 明:RW=1,從液晶讀數(shù)據(jù)到MCU;RW=0,寫一個數(shù)據(jù)到液晶; / (一般RW都設(shè)為0,即只向液晶寫數(shù)據(jù),不讀數(shù)據(jù)) / RS=1,寫入的是數(shù)據(jù);RS=0,寫入的是指令; / 一般模式:RW=0,R
15、S=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 /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ù)
16、L_data = W_data; /xxxx0000格式L_data &= 0 x0f; /屏蔽高4位的數(shù)據(jù) L_data = 4; /xxxx0000格式 CS = 1; Write_8bits(S_ID); /發(fā)送S_ID Write_8bits(H_data); /發(fā)送H_data Write_8bits(L_data); /發(fā)送L_data CS = 0; / 向液晶屏寫入字符串void LCDString(unsigned char *pStr)for(; *pStr != 0; pStr+)W_1byte(0,1, *pStr); / LCD初始化void LCD_init(voi
17、d) 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_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); /延時
18、/ 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 x80); _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); /
19、 LCD顯示void DisplayLcd()LCD_mess_display(); delay(100); / LCD顯示溫度 void ShowTemperature() Read_Temperature(); Display_Temperature(); / 溫度警報(bào)void 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定時
20、,T1計(jì)數(shù)*void Time_Init()TMOD=0 x51; /工作方式2EA=1; /使能ET0=1; /開發(fā)中斷,可到中斷程序執(zhí)行/ET1=1;TL0=timeH;TH0=timeL; /時間=(216-TH*28-TL)*1usTR0=1; /開TO定時flag0=1; /TH1=0 xff;TL1=0 xff; /1ms中斷/TR1=1;/ 主函數(shù)main() unsigned int i;/LED_GREEN = 0; Time_Init(); /定時器計(jì)數(shù)器初始化init_LCD(); /*輸出作品信息*/*sprintf(biaoti1,廈門大學(xué)自動化系); W_1byte
21、(0,0,0 x80); LCDString(biaoti1);sprintf(biaoti2,陳福feng); W_1byte(0,0,0 x90); LCDString(biaoti2);sprintf(biaoti3,23220131153339); 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(); /顯示前兩行while(1) if(fla
22、g1=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=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;br
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 書銷售返利合同范本
- 2025年武威貨車上崗證理論模擬考試題庫
- 臨街門面房轉(zhuǎn)讓合同范本
- 全款分期購房合同范本
- 公路施工單價合同范本
- 出售鐵皮房子合同范本
- 分銷平移合同范本
- 債券托管合同范本
- 修建電動車車棚合同范本
- 物流園遮雨棚安裝施工方案
- 含新能源發(fā)電接入的電力系統(tǒng)低頻振蕩阻尼控制研究綜述
- 財(cái)務(wù)管理學(xué)(第10版)課件 第3章 財(cái)務(wù)分析
- NB-T32019-2013太陽能游泳池加熱系統(tǒng)技術(shù)規(guī)范
- 道閘施工方案
- 寺廟佛事活動方案設(shè)計(jì)
- 湘教版高中地理必修2全冊導(dǎo)學(xué)案
- 2024年時事政治熱點(diǎn)題庫200道含完整答案(必刷)
- 醫(yī)療器械市場部年終總結(jié)
- 4M變更管理培訓(xùn)
- 2024年岳陽職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 婦產(chǎn)科醫(yī)療質(zhì)控月匯報(bào)
評論
0/150
提交評論