Tehnologia senzorului de temperatură

Proiectarea funcției de măsurare a temperaturii a senzorului digital de temperatură DS18B20

Funcția de măsurare a temperaturii senzorului de temperatură digitală DS18B20

DS18B20 este un senzor de temperatură digitală cu 1 fire produs de Dallas, cu un pachet mic de 3 pini până la 92. Intervalul de măsurare a temperaturii este de -55℃~+125℃, și poate fi programat la o precizie de conversie A/D de 9 biți ~ 12 biți. Rezoluția de măsurare a temperaturii poate ajunge la 0,0625 ℃, iar temperatura măsurată este scoasă în serie sub forma unei mărimi digitale de 16 biți cu extensie de semn. Alimentarea sa de lucru poate fi introdusă la capătul de la distanță sau generată de sursa de alimentare parazită. Mai multe DS18B20 pot fi conectate în paralel 3 sau 2 linii. CPU are nevoie doar de o linie de port pentru a comunica cu multe DS18B20, ocupând mai puține porturi ale microprocesorului, ceea ce poate salva o mulțime de cabluri și circuite logice. Caracteristicile de mai sus fac ca DS18B20 să fie foarte potrivit pentru sistemele de detectare a temperaturii în mai multe puncte la distanță lungă.

Funcția de măsurare a temperaturii senzorului de temperatură digitală DS18B20

Funcția de măsurare a temperaturii senzorului de temperatură digitală DS18B20

2. Structura internă a schemei de circuit DS18B20 ds18b20
Structura internă a DS18B20 este prezentată în figură 1, care constă în principal din 4 piese: 64-bit ROM, senzor de temperatură, Alarma de temperatură nevolatilă declanșează TH și TL, și registrele de configurare. Aranjamentul pinului DS18B20 este prezentat în figura 2. DQ este terminalul de intrare/ieșire a semnalului digital; GND este masa de alimentare; VDD este terminalul de intrare al sursei de alimentare externă (împământat în modul de cablare de alimentare parazită, vezi figura 4).

Numărul de serie pe 64 de biți din ROM este fotogravat înainte de a părăsi fabrica. Poate fi privit drept codul secvenței de adrese al DS18B20. Numărul de serie pe 64 de biți al fiecărui DS18B20 este diferit. Codul de verificare a redundanței ciclice (CRC=X8+X5+X4+1) a ROM-ului pe 64 de biți este aranjat. Rolul ROM-ului este de a face fiecare DS18B20 diferit, astfel încât mai multe DS18B20 să poată fi conectate la o singură magistrală.

Structura internă a cipului DS18B20

Structura internă a cipului DS18B20

Figura 1, structura internă a DS18B20

Senzorul de temperatură din DS18B20 completează măsurarea temperaturii, care este furnizat sub formă de citiri de complement binar cu semn extins pe 16 biți, exprimat sub formă de 0,0625℃/LSB, unde S este bitul de semn. De exemplu, ieșirea digitală de +125℃ este 07D0H, ieșirea digitală de +25,0625℃ este 0191H, ieșirea digitală de -25,0625℃ este FF6FH, iar ieșirea digitală de -55℃ este FC90H.

23
22
21
20
2-1
2-2
2-3
2-4

Valoarea temperaturii byte scăzut
MSBLSB
S
S
S
S
S
22
25
24

Valoarea temperaturii octet mare
Alarma de temperatură ridicată și scăzută declanșează TH și TL, iar registrul de configurare este compus dintr-un octet de EEPROM. O comandă a funcției de memorie poate fi folosită pentru a scrie în TH, TL, sau registrul de configurare. Formatul registrului de configurare este următorul:

0
R1
R0
1
1
1
1
1
MSBLSB

R1 și R0 determină numărul de cifre de precizie pentru conversia temperaturii: R1R0 = “00”, 9-precizie de biți, timpul maxim de conversie este de 93,75 ms; R1R0 = “01”, 10-precizie de biți, timpul maxim de conversie este de 187,5 ms. R1R0 = “10”, 11-precizie de biți, timpul maxim de conversie este de 375 ms. R1R0 = “11”, 12-precizie de biți, timpul maxim de conversie este de 750 ms. Valoarea implicită este precizia de 12 biți atunci când nu este programată.

Registrul de mare viteză este o memorie de 9 octeți. Primii doi octeți conțin informațiile digitale ale temperaturii măsurate; al 3-lea, 4th, iar octeții 5 sunt copii temporare ale TH, TL, și registrele de configurare, respectiv, și sunt reîmprospătate de fiecare dată când are loc o resetare la pornire; al 6-lea, 7th, și octeții 8 nu sunt utilizați și sunt reprezentați ca toți 1-urile logice; al 9-lea octet citește codul CRC al tuturor celor anterioare 8 octeți, care poate fi folosit pentru a asigura o comunicare corectă.

3. Secvența de lucru DS18B20
Fluxul de protocol de lucru de primă linie al DS18B20 este: inițializare → instrucțiune de operare ROM → instrucțiune de operare memorie → transmisie de date. Secvența sa de lucru include secvența de inițializare, secvența de scriere și secvența de citire, Așa cum se arată în figura 3 (o) (b) (c).

(o) Secvența de inițializare
(c) Secvența de citire

Schema de conexiune tipică a DS18B20 și microprocesor

Schema de conexiune tipică a DS18B20 și microprocesor

Figura 3, Diagrama secvenței de lucru DS18B20

4. Design tipic de interfață pentru DS18B20 și microcomputer cu un singur cip
Figura 4 ia microcomputerul cu un singur cip din seria MCS-51 ca exemplu pentru a stabili conexiunea tipică între DS18B20 și microprocesor. În figura 4 (o), DS18B20 adoptă modul de alimentare parazit, iar bornele sale VDD și GND sunt împământate. În figura 4 (b), DS18B20 adoptă modul de alimentare externă, iar terminalul său VDD este alimentat de o sursă de alimentare de 3V~5.5V.

