基于單片機(jī)的散熱器設(shè)計(jì).doc_第1頁
基于單片機(jī)的散熱器設(shè)計(jì).doc_第2頁
基于單片機(jī)的散熱器設(shè)計(jì).doc_第3頁
基于單片機(jī)的散熱器設(shè)計(jì).doc_第4頁
基于單片機(jī)的散熱器設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)應(yīng)用系統(tǒng)專題設(shè)計(jì)說明書設(shè)計(jì)題目: 基于51單片機(jī)簡(jiǎn)易散熱器 設(shè)計(jì)者姓名: 宋曉彤 學(xué)號(hào): 20110621 同組成員:(姓名學(xué)號(hào)):1. 王 鑫20110631 2. 謝慧龍20110632 自動(dòng)化學(xué)院2014年11月16日一、系統(tǒng)設(shè)計(jì)小組工作分工序號(hào)成員工作分工1宋曉彤負(fù)責(zé)軟件系統(tǒng)設(shè)計(jì)和硬件選型2王鑫整體框架電路設(shè)計(jì)、焊接3謝慧龍負(fù)責(zé)系統(tǒng)整體調(diào)試和說明書制作二系統(tǒng)設(shè)計(jì)目標(biāo)本設(shè)計(jì)系統(tǒng)選用單片機(jī)STC89C52為主控機(jī)。外圍驅(qū)動(dòng)電路電路包括:數(shù)碼管顯示電路、電機(jī)驅(qū)動(dòng)電路、溫度采集電路。設(shè)計(jì)的是簡(jiǎn)單的散熱器,可以進(jìn)行溫度實(shí)時(shí)采集,并且在數(shù)碼管上顯示;并且當(dāng)溫度到達(dá)動(dòng)作溫度時(shí)驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)進(jìn)行散熱。散熱器作為單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)課題有很大的應(yīng)用價(jià)值。1. 可實(shí)現(xiàn)溫度實(shí)時(shí)測(cè)量和顯示;2. 可以自己根據(jù)需要設(shè)定動(dòng)作溫度;3. 可實(shí)現(xiàn)高溫時(shí)自動(dòng)啟動(dòng)電機(jī)散熱;三系統(tǒng)方案設(shè)計(jì)1程序設(shè)計(jì)及調(diào)試根據(jù)課程設(shè)計(jì)內(nèi)容和要求,溫度傳感器采用DS18B20將溫度信號(hào)傳給STC89C52進(jìn)行處理,之后送給138譯碼器進(jìn)行譯碼,將譯碼結(jié)果送給共陰極數(shù)碼管顯示。并且同時(shí)檢測(cè)溫度值是否達(dá)到動(dòng)作溫度,散熱風(fēng)扇由直流電動(dòng)機(jī)帶動(dòng),達(dá)到動(dòng)作溫度時(shí)單片機(jī)給ULN2003發(fā)送信號(hào)驅(qū)動(dòng)電機(jī)轉(zhuǎn)動(dòng)。 在Protues中進(jìn)行電路的設(shè)計(jì),用Keil軟件編寫散熱器程序,并進(jìn)行仿真模擬調(diào)試。2硬件焊接及調(diào)試根據(jù)仿真電路圖完成電路板的焊接,并且進(jìn)行程序的燒寫和調(diào)試,達(dá)到預(yù)期效果。3. 單片機(jī)系統(tǒng)方框圖譯碼位選電路數(shù)碼管顯示電路52單片機(jī)系統(tǒng)DS18B20溫度采集電路電機(jī)驅(qū)動(dòng)電路 晶振電路4. 器件選擇根據(jù)系統(tǒng)的設(shè)計(jì)目標(biāo),我們采用STC89C52芯片作為主控芯片。顯示使用共陰極數(shù)碼管,并且使用138譯碼器進(jìn)行譯碼位選。溫度采集我們使用DS18B20,因?yàn)樗且环N直接將其溫度信號(hào)轉(zhuǎn)變?yōu)閿?shù)字信號(hào)的溫度傳感器,不用使用A/D轉(zhuǎn)換電路,使用方便電路簡(jiǎn)單。我們還是用ULN2003A芯片實(shí)現(xiàn)直流電動(dòng)機(jī)的驅(qū)動(dòng),因?yàn)閁NL2003A的工作電壓為5V,在輸入為高電平時(shí)可以實(shí)現(xiàn)最大輸出電流500mA的電流輸出驅(qū)動(dòng)直流電機(jī)轉(zhuǎn)動(dòng)。另外晶振電路采用30pf電容兩個(gè),12M晶振一個(gè),數(shù)碼管上拉電阻采用200電阻八個(gè),電機(jī)限流電阻51一個(gè)。主要器件介紹:(1) DS18B20溫度傳感器DS18B20數(shù)字溫度計(jì)提供9位溫讀數(shù),指示器件溫度。信息經(jīng)過單線接口送入DS18B20或送出,因此從DS18B20到中央處理器僅需連接一條,讀、寫和完成溫度轉(zhuǎn)換的電源可由數(shù)據(jù)線本身提供,而不需要外部電源。右圖為引腳圖引腳說明:GND 地 DQ 數(shù)字輸入輸出 VDD 可選的VDD NC 空引腳 DNC 不連接 (2)74LS138譯碼器74LS138的管腳排列和真值表見下圖。由真值表可知,4、5、6腳是控制腳,只有當(dāng)6腳為高電平而4、5腳都為低電平時(shí),74LS138才對(duì)1、2、3腳的輸入進(jìn)行譯碼,選擇和從這三個(gè)管腳輸入的三位二進(jìn)制碼相對(duì)應(yīng)的某一個(gè)輸出腳輸出低電平,否則所有的輸出腳都是輸出高電平。引腳及真值表如下。(3)ULN2003A電機(jī)驅(qū)動(dòng)芯片ULN2003A是一個(gè)7路反向器電路,即當(dāng)輸入端為高電平時(shí)ULN2003A輸出端為低電平,當(dāng)輸入端為低電平時(shí)ULN2003A輸出端為高電平。也可以作為一些器件,如步進(jìn)電機(jī)的驅(qū)動(dòng)電路。如右圖所示。4 硬件電路設(shè)計(jì)及描述1. 晶振電路采用的是12M晶振,如圖1所示。 圖1 2.數(shù)碼管顯示電路數(shù)碼管的八位數(shù)據(jù)接口與單片機(jī)的P0口相連。中間加200的上拉電阻連接如圖2。數(shù)碼管的位選接口與138譯碼器的輸出端Y2,Y3連接如圖3所示。74LS138譯碼器的A B C三端分別與P2.2、P2.3、P2.4相連,E1接高電平,E2 E3同接高低電平 圖2圖3 3. DS18B20溫度傳感器電路連接 DS18B20的數(shù)據(jù)接口與單片機(jī)的P3.7相連,VCC接5V電源,GND接地。如圖4所示。 圖44. UNL2003A電機(jī)驅(qū)動(dòng)電路 如圖6所示。UNL2003A的輸入端1B接單片機(jī)的P2.6,COM端接VCC。輸出端1C接直流電動(dòng)機(jī)的一端。電動(dòng)機(jī)的另一端接電源。圖65 軟件設(shè)計(jì)及描述1、 軟件設(shè)計(jì)流程程序首先進(jìn)行初始化,對(duì)DS18B20溫度傳感器進(jìn)行初始化然后進(jìn)行溫度讀取,并通過端口P3.7將數(shù)據(jù)送給單片機(jī)進(jìn)行處理。對(duì)溫度值分別取十位和個(gè)位,通過P0口將十位和個(gè)位輪流送給數(shù)碼管數(shù)據(jù)端。同時(shí)單片機(jī)的P2.2,P2.3,P2.4與138譯碼器連接通過譯碼進(jìn)行數(shù)碼管的位選,實(shí)現(xiàn)溫度顯示。單片機(jī)通過溫度值與動(dòng)作溫度比較,當(dāng)溫度高與動(dòng)作溫度時(shí)通過單片機(jī)的P2.6給UNL2003A發(fā)送信號(hào)實(shí)現(xiàn)直流電動(dòng)機(jī)的驅(qū)動(dòng)。從而達(dá)到溫度的顯示和高溫自動(dòng)散熱的效果。2、系統(tǒng)總流程圖3、 源程序代碼#include #include sbit D18B20=P37;#define NOP() _nop_() /* 定義空指令 */#define _Nop() _nop_() /*定義空指令*/void WriteByte (unsigned char idata wr); /單字節(jié)寫入void read_bytes (unsigned char idata j);unsigned char CRC (unsigned char j);void GetTemp (void);void Config18b20 (void);void ReadID (void);void TemperatuerResult(void);bit flag;unsigned int idata Temperature;unsigned char idata temp_buff9; /存儲(chǔ)讀取的字節(jié),read scratchpad為9字節(jié),read rom ID為8字節(jié)unsigned char idata id_buff8;unsigned char idata *p,TIM;unsigned char idata crc_data;/*extern GetTemp(); /聲明引用外部函數(shù)extern unsigned int idata Temperature; / 聲明引用外部變量 */void delay(unsigned int i);/else IOsbit LS138A=P22; /管腳定義sbit LS138B=P23;sbit LS138C=P24; sbit pwm=P27;/此表為 LED 的字模, 共陰數(shù)碼管 0-9 - unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; unsigned char code CrcTable 256=0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53; unsigned long LedOut5,LedNumVal;void PWM(void);void system_Ini() TMOD|= 0x11; TH1 = 0xD8; /10 TL1 = 0xF0;IE = 0x8A; TR1 = 1;main() unsigned char i; system_Ini(); while(1) GetTemp(); /*以下將讀18b20的數(shù)據(jù)送到LED數(shù)碼管顯示*/ LedNumVal=Temperature; /把實(shí)際溫度送到LedNumVal變量中 LedOut0=Disp_TabLedNumVal%10000/1000; LedOut1=Disp_TabLedNumVal%1000/100; LedOut2=Disp_TabLedNumVal%100/10; /十位 LedOut3=Disp_TabLedNumVal%10; /個(gè)位 switch(i) /138譯碼case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; if(LedNumVal25)pwm=1;elsepwm=0;delay(40); P0 = 0; /延時(shí)程序void delay(unsigned int i) char j; for(i; i 0; i-) for(j = 200; j 0; j-);void TempDelay (unsigned char idata us)while(us-);/*Function:18B20初始化*parameter:*Return:*Modify:*/void Init18b20 (void)D18B20=1;_nop_();D18B20=0;TempDelay(80); /delay 530 uS/80_nop_();D18B20=1;TempDelay(14); /delay 100 uS/14_nop_();_nop_();_nop_();if(D18B20=0)flag = 1; /detect 1820 success!elseflag = 0; /detect 1820 fail!TempDelay(20); /20_nop_();_nop_();D18B20 = 1;/*Function:向18B20寫入一個(gè)字節(jié)*parameter:*Return:*Modify:*/void WriteByte (unsigned char idata wr) /單字節(jié)寫入unsigned char idata i;for (i=0;i= 1;/*Function:讀18B20的一個(gè)字節(jié)*parameter:*Return:*Modify:*/unsigned char ReadByte (void) /讀取單字節(jié)unsigned char idata i,u=0;for(i=0;i= 1;D18B20 = 1;if(D18B20=1)u |= 0x80;TempDelay (2);_nop_();return(u);/*Function:讀18B20*parameter:*Return:*Modify:*/void read_bytes (unsigned char idata j) unsigned char idata i; for(i=0;ij;i+) *p = ReadByte(); p+; /*Function:CRC校驗(yàn)*parameter:*Return:*Modify:*/unsigned char CRC (unsigned char j) unsigned char idata i,crc_data=0; for(i=0;ij;i+) /查表校驗(yàn) crc_data = CrcTablecrc_datatemp_buffi; return (crc_data);/*Function:讀取溫度*parameter:*Return:*Modify:*/void GemTemp (void) read_bytes (9); if (CRC(9)=0) /校驗(yàn)正確 Temperature = temp_buff1*0x100 + temp_buff0;/ Temperature *= 0.625;Temperature /= 16;TempDelay(1); /*Function:內(nèi)部配置*parameter:*Return:*Modify:*/void Config18b20 (void) /重新配置報(bào)警限定值和分辨率 Init18b20(); WriteByte(0xcc); /skip rom WriteByte(0x4e); /write scratchpad WriteByte(0x19); /上限 WriteByte(0x1a); /下限 WriteByte(0x7f); /set 12 bit (0.125) Init18b20(); WriteByte(0xcc); /skip rom WriteByte(0x48); /保存設(shè)定值 Init18b20(); WriteByte(0xcc); /skip rom WriteByte(0xb8); /回調(diào)設(shè)定值/*Function:讀18B20ID*parameter:*Return:*Modify:*/void ReadID (void)/讀取器件 idInit18b20();WriteByte(0x33); /read romread_bytes(8);/*Function:18B20ID全處理*parameter:*Return:*Modify:*/void TemperatuerResult(void) p = id_buff; ReadID(); Config18b20();Init18b20 ();WriteByte(0xcc); /skip romWriteByte(0x44); /Temperature convertInit18b20 ();WriteByte(0xcc); /skip romWriteByte(0xbe); /read Temperaturep = temp_buff;GemTemp();void GetTemp() if(TIM=100) /每隔 1000ms 讀取溫度 TIM=0; TemperatuerResult();/* t1 (10ms)中斷 中斷*/void T1zd(void) interrupt 3 TH1 = 0xD8; /10 TL1 = 0xF0; TIM+;六設(shè)計(jì)調(diào)試過程及結(jié)果1. 電腦上仿真調(diào)試?yán)肒eil編寫主程序,通過編譯生成hex文件,再通過Protues對(duì)程序進(jìn)行仿真,得到所預(yù)期的結(jié)果如圖7所示。 圖7 Keil軟件編譯在Protues上仿真調(diào)試計(jì)算的效果圖如下所示2. 實(shí)物調(diào)試將hex文件燒寫進(jìn)51單片機(jī)里,得到所預(yù)期結(jié)果,如圖11所示。七系統(tǒng)設(shè)計(jì)體會(huì)1、 遇到的問題及解決方案:(1) 在進(jìn)行實(shí)物調(diào)試時(shí),當(dāng)溫度到達(dá)動(dòng)作溫度時(shí)電動(dòng)機(jī)只轉(zhuǎn)動(dòng)一下,不能持續(xù)轉(zhuǎn)動(dòng)。通過查閱資料和多次試驗(yàn)發(fā)現(xiàn),在電動(dòng)機(jī)兩端并聯(lián)一個(gè)電容可以解決這個(gè)問題,電容可以通交流隔直流的作用,把電動(dòng)機(jī)旋轉(zhuǎn)時(shí)產(chǎn)生的交流回饋電流在電容中消耗使它不會(huì)影響到其它電路,使電動(dòng)機(jī)能持續(xù)獲得電流轉(zhuǎn)動(dòng)。(2) 在實(shí)際溫度顯示電路中開始時(shí)數(shù)碼管不能明顯顯示,亮度很低。經(jīng)過試驗(yàn)我們將10k的上拉電阻改為200的電阻,數(shù)碼管顯示亮度明顯提高得到解決。2、 收獲與體會(huì)宋曉彤:通過這次課程設(shè)計(jì)我學(xué)到了很多有關(guān)單片機(jī)的知識(shí),并且將書中的知識(shí)通過實(shí)踐也發(fā)現(xiàn)了很多細(xì)節(jié)上的東西,例如在電動(dòng)機(jī)兩端并聯(lián)一個(gè)大小適合的電容可以消

溫馨提示

  • 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)論