ShIoTiny und die Welt: Analoge Sensoren oder ADCs für die Kleinsten

Bild


Wichtige Punkte oder worum es in diesem Artikel geht


Fortsetzung einer Reihe von Artikeln über ShIoTiny - eine visuell programmierbare Steuerung auf Basis des ESP8266- Chips. Ein Hauptmerkmal dieses Controllers ist die Möglichkeit, ihn durch Zeichnen eines Programms in einem Browser zu programmieren.


Dieser Artikel beschreibt eine kurze Theorie der Analog-Digital-Wandlung und die praktische Anwendung des ShIoTiny ADC-Controllers.


Frühere Artikel in der Reihe.


ShIoTiny: kleine Automatisierung, das Internet der Dinge oder „sechs Monate vor den Ferien“


ShIoTiny: Knoten, Links und Ereignisse oder Funktionen von Zeichenprogrammen


ShIoTiny: Nassraumlüftung (Beispielprojekt)


ShIoTiny und die umliegende Welt: Anschließen von Sensoren an Binäreingänge, Kontaktsprung und andere Probleme


Projektseite


Binäre Firmware, Controller-Schaltung und Dokumentation hier


Einführung oder statt ernsthafter Theorie


In einem früheren Artikel haben wir die Verbindung der wichtigsten Sensortypen mit einem Binärausgang mit den Binäreingängen des ShIoTiny- Controllers untersucht.


Aber wie die meisten Menschen sowie Schüler und Schüler wissen, sind die meisten Informationen über die Umgebung analoge Größen verschiedener physikalischer Natur: die Kraft von Licht und Ton, Geschwindigkeit, Luftdruck, Flüssigkeitsstand und so weiter.


Fast alle modernen Mikroprozessoren und Mikrocontroller können nur diskrete Werte in binärer Darstellung verarbeiten.


Für diejenigen, die noch nicht wissen, wie sich der Analogwert vom diskreten unterscheidet, werde ich kurze Erklärungen schreiben. Wer schon alles weiß, kann sie überspringen. Ich werde sofort eine Reservierung vornehmen - Analogien und Vereinfachungen müssen einen Platz haben. Dies ist keine Dissertation, sondern eine kurze Erklärung an den Fingern.


Analoge und diskrete Größen (Sie können Professoren, Akademikern und Geeks nicht vorlesen)


Alle haben in der Schule Mathematik studiert. Deshalb wenden wir uns dem zu und ziehen Analogien zwischen analogen und diskreten Größen und Zahlen.


Aus mathematischer Sicht ist eine analoge Größe eine reelle Zahl, die an jedem Punkt eines bestimmten Abschnitts einer Zahlenlinie definiert wird.


Der diskrete Wert aus mathematischer Sicht ist eine ganze Zahl . Und es wird nur an bestimmten Punkten eines bestimmten Abschnitts einer Zahlenlinie definiert.


Die folgende Abbildung zeigt schematisch die Position von analogen und diskreten Mengenzahlen auf einer Zahlenlinie.


Bild


Betrachten Sie beispielsweise ein Segment einer Zahlenlinie von -4 bis 3 . Wie Sie sehen können, sind diskrete Größen, die durch rote Punkte angezeigt werden - ganze Zahlen darauf - nur 8 Teile. Die durch die grüne Linie in der Abbildung gezeigten Analogwerte sind endlos.


Zum Beispiel haben wir eine bestimmte Größe X , die einen Wertebereich von 0 bis 127 hat . Wenn wir diese Größe als analog darstellen , können wir sie theoretisch mit beliebiger Genauigkeit darstellen - zum Beispiel 12.123455454980 oder 126.00000000007 oder im Allgemeinen mit einer Million Dezimalstellen.


Sobald der Mikrocontroller in das Geschäft eintritt und der Wert von X eine diskrete Darstellung erhält, kann auch theoretisch nicht von einer „unendlichen Genauigkeit“ gesprochen werden. Die Genauigkeit wird durch die Anzahl der Binärziffern begrenzt, die wir der Darstellung der Größe X zuordnen.


Zum Beispiel nehmen wir 7 Bits. In diesem Fall können wir den Wert von X mit einer Genauigkeit von eins darstellen. Das heißt, es wird möglich sein, X = 1 oder X = 112 anzugeben. X = 112,5 kann jedoch nicht bereits angegeben werden - es ist nicht genügend Bittiefe vorhanden. Wenn wir für die Darstellung des gleichen Wertes von X nicht 7 , sondern 10 Stellen nehmen, ist die Genauigkeit der Darstellung nicht eins, sondern 0,125 . Und in dieser Form können Sie sich X = 95,125 oder X = 112,5 vorstellen. Genauer gesagt zum Beispiel in der Form X = 112.13 - dieser Wert kann nicht bereits dargestellt werden.


Wenn Sie durch die Tatsache verwirrt sind, dass ich Bruchwerte schreibe und gleichzeitig von ihnen als Ganzzahlen spreche, denken Sie daran, dass "diskrete Punkte" auf einer Zahlenlinie nicht in Einheiten, sondern beispielsweise in 0,5 oder 0,125 Einheiten platziert werden können. Der endgültige Wert bleibt jedoch in jedem Segment erhalten. Und alle Eigenschaften einer diskreten Menge bleiben erhalten.


Der Hauptunterschied zwischen einem diskreten und einem analogen Wert besteht darin, dass es auf jedem endlichen Segment der Zahlenlinie eine endliche Anzahl von diskreten (ganzzahligen) Werten und eine unendliche Anzahl von analogen (reellen) Werten gibt. Dementsprechend erhalten wir, dass die diskrete Darstellung von Größen immer eine endliche Genauigkeit hat.


Als Ergebnis all dessen erhalten wir eine triviale Schlussfolgerung . Die meisten messbaren Größen der realen Welt sind analog . Mikrocontroller arbeiten nur mit diskreten numerischen Darstellungen von Größen. Daher muss dieser Wert vor der Verarbeitung eines Analogwerts mit einem Mikrocontroller als diskreter Wert dargestellt werden. Ja und in binärer Form.


Eine solche Umwandlung von analog zu digital wird als Analog-Digital-Umwandlung bezeichnet .


Analog-Digital-Wandler


Ein Gerät zur Umwandlung eines analogen in ein digitales Signal wird als ADC ( Analog-Digital-Wandler ) bezeichnet.


Typischerweise hat ein solches Gerät einen oder mehrere analoge Eingänge, an die ein analoges Signal und ein digitaler Ausgang mit einer bestimmten Bittiefe geliefert werden (normalerweise 8 bis 16 Bit).


Moderne Mikrocontroller, einschließlich unseres ESP8266 , verfügen über integrierte ADC-Einheiten.


Welche Eigenschaften haben der ADC im Allgemeinen und der ESP8266 ADC im Besonderen?


Das erste Merkmal ist, welche Art von analogem Eingangswert der ADC in einen digitalen Ausgangscode umwandelt. Meistens ist dieser Wert die Spannung am Analogeingang des ADC. So wird es in unserem Fall sein. In der Natur gibt es jedoch ADCs mit Stromeingang.


Das zweite Merkmal des ADC, das in der Praxis benötigt wird, ist der Wertebereich des Eingangswerts des ADC. In unserem Fall sind dies die minimalen und maximalen Spannungswerte am Eingang des ADC. Diese Werte betragen 0 V bzw. 1 V. Der Eingangsbereich von 1 V scheint klein zu sein, aber große Spannungen können immer geteilt und reduziert werden, und kleine Spannungen können verstärkt werden.


Das dritte und vielleicht wichtigste Merkmal des ADC ist seine Kapazität. Dieser Wert bestimmt die Genauigkeit der Transformation oder (nach unserer Analogie) - wie oft die "diskreten" Punkte auf der "reellen" Zahlenlinie platziert werden. In unserem Fall hat der ADC eine Auflösung von 10 . Was bedeutet das? Dies bedeutet, dass der ausgegebene digitale Code durch 10 Binärziffern dargestellt wird und 1024 Werte aufweist - von 0 bis 1023.
Genau genommen ist zu beachten, dass die Konvertierungsgenauigkeit nicht nur von der Bittiefe abhängt, sondern auch von einer Reihe anderer Parameter, beispielsweise der Linearität des ADC. Aber sehr kluge Onkel haben bereits viel darüber in sehr klugen Büchern darüber geschrieben, deshalb werde ich den Leser in diesem Artikel ohne Details lassen.


