Technologie des capteurs de température

Conception de la fonction de mesure de la température du capteur de température numérique DS18B20

Fonction de mesure de la température du capteur de température numérique DS18B20

DS18B20 est un capteur de température numérique à 1 fil produit par DALLAS, avec un petit boîtier TO-92 à 3 broches. La plage de mesure de la température est de -55 ℃ ~ + 125 ℃, et il peut être programmé avec une précision de conversion A/D de 9 bits à 12 bits. La résolution de mesure de la température peut atteindre 0,0625 ℃, et la température mesurée est émise en série sous la forme d'une quantité numérique de 16 bits avec extension de signe. Son alimentation électrique de travail peut être introduite à l'extrémité distante ou générée par une alimentation parasite. Plusieurs DS18B20 peuvent être connectés en parallèle à 3 ou 2 lignes. Le CPU n'a besoin que d'une seule ligne de port pour communiquer avec de nombreux DS18B20, occupant moins de ports du microprocesseur, ce qui peut économiser beaucoup de fils et de circuits logiques. Les caractéristiques ci-dessus rendent le DS18B20 très adapté aux systèmes de détection de température multipoints longue distance.

Fonction de mesure de la température du capteur de température numérique DS18B20

Fonction de mesure de la température du capteur de température numérique DS18B20

2. Structure interne du schéma de circuit DS18B20 ds18b20
La structure interne du DS18B20 est illustrée dans la figure 1, qui consiste principalement en 4 parties: 64-bits ROM, capteur de température, l'alarme de température non volatile déclenche TH et TL, et registres de configuration. La disposition des broches du DS18B20 est illustrée à la figure 2. DQ est la borne d'entrée/sortie du signal numérique; GND est la terre d'alimentation; VDD est la borne d'entrée de l'alimentation externe (mis à la terre en mode de câblage d'alimentation parasite, voir la figure 4).

Le numéro de série 64 bits dans la ROM est photodécoupé avant de quitter l'usine. Il peut être considéré comme le code de séquence d'adresse du DS18B20. Le numéro de série 64 bits de chaque DS18B20 est différent. Le code de contrôle de redondance cyclique (CRC = X8 + X5 + X4 + 1) de la ROM 64 bits est organisée. Le rôle de la ROM est de rendre chaque DS18B20 différent, afin que plusieurs DS18B20 puissent être connectés à un seul bus.

Structure interne de la puce DS18B20

Structure interne de la puce DS18B20

Chiffre 1, structure interne du DS18B20

Le capteur de température du DS18B20 complète la mesure de la température, qui est fourni sous la forme de lectures de compléments binaires à signe étendu de 16 bits, exprimé sous la forme de 0,0625℃/LSB, où S est le bit de signe. Par exemple, la sortie numérique de +125℃ est 07D0H, la sortie numérique de +25,0625℃ est 0191H, la sortie numérique de -25,0625 ℃ est FF6FH, et la sortie numérique de -55 ℃ est FC90H.

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

Valeur de température octet de poids faible
MSBLSB
S
S
S
S
S
22
25
24

Valeur de température octet de poids fort
L'alarme de température haute et basse déclenche TH et TL, et le registre de configuration sont composés d'un octet d'EEPROM. Une commande de fonction mémoire peut être utilisée pour écrire dans TH, TL, ou le registre de configuration. Le format du registre de configuration est le suivant:

0
R1
R0
1
1
1
1
1
MSBLSB

R1 et R0 déterminent le nombre de chiffres de précision pour la conversion de température: R1R0 = “00”, 9-précision des bits, le temps de conversion maximum est de 93,75 ms; R1R0 = “01”, 10-précision des bits, le temps de conversion maximum est de 187,5 ms. R1R0 = “10”, 11-précision des bits, le temps de conversion maximum est de 375 ms. R1R0 = “11”, 12-précision des bits, le temps de conversion maximum est de 750 ms. La valeur par défaut est une précision de 12 bits lorsqu'elle n'est pas programmée.

Le registre haute vitesse est une mémoire de 9 octets. Les deux premiers octets contiennent les informations numériques de la température mesurée; le 3ème, 4ème, et les 5ème octets sont des copies temporaires de TH, TL, et registres de configuration, respectivement, et sont actualisés à chaque fois qu'une réinitialisation à la mise sous tension se produit; le 6, 7ème, et les 8èmes octets ne sont pas utilisés et sont représentés comme tous des 1 logiques; le 9ème octet lit le code CRC de tous les précédents 8 octets, qui peut être utilisé pour assurer une communication correcte.

3. Séquence de travail DS18B20
Le flux de protocole de travail de première ligne du DS18B20 est: initialisation → instruction d'opération ROM → instruction d'opération mémoire → transmission de données. Sa séquence de travail comprend la séquence d'initialisation, séquence d'écriture et séquence de lecture, comme le montre la figure 3 (un) (b) (c).

(un) Séquence d'initialisation
(c) Séquence de lecture

Schéma de circuit de connexion typique du DS18B20 et du microprocesseur

Schéma de circuit de connexion typique du DS18B20 et du microprocesseur

Chiffre 3, Diagramme de séquence de travail DS18B20

4. Conception d'interface typique du DS18B20 et du micro-ordinateur monopuce
Chiffre 4 prend le micro-ordinateur monopuce de la série MCS-51 comme exemple pour dessiner la connexion typique entre le DS18B20 et le microprocesseur. Dans la figure 4 (un), DS18B20 adopte le mode d'alimentation parasite, et ses bornes VDD et GND sont mises à la terre. Dans la figure 4 (b), DS18B20 adopte le mode d'alimentation externe, et son terminal VDD est alimenté par une alimentation 3V ~ 5,5V.

un) Mode de fonctionnement de l'alimentation parasite
(b) Mode de fonctionnement de l'alimentation externe

Diagramme de synchronisation de travail DS18B20

Diagramme de synchronisation de travail DS18B20

Chiffre 4 Schéma de connexion typique du DS18B20 et du microprocesseur

En supposant que la fréquence cristalline utilisée par le système de micro-ordinateur monopuce est de 12 MHz, trois sous-programmes sont écrits en fonction du timing d'initialisation, synchronisation d'écriture et synchronisation de lecture du DS18B20: INIT est le sous-programme d'initialisation; WRITE est l'écriture (commande ou données) sous-programme; READ est le sous-programme de lecture des données. Toutes les lectures et écritures de données commencent par le bit le plus bas.

DATEQUP1.0
……
INIT:CLRÉA
INI10:SETBDAT
MOVR2,#200
INI11:CLRDAT
DJNZR2,INI11; L'hôte envoie une impulsion de réinitialisation pendant 3 μs × 200 = 600 μs
SETBDAT; L'hôte libère le bus, et la ligne de port est modifiée en entrée
MOVR2,#30
IN12:DJNZR2,INI12; DS18B20 attend 2μs×30=60μs
CLRC
ORLC,QUE; La ligne de données DS18B20 est-elle faible (le pouls existe)?
JCINI10; DS18B20 n'est pas prêt, réinitialiser
MOVR6, #80
INI13: ORLC, QUE
JCINI14; La ligne de données DS18B20 monte en puissance, l'initialisation est réussie
DJNZR6, INI13; Le niveau bas de la ligne de données peut durer 3 μs × 80 = 240µs
SYMPINI10; échec de l'initialisation, redémarrage
INI14: MOVR2, #240
EN15: DJNZR2, INI15; DS18B20 répond pendant au moins 2 μs × 240 = 48 0µs
RETRAIT

;-------------------------
ÉCRIRE:CLRÉA
MOVR3,#8;Boucle 8 fois, écrire un octet
WR11:SETBDAT
MOVR4,#8
RRCA;Le bit d'écriture se déplace de A à CY
CLRDAT
WR12:DJNZR4,WR12
;Attendez 16μs
MOVDAT,C;Le mot de commande est envoyé au DS18B20 bit par bit
MOVR4,#20
WR13:DJNZR4,WR1 3
; Assurez-vous que le processus d'écriture dure 60 μs
DJNZR3,WR11
; Continuer avant d'envoyer un octet
SETBDAT
RETRAIT

;------------------------
LIRE:CLRÉA
MOVR6, #8; Boucle 8 fois, lire un octet
RD11:CLRDAT
MOVR4, #4
NON; Le niveau bas dure 2 μs
SETBDAT; Réglez la ligne de port sur l'entrée
RD12:DJNZR4,RD12
; Attendez 8μs
MOVC,DE T
;L'hôte lit les données du DS18B20 petit à petit
RRCA;Les données lues sont déplacées vers A
MOVR5,#30
RD13:DJNZR5,RD13
;Assurez-vous que le processus de lecture dure 60 μs
DJNZR6,RD11
;Après avoir lu un octet de données, stockez-le dans A
SETBDAT
RETRAIT
;-------------------------
L'hôte doit passer par trois étapes pour contrôler le DS18B20 afin de terminer la conversion de température: initialisation, Instructions d'utilisation de la ROM, et instructions d'utilisation de la mémoire. DS18B20 doit être démarré pour démarrer la conversion avant de lire la valeur de conversion de température. En supposant qu'une seule puce est connectée à une ligne, la précision de conversion par défaut de 12 bits est utilisée, et une alimentation externe est utilisée, un sous-programme GETWD peut être écrit pour effectuer une conversion et lire la valeur de la température.

GRILLE:LCALLINITE
SE DÉPLACER,#0CCH
LCALLWRITE; envoyer la commande skip ROM
SE DÉPLACER,#44H
LCALLWRITE; envoyer la commande de démarrage de la conversion
LCALLINITE
SE DÉPLACER,#0CCH; envoyer la commande skip ROM
LCALLWRITE
SE DÉPLACER,#0 BEH; envoyer une commande de lecture de mémoire
LCALLWRITE
LALLIRE
MOVWDLSB,UN
; envoyer l'octet faible de la valeur de température au WDLSB
LALLIRE
MOVWDMSB,UN
; envoyer l'octet élevé de la valeur de température au WDMSB
RETRAIT
……

L'octet de poids fort de la valeur de température lue par le sous-programme GETWD est envoyé à l'unité WDMSB, et l'octet de poids faible est envoyé à l'unité WDLSB. Puis selon le format de représentation de l'octet de valeur de température et son bit de signe, la valeur réelle de la température peut être obtenue par une simple transformation.

Si plusieurs DS18B20 sont connectés sur une seule ligne, le mode de connexion d'alimentation parasite est adopté, configuration de la précision de conversion, alarme de limite haute et basse, etc.. sont requis. Ensuite l'écriture du sous-programme GETWD sera plus compliquée. En raison du manque d'espace, cette section ne sera pas décrite en détail. Veuillez vous référer au contenu correspondant.

Nous avons appliqué avec succès le DS18B20 au “bain chauffant domestique” système de contrôle que nous avons développé. Sa vitesse de conversion rapide, haute précision de conversion, et une interface simple avec le microprocesseur ont apporté une grande commodité au travail de conception matérielle, réduisant efficacement les coûts et raccourcissant les cycles de développement.