Arbeiten mit Hall-Effekt-Stromsensoren: ACS758

Hallo allerseits!

Vielleicht lohnt es sich, sich ein wenig vorzustellen - ich bin ein regelmäßiger Schaltungsingenieur, der sich auch für Programmierung und einige andere Bereiche der Elektronik interessiert: DSP, FPGA, Funkkommunikation und einige andere. Kürzlich stürzte ich mich kopfüber in SDR-Empfänger. Zuerst wollte ich meinen ersten Artikel (ich hoffe nicht den letzten) einem ernsteren Thema widmen, aber für viele wird es nur eine Lesesache und bringt keinen Nutzen. Daher wurde das Thema hochspezialisiert ausgewählt und ausschließlich angewendet. Ich möchte auch darauf hinweisen, dass wahrscheinlich alle Artikel und Fragen darin eher von der Seite des Schaltungsdesigners und nicht vom Programmierer oder sonst jemandem betrachtet werden. Nun - lass uns gehen!

Vor nicht allzu langer Zeit habe ich den Entwurf des "Energieüberwachungssystems für ein Wohngebäude" bestellt. Der Kunde ist mit dem Bau von Vorstadthäusern beschäftigt, sodass einige von Ihnen mein Gerät möglicherweise bereits gesehen haben. Dieses Gerät maß die Verbrauchsströme an jeder Eingangsphase und Spannung und sendete gleichzeitig Daten über den Funkkanal an das bereits installierte Smart Home-System. + Er konnte den Anlasser am Eingang des Hauses abschalten. Im heutigen Gespräch geht es jedoch nicht um ihn, sondern um seine kleine, aber sehr wichtige Komponente - den aktuellen Sensor. Und wie Sie bereits aus dem Titel des Artikels verstanden haben, handelt es sich hierbei um berührungslose Stromsensoren von Allegro - ACS758-100 .
________________________________________________________________________________________________________________________

Das Datenblatt, über das ich über den Sensor sprechen werde, finden Sie hier . Wie Sie sich vorstellen können, ist die Zahl „100“ am Ende der Markierung der maximale Strom, den der Sensor messen kann. Ehrlich gesagt - ich habe Zweifel daran, es scheint mir, dass die Schlussfolgerungen 200 A für eine lange Zeit einfach nicht standhalten können, obwohl es für die Messung des Einschaltstroms durchaus geeignet ist. In meinem Gerät durchläuft ein 100A-Sensor ohne Probleme ständig mindestens 35A + es gibt Verbrauchsspitzen von bis zu 60A.

Bild
Abbildung 1 - Aussehen des Sensors ACS758-100 (50/200)

Bevor Sie zum Hauptteil des Artikels übergehen, sollten Sie sich mit zwei Quellen vertraut machen. Wenn Sie Grundkenntnisse in Elektronik haben, sind diese überflüssig und können diesen Absatz überspringen. Ich rate dem Rest, sich mit der allgemeinen Entwicklung und dem Verständnis zu befassen:

1) Der Hall-Effekt. Phänomen und Funktionsprinzip
2) Moderne Stromsensoren
________________________________________________________________________________________________________________________

Nun, beginnen wir mit dem wichtigsten, nämlich der Markierung. Ich kaufe Komponenten in 90% der Fälle unter www.digikey.com. Komponenten kommen in 5-6 Tagen in Russland an, es gibt wahrscheinlich alles auf der Website und auch eine sehr bequeme parametrische Suche und Dokumentation. Eine vollständige Liste der Sensoren der Familie finden Sie dort auf Anfrage " ACS758 ". Meine Sensoren wurden dort gekauft - ACS758LCB-100B .

Im Datenblatt ist alles gemäß der Markierung markiert, aber ich werde immer noch auf den Schlüsselpunkt " 100 V " achten :

1) 100 ist die Messgrenze in Ampere, dh mein Sensor kann bis zu 100 A messen;
2) " B " - Dieser Buchstabe ist besondere Aufmerksamkeit wert. An seiner Stelle kann sich auch der Buchstabe " U " befinden. Sensor mit Buchstabe B.Wechselstrom messen können und dementsprechend direkt. Ein Sensor mit dem Buchstaben U kann nur Gleichstrom messen.

Ebenfalls am Anfang des Datenblattes befindet sich eine hervorragende Tafel zu diesem Thema:
Bild
Abbildung 2 - Arten von Stromsensoren der ACS758-Familie

Einer der wichtigsten Gründe für die Verwendung eines solchen Sensors war auch die galvanische Trennung . Die Leistungsklemmen 4 und 5 sind nicht elektrisch mit den Klemmen 1, 2, 3 verbunden. Bei diesem Sensor erfolgt die Kommunikation nur in Form eines induzierten Feldes.

Ein weiterer wichtiger Parameter ist in dieser Tabelle aufgeführt - die Abhängigkeit der Ausgangsspannung vom Strom. Das Schöne an diesem Sensortyp ist, dass er einen Spannungsausgang hat, keinen Strom, wie bei klassischen Stromwandlern, was sehr praktisch ist. Beispielsweise kann der Sensorausgang direkt mit dem ADC-Eingang des Mikrocontrollers verbunden werden und Messwerte erfassen.

Mein Sensor ist dieser Wert 20 mV / A . Dies bedeutet, dass, wenn Strom 1A durch die Klemmen 4-5 des Sensors fließt, die Spannung an seinem Ausgang um 20 mV ansteigt . Ich denke, die Logik ist klar.

Wie hoch wird im nächsten Moment die Ausgangsspannung sein? Da das Lebensmittel „menschlich“, dh unipolar ist, sollte es bei der Messung von Wechselstrom einen „Bezugspunkt“ geben. In diesem Sensor ist dieser Referenzpunkt 1/2 Stromversorgung (Vcc). Eine solche Lösung kommt häufig vor und ist praktisch. Wenn der Strom in eine Richtung fließt, beträgt der Ausgang " 1/2 Vcc + I * 0,02 V ", in der anderen Halbwelle, wenn der Strom in die entgegengesetzte Richtung fließt, beträgt die Ausgangsspannung " 1/2 Vcc - I * 0,02 V ". Am Ausgang erhalten wir eine Sinuswelle, wobei "Null" 1 / 2Vcc ist . Wenn wir Gleichstrom messen, ist der Ausgang " 1/2 Vcc + I * 0,02 V ". Bei der Verarbeitung von Daten auf dem ADC subtrahieren wir einfach die konstante Komponente 1/2 Vccund die Arbeit mit den realen Daten, die mit dem Rest I * 0,02V .

Jetzt ist es Zeit, in der Praxis zu testen, was ich oben beschrieben oder vielmehr im Datenblatt abgezogen habe. Um mit dem Sensor zu arbeiten und seine Funktionen zu überprüfen, habe ich diesen „Mini-Stand“ gebaut:

Bild
Abbildung 3 - Ort zum Testen des aktuellen Sensors

Zunächst habe ich beschlossen, den Sensor mit Strom zu versorgen und seine Leistung zu messen, um sicherzustellen, dass er „Null“ ist. er hat 1/2 Vcc genommen . Das Anschlussdiagramm kann dem Datenblatt entnommen werden, aber um mich kennenzulernen, habe ich keine Zeit verschwendet und den Filterkondensator für das Power + RC-Tiefpassfilter am Vout-Pin geformt. In einem realen Gerät nirgendwo ohne sie!

Bild
Am Ende habe ich folgendes Bild erhalten: Abbildung 4 - Das Ergebnis der Messung von "Null"

bei angelegter Stromversorgung5V von meinem STM32VL-Discovery-Schal habe ich diese Ergebnisse gesehen - 2,38V . Die erste Frage, die sich stellte: „ Warum 2,38 und nicht 2,5, die im Datenblatt beschrieben sind? “ Die Frage verschwand fast augenblicklich - ich habe den Leistungsbus zum Debuggen gemessen und dort waren es 4,76-4,77 V. Aber die Sache ist, dass die Stromversorgung von USB kommt, es gibt bereits 5V, nach USB gibt es einen linearen Stabilisator LM7805, und dies ist eindeutig kein LDO mit einem Abfall von 40 mV. Hier drauf sind es ungefähr 250 mV. Okay, das ist nicht kritisch. Die Hauptsache ist, dass „Null“ 2,38 V ist. Es ist diese Konstante, die ich bei der Verarbeitung von Daten vom ADC subtrahieren werde.

Und jetzt machen wir die erste Messung, bisher nur mit Hilfe eines Oszilloskops. Ich werde den Kurzschlussstrom meines einstellbaren Netzteils messen , er beträgt 3,06A. Dies und die eingebauten Amperemeter-Shows und Fluka ergaben das gleiche Ergebnis. Nun, verbinden die Stromversorgungsausgänge an den Schenkeln 4 und 5 des Sensors (im Bild I vituha cast) und sehen , was passiert:

Bild
Abbildung 5 - Strommessung PSU Kurzschluss

Wie wir sehen können, ist die Spannung Vout erhöht von 2.38V bis 2.44V . Wenn Sie sich die obige Abhängigkeit ansehen, sollten wir 2,38 V + 3,06 A * 0,02 V / A erhalten , was einem Wert von 2,44 V entspricht. Das Ergebnis entspricht den Erwartungen. Bei einem Strom von 3A haben wir einen Anstieg auf "Null" von 60 mV . Fazit - der Sensor funktioniert, Sie können bereits mit Hilfe von MK damit arbeiten.

Jetzt müssen Sie den Stromsensor mit einem der ADC-Pins am STM32F100RBT6-Mikrocontroller verbinden. Der Kiesel selbst ist sehr mittelmäßig, die Systemfrequenz beträgt nur 24 MHz, aber dieser Schal hat viel überlebt und sich bewährt. Ich besitze es wahrscheinlich schon seit ungefähr 5 Jahren, weil es zu dem Zeitpunkt, als ST sie rechts und links verteilte, kostenlos empfangen wurde.

Zunächst wollte ich aus Gewohnheit einen Operationsverstärker mit einem Koeffizienten nach dem Sensor setzen. gewinnen Sie "1", aber als ich das Strukturdiagramm betrachtete, stellte ich fest, dass er bereits drinnen stand. Das einzige, was zu berücksichtigen ist, ist, dass bei maximalem Strom die Ausgangsleistung gleich der Stromversorgung des Vcc-Sensors ist, dh etwa 5 V, und das STM von 0 bis 3,3 V messen kann. In diesem Fall muss daher ein ohmscher Spannungsteiler eingesetzt werden, z. B. 1: 1,5 oder 1: 2. Meine Strömung ist spärlich, deshalb habe ich diesen Moment bisher vernachlässigt. Mein Testgerät sieht ungefähr so ​​aus:

Bild
Abbildung 6 - Einsetzen unseres „Amperemeter“

Um die Ergebnisse zu visualisieren, habe ich das chinesische Display auf den ILI9341-Controller geschraubt. Der Vorteil lag in der Hand, aber meine Hände erreichten ihn überhaupt nicht. Um eine vollständige Bibliothek für ihn zu schreiben, tötete er ein paar Stunden und eine Tasse Kaffee. Der Nutzen des Datenblattes war überraschend informativ, was für das Handwerk der Söhne von Jackie Chan selten ist.

Jetzt müssen Sie eine Funktion zum Messen von Vout mit dem ADC des Mikrocontrollers schreiben. Ich werde nicht im Detail sagen, laut STM32 gibt es bereits ein Meer von Informationen und Lektionen. Also schau einfach:

uint16_t get_adc_value()
    {
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
    return ADC_GetConversionValue(ADC1);
    }

Um die Ergebnisse der Messung des ADC im ausführbaren Code des Hauptteils oder Interrupts zu erhalten, müssen Sie Folgendes schreiben:

 data_adc = get_adc_value();

Nachdem Sie zuvor die Variable data_adc deklariert haben:

 extern uint16_t data_adc;

Als Ergebnis erhalten wir die Variable data_adc, die einen Wert von 0 bis 4095 annimmt, weil Der ADC im STM32 ist 12 Bit. Als nächstes müssen wir das Ergebnis „bei Papageien“ in eine für uns vertraute Form umwandeln, dh in Ampere. Daher müssen Sie zuerst den Teilungspreis berechnen. Nach dem Stabilisator am 3,3-V-Bus zeigte mein Oszilloskop 3,17 V an, ich verstand nicht, womit es verbunden war. Wenn wir also 3,17 V durch 4095 dividieren, erhalten wir den Wert 0,000774 V - dies ist der Preis für die Division. Das heißt, wenn ich das Ergebnis vom ADC, zum Beispiel 2711, erhalte, multipliziere ich es einfach mit 0,000774 V und erhalte 2,09 V.

In unserer Aufgabe ist Spannung nur ein "Vermittler", wir müssen sie immer noch in Ampere umwandeln. Dazu müssen wir 2,38B vom Ergebnis abziehen und den Rest durch 0,02 [B / A] dividieren. Das Ergebnis ist diese Formel:

float I_out = ((((float)data_adc * presc)-2.38)/0.02);

Nun, es ist Zeit, die Firmware in den Mikrocontroller einzutragen und die Ergebnisse zu sehen:

Bild
Abbildung 7 - Messergebnisse der Sensordaten und deren Verarbeitung Ich habe

meinen eigenen Stromkreisverbrauch gemessen, da 230 mA sichtbar sind. Nachdem das gleiche mit dem verifizierten Zufall gemessen wurde, stellte sich heraus, dass der Verbrauch 201 mA beträgt. Nun - Genauigkeit mit einer Dezimalstelle ist schon sehr cool. Ich werde erklären, warum ... Der Bereich des gemessenen Stroms beträgt 0..100A, dh eine Genauigkeit von bis zu 1A beträgt 1% und eine Genauigkeit von bis zu Zehntel Ampere beträgt bereits 0,1%! Und bitte beachten Sie, dass dies ohne Schaltungslösungen ist. Ich war sogar zu faul, um Filterkondore für Essen aufzuhängen.

Jetzt müssen Sie den Kurzschlussstrom (Kurzschluss) meiner Stromquelle messen. Ich drehe den Griff bis zum Maximum und erhalte das folgende Bild: Abbildung 8 - Kurzschlussstrommessungen

Bild


Nun, tatsächlich die Messwerte auf der Quelle selbst mit einem eigenen Amperemeter:

Bild
Abbildung 9 - Wert auf der BP-Skala

Tatsächlich zeigte es 3,09 A, aber während ich fotografierte, wurde das Vitukha erhitzt und sein Widerstand erhöht, und der Strom fiel dementsprechend ab, aber dies fiel nicht so beängstigend.

Zusammenfassend weiß ich nicht einmal, was ich sagen soll. Ich hoffe, dass mein Artikel unerfahrenen Funkamateuren auf ihre harte Weise helfen wird. Vielleicht wird jemandem meine Form der Präsentation des Materials gefallen, dann kann ich weiterhin regelmäßig über die Arbeit mit verschiedenen Komponenten schreiben. Sie können Ihre Wünsche zum Thema in den Kommentaren äußern, ich werde versuchen, dies zu berücksichtigen.

Und natürlich füge ich den Quellcode für das Programm hinzu . Sie sehen, wer eine Bibliothek benötigt, um mit dem Display oder dem ADC zu arbeiten. Das Projekt selbst in Keil 5.

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


All Articles