Darüber hinaus kann der ADC ESP8266 einen Überlauf erkennen, dh eine Situation, in der eine Spannung von mehr als 1 V an den Eingang angelegt wird.


Wenn Sie ein intelligentes Nachschlagewerk über ADCs nehmen und dort nachsehen, gibt es Dutzende anderer Merkmale. Alle von ihnen sind notwendig und wichtig, aber wir werden nicht so weit gehen. Zum Beispiel werden wir die Zeitparameter des ADC nicht berühren , weil wir glauben, dass sich in unserem Fall die gemessenen Werte ziemlich langsam ändern und der ADC sie „sofort“ in eine digitale Darstellung umwandelt.


Um das vorläufige Ergebnis zusammenzufassen .
Der ShIoTiny- Controller verfügt über einen im ESP8266 integrierten ADC.


Am Eingang des ADC ESP8266 wird eine Spannung im Bereich von 0 bis 1 V angelegt.


Am Ausgang des ESP8266 ADC erhalten wir eine Zahl proportional zur Eingangsspannung im Bereich von 0 bis 1023 . Die Spannung 0 V entspricht dem Code 0 am ADC-Ausgang, die Spannung 1 V entspricht dem Code 1023 am ADC-Ausgang.


Das Lesen von Daten vom ADC in ShIoTiny erfolgt mit einer Geschwindigkeit von ungefähr 10 Mal pro Sekunde .


Der Hardware-Eingang des ADC ist gegen Überspannung geschützt, ähnlich wie die Binäreingänge Input1,2,3 geschützt sind ( siehe hier ).


Das war's für die ShIoTiny ADC-Hardware .


Betrachten wir nun den ADC1- Knoten, der Daten vom ESP8266- Hardware- ADC verarbeitet .


Software Schnickschnack ADC1


Im Programmdiagramm im ElDraw- Editor heißt die Analog-Digital-Wandlerbaugruppe ADC1 .



Wie bereits erwähnt, empfängt der ADC1- Knoten ungefähr 10 Mal pro Sekunde Daten vom ESP8266- Hardware- ADC . Der angegebene Knoten beruhigt sich jedoch nicht, sondern beginnt, diese Daten zu verarbeiten und sogar ein wenig zu analysieren.


Zunächst wird überprüft, ob ein ADC-Überlauf aufgetreten ist. Das heißt - hat der ADC nicht mehr als 1 V eingegeben? Wenn eine solche Situation erkannt wird, wird der Ausgang des ADC1- Knotens auf NAN ( keine Nummer ) gesetzt.


Zweitens wird , wenn kein Überlauf aufgetreten ist , der Ausgangswert des ADC 0..1023 in den Spannungswert am Eingang des ADC umgewandelt u i n - eine Gleitkommazahl im Bereich 0..1 .


Drittens wird dieser umgerechnete Wert 0..1 gemäß der Formel neu berechnet X = k c d o t u i n + b  wo u i n - Spannung am Eingang des ADC (von 0 bis 1 V ); k ist der Bereich ( ADC-Bereich ) und b ist der Versatz ( ADC-Versatz ). Und schließlich wird der erhaltene Wert von X auf den Ausgang des ADC1- Knotens gesetzt.


Und schließlich im fünften . Wenn sich der Wert von X um einen bestimmten Prozentsatz (von 1 auf 100% ) geändert hat, generiert die ADC-Einheit Ereignisse, die eine Konvertierung der Werte der mit ihr verbundenen Knoten bewirken. Dies ist im Wesentlichen der ADC-Empfindlichkeitsparameter ( ADC-Änderungen, Bereich% ). Schließlich gibt es normalerweise keinen Grund, „auf jedes Niesen“ zu reagieren, dh auf spärliche Änderungen in den unteren Bits des ADC - sie machen oft „Geräusche“. Daher ist der Empfindlichkeitsparameter von großer praktischer Bedeutung.


Es stellt sich die berechtigte Frage: Wie konfigurieren wir diese Einstellungen? Klicken Sie mit der Maus auf den ADC1- Knoten im Diagramm und genau dort sehen Sie ein Einstellungsfenster.


Darin können Sie alles einstellen, was Sie brauchen. In unserem Fall handelt es sich um ein solches Fenster wie in der Abbildung.


Bild


In diesem Fenster können Sie alle oben genannten Parameter einstellen - Bereich, Offset und Empfindlichkeit des ADC.


Wenn Sie nichts angegeben haben, ist der Bereich 1. Der Versatz ist Null. Und die Empfindlichkeit beträgt 1%.


Das heißt, standardmäßig ist der Ausgang des ADC1- Knotens der Wert der analogen Spannung, die dem ADC-Eingang zugeführt wird.


Wie Sie sehen können, ist der ADC1- Knoten ziemlich komplex. Warum wird das alles gemacht? Ja für Sie, meine lieben Benutzer! Nur ein Scherz, natürlich, als bösartiger Egoist habe ich frühere Erfahrungen berücksichtigt und versucht, mein Leben leichter zu machen.


Wir als einfache Ingenieure möchten, dass die Werte nicht in "Papageien", sondern in normalen und verständlichen Werten dargestellt werden - Volt, Ampere, Kilogramm oder Meter.


Viele Sensoren geben den Wert „bei Papageien“ aus, in der Hoffnung, dass ein intelligenter Mikrocontroller sie auf die gewünschten Werte neu berechnet.


Zu diesem Zweck wurde die Umwandlung des gemessenen ADC-Wertes durch die Funktion des gegebenen eingeführt.


Aber wie immer ist es besser, einmal zu sehen als zehnmal zu hören. Es ist auch besser, es einmal zu versuchen als zehn Mal zu sehen ... Aber das ist nicht der Punkt.
Daher werde ich einige nicht komplizierte Beispiele nennen: ein Stromversorgungssystem und ein Temperaturmesssystem, das auf einem Sensor mit einem Stromausgang von 4 bis 20 mA basiert.


Netzüberwachung


Das Messen von Spannung ist eine häufige Aufgabe. Zum Beispiel wollen wir die Spannung des Netzes ~ 220V messen . Wenn wir eine schlechte Stromversorgung haben, ist die Aufgabe sehr real. Wir brauchen keine sehr, sehr genaue Änderung. Es reicht aus, wenn Relais1 bei ShIoTiny ausgelöst wird, wenn die Spannung 15% über der Norm liegt , und wenn die Spannung um 15% gegenüber der Norm reduziert wird , wird Relais2 ausgelöst .


Natürlich können wir den ADC1- Eingang des ShIoTIny- Controllers nicht in eine Buchse stecken . Was zu tun ist? Erstens muss die Spannung auf ein akzeptables Niveau reduziert werden - 0,1 V. Und zweitens muss es gleichgerichtet werden: Unser ADC kann die Wechselspannung nicht messen.


Die Spannung im Netzwerk kann sowohl unter als auch über der Norm liegen. Der Einfachheit halber nehmen wir an, dass 220 V der Netzspannung 0,5 V der Spannung am Eingang des ADC entsprechen.


Als nächstes suchen wir nach einem Abwärtstransformator, der bei ~ 220 V der Eingangsspannung etwa 3 V der Ausgangsspannung liefert , und bauen eine solche Schaltung wie in der folgenden Abbildung zusammen.



Hier kann eine Überraschung die Unwissenden in der Elektronik erwarten. Am Ausgang des Gleichrichters erscheint plötzlich nicht mehr 3V Gleichspannung, sondern etwas 4V plus! In der Tat wird alles einfach erklärt. Wenn wir eine Wechselspannung messen, zeigt uns das Voltmeter den tatsächlichen Spannungswert an. Und wenn wir diese Spannung gleichrichten, erhalten wir am Ausgang des Gleichrichters den Spitzenwert der Spannung, der für das sinusförmige Signal ungefähr 1,41 beträgt, und zwar genau  s q r t 2 mal mehr als die aktuelle. Daher die "unverständlichen" 4,23 V am Ausgang des Gleichrichters.


Und schließlich müssen wir den Spannungsteiler berechnen, dh den Widerstand R1 und R2 . Wir müssen am Ausgang des Teilers 0,5 V mit einer Spannung am Eingang 4,23 V erreichen . Die gleichgerichtete Spannung von 4,23 V sollte also durch das 8,46- fache geteilt werden. Stellen Sie dazu den Widerstand R2 = 100 Ohm und den Widerstand R1 = 746 Ohm ein . Das ist aber ideal. Tatsächlich existieren keine Widerstände mit einem Widerstand von 746 Ohm . Ja, und Transformatoren sind nicht besonders genau. Wenn sich jemand traut, diese Lösung auszuprobieren, empfehle ich Ihnen dringend , den Widerstand R1 = 760 Ohm und den Widerstandstrimmer R2 mit einem Widerstand von 180 Ohm oder 220 Ohm zu verwenden . Dann können Sie mit einem Voltmeter R2 so einstellen, dass bei ~ 220 V die Spannung an der Primärwicklung des Transformators am Ausgang des Teilers (oder, was am Eingang von ADC1 gleich ist ) = 0,5 V beträgt.


Wir messen die Spannung nicht nur so, sondern um etwas zu tun, indem wir sie von der Norm überschreiten oder verringern. Schalten Sie beispielsweise die Backup-Stromversorgung ein, damit einige Geräte nicht durchbrennen und sich nicht ausschalten.


Daher werden wir das einfachste Programmschema zeichnen, das bewirkt, dass das Relais Relais1 funktioniert , wenn die Spannung 15% über der Norm liegt, und wenn die Spannung um 15% von der Norm abfällt , das Relais Relais2 funktioniert . Außerdem muss die Über- oder Unterspannung im Netzwerk mindestens 1 Minute lang aufrechterhalten werden, um ein Relais auszulösen. Dies verhindert Fehlalarme bei kurzen Spannungsspitzen, die häufig im Netzwerk auftreten. Das Schema-Programm, das unsere Idee umsetzt, ist in der Abbildung dargestellt.


Bild


Damit diese Schaltung funktioniert, muss der Koeffizient k (Bereich) in den Einstellungen der ADC-Parameter auf 440 eingestellt werden, wie in der Abbildung gezeigt.


Bild


Mit einem Koeffizienten von 440 und einer Spannungsspannung am Eingang des ADC 0,5 V beträgt der Ausgang des ADC1- Knotens 220 . Das ist die reale Netzspannung!


Dies ist sehr praktisch, da Sie die Konstanten sofort in Volt einstellen können : 220 V + 15% sind 253 V und 220 V - 15% sind 187 V. Bei Bedarf können diese Werte leicht geändert werden, ohne Zeit mit der Berechnung und Umwandlung der Spannung in „Papageien“ zu verschwenden.


4-20mA Temperatursensor


Sensoren mit einer Stromabgabe von 4 bis 20 mA sind in der Industrie weit verbreitet. Im Alltag werden Sie sie nicht oft treffen. Trotzdem hat jemand sie und dieser will sie an die Sache anpassen.


Der ADC ermöglicht die Verwendung solcher Sensoren in Verbindung mit dem ShIoTiny- Controller.


Warum ist der Sensorausgangsstrom und genau 4-20mA ? Ich werde es erklären.


Stromausgänge funktionieren gut auf langen Leitungen. Sag einen Kilometer. Der Widerstand der Drähte ist ihnen egal: Der Strom ist über die gesamte Länge des Drahtes gleich, unabhängig vom Widerstand der Leiter.


Der anfängliche Stromwert von 4 mA und nicht nur der fehlende Strom machen es einfach, einen Drahtbruch zu erkennen. Wenn der Sensor ganz ist und der Draht nicht gebrochen ist, ist immer Strom vorhanden. Mindestens 4mA . Und wenn der Draht bricht, gibt es keinen Strom ( 0mA ).


Angenommen, wir haben einen Temperatursensor mit einer Stromabgabe von 4 bis 20 mA und einem Bereich der gemessenen Temperatur von -40 ° C bis + 125 ° C. Wir wollen es mit ShIoTin verbinden . Als erstes müssen wir den Strom in Spannung umwandeln. Ein ideales Mittel für eine solche Umwandlung ist ein herkömmlicher Widerstand.


Da die maximale Spannung am Eingang des ADC 1 V beträgt und der maximale Strom in der Leitung 20 mA beträgt, kann leicht berechnet werden, dass ein Widerstand, der 20 mA in 1 V umwandelt, einen Widerstand von 50 Ohm hat . ( Kenne Ohmsches Gesetz nicht - bleib zu Hause! ).


Wir werden unseren Sensor wie in der Abbildung gezeigt anschließen.


Bild


Der Sensor ist ein Stromgenerator proportional zur gemessenen Temperatur. Bei einem Widerstand von 50 Ohm , der parallel zum ADC1- Eingang geschaltet ist, liegen die folgenden Spannungswerte am ADC-Eingang, abhängig vom in der Sensorschaltung erzeugten Strom:


  • Strom kleiner als 4mA , Spannung am ADC-Eingang kleiner als 0,2 V - Leitungsbruch;
  • Strom von 4mA bis 20mA , Spannung von 0,2V bis 1V - der Sensor arbeitet;
  • Strom ist größer als 20mA , Eingangsspannung ist größer als 1V - der Sensor ist defekt. Bei einem Kurzschluss im Sensor kann ein 50-Ohm-Widerstand durchbrennen, wenn die Leistung unter 2 W liegt.

Angenommen, wir möchten die Temperatur messen und durch MQTT veröffentlichen . Zusätzlich veröffentlichen wir den Status des Sensors (Unterbrechung, Kurzschluss oder alles ist in Ordnung).


Das erste, was wir tun müssen, ist den Wert von den "Papageien" in Grad neu zu berechnen. Wenn wir wissen, dass eine Temperatur von -40 ° C einem Strom von 4 mA und einer Spannung am Eingang des ADC von 0,2 V entspricht und eine Temperatur von +125 ° C einem Strom von 20 mA und einer Spannung am Eingang des ADC von 1 V entspricht , erhalten wir die Koeffizienten: k = 206,25 und b = -81,25 . Geben Sie diese Koeffizienten in das ADC-Einstellungsfenster ein, wie in der Abbildung gezeigt.


Bild


Wer die Richtigkeit der Berechnung von k und b selbst überprüfen möchte, entscheidet selbst über das einfachste Gleichungssystem:


 beginFälle0,2 cdotk+b=401 cdotk+b=125 endFälle


Nun, das Programmschema wird überhaupt nicht kompliziert sein und ist in der folgenden Abbildung dargestellt.


Bild


Wenn alles in Ordnung ist und der 4-20-mA- Temperatursensor funktioniert , wird die Temperatur auf dem MQTT- Server unter dem Namen / t_sens veröffentlicht . Die Symptome werden auch unter den Namen / sens_short und / sens_break veröffentlicht . Wenn alles in Ordnung ist, sind die Anzeichen eines Unfalls Null.


Wenn die Leitung bricht , liegt die Temperatur unter -40 ° C. In diesem Fall wird der Parameter / sens_break auf dem MQTT- Broker als Einheit veröffentlicht.


Wenn die Leitung einen Kurzschluss aufweist, beträgt die Temperatur mehr als + 125 ° C.In diesem Fall liegt am Eingang des ADC eine Spannung von mehr als 1 V an, und die ADC-Einheit setzt den Ausgang auf NAN ( Nicht-Nummer ). In diesem Fall wird der Parameter / sens_short auf dem MQTT- Broker als Einheit veröffentlicht.


Wenn einer der Alarme auftritt , löst das Relais3- Relais aus , wodurch beispielsweise der Sensor ausgeschaltet werden kann.


«» , , , 200 .


Fazit


ShIoTiny , . , .


, - «» , - , - .


— . .


: shiotiny@yandex.ru .


Referenzen


, , .




-


Analoges und digitales Signal. Arten von Signalen und wie es funktioniert


Liste der Spannungs- und Stromparameter


Analoge Feldschnittstellen: 4-20 mA Stromschleife - von einfach bis komplex


EINSTELLEN DES ESPPOWER CLOUD-MANAGEMENTS ÜBER DAS INTERNET MIT ANDROID

Source: https://habr.com/ru/post/de466443/


All Articles