設計題目: 溫度計
學 號:10291217
姓 名:
同 組 人:
指導教師:
設計時間:
設計地點:電氣學院實驗中心
姓 名 | 學 號 | ||
課程設計題目: | |||
課程設計答辯或提問記錄: | |||
成績評定依據: 課程設計預習報告及方案設計情況(20%): 課程設計考勤情況(5%): 電路焊接情況(15%) 課程設計調試情況(40%): 課程設計總結報告與答辯情況(20%): | |||
最終評定成績(以優、良、中、及格、不及格評定) |
序 號 | 內 容 | 學時安排(天) |
1 | 方案論證和系統設計 | 1 |
2 | 完成電路仿真,寫預習報告 | 2 |
3 | 電路調試 | 2 |
4 | 寫設計總結報告與答辯 | 1 |
合 計 | 6 | |
設計調試地點:電氣樓410 |
第一章 系統方案設計·····································1
第二章 仿真·············································9
第三章 調試··············································11
第四章 結論·············································17
第五章 心得體會與建議···································18
第一章 系統方案設計
總體設計思路:
一、利用AD590采集溫度信號
1.AD590介紹
(1) 流過器件的電流(μA) 等于器件所處環境的熱力學溫度(開爾文) 度數:
Ir/T=1 (1)
式中,Ir—流過器件(AD590) 的電流,單位為μA;T—熱力學溫度,單位為K;
(2) AD590的測溫范圍為- 55℃~+150℃;
(3) AD590的電源電壓范圍為4~30 V,可以承受44 V正向電壓和20 V反向電壓,因而器件即使反接也不會被損壞;
(4) 輸出電阻為710 mΩ;
(5) 精度高,AD590在- 55℃~+-150℃范圍內,非線性誤差僅為±0.3℃。
(6)AD590管腳圖及元件符號
2.溫度信號的采集
AD590相當于一個溫度控制的恒流源,輸出電流大小只與溫度有關,且與溫度成正比。只需一個精密電阻,就可以將電流(溫度)信號轉化為電壓信號,總的靈敏度系數通過該電阻設定。AD590的溫度系數是1μA/K,即溫度每增加1K,它會增加1μA輸出電流。其輸出電流是以絕對溫度零度-273℃為基準,每增加1℃,它會增加1μA輸出電流,因此 0℃到100℃時AD590輸出電流為273μA到373μA。
本實驗中,因為AD590的靈敏度為
攝氏溫度/℃ | AD590電流/μA | 經10KΩ電壓/V |
0 | 273.2 | 2.732 |
10 | 283.2 | 2.832 |
20 | 293.2 | 2.932 |
30 | 303.2 | 3.032 |
40 | 313.2 | 3.132 |
50 | 323.2 | 3.232 |
60 | 333.2 | 3.332 |
100 | 373.2 | 3.732 |
二、通過AD0832實現模擬信號轉化為數字信號
1.AD0832介紹
CS———片選端,低電平有效。
CH0,CH1———兩路模擬信號輸入端。
D I———兩路模擬輸入選擇輸入端。
DO———模數轉換結果串行輸出端。
CLK———串行時鐘輸入端。
VCC/REF———正電源端和基準電壓輸入端。
GND———電源地
ADC0832 為8位分辨率A/D轉換芯片,其最高分辨可達256級,可以適應一般的模擬量轉換要求。其內部電源輸入與參考電壓的復用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉換時間僅為32μS,據有雙數據輸出可作為數據校驗,以減少數據誤差,轉換速度快且穩定性能強。獨立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數據輸入端,可以輕易的實現通道功能的選擇。
2.實現模數轉換的方法
正常情況下ADC0832 與單片機的接口應為4條數據線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時并未同時有效并與單片機的接口是雙向的,所以電路設計時可以將DO和DI 并聯在一根數據線上使用。當ADC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK 和DO/DI 的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK 輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數據信號。在第1 個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2 位數據用于選擇通道功能
當CS由高變低時,選中ADC0832。在時鐘的上升沿,DI端的數據移入ADC0832內部的多路地址移位寄存器。在第一個時鐘期間, DI為高, 表示啟動位,緊接著輸入兩位配置位。當輸入啟動位和配置位后,選通輸入模擬通道,轉換開始。轉換開始后,經過一個時鐘周期延遲, 以使選定的通道穩定。ADC 0832 接著在第4個時鐘下降沿輸出轉換數據。數據輸出時先輸出最高位(D7~D0) ;輸出完轉換結果后,又以最低位開始重新輸出一遍數據(D7 ~D0) ,兩次發送的最低位共用。當片選CS為高時,內部所有寄存器清0,輸出變為高阻態。如果要再進行一次模/數轉換,片選CS必須再次從高向低跳變,后面再輸入啟動位和配置位。
本次實驗中我們使用CH1通道輸入模擬信號,因此實驗中控制ADC0832的時序圖如下:
三、通過AT89S52對數字信號作處理
1.AT89S52介紹
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3口也可作為AT89S52的一些特殊功能口,如下表所示:
口管腳 備選功能
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(記時器0外部輸入)
P3.5 T1(記時器1外部輸入)
P3.6 /WR(外部數據存儲器寫選通)
P3.7 /RD(外部數據存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
2. 數據處理:
題目要求為:溫度精度達到0.5度,測量范圍零下10度到零上100度。
我們需要三個LED,前兩個顯示溫度的整數部分,第三個顯示小數部分。
把得到的電壓電流信號輸入0832以后得到數字信號,即為要采樣接收的數據,根據要求,所測溫度為-10℃~100℃,則溫度每變化一攝氏度輸出電壓變化10mv,又根據0度時輸出電壓為2.73V得出電壓的變化范圍是2.63V-3.73V。這是采集到的數據為:
2.73*255/5=139
那么實際的溫度計算公式為:
(采集到的數據-139)*5*100/255
溫度為正時:高八位放在B中,除以10得到的商為十位數,余數為各位;低八位放在A中,除以10,商為第一位小數,余數為第二位小數。
溫度為負值:高八位的數小于10放在個位數字,十位數顯示符號,得到的低八位放在A中,除以10,商為第一位小數,余數為第二位小數。
由此就得到了所要顯示的溫度。
四、通過數碼管顯示電路顯示溫度
1. 74HC245介紹
74HC245總線驅動器,典型的TTL型三態緩沖門電路,其作用為,信號功率放大。74HC245管腳圖:
74HC245引腳定義:
第1腳DIR,為輸入輸出端口轉換用,DIR=“1”高電平時信號由“A”端輸入“B”端輸出,DIR=“0”低電平時信號由“B”端輸入“A”端輸出。
第2-9腳“A”信號輸入輸出端,A1=B1……A8=B8,A1與B1是一組,如果DIR=“1”OE=“0”則A1輸入B1輸出,其它類同。如果DIR=“0”OE=“0”則B1輸入A1輸出,其它類同。 第11~18腳“B”信號輸入輸出端,功能與“A”端一樣。
第19腳OE為使能端,若該腳為“1”A/B端的信號將不導通,只有為“0”時A/B端才被啟用,該腳也就是起到開關的作用。
第10腳GND,電源地;第20腳VCC,電源正極。
實驗過程中我們使用的為從“A”到“B”傳輸數據。
2.四位七段數碼管
四位七段數碼管原理圖如上所示,焊接電路時要格外注意各個管腳的位置。
第二章 仿真
在了解了溫度計的具體工作流程之后,編程的問題主要集中在將AD0832轉換后的數字信號顯示到零下10度到零上100度,溫度精度達到0.5度。我們將
第一個LED的字形地址偏移量放在40H,將40H送入P0.5;
第二個LED的字形地址偏移量放在41H,將41H送入P0.4;
第三個LED的字形地址偏移量放在42H,將42H送入P0.3;
由此得到的整體流程框架為:
初始化AD采樣八位數據數據轉化溫度顯示循環AD采樣……
具體程序:
LED1 EQU 40H ;第一個LED的字形地址偏移量放在40H
LED2 EQU 41H ;第一個LED的字形地址偏移量放在41H
LED3 EQU 42H ;第一個LED的字形地址偏移量放在42H
ADC0832DI BIT P3.0 ;偽指令
ADC0832DO BIT P3.1
ADC0832CLK BIT P3.2
ADC0832CS BIT P3.3
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV P0,#00H
MOV P2,#00H
MOV B, #00H
HERE: LCALL ADCON;調用AD轉換程序
LCALL BCDCON ;調用數值轉換程序
LCALL DISPLAY ;調用顯示程序
LJMP HERE
ADCON:
SETB ADC0832DI ;初始化通道選擇
NOP
NOP
CLR ADC0832CS ;拉低/CS端
NOP
NOP
SETB ADC0832CLK ;拉高CLK端
NOP
NOP
CLR ADC0832CLK ;拉低CLK端,形成下降沿
SETB ADC0832DI
NOP
NOP
SETB ADC0832CLK ;拉高CLK端
NOP
NOP
CLR ADC0832CLK ;拉低CLK端,形成下降沿2
CLR ADC0832DI ;1-0選擇0通道
NOP
NOP
SETB ADC0832CLK ;拉高CLK端
NOP
NOP
CLR ADC0832CLK ;拉低CLK端,形成下降沿3
SETB ADC0832DI
NOP
NOP
MOV R7,#8 ;準備送下后8個時鐘脈沖
AD1:
MOV C,ADC0832DO ;接收數據
MOV ACC.0,C
RL A ;左移一次
SETB ADC0832CLK
NOP
NOP
CLR ADC0832CLK ;形成一次時鐘脈沖
NOP
NOP
DJNZ R7,AD1 ;循環7次
MOV C,ADC0832DO
MOV ACC.0,C
SETB ADC0832CS ;拉高/CS端
CLR ADC0832CLK ;拉低CLK端
SETB ADC0832DO ;拉高數據端,回到初始狀態
MOV 30H,A ;數據放在30H
RET
BCDCON:CLR C
SUBB A,#10001011B ;與0攝氏度作判斷
JNC ABOVEZERO ;有借位往下執行,沒有借位跳轉ABOVEZERO
BELOWZERO:
MOV A,#10001011B
SUBB A,30H
ADD A,#01H
MOV B,#05H
MUL AB
MOV B,#64H
MUL AB
MOV R1,A
MOV A,B
MOV B,#0AH
DIV AB
MOV LED1,#0AH
MOV LED2,B
MOV A,R1
MOV B,#64H
MUL AB
MOV A,B
MOV B,#0AH
DIV AB
SJMP PP
MOV LED3,A
RET
ABOVEZERO:
MOV B,#05H
MUL AB
MOV B,#64H
MUL AB
MOV R1,A
MOV A,B
MOV B,#0AH
DIV AB
MOV LED1,A
MOV LED2,B
MOV A,R1
MOV B,#64H
MUL AB
MOV A,B
MOV B,#0AH
DIV AB
PP:CLR C
CJNE A,#05H,DE
DE: JC WE
MOV A,#00H
SJMP ZC
WE: MOV A,#5H
ZC:
CLR B
MOV LED3,A
MOV LED4,B
RET
DISPLAY: ;顯示子程序
SETB P0.2
SETB P0.3
SETB P0.4
SETB P0.5
MOV DPTR,#TAB
MOV A,40H
MOVC A,@A+DPTR ;查字形表
MOV P2,A ;P0口作字形
CLR P0.5
ACALL DELAY
SETB P0.5
MOV DPTR,#TAB
MOV A,41H
MOVC A,@A+DPTR ;查字形表
MOV P2,A
SETB P2.7
CLR P0.4
ACALL DELAY
SETB P0.4
MOV DPTR,#TAB
MOV A,42H
MOVC A,@A+DPTR ;查字形表
MOV P2,A
CLR P0.3
ACALL DELAY
SETB P0.3
RET
DELAY: MOV R7,#03H
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
RET
在仿真成功之后,我們依照原理圖進行了實際電路的焊接,前幾次完成焊接之后都沒有相應的結果顯示,在反復檢查之后我們確認了電路連接和焊點都是沒有任何問題的,所以我們確定問題出在了芯片上,于是我們依次更換了AD590、AD0832依然沒有解決問題。于是,我們最終將問題歸結于單片機上,在我們將AT89S52更換為SCT89C52之后,終于成功的顯示了程序。根據我們的分析,應該是在燒制程序的時候出了問題,很可能程序根本沒有燒進去。
另外的問題就是芯片欠缺的問題,在實驗室中我們缺少各種芯片,甚至連焊錫絲、導線都沒有,最終我們只有自己去購買,尤其是AD590,實驗室根本沒有這個元件,而我們自己購買的AD590在使用了幾次之后損壞掉了。所以最終的成品我們只能用滑動變阻器來代替它。
最終的成品可以通過改變滑動變阻器的阻值來改變顯示的溫度,溫度的精度在0.5攝氏度。
通過這次課程設計,我們從硬件層面上切實感受到了單片機的實用性,單片機使得原本死板的電路電子芯片有了組合的靈活性,將一個個功能固定的模塊整合到了一起形成了一個整體。由于一開始遲遲沒有得出仿真結果,我們在仿真成功之后便直接開始了電路板的焊接,焊接完畢之后卻調試了兩天都沒有出結果,不得已我們只有采購新的材料又使用面包板制作了一塊電路,并在成功之后又排查出了焊接電路的問題,從一個虛焊的焊點到沒有限流電阻導致的數碼管燒毀,我們感覺到從理論到實際確實不是一個簡單的過程,需要一步步始終保持嚴謹,就整個實驗過程來說,我們首先進行的是整個課設的開展設計,我們商量好首先將電路進行分析,然后去查閱資料了解每個芯片的功能進而了解整個電路的工作原理,然后在再進行仿真的設計及調試和運用匯編語言實現程序的編寫,在仿真電路調試完成后再將程序在硬件上進行調試。
童老師在第一次課設說明的時候讓我們對于課設沒有要求的部分發揮自己的創造性,我們一開始便查找了不少資料,加深了對adc0832和ad590的功能理解,但是由于遲遲沒有得出仿真結果,我們在仿真成功之后便直接開始了電路板的焊接,焊接完畢之后卻調試了兩天都沒有出結果,不得已我們只有采購新的材料又使用面包板制作了一塊電路,并在成功之后又排查出了焊接電路的問題,從一個虛焊的焊點到沒有限流電阻導致的數碼管燒毀,我們感覺到從理論到實際確實不是一個簡單的過程,需要一步步始終保持嚴謹,我還記得當數碼管上的數字用來代替ad90的滑阻以0.5的精度變化時心里興奮的感覺,從一開始涉及到的時候,對各芯片的工作原理都不盡了解到后來理清整個電路的設計思路和編程思想,真的認識只有實踐才能檢驗自己理論的扎實與否,同樣只有打下了扎實的知識基礎才有可能在實踐中有所成就,通過這次課設我真的認識到離真正的科研,真正的發明自己在專業知識上還差了太遠,但同樣也發現了自己身上原先欠缺的東西
在調試中,我們遇到了操作不慎把芯片燒毀的情況,也遇到過顯示不成功,出現閃爍的現象,也遇到了溫度偏差過大或者顯示不穩定的問題,但是我們經過不斷地調試和請教老師并且和同學進行討論,最后都將問題解決了,我覺得整個課設中最難的就是調試過程而且收獲最大的也是調試過程,是調試這個過程讓我們對單片機或者說匯編語言的工作原理進行深究并且把死的知識進行了靈活地運用,我覺得解決問題的能力的提高是我做這次課設最大的收獲。
從一開始涉及到的時候,對各芯片的工作原理都不盡了解到后來理清整個電路的設計思路和編程思想,真的認識只有實踐才能檢驗自己理論的扎實與否,同樣只有打下了扎實的知識基礎才有可能在實踐中有所成就。
[1]李維波,MATLAB在電氣工程中的應用,中國電力出版社,2007
[2]譚浩強,C程序設計,清華大學出版社,2010
[3]郭天祥,新概念51單片機C語言教程,電子工業出版社,2009
[4]康華光,電子技術基礎,高等教育出版社,2005
附錄1:元器件清單
AT89S52 | 1 |
AD590 | 1 |
AD0832 | 1 |
74HC245 | 2 |
四位七段數碼管 | 1 |
8腳排阻 | 2 |
晶振 | 1 |
運算放大器 | 1 |
二極管 | 2 |
電阻、電容 | 若干 |
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |