崑 山 科 技 大 學 電 機 工 程 系
資料擷取之無線系統:
溫度感測
指導老師: 蔡和昌 老師
製作學生: 林裕皓 4940J009
白裕全 4940J019
邱瀚相 4940J050
目錄
一、專題動機 二、專題簡介
三、需要之硬體及軟體 四、元件介紹
五、電路圖
六、8051 程式碼、VB 程式碼 七、成果展示
八、結論
專題動機
通訊技術發展可說是一日千里,從過去以傳送聲音為主的類比電
話系統一直發展到數位多媒體傳輸系統,從有線傳輸發展到無線傳輸!
我們的生活都跟溫度息息相關,這次研究動機是想說除了透過溫度計 外還有什麼辦法可以更精準的看溫度,所以我們這組就想說用無線傳 輸來做溫度感測,我們直接讓溫度顯示在螢幕上,這樣能比溫度計來 的更準確!
專題介紹
這次的專題主要是利用溫度感測元件 DS1821 及 27MHz RF 數據傳 輸模組所完成的溫度感測裝置
此外,我們將溫度感測裝置的輸出以 RS232 接埠連接至電腦,用 VB 程式將測量結果顯示於螢幕完成一套無線溫度感測系統以下是本 專題之方塊圖
無線溫度感測之方塊圖
為了完成上述之溫控系統功能,再發射端需要一個無線傳送模組來發 送溫度資料,溫度偵測與樣率則為每秒一次,可視實際狀況及偵測裝 置其特性,改變取樣率,再接收端則需要一個無線接收模組來接 收溫度資料,並將遺資料傳送給電腦端之監督程式,來做溫度資料收 集及危急處理。系統架構方塊圖如圖一所示。
圖一 溫控系統架構方塊圖
需要之硬體及軟體
硬體
電腦主機及螢幕 示波器
電源供應器 探棒
27MHZ FSK RF 數據傳輸模組 89C51 單晶片
MAX232 訊號電位轉換 IC DS1821 溫度感測 IC
軟體
Visual Basic 6.0 Professional
元件介紹
DS1821 溫度感測 IC
DS1821 圖示及接腳介紹
PIN 功能簡介
VDD 電力供應伏特數
+5V
DQ 數據的進出
GND 數位訊號接地
DS1821 優點
1.微型化、低功耗、高性能
2.工作於-55℃至+125℃之溫度之間。
3.抗干擾能力強、易配合微處理器
4.輸出為數位訊號,不用另外加上解碼晶片,使用上更為方便。
27MHz 數據傳輸模組
傳送端模組
1.RFO:傳送資料天線 2.VCC:正電源(5V) 3.CND:接地
4.DIN :資料輸入腳
5.ENB :接 HIGH 可傳送資料、接 LOW 停止傳送資料
接收端模組
1.Ant :接收資料天線 2.GND :接地
3.VCC :正電源(5V) 4.GND :接地
5.D/O :資料輸出腳
6.A/O :出廠測試用,不需接
本專題模組乃採用頻率移位鍵調變技術
FSK Modulation,主要是採用頻率變化來表示數位訊號由於數位 訊號只有 0 和 1 兩種因此 FSK 調變輸出也只有兩種頻率變化
本模組的編碼法適合 Command mode/Data mode 切換先連續發射 10 次 High、Low 信號作為前導波形接著發射起始波形 600 微秒 High→600 微秒 Low→600 微秒 High→400 微秒 Low。接著把 8 位元資了分為前 後兩段:每次送出 4 位元的資料之前都加上 Low、High。其中每次 High、Low 皆為兩百微秒。
編碼法波形圖如下
電路圖
發送端
;DS1820 TXD OK
;Date:
;Design:
;Oscilllator Crystal: 11.05922MHz
;Inital State RFTD_DI REG P3.2 DS_DQ REG P3.3 BUFFER1 EQU 30H BUFFER2 EQU 31H BUFFER3 EQU 32H
ORG 0H JMP MAIN MAIN:
MOV SP,#5FH MOV P2,#01H CALL RESET_DS1821 MOV A,#01H CALL WRITE_DS1821 MOV A,#33H CALL WRITE_DS1821
CALL RESET_DS1821 MOV A,#02H CALL WRITE_DS1821 MOV A,#0AH CALL WRITE_DS1821
CALL RESET_DS1821 MOV A,#0A1H CALL WRITE_DS1821 CALL READ_DS1821
CALL RESET_DS1821
CALL WRITE_DS1821 CALL READ_DS1821
CALL RESET_DS1821 MOV A,#0CH CALL WRITE_DS1821 MOV A,#46H CALL WRITE_DS1821
CALL RESET_DS1821 MOV A,#ACH CALL WRITE_DS1821 CALL READ_DS1821 LOOPDS:
CALL RESET_DS1821 MOV A,#0EEH
CALL WRITE_DS1821
CALL RESET_DS1821 MOV A,#0AAH CALL WRITE_DS1821
MOV R1,#30
CALL READ_DS1821
CALL RESET_DS1821 MOV A, #22H CALL WRITE_DS1821
MOV R1,#30 CALL RF_TXD_D CALL RF_TXD_D CALL RF_TXD_D CALL RF_TXD_D CALL DELAY1S
DELAY1S:
MOV R5,#46 DLY$2: MOV R6,#100 DLY$1: MOV R7,#100 DLY$0: DJNZ R7,DLY$0 DJNZ R6,DLY$1 DJNZ R5,DLY$2
DELAY480U:
MOV R7,#221 JMP DELAYS DELAY380U:
MOV R7,#174 JMP DELAYS DELAY300U:
MOV R7,#150 JMP DELAYS DELAY200U:
MOV R7,#100 JMP DELAYS DELAY100U:
MOV R7,#50 JMP DELAYS DELAY60U:
MOV R7,#27 JMP DELAYS DELAY50U:
MOV R7,#25 JMP DELAYS DELAY30U:
MOV R7,#14 JMP DELAYS DELAY25U:
MOV R7,#12 JMP DELAYS DELAY20U:
JMP DELAYS DELAY15U:
MOV R7,#7 JMP DELAYS DELAY12U:
MOV R7,#5 JMP DELAYS DELAY10U:
MOV R7,#4 JMP DELAYS DELAYS: DJNZ R7,DELAYS RET
RF_TXD_D:
MOV A,@R1 MOV R4,#10 RF_PREAMLP:
SETB RFTD_DI CALL DELAY200U CLR RFTD_DI CALL DELAY200U DJNZ R4,RF_PREAMLP MOV R4,#2
RF_STARTLP:
SETB RFTD_DI CALL DELAY300U CALL DELAY300U CLR RFTD_DI CALL DELAY300U CALL DELAY300U DJNZ R4,RF_STARTLP SETB RFTD_DI CALL DELAY200U MOV R3,#4 RX_TD_OUT1:
RRC A
MOV RFTD_DI,C
DJNZ R3,RX_TD_OUT1
CLR RFTD_DI CALL DELAY200U
SETB RFTD_DI CALL DELAY200U
MOV R3,#4 RX_TD_OUT2:
RRC A
MOV RFTD_DI,C CALL DELAY200U DJNZ R3,RX_TD_OUT2
CLR RFTD_DI RET
RESET_DS1821:
SETB DS_DQ NOP
CLR DS_DQ
CALL DELAY480U SETB DS_DQ NOP
JNB DS_DQ, $ JB DS_DQ, $ JNB DS_DQ, $ CALL DELAY380U SETB DS_DQ
RET
WRITE_DS1821:
MOV B,#8 XMT_DATA:
CLR DS_DQ CALL DELAY10U RRC A
MOV DS_DQ,C CALL DELAY60U SETB DS_DQ DJNZ B,XMT_DATA SETB DS_DQ RET
READ_DS1821:
MOV B,#8 RCV_DATA:
SETB DS_DQ NOP
CLR DS_DQ SETB DS_DQ NOP
CALL DELAY15U MOV C,DS_DQ CALL DELAY30U RRC A
DJNZ B,RCV_DATA SETB DS_DQ NOP
MOV @R1,A RET
END
接收端
;ADRXD 01 OK
;Date:
;Design:
;Oscilllator Crystal: 11.05922MHz
;Iniral State
RF_RX .REF P0.0 BUFFER1 .EQU 30H BUFFER2 .EQU 31H BUFFER3 .EQU 32H BUFFER4 .EQU 33H
ORG 0H JMP MAIN MAIN:
MOV SP,#6FH ORL P0,#0FFH MOV P2,01H CALL INIT_UART LLP:
MOV R0,#30H CALL RF_RXDATA LLP2:
MOV R1,#31H CALL RF_RXDATA MOV A,BUFFER2 CLR C
XRL A,BUFFER1 JNC COMPR1 MOV A,BUFFER2 MOV BUFFER1,A JMP LLP2
COMPR1:
CALL RF_RXDATA MOV A,BUFFER3 CLR C
XRL A,BUFFER2 JNC COMPR2 MOV A,BUFFER3 MOV BUFFER1,A JMP LLP2
COMPR2:
MOV R0,#33H CALL RF_RXDATA MOV A,BUFFER4 CLR C
XRL A,BUFFER3 JNC COMPR3 MOV A,BUFFER4 MOV BUFFER1,A JMP LLP2
COMPR3:
MOV A,BUFFER4 CALL HEX_OUT CALL DELAY480U CALL DELAY480U CALL DELAY480U JMP LLP
DELAY480U:
MOV R7,#221 JMP DELAYS DELAY380U:
MOV R7,#174 JMP DELAYS
MOV R7,#150 JMP DELAYS DELAY200U:
MOV R7,#100 JMP DELAYS DELAY100U:
MOV R7,#50 JMP DELAYS DELAY60U:
MOV R7,#27 JMP DELAYS DELAY50U:
MOV R7,#25 JMP DELAYS DELAY30U:
MOV R7,#14 JMP DELAYS DELAY25U:
MOV R7,#12 JMP DELAYS DELAY20U:
MOV R7,#10 JMP DELAYS DELAY15U:
MOV R7,#7 JMP DELAYS DELAY12U:
MOV R7,#5 JMP DELAYS DELAY10U:
MOV R7,#4 JMP DELAYS DELAYS: DJNZ R7,DELAYS RET
RF_RXDATA:
MOV R2,#0 CLR C
WAIT_START_SIGNAL_H1:
NOP INC R2 JB RF_RX, WAIT_START_SIGNAL_H1 MOV A,R2 SUBB A,#140 JC RF_RXDATA MOV A,R2 SUBB A,#180 JNC RF_RXDATA MOV R2,#0 CLR C
WAIT_START_SIGNAL_H2:
NOP INC R2 JB RF_RX, WAIT_START_SIGNAL_H2 MOV A,R2 SUBB A,#140 JC RF_RXDATA MOV A,R2 SUBB A,#180 JNC RF_RXDATA MOV R2,#0 CLR C
WAIT_START_SIGNAL_L2:
NOP INC R2 JB RF_RX, WAIT_START_SIGNAL_L2 MOV A,R2
JC RF_RXDATA MOV A,R2 SUBB A,#180 JNC RF_RXDATA CALL DELAY200U CALL DELAY200U CLR A
MOV R3,#4
RXD_LBYTEP:
MOV C,RF_RX RRC A
CALL DELAY200U DJNZ R3,RXD_LBYTEP CALL DELAY200U CALL DELAY200U MOV R3,#4
RXD_LBYTEP:
MOV C,RF_RX RRC A
CALL DELAY200U DJNZ R3,RXD_LBYTEP MOV R3,#4
RET
INIT_UART:
MOV SCON,#01010000B MOV TMOD,#00100000B MOV TH1,#250
SETB TR1
SETB T1 RET
UART_TXD:
MOV A,@R1 JNB TI,$
CLR TI MOV SBUF,A RET
HEX_OUT:
PUSH A
MOV DPTR,#ASCT ANL A,#F0H SWAP A
MOVC A,@A + DPTR MOV BUFFER4,A MOV R1,#33H CALL UART_TXD POP A
PUSH A ANL A,#0FH MOVC A,@A + DPTR MOV BUFFER4,A MOV R1,#33H CALL UART_TXD POP A RET
ASCT: DB "0123456789ABCDEF"
.END
VB 程式碼
Dim UART_DATA As Variant Dim Num() As Byte
Dim DSyt As String Dim V1 As Interger Dim TMP As Single
Dim Buffer(0 To 15) As Single Dim BufMAT(1 To 3000) As Single Dim BufMATCNT As Interger Private Sub Combol_click()
MSComm1.CommPort = Combo1.ListIndex + 1
If MSComm1.PortOpen = False Then MSComm1.PortOpen = Ture
Else
MSComm1.PortOpen = False End If
'MSComm1.PortOpen = Ture End Sub
Private Sub Command1_click() If Timer1.Enabled = False Then Timer1.Enabled = Ture
Command1.Caption = "停止收集溫度"
Else
Timer1.Enabled = False
Command1.Caption = "開始收集溫度"
End If End Sub
Private Sub Command2_Click() CreatMat
Private Sub Command3_Click() Dim i As Integer
For i = 0 To 15 Buffer(i) = 0 Next i
For i = 1 To 3000 BufMAT(i) = 0 Next i
BufMATCNT = 0 End Sub
Private Sub Command4_Click()
Call sndplaySonud(vbNullString, 0) End
End Sub
Private Sub Form_Load() Dim i As Integer
MSComm1.ConnPort = 1 Combo1.ListIndex = 0
MSComm1.Settings = "4800,N,8,2"
MSComm1.InputLen =0
'MSComm1.PortOpen = Ture
MSComm1.InputMode = comInputModeBinary
For i = 0 To 15 Buffer(i) = 0 Next i
Call SetLenShape End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Call sndPlaySound(vbNullString, 0)
End Sub
Private Sub Text1_Change() Check1.Value = 0
End Sub
Private Sub Text2_Change() Check1.Value = 0
End Sub
Private Sub Timer1_Timer() Dim i As Integer
Do DoEvents
Loop Until MSComm1.InBufferCount >= 2
UART_DATA = MSComm1.Input
Num = UART_DATA
Call DStrToTEMP
Labell.Caption = Str(TMP)
For i = 15 To 1 Step -1 Buffer(i) = Buffer(i - 1) Next i
Buffer(0) = TMP
BufMATCNT = BufMATCNT +1
If BufMATCNT >= 3000 Then BufMATCNT = 1
Labe18.Caption = "溫度暫存器:" + Str(BufMATCNT) Call SetLenShape
If ((TMP >= Val(Text1.Text)) Or (TMP <= Val(Text2.Text))) And Check1.Value Then
'MsgBox "溫度超過" + Str(Text1.Text) + "以上", 48 Label1.ForeClolor = vbRed
Call sndPlaySound(App.Path + "\notify.wav", 1 + 8) End If
End Sub
Sub DStrToTEMP()
sum = NUMToHex
TMP = sum * 0.02 * 10 '轉成溫度
'數位資料 128 等於 25.6'C '數位之料 129 等於 25.8'C End Sub
Function NUMToHex() As Integer '轉 16 進制數值 Dim i As Integer
Dim ch As String * 1 Dim sum As Integer Sum = 0
DStr = Chr(Num(0)) + Chr(Num(1)) For i = 0 To 1
ch = Mid(DStr, i + 1, 1) Select Case ch
Case "0":
sum = sum + 0 * (16 ^ (1 - i))
Case "1":
sum = sum + 1 * (16 ^ (1 - i))
Case "2":
Case "3":
sum = sum + 3 * (16 ^ (1 - i))
Case "4":
sum = sum + 4 * (16 ^ (1 - i))
Case "5":
sum = sum + 5 * (16 ^ (1 - i))
Case "6":
sum = sum + 6 * (16 ^ (1 - i))
Case "7":
sum = sum + 7 * (16 ^ (1 - i))
Case "8":
sum = sum + 8 * (16 ^ (1 - i))
Case "9":
sum = sum + 9 * (16 ^ (1 - i))
Case "A":
sum = sum + 10 * (16 ^ (1 - i))
Case "B":
sum = sum + 11 * (16 ^ (1 - i))
Case "C":
sum = sum + 12 * (16 ^ (1 - i))
Case "D":
sum = sum + 13 * (16 ^ (1 - i))
Case "E":
sum = sum + 14 * (16 ^ (1 - i))
sum = sum + 15 * (16 ^ (1 - i)) End Select
Next i
NUMToHex = sum End Function
Sub SetLenShape() '設定長度 Dim i As Integer
For i = 15 To 0 Step -1
Shape1(i).Height = (2658 / 50) * Buffer(i)
Shape1(i).Top = 4380 + 2685 - ((2685 / 50) * Buffer(i)) -15 Next i
End Sub
Sub CreateMAT() '紀錄為 MATLAB 檔 Dim i As Integer
Open App.Path + "\AD590temp.m" For Output As #1 Print #1,"%" + Str(Date) +Str(Time)
Print #1,"%溫 度 紀 錄"
Print #1,"clear"
Print #1,"TMP=["
For i = 1 To BufMATCNT
Print #1, Str(BufMAT(i)) Next i
Print #1,"];"
Print #1,"plot(TMP)"
Print #1,"%END"
Close #1 End Sub
成果展示
此為發射端
圖中可以看到 DS1821 溫度 IC 以及 27MHZ FSK RF 數據傳輸模組的發射端而在電
路中我們使用了一顆穩壓 IC 及一顆 86C51
成果展示
此為接收端
VB 未執行
VB 啟動後
可以看到溫度為 24 度簡易測試只要將手指放在 DS1821 溫度 IC 上便
結論
1、電路學、電子學、通訊系統的基本應用。
2、IsSpice、VB 程式的基本運用。
3、學習到無線通訊模組內部結構與ㄧ些課堂上所沒有的知識。
4、儀器設備的使用,像電子式示波器、電源供應器。
5、工作分配及團隊合作的重要。