Beispiel für die Temperaturmessung des digitalen Temperatursensors DS18B20
1. DS18B20 digitaler Temperatursensor.
In diesem Artikel wird die Schreib methode der dreistufigen Zustandsmaschine (Moore-Typ) verwendet, um das Temperaturmess-FPGA auf dem DS18B20 zu betreiben, um den DS18B20 zu verstehen und sich mit der Schreib methode der dreistufigen Zustandsmaschine vertraut zu machen.
1.1. Übersicht
Unter Temperaturwandler versteht man einen Sensor, der die Temperatur erfassen und in ein nutzbares Ausgangssignal umwandeln kann. Dies ist der am häufigsten verwendete Typ verschiedener Sensoren. Mit der Entwicklung moderner Instrumente werden Miniaturisierung, Integration und Digitalisierung zu einer wichtigen Richtung in der Entwicklung von Sensoren.
Der von der US-amerikanischen DALLAS Semiconductor Company eingeführte digitale Temperatursensor DS18B20 verwendet ein einziges Busprotokoll. Das heißt, die Schnittstelle zum FPGA belegt ohne externe Komponenten nur einen I/O-Port und wandelt die Umgebungstemperatur direkt in ein digitales Signal um. Die serielle Ausgabe in Form eines digitalen Codes vereinfacht das Schnittstellen design zwischen Sensor und FPGA erheblich.
Die Pins sind wie folgt:
1.2. Struktureller Aufbau
Der Mess temperaturbereich des DS18B20 beträgt -55 bis +125 °C und die Genauigkeit beträgt ±0,5 °C. Die Vor-Ort-Temperatur (in Echtzeit) wird direkt digital über einen „Single Bus“ übertragen, was die Anti-Interferenz-Leistung des Systems erheblich verbessert. Es kann die gemessene Temperatur direkt ablesen und durch einfache Programmierung entsprechend den tatsächlichen Anforderungen einen Lesemodus für 9 bis 12-stellige digitale Werte realisieren. Es arbeitet im Spannungsbereich von 3 bis 5,5 V und verfügt über eine Vielzahl von Verpackungsformen, wodurch das Systemdesign flexibel und praktisch ist. Die eingestellte Auflösung und die vom Benutzer eingestellte Alarmtemperatur werden im EEPROM gespeichert und bleiben nach dem Ausschalten erhalten. Seine interne Struktur ist in der Abbildung dargestellt:
Das Strukturblockdiagramm des Caches lautet wie folgt:
Wie aus der obigen Abbildung ersichtlich ist, verfügt der DS18B20-Cache über insgesamt neun 8-Bit-Register, von denen das niederwertige Bit (LSB) der Temperaturdaten der Byteadresse 0 entspricht und das höherwertige Bit (MSB) der Byteadresse 0 entspricht ) der Temperaturdaten entspricht der Byteadresse 1. Analog dazu ist die Byteadresse des Konfiguration registers 4. Das Format der Temperatur datenspeicherung ist wie folgt:
Der DS18B20 ist ab Werk standardmäßig mit 12-Bit-Temperaturdaten konfiguriert, wobei das höchste Bit das Vorzeichenbit ist, d. h. der Temperaturwert hat insgesamt 11 Bits und die niedrigsten vier Bits sind Dezimalstellen. Wenn das FPGA Temperaturdaten liest, liest es jeweils 2 Bytes, also insgesamt 16 Bits. Wandeln Sie nach dem Lesen die untere 11-stellige Binärzahl in eine Dezimalzahl um und multiplizieren Sie sie dann mit 0,0625, um den tatsächlich gemessenen Temperaturwert zu erhalten.
Darüber hinaus ist es notwendig, die positive und negative Temperatur zu beurteilen. Die ersten 5 Ziffern sind Vorzeichenbits. Diese 5 Ziffern ändern sich gleichzeitig und wir müssen nur eine davon beurteilen. Wenn die ersten fünf Bits 1 sind, ist die gelesene Temperatur ein negativer Wert, und der gemessene Wert muss invertiert werden, plus 1, und dann mit 0,0625 multipliziert werden, um den tatsächlichen Temperaturwert zu erhalten. Wenn die ersten fünf Bits 0 sind, ist die gemessene Temperatur ein positiver Wert. Multiplizieren Sie einfach den gemessenen Wert mit 0,0625, um den tatsächlichen Temperaturwert zu erhalten.
Das vierte Byte im Cache ist das Konfiguration register. Der Benutzer kann die Auflösung von DS18B20 konfigurieren, indem er die Werte von R1 und R0 ändert. Die Standardeinstellung beim Einschalten ist R1=1 und R0=1 (12-Bit-Auflösung). Es ist zu beachten, dass die Konvertierungszeit mit der Auflösungszeit zusammenhängt. Darüber hinaus sind das höchste Bit und die unteren 5 Bits im Register für die interne Verwendung reserviert und können nicht geschrieben werden. Der Zusammenhang zwischen Konvertierungszeit und Anzahl der Stellen ist in der folgenden Tabelle dargestellt:
1.3. Kommunikation schritte
Wie bedient man DS18B20, um die Temperatur umzuwandeln und abzulesen? Gehen Sie wie folgt vor:
1. Initialisierung
Alle Ereignisse auf dem 1-Wire-Bus müssen mit der Initialisierung beginnen. Die Initialisierungssequenz besteht aus einem Reset-Impuls vom Master am Bus, gefolgt von einem Anwesenheit impuls als Reaktion vom Slave. Dieser Präsenzimpuls teilt dem Busmaster mit, dass der DS18B20 am Bus angeschlossen und betriebsbereit ist. Alle spezifischen Zeitangaben werden in Kapitel 1.4 vorgestellt.
2. ROM-Befehl
Nach Abschluss der Initialisierung können ROM-Befehle ausgeführt werden. Diese Befehle arbeiten mit dem 64-Bit-ROM-Code jedes Geräts und können zur Identifizierung jedes Geräts verwendet werden, wenn mehrere Geräte an den Bus angeschlossen sind. Es gibt insgesamt 5 ROM-Befehle, jeder Befehl ist 8 Bit lang.
Search ROM[F0h]: Wenn das System eingeschaltet und initialisiert wird, kann das Master-Gerät die ROM-Codes aller Slave-Geräte am Bus identifizieren. Dadurch kann das Master-Gerät den Typ und die Anzahl der Slave-Geräte am Bus bestimmen.
Read ROM[33h]: Mit diesem Befehl kann das Master-Gerät den 64-Bit-ROM-Code des DS18B20 lesen. Dieser Befehl kann nur verwendet werden, wenn nur ein DS18B20 am Bus vorhanden ist. Wenn sich mehrere Slave-Geräte am Bus befinden, führt das Senden dieses Befehls zu Datenkonflikten, wenn alle Slave-Geräte antworten.
Match ROM[55h]: Auf den Match ROM-Befehl folgt ein 64-Bit-ROM-Code, der es dem Master ermöglicht, einen bestimmten DS18B20 auf dem Multidrop-Bus zu lokalisieren. Nur DS18B20s, die genau mit der 64-Bit-ROM-Sequenz übereinstimmen, reagieren. Alle anderen Slave-Geräte am Bus warten auf den nächsten Reset-Impuls. Dieser Befehl kann verwendet werden, wenn einzelne oder mehrere Geräte am Bus vorhanden sind.
ROM[CCh] überspringen: Dieser Befehl kann mit dem nächsten Schritt fortfahren, ohne den 64-Bit-ROM-Code bereitzustellen, was bei einem Einzelpunktbus (einem DS18B20-Sensor) Zeit sparen kann. Wenn sich mehr als ein Slave-Gerät am Bus befindet und nach dem Überspringen des ROM-Befehls ein Lesebefehl ausgegeben wird, führen alle Slave-Geräte gleichzeitig Temperatur konvertierungen durch und es kommt zu einem Datenkonflikt auf dem Bus.
Alarmsuche [ECh]: Die Funktionsweise dieses Befehls ist grundsätzlich dieselbe wie die des Skip ROM-Befehls, der Unterschied besteht jedoch darin, dass nur Slave-Geräte mit einer Temperatur über TH oder unter TL (die einen Alarmzustand erreichen) reagieren. Solange kein Stromausfall vorliegt, bleibt der Alarmstatus bestehen, bis die Temperatur nicht mehr im Alarmbereich liegt.
3. Funktionsbefehle
Wenn das Master-Gerät am Bus über einen ROM-Befehl feststellt, welcher DS18B20 kommunizieren kann, kann das Master-Gerät einen Funktionsbefehl an eines der Slave-Geräte senden. Mit diesen Befehlen kann das Master-Gerät das Slave-Gerät steuern, um eine Reihe von Vorgängen auszuführen.
Temperatur umrechnung [44h]: Dieser Befehl initialisiert eine einzelne Temperatur umrechnung. Nachdem die Temperatur konvertierung abgeschlossen ist, werden die konvertierten Temperaturdaten in Byte0 (untere acht Bits der Temperaturdaten) und Byte1 (höhere acht Bits der Temperaturdaten) im Cache gespeichert, und dann kehrt der DS18B20 in den Ruhezustand mit geringem Stromverbrauch zurück . Wenn der Bus nach diesem Befehl einen Lesezeitschlitz ausgibt, antwortet der DS18B20 mit einer „0“, wenn eine Temperatur konvertierung läuft, oder mit einer „1“, wenn die Temperatur konvertierung abgeschlossen ist. Wenn der Stromversorgungsmodus „Parasitäre Stromversorgung“ verwendet wird, sollte der Bus unmittelbar nach der Befehlsausgabe gezwungen werden, hochgezogen zu werden, und die Hochziehzeit sollte größer sein als die Zeitanforderungen.
Scratchpad schreiben [4Eh]: Dieser Befehl veranlasst das Master-Gerät, 3 Byte Daten in den Cache zu schreiben. Das erste Byte wird in Byte2 des Caches (TH-Register) geschrieben, das zweite Datenbyte wird in Byte3 (TL-Register) geschrieben und das dritte Datenbyte wird in Byte4 (Konfiguration register) geschrieben. Alle Daten werden der Reihe nach vom Low-Bit zum High-Bit geschrieben. Ein Reset kann den Schreibvorgang jederzeit unterbrechen.
Lesen Sie den Cache [BEh]: Lesen Sie den Wert im Cache, beginnend bei Byte0 (die unteren acht Bits der Temperatur) und lesen Sie bis Byte8 (CRC-Prüfung). Jedes Datenbyte wird beginnend mit dem unteren Bit übertragen. Wenn Sie nicht so viele Daten lesen möchten, können Sie es jederzeit beim Lesen von Daten durch Zurücksetzen beenden.
Cache kopieren [48h]: Dieser Befehl kopiert die Werte in TH (Byte2), TL (Byte3) und Konfiguration register (Byte4) im Cache in den nichtflüchtigen Speicher EEPROM. Wenn der Buscontroller nach diesem Befehl einen Lesezeitschlitz ausgibt und der DS18B20 damit beschäftigt ist, den Notizblock in den EEPROM-Speicher zu kopieren, gibt der DS18B20 eine „0“ aus. Wenn der Kopiervorgang abgeschlossen ist, gibt der DS18B20 eine „1“ aus. Wenn das Gerät im Modus „Parasitäre Stromversorgung“ mit Strom versorgt wird, muss der Bus unmittelbar nach dem Senden dieses Befehls für mindestens 10 ms auf High gesetzt werden.
EEPROM abrufen[B8h]: Dieser Befehl ruft den Temperaturalarm-Auslösewert (TH und TL) und die Konfiguration registerdaten vom EEPROM in den Cache ab. Dieser Vorgang wird automatisch einmal nach dem Einschalten ausgeführt, sodass beim Einschalten immer gültige Daten im temporären Register vorhanden sind. Wenn der Lesezeitschlitz nach dem Rückrufbefehl initiiert wird, antwortet der DS18B20 mit „0“, wenn der Rückruf des EEPROMs läuft, und mit „1“, wenn der Rückruf abgeschlossen ist.
Stromversorgungsmodus lesen [B4h]: Mit diesem Befehl kann gelesen werden, ob der DS18B20 am Bus von einer „parasitären Stromversorgung“ versorgt wird. In der Lesedaten-Timing-Sequenz bedeutet „0“ eine Stromversorgung im Modus „parasitäre Stromversorgung“ und „1“ bedeutet eine externe Stromversorgung.
In diesem Artikel wird die Schreib methode der dreistufigen Zustandsmaschine (Moore-Typ) verwendet, um das Temperaturmess-FPGA auf dem DS18B20 zu betreiben, um den DS18B20 zu verstehen und sich mit der Schreib methode der dreistufigen Zustandsmaschine vertraut zu machen.
DS18B20 bis RS485 Temperatur- und Feuchtigkeitssensor-Erfassung sonde | ds18b20 Sensorsonde und Stecker |
1.1. Übersicht
Unter Temperaturwandler versteht man einen Sensor, der die Temperatur erfassen und in ein nutzbares Ausgangssignal umwandeln kann. Dies ist der am häufigsten verwendete Typ verschiedener Sensoren. Mit der Entwicklung moderner Instrumente werden Miniaturisierung, Integration und Digitalisierung zu einer wichtigen Richtung in der Entwicklung von Sensoren.
Der von der US-amerikanischen DALLAS Semiconductor Company eingeführte digitale Temperatursensor DS18B20 verwendet ein einziges Busprotokoll. Das heißt, die Schnittstelle zum FPGA belegt ohne externe Komponenten nur einen I/O-Port und wandelt die Umgebungstemperatur direkt in ein digitales Signal um. Die serielle Ausgabe in Form eines digitalen Codes vereinfacht das Schnittstellen design zwischen Sensor und FPGA erheblich.
Die Pins sind wie folgt:
Der Mess temperaturbereich des DS18B20 beträgt -55 bis +125 °C und die Genauigkeit beträgt ±0,5 °C. Die Vor-Ort-Temperatur (in Echtzeit) wird direkt digital über einen „Single Bus“ übertragen, was die Anti-Interferenz-Leistung des Systems erheblich verbessert. Es kann die gemessene Temperatur direkt ablesen und durch einfache Programmierung entsprechend den tatsächlichen Anforderungen einen Lesemodus für 9 bis 12-stellige digitale Werte realisieren. Es arbeitet im Spannungsbereich von 3 bis 5,5 V und verfügt über eine Vielzahl von Verpackungsformen, wodurch das Systemdesign flexibel und praktisch ist. Die eingestellte Auflösung und die vom Benutzer eingestellte Alarmtemperatur werden im EEPROM gespeichert und bleiben nach dem Ausschalten erhalten. Seine interne Struktur ist in der Abbildung dargestellt:
Das Strukturblockdiagramm des Caches lautet wie folgt:
Wie aus der obigen Abbildung ersichtlich ist, verfügt der DS18B20-Cache über insgesamt neun 8-Bit-Register, von denen das niederwertige Bit (LSB) der Temperaturdaten der Byteadresse 0 entspricht und das höherwertige Bit (MSB) der Byteadresse 0 entspricht ) der Temperaturdaten entspricht der Byteadresse 1. Analog dazu ist die Byteadresse des Konfiguration registers 4. Das Format der Temperatur datenspeicherung ist wie folgt:
Der DS18B20 ist ab Werk standardmäßig mit 12-Bit-Temperaturdaten konfiguriert, wobei das höchste Bit das Vorzeichenbit ist, d. h. der Temperaturwert hat insgesamt 11 Bits und die niedrigsten vier Bits sind Dezimalstellen. Wenn das FPGA Temperaturdaten liest, liest es jeweils 2 Bytes, also insgesamt 16 Bits. Wandeln Sie nach dem Lesen die untere 11-stellige Binärzahl in eine Dezimalzahl um und multiplizieren Sie sie dann mit 0,0625, um den tatsächlich gemessenen Temperaturwert zu erhalten.
Darüber hinaus ist es notwendig, die positive und negative Temperatur zu beurteilen. Die ersten 5 Ziffern sind Vorzeichenbits. Diese 5 Ziffern ändern sich gleichzeitig und wir müssen nur eine davon beurteilen. Wenn die ersten fünf Bits 1 sind, ist die gelesene Temperatur ein negativer Wert, und der gemessene Wert muss invertiert werden, plus 1, und dann mit 0,0625 multipliziert werden, um den tatsächlichen Temperaturwert zu erhalten. Wenn die ersten fünf Bits 0 sind, ist die gemessene Temperatur ein positiver Wert. Multiplizieren Sie einfach den gemessenen Wert mit 0,0625, um den tatsächlichen Temperaturwert zu erhalten.
Das vierte Byte im Cache ist das Konfiguration register. Der Benutzer kann die Auflösung von DS18B20 konfigurieren, indem er die Werte von R1 und R0 ändert. Die Standardeinstellung beim Einschalten ist R1=1 und R0=1 (12-Bit-Auflösung). Es ist zu beachten, dass die Konvertierungszeit mit der Auflösungszeit zusammenhängt. Darüber hinaus sind das höchste Bit und die unteren 5 Bits im Register für die interne Verwendung reserviert und können nicht geschrieben werden. Der Zusammenhang zwischen Konvertierungszeit und Anzahl der Stellen ist in der folgenden Tabelle dargestellt:
Wie bedient man DS18B20, um die Temperatur umzuwandeln und abzulesen? Gehen Sie wie folgt vor:
1. Initialisierung
Alle Ereignisse auf dem 1-Wire-Bus müssen mit der Initialisierung beginnen. Die Initialisierungssequenz besteht aus einem Reset-Impuls vom Master am Bus, gefolgt von einem Anwesenheit impuls als Reaktion vom Slave. Dieser Präsenzimpuls teilt dem Busmaster mit, dass der DS18B20 am Bus angeschlossen und betriebsbereit ist. Alle spezifischen Zeitangaben werden in Kapitel 1.4 vorgestellt.
2. ROM-Befehl
Nach Abschluss der Initialisierung können ROM-Befehle ausgeführt werden. Diese Befehle arbeiten mit dem 64-Bit-ROM-Code jedes Geräts und können zur Identifizierung jedes Geräts verwendet werden, wenn mehrere Geräte an den Bus angeschlossen sind. Es gibt insgesamt 5 ROM-Befehle, jeder Befehl ist 8 Bit lang.
Search ROM[F0h]: Wenn das System eingeschaltet und initialisiert wird, kann das Master-Gerät die ROM-Codes aller Slave-Geräte am Bus identifizieren. Dadurch kann das Master-Gerät den Typ und die Anzahl der Slave-Geräte am Bus bestimmen.
Read ROM[33h]: Mit diesem Befehl kann das Master-Gerät den 64-Bit-ROM-Code des DS18B20 lesen. Dieser Befehl kann nur verwendet werden, wenn nur ein DS18B20 am Bus vorhanden ist. Wenn sich mehrere Slave-Geräte am Bus befinden, führt das Senden dieses Befehls zu Datenkonflikten, wenn alle Slave-Geräte antworten.
Match ROM[55h]: Auf den Match ROM-Befehl folgt ein 64-Bit-ROM-Code, der es dem Master ermöglicht, einen bestimmten DS18B20 auf dem Multidrop-Bus zu lokalisieren. Nur DS18B20s, die genau mit der 64-Bit-ROM-Sequenz übereinstimmen, reagieren. Alle anderen Slave-Geräte am Bus warten auf den nächsten Reset-Impuls. Dieser Befehl kann verwendet werden, wenn einzelne oder mehrere Geräte am Bus vorhanden sind.
ROM[CCh] überspringen: Dieser Befehl kann mit dem nächsten Schritt fortfahren, ohne den 64-Bit-ROM-Code bereitzustellen, was bei einem Einzelpunktbus (einem DS18B20-Sensor) Zeit sparen kann. Wenn sich mehr als ein Slave-Gerät am Bus befindet und nach dem Überspringen des ROM-Befehls ein Lesebefehl ausgegeben wird, führen alle Slave-Geräte gleichzeitig Temperatur konvertierungen durch und es kommt zu einem Datenkonflikt auf dem Bus.
Alarmsuche [ECh]: Die Funktionsweise dieses Befehls ist grundsätzlich dieselbe wie die des Skip ROM-Befehls, der Unterschied besteht jedoch darin, dass nur Slave-Geräte mit einer Temperatur über TH oder unter TL (die einen Alarmzustand erreichen) reagieren. Solange kein Stromausfall vorliegt, bleibt der Alarmstatus bestehen, bis die Temperatur nicht mehr im Alarmbereich liegt.
Wenn das Master-Gerät am Bus über einen ROM-Befehl feststellt, welcher DS18B20 kommunizieren kann, kann das Master-Gerät einen Funktionsbefehl an eines der Slave-Geräte senden. Mit diesen Befehlen kann das Master-Gerät das Slave-Gerät steuern, um eine Reihe von Vorgängen auszuführen.
Temperatur umrechnung [44h]: Dieser Befehl initialisiert eine einzelne Temperatur umrechnung. Nachdem die Temperatur konvertierung abgeschlossen ist, werden die konvertierten Temperaturdaten in Byte0 (untere acht Bits der Temperaturdaten) und Byte1 (höhere acht Bits der Temperaturdaten) im Cache gespeichert, und dann kehrt der DS18B20 in den Ruhezustand mit geringem Stromverbrauch zurück . Wenn der Bus nach diesem Befehl einen Lesezeitschlitz ausgibt, antwortet der DS18B20 mit einer „0“, wenn eine Temperatur konvertierung läuft, oder mit einer „1“, wenn die Temperatur konvertierung abgeschlossen ist. Wenn der Stromversorgungsmodus „Parasitäre Stromversorgung“ verwendet wird, sollte der Bus unmittelbar nach der Befehlsausgabe gezwungen werden, hochgezogen zu werden, und die Hochziehzeit sollte größer sein als die Zeitanforderungen.
Scratchpad schreiben [4Eh]: Dieser Befehl veranlasst das Master-Gerät, 3 Byte Daten in den Cache zu schreiben. Das erste Byte wird in Byte2 des Caches (TH-Register) geschrieben, das zweite Datenbyte wird in Byte3 (TL-Register) geschrieben und das dritte Datenbyte wird in Byte4 (Konfiguration register) geschrieben. Alle Daten werden der Reihe nach vom Low-Bit zum High-Bit geschrieben. Ein Reset kann den Schreibvorgang jederzeit unterbrechen.
Lesen Sie den Cache [BEh]: Lesen Sie den Wert im Cache, beginnend bei Byte0 (die unteren acht Bits der Temperatur) und lesen Sie bis Byte8 (CRC-Prüfung). Jedes Datenbyte wird beginnend mit dem unteren Bit übertragen. Wenn Sie nicht so viele Daten lesen möchten, können Sie es jederzeit beim Lesen von Daten durch Zurücksetzen beenden.
Cache kopieren [48h]: Dieser Befehl kopiert die Werte in TH (Byte2), TL (Byte3) und Konfiguration register (Byte4) im Cache in den nichtflüchtigen Speicher EEPROM. Wenn der Buscontroller nach diesem Befehl einen Lesezeitschlitz ausgibt und der DS18B20 damit beschäftigt ist, den Notizblock in den EEPROM-Speicher zu kopieren, gibt der DS18B20 eine „0“ aus. Wenn der Kopiervorgang abgeschlossen ist, gibt der DS18B20 eine „1“ aus. Wenn das Gerät im Modus „Parasitäre Stromversorgung“ mit Strom versorgt wird, muss der Bus unmittelbar nach dem Senden dieses Befehls für mindestens 10 ms auf High gesetzt werden.
EEPROM abrufen[B8h]: Dieser Befehl ruft den Temperaturalarm-Auslösewert (TH und TL) und die Konfiguration registerdaten vom EEPROM in den Cache ab. Dieser Vorgang wird automatisch einmal nach dem Einschalten ausgeführt, sodass beim Einschalten immer gültige Daten im temporären Register vorhanden sind. Wenn der Lesezeitschlitz nach dem Rückrufbefehl initiiert wird, antwortet der DS18B20 mit „0“, wenn der Rückruf des EEPROMs läuft, und mit „1“, wenn der Rückruf abgeschlossen ist.
Stromversorgungsmodus lesen [B4h]: Mit diesem Befehl kann gelesen werden, ob der DS18B20 am Bus von einer „parasitären Stromversorgung“ versorgt wird. In der Lesedaten-Timing-Sequenz bedeutet „0“ eine Stromversorgung im Modus „parasitäre Stromversorgung“ und „1“ bedeutet eine externe Stromversorgung.