o) Mod de funcționare a sursei de alimentare parazitare
(b) Modul de funcționare al sursei de alimentare externă

Diagrama de lucru DS18B20

Diagrama de lucru DS18B20

Figura 4 Schema de conectare tipică a DS18B20 și microprocesor

Presupunând că frecvența cristalului utilizată de sistemul de microcomputer cu un singur cip este 12MHz, trei subprograme sunt scrise în funcție de timpul de inițializare, sincronizare de scriere și timp de citire a DS18B20: INIT este subrutina de inițializare; WRITE este scrierea (comanda sau date) subrutină; READ este subrutina de citire a datelor. Toate citirea și scrierea datelor încep de la cel mai mic bit.

DATEQUP1.0
……
INIT:CLREA
INI10:SETBDAT
MOVR2,#200
INI11:CLRDAT
DJNZR2,INI11; Gazda trimite un impuls de resetare pentru 3μs×200=600μs
SETBDAT; Gazda eliberează autobuzul, iar linia portului este schimbată la intrare
MOVR2,#30
IN12:DJNZR2,INI12; DS18B20 așteaptă 2μs×30=60μs
CLRC
ORLC,CĂ; Linia de date DS18B20 este scăzută (pulsul există)?
JCINI10; DS18B20 nu este pregătit, reinițializați
MOVR6, #80
INI13: ORLC, CĂ
JCINI14; Linia de date DS18B20 este ridicată, inițializarea are succes
DJNZR6, INI13; Nivelul scăzut al liniei de date poate dura 3μs × 80 = 240μs
SYMPINI10; inițializarea a eșuat, repornire
INI14: MOVR2, #240
IN15: DJNZR2, INI15; DS18B20 răspunde pentru cel puțin 2μs × 240 = 48 0μs
RET

;-----------------------------------------------------
SCRIE:CLREA
MOVR3,#8;Buclă 8 ori, scrie un octet
WR11:SETBDAT
MOVR4,#8
RRCA;Biți de scriere de la A la CY
CLRDAT
WR12:DJNZR4,WR12
;Așteptați 16 μs
MOVDAT,C;Cuvântul de comandă este trimis către DS18B20 bit cu bit
MOVR4,#20
WR13:DJNZR4,WR1 3
; Asigurați-vă că procesul de scriere durează 60μs
DJNZR3,WR11
; Continuați înainte de a trimite un octet
SETBDAT
RET

;------------------------------------------------------
CITIRE:CLREA
MOVR6,#8; Buclă 8 ori, citește un octet
RD11:CLRDAT
MOVR4,#4
NOP; Nivelul scăzut durează 2μs
SETBDAT; Setați linia portului la intrare
RD12:DJNZR4,RD12
; Așteptați 8μs
MOVC,DE LA T
;Gazda citește datele DS18B20 bit cu bit
RRCA;Datele citite sunt mutate în A
MOVR5,#30
RD13:DJNZR5,RD13
;Asigurați-vă că procesul de citire durează 60μs
DJNZR6,RD11
;După citirea unui octet de date, depozitați-l în A
SETBDAT
RET
;-----------------------------------------------------
Gazda trebuie să parcurgă trei pași pentru a controla DS18B20 pentru a finaliza conversia temperaturii: initializare, Instrucțiuni de operare ROM, și instrucțiuni de operare a memoriei. DS18B20 trebuie pornit pentru a începe conversia înainte de a citi valoarea de conversie a temperaturii. Presupunând că doar un cip este conectat la o linie, este utilizată precizia implicită de conversie de 12 biți, și se folosește o sursă de alimentare externă, o subrutină GETWD poate fi scrisă pentru a finaliza o conversie și a citi valoarea temperaturii.

POARTĂ:LCALLINIT
MIŞCARE,#0CCH
LCALLWRITE; trimiteți comanda skip ROM
MIŞCARE,#44H
LCALLWRITE; trimite comanda de pornire a conversiei
LCALLINIT
MIŞCARE,#0CCH; trimiteți comanda skip ROM
LCALLWRITE
MIŞCARE,#0 BEH; trimite comanda citire memorie
LCALLWRITE
LCALLREAD
MOVWDLSB,A
; trimite octet scăzut al valorii temperaturii către WDLSB
LCALLREAD
MOVWDMSB,A
; trimite octetul mare de valoare a temperaturii către WDMSB
RET
……

Octetul mare al valorii temperaturii citit de subrutina GETWD este trimis la unitatea WDMSB, iar octetul scăzut este trimis către unitatea WDLSB. Apoi, în funcție de formatul de reprezentare a octetului valorii temperaturii și a bitului său de semn, valoarea reală a temperaturii poate fi obţinută prin simpla transformare.

Dacă mai multe DS18B20 sunt conectate pe o linie, se adoptă modul de conectare la sursa de alimentare parazită, configurația preciziei conversiei, alarmă limită înaltă și inferioară, etc. sunt necesare. Atunci scrierea subrutinei GETWD va fi mai complicată. Din cauza limitărilor de spațiu, această secțiune nu va fi descrisă în detaliu. Vă rugăm să consultați conținutul relevant.

Am aplicat cu succes DS18B20 la “baie de incalzire casnica” sistemul de control pe care l-am dezvoltat. Viteza sa mare de conversie, precizie mare de conversie, și interfața simplă cu microprocesorul au adus o mare comoditate lucrărilor de proiectare hardware, reducerea eficientă a costurilor și scurtarea ciclurilor de dezvoltare.