Widerstands- und Induktivitätsmessung eines Gleichstrommotors

  • Tutorial

Erklärung des Problems


Es gibt einen Gleichstrommotor. Die Aufgabe besteht darin, ein Gerät zu entwickeln, zusammenzubauen und zu testen, mit dem eine Stromschleife für diesen Motor realisiert werden kann. Die gewünschte Einschwingzeit bei abgewürgtem Motor (ohne Gegen-EMK) beträgt nicht mehr als 10 ms. Die Schnittstelle der Kommunikation mit dem externen Steuergerät ist SPI.

Gleichstrommotor, Kommutator, maximale Spannung 24V, Betriebsstrom bis 5A.

Was bedeutet es - eine Stromschleife? Die gebräuchlichsten Treiber zur Steuerung von Motoren sind alle Arten von Halbbrückenvarianten, die die Spannung erhöhen. Ich möchte aber, dass der Treiber nicht die Spannung, sondern die Stromstärke am Eingang abgibt. Die vom elektrischen Antrieb entwickelte Kraft ist direkt proportional zur Stärke des fließenden Stroms. Dies bedeutet, dass es direkt proportional zur Beschleunigung auf der Motorwelle ist. Mit einer solchen Stromschleife können Sie Perversionen vermeiden, auf die Sie wie hier verzichten müssen .

Ich habe diesen Text in zwei Artikel unterteilt:


Hier ist das Layout des Kontrollbügeleisens:



Eisen


Das System umfasst:

  • Ein Power-Key-Chip, der das PWM-Eingangssignal empfängt und verstärkt.
  • Stromsensor.
  • Ein Steuerungsmikrocontroller, der Rückkopplungs- und Steuergesetz implementiert.

Power-Treiber


Als Leistungstreiber wurde eine weit verbreitete Karte (18 US-Dollar) von Pololu ausgewählt, die auf der Freescale MC33926-Mikroschaltung basiert. Die maximale PWM-Frequenz beträgt 20 kHz, 5 A an der Spitze und die Schaltspannung 5 bis 28 Volt.

Dieser Chip wurde für seine Fähigkeit genommen, den Absolutwert des fließenden Stroms zu messen, der letztendlich nicht verwendet wurde. So können Sie ein wenig sparen, indem Sie einen günstigeren Fahrer mit ähnlichen Eigenschaften wählen.

Stromsensor und prüfen


Als Stromsensor wurde der Hall-Sensor Allegro ACS714 ($ 3) ausgewählt , der ein analoges Signal mit einem Zentrum von 2,5 V und 185 mV / A erzeugt, ein typischer Fehler von 1,5%. Dem Sensor wurde eine RC-Kette als Tiefpassfilter mit einer Grenzfrequenz von 16 kHz hinzugefügt.

Der Stromsensor wurde von einer 4,96 V-Quelle gespeist, ein Widerstand wurde mit dem Sensor in Reihe geschaltet, durch den 2A geleitet wurde. Die theoretische Spannung am Ausgangspin sollte 4,96 / 2 + (2 * 0,185 + - 1,5%) betragen, die Messung ergab 2,84 V, was in die berechneten Parameter passt. Dann wurde die Richtung des Stromflusses durch den Widerstand geändert, bei -2A betrug die gemessene Spannung am Ausgangsstift des Sensors 2,11 V, was wiederum in die berechneten Parameter passt:



Diese Überprüfung war notwendig, weil Ich habe mehrere Breadboard-Modelle mit ACS712 und ACS714 von verschiedenen Herstellern gekauft und nur eines ist in die Datenblatteinstellungen gelangt!

Mikrocontroller


Als Steuermikrocontroller wurde ATMega328p mit einer Frequenz von 16 MHz ausgewählt . Mikrocontroller-Bindung - Chinesischer Klon Arduino Nano v3 ($ 1.5).

Der Mikrocontroller erzeugt ein PWM-Signal über einen 8-Bit-Zähler mit einem Teiler von 8, so dass die Frequenz des PWM-Signals 16 * 10 ^ 6/255/8 = 7,8 kHz beträgt, was dem für den Treiber verfügbaren Maximum von 20 kHz entspricht.

Der Mikrocontroller-ADC-Teiler ist auf 128 eingestellt; da jede Messung ungefähr 13 Taktzyklen erfordert, beträgt die maximale Messfrequenz des fließenden Stroms ungefähr 16 · 10 ^ 6/128/13 = 9,6 kHz. Messungen werden im Hintergrund durchgeführt, wobei das Hauptprogramm durch Aufrufen des entsprechenden Interrupts über das Ende informiert wird.

Protokolle


Ich habe lange darüber nachgedacht, wie ich aufzeichnen soll, was im Mikrocontroller vor sich geht, weil er nur sehr wenig Speicher hat. Als Ergebnis habe ich , dass die native SPI - Schnittstelle gefunden ist sehr schnell, und als Ergebnis alle Debug - Informationen für den Einstieg in den Mikrocontroller über eine SPI - Schnittstelle übergeben wurde in großem Umfang verfügbar (angewendet $ 10 pro dilekstrime , $ 6 aliekspresse) Chinesisch Klon Logikanalysator Saelae Pro 8 Logic. Nach einfachen Manipulationen beim Flashen der VID / PID kann diese mit der nativen Software von Saelae verwendet werden. Ich benutze Sigrok (Pulsview). Es hat ein außergewöhnlich einfaches Protokolldateiformat, das ich gerade mit meinem eigenen 50-zeiligen selbstgeschriebenen Programm gelesen habe. Ich habe diesen Analysator auf Anraten von gbg gekauft, der mir aus der Ferne mein Spectrum repariert hat (vielen Dank!), und ich halte dies für die rentabelste Investition der letzten zwei Jahre.

Ich habe zum Beispiel ein sinusförmiges Signal (in PWM) an den Reglerausgang angelegt und der Logikanalysator sieht es perfekt: Wurde



alles zusammengeschaltet, ist das Foto im Post-Header angegeben.

Lyrischer Exkurs


Fast alle Artikel, die ich hier veröffentliche, sind mein Arbeitstagebuch. Ich lerne etwas (in diesem Fall Steuerungstheorie) und schreibe fleißig auf, was ich gelernt habe. Der beste Weg zu schreiben ist, eine Erklärung zu schreiben, wie das alles funktioniert. Dann poste ich die Artikel auf verschiedenen Plattformen, zum Beispiel hier.

Ich habe zwei Ziele, wenn ich den Text schreibe:

a) Rückmeldungen von Leuten zu bekommen, die mehr wissen als ich. Zum Beispiel, liebe Arastas, sagte mir fast alles, was ich für diese beiden Artikel gelernt habe, ich bitte Sie, zu lieben und zu begünstigen: eine Person, die persönliche Zeit damit verbringt, solche Dummköpfe wie mich zu lernen.

Wieder gbg, der mir für meine Vorlesungen lineare Algebra geschrieben hatLaut Computergrafik verkaufte er mir dann für viele tausend Kilometer am Telefon Elektronik.

b) schreibe einfach: auf diese weise erhalte ich eine bibliothek persönlicher erfahrungen, zu der ich regelmäßig zurückkehre. Übrigens, thematische Medien, wie viel Prozent der Autoren stimmen Ihren Bedingungen für das Unterstützungsprogramm zu?

Grundlegendes pädagogisches Programm


Fourier-Transformation


Das Erste, was ich beim Lesen meiner Texte verstehen muss: Ich glaube, dass die Funktion und der Vektor ein und dasselbe sind. All das Gerede über die Unendlichkeit macht mich gelangweilt und verdunkelt die Essenz dessen, was geschieht. Verallgemeinerte Funktionen und dergleichen sind eine Möglichkeit, pathologische Fälle mit der gleichen Sprache zu betrachten wie Fälle, in denen es keine Pathologien gibt. Aber Pathologien interessieren mich nicht. Valery Ivanovich Opoitsev (Boss) sprach

gut zu diesem Thema :

In jedem Bereich ist es nützlich, sich in einer geeigneten Umgebung für die mündliche Kommunikation zu befinden, in der die Bücherschalen geduscht werden. Dort ändert sich manchmal nichts Wesentliches, aber es besteht das Gefühl, in eine Brunft zu geraten und sich vom Dogma zu befreien. Für die Wissenschaft, die immer maskiert ist, ist dies besonders wichtig. Die Essenz hinter den Kulissen, vor den Augen - Spitze. Und für immer fehlt etwas. Diese Einfachheit, dann Komplexität, aber Sie können nicht genau bestimmen, was. Etwas schreitet irgendwo voran, Sie stehen am Rande, und die Zeit vergeht im Sand, ganz zu schweigen vom Leben.

Als nächstes wird versucht, die Situation von dem Ort zu entfernen, indem eine schriftliche Umgebung simuliert wird, in der die Abdeckungen "fallen". Der äußere Umriss des Inhalts ist im Inhaltsverzeichnis mehr oder weniger undeutlich, aber das Hauptziel ist der Blick hinter die Kulissen. Entferne den Schleier, schminke, entferne die Szenerie. Vereinfachen oder sogar ein wenig lügen, um die Wahrheit zu dosieren, ist der Grundstein der Erklärung. Die mit Details überladenen Ergebnisse schleichen sich nicht ein, wenn dies erforderlich ist. Die Erleuchtung tritt ein, wenn ein geschwollener Kopf auf die Stufe „zweimal zwei“ fällt, während die Rechnung an Millionen geht. Eine solche Dialektik.

Wenn wir einen Vektor (7, 12, 18, -2) haben, kann er als eine Menge von Koeffizienten in einer gewichteten Summe betrachtet werden. 7 * (1,0,0,0) + 12 * (0,1,0,0) + 18 * (0,0,1,0) + (-2) * (0,0,0,1) . In gleicher Weise kann dieser Vektor als die Werte der Funktion an den Punkten 0, 1, 2, 3 betrachtet werden, da unsere Vektoren (0,1,0,0) und dergleichen als Verschiebung eines einzelnen Impulses betrachtet werden können:


Erhöhen wir ständig die Anzahl der Vektoren (verschobene Einheitsimpulse) in der Basis, so erhalten wir die üblichen Funktionen.

Leider ist es ziemlich umständlich, mit einer solchen Basis zu arbeiten. Nehmen wir als Beispiel die folgende Funktion:


Wir haben bereits darüber gesprochen, was die Fourier-Transformation ist. Kurz gesagt, dies ist ein Basiswechsel.

In unserem Fall ist die Fourier-Transformation eine Funktion von reellen Zahlen zu komplexen:


Ein Funktionsargument (reelle Zahl) ist einfach die Nummer der Basisfunktion oder des Vektors (tatsächlich ein Paar von Basisfunktionen), und sein Wert ist das entsprechende Koordinatenpaar für diese beiden Vektoren in der Basis. Die Fourier-Basis sind die Sinus- und Cosinus-Werte verschiedener Frequenzen. Die Frequenz ist die Nummer der Grundfunktion.

Für unsere spezifische Funktion f (t), die bereits eine gewichtete Summe aus Sinus und Cosinus ist, ist es sehr einfach, ihre Ausdehnung auf eine Fourier-Basis zu berechnen:


Das heißt, unsere Funktion f (t) hat Nullkoordinaten für alle Basisvektoren mit Ausnahme der Vektoren Nr. 11 und 41.

Wozu dient die Fourier-Basis? Zum Beispiel die Tatsache, dass die Differenzierungsoperation diese Basis linear transformiert. Angenommen, wir wollen die Fouriertransformation der Ableitung f '(t) berechnen. Wie kann man das machen? Alternativ Stirn: Berechnen Sie zuerst die Ableitung und dann die Fouriertransformation:


Wenn man sin (x) differenziert, wird es offensichtlich zu sin (x + 90 °), das heißt, es ist äußerst einfach, die Erweiterung der Fourier-Basis der ursprünglichen Funktion und ihrer Ableitung zu finden:


Die Multiplikation mit i ist einfach eine Drehung der komplexen Ebene, die im Argument unserer Funktion + 90 ° entspricht. Das heißt, die Differenzierungsoperation, die auf der Basis einzelner Impulse auf der Fourier-Basis schwierig durchzuführen ist, besteht nur aus Skalierung und Drehung um 90 Grad. Schön, oder?

Laplace-Transformation


Etwa die gleiche Geschichte passiert mit der Laplace-Transformation. Leider ist die Laplace-Basis im Gegensatz zur Fourier-Basis nicht orthogonal, weshalb sie für ein intuitives Verständnis etwas komplizierter ist. Nun, nicht der Punkt. Laplace ging etwas weiter. Wenn Fourier nur Sinuskurven in der Basis hatte, dann hatte Laplace eine exponentielle Dämpfung in der Basis einer Sinuswelle. Woher hat er sie bekommen? Dies ist äußerst nützlich bei der Lösung linearer Differentialgleichungen. Überlegen wir mal, welche Funktion wandelt sich bei der Differenzierung in sich selbst um? Aussteller. Und wenn man zweimal differenziert? Sinus Und ihre Kombinationen ergeben alle möglichen Funktionen, die beim Lösen von (linearen) Differenzen auftreten können, die vom Marquis de Laplace verwendet wurden.

Wir werden nicht näher darauf eingehen, wie diese Eigenschaften abgeleitet werden (es ist besser, die Eigenschaften der Fourier-Basis sorgfältig zu betrachten, es ist einfacher). Beachten wir nur die folgenden Fakten:

1. Die Laplace-Transformation ist linear:


2. Die Laplace-Transformation der Ableitung ist eine affine Aktion auf die Transformation der Funktion selbst:
3.

Wir gehen direkt zur Sache


Wenn wir also einen Gleichstrommotor haben, werden der fließende Strom I (t) und die Spannung an den Klemmen U (t) durch die folgende Differentialgleichung verbunden, wobei w (t) die Drehzahl der Motorwelle ist:


Hier ist L die Induktivität und R der gesuchte Widerstand. Ich werde nicht wiederholen, woher diese Abweichung kommt, da ich sie bereits detailliert auf die Finger gemalt habe (siehe „Maxwellsche Gleichungen auf den Fingern“).

Da es unsere Aufgabe ist, L und R zu finden, fixieren wir die Motorwelle fest, sodass w (t) Null ist:


Auf Anraten von Arastas habe ich zwei Arten von Signalen an meinen Motor angelegt: den Mäander und die Sinuswelle. Dann habe ich den fließenden Strom gemessen, das Bild ist ungefähr so:



Hier sind die blauen Kurven die Eingangsspannung, die ich steuere, und die grünen sind die Strommessungen, die mit dem ACS714 erhalten wurden.

Mein Mikrocontroller-Code, der 11 Experimente mit einem Mäander und Sinuskurven verschiedener Amplituden und Frequenzen erzeugt,kann hier gesehen werden .

Lassen Sie uns unsere Differentialgleichung für beide Arten von Spannungssignalen lösen, ein parametrisches Stromsignal erhalten und die Parameter so auswählen, dass die theoretische Kurve den tatsächlichen Messungen so gut wie möglich entspricht.

Eingangssignal - Heaviside-Funktion (Mäanderhalbperiode)


Also, w (t) = 0, die Anfangsbedingungen I (0) = 0, der Strom fließt nicht ganz am Anfang. Wir legen an die Klemmen des Motors eine konstante Spannung U0 an, wie soll sich der fließende Strom verhalten?

Nehmen wir die Laplace-Transformation von der linken und rechten Seite der Differentialgleichung (1):


Um die zweite Zeile zu erhalten, habe ich die Linearität der Laplace-Transformation verwendet, U0 / s - Ich habe sie aus der Tabelle entnommen (normalerweise werden Laplace-Transformationen nicht manuell berücksichtigt, sie verwenden Tabellen).

Um die dritte Zeile zu erhalten, wird die abgeleitete Eigenschaft verwendet.

Die letzte Zeile ergibt sich aus der vorletzten nach der Methode der unbestimmten Zerlegung . Die Bedeutung dieses Übergangs besteht darin, wieder eine Tabellenfunktion zu erhalten. Natürlich müssen die Hände im einundzwanzigsten Jahrhundert dies nicht nehmen .

Jetzt muss noch die inverse Laplace-Transformation angewendet werden (für die rechte Seite sehen wir uns die Tabelle an) und wir haben unser Diff gelöst. Der Übergang zur Laplace-Basis machte die Differentialgleichung zur üblichen algebraischen Gleichung!


Eine schnelle Überprüfung des Ergebnisses: Nach einigen Millisekunden spielt die Induktivität keine Rolle mehr und wir erhalten den fließenden Strom U_0 / R (Ohmsches Gesetz). Ganz am Anfang ist der fließende Strom Null und steigt exponentiell an, und die Anstiegsrate hängt direkt von der Induktivität ab. Sanity Check bestanden.

Die Datei mit den Messungen liegt hier . Drei Spalten, Sekunden, angelegte Spannung (in Volt), gemessene Stromstärke (in Ampere).

Hier ist der Code, der die Widerstands- und Induktivitätsparameter für dieses Experiment auswählt:

Versteckter Text
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
U0 = 19.2
def unit_step_current(x, R, L):
    return [U0/R - U0/R*np.exp(-t*R/L) for t in x]
data = np.genfromtxt('unit_step_19.2V.csv', delimiter=',', names=['t', 'V', 'A'])
[R, L] = curve_fit(unit_step_current, data['t'], data['A'])[0]
print(R, L)
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1.set_title("Resistance/inductance fitting")
ax1.set_xlabel('Time, seconds')
ax1.set_ylabel('Current (A), tension (V)')
ax1.plot(data['t'], data['V'], color='b', label='input tension')
ax1.plot(data['t'], data['A'], color='g', label='measured current')
model=unit_step_current(data['t'], R, L)
ax1.plot(data['t'], model, color='r', label='fitted curve')
ax1.legend()
plt.show()


Er sagt, dass ein Paar von R = 4,4 Ohm, L = 6mHenry gut geeignet ist, hier ist eine Grafik:

Eingangssignal - Sinus


Wiederholen Sie den Vorgang für eine Spannungs-Sinuswelle mit der Amplitude U0 und der Frequenz F0. Wir wenden die Laplace-Transformation zunächst auf der rechten Seite auf Gleichung (1) an:


und dann nach links:


Die inverse Transformation liefert nun das folgende aktuelle Flussgesetz:


Wieder eine schnelle Überprüfung der Gesundheit: Null Strom am Anfang, einige Millisekunden Transienten (Exponent, der direkt von der Induktivität abhängt). Nach einiger Zeit ist der fließende Strom die gewichtete Summe von Sinus und Cosinus der gleichen Frequenz (die Frequenz ist gleich dem Eingang, das ist gut). Diese Summe ergibt eine leicht zeitversetzte Sinuskurve. Toll, das Ergebnis ist glaubwürdig.

Die Messungen sind hier und der Parameterauswahlcode ist hier . Es gibt ungefähr die gleichen Werte für Widerstand und Induktivität, die wir brauchten. Hier ist der Zeitplan:

Fazit


Warum nicht die Parameter direkt messen, warum all diesen Garten mit Mikrocontrollern? Erstens habe ich nichts, um die Induktivität zu messen. Ja, und das Messen des Motorwiderstands mit einem Ohmmeter kann seine eigenen Nuancen haben.

Ferner stimmen die bei einer hohen Amplitude des Signals gefundenen Parameter nicht ganz mit dem überein, was bei niedrigen Spannungen erhalten wird. Es kann interessant sein (hier nicht erörtert), ein Modell nicht nur des Motors, sondern des gesamten Systems einschließlich der Nichtlinearität des PWM-Treibers zu erstellen.

Nun, dann muss noch ein Regler entwickelt werden, der die erforderliche Stromstärke am Eingang aufnimmt. Bleiben Sie in Kontakt!

Jetzt auch beliebt: