PWM-gesteuerter DC-Motor läuft nicht, wenn er geladen ist

Ich versuche, einen Roboter mit dem Arduino Uno und der H-Bridge SN75441 zu bauen.

Der Roboter verfügt über 2 1,5-V-Nennmotoren. Ich habe es mit diesem Tuto eingerichtet: http://www.mlbelanger.com/arduino/ard-bot/ Die Schaltung ist also so (ich habe den Arduino Vin-Pin einfach nicht in den Pin 8 des Chips gesteckt): ( Quelle: mlbelanger.com )

Wie Sie sehen können, unterstützt die H-Brücke nur bis zu 4,5 V für die Motoren. Aus diesem Grund musste ich einen 5-V-Stromeingang (Adapter 5 V bei 1 A) verwenden, um die Motoren mit PWM (80/255, was normalerweise 1,5 V ergibt ) zum Regeln der Leistung auf 1,5 V zu verwenden.

Also hier kommt mein Problem. Ich habe zwei Fälle:

  • eine, bei der die Motoren keine Last haben, was bedeutet, dass der Roboter in der Luft ist. Die Motoren laufen normalerweise mit 1,5 V bei 0,26 A.

  • das zweite, mit dem ich Probleme habe: es läuft mit 0,5 V bei 0,145 A. Die Spannung sank also mit zunehmender Last. Der Roboter bewegt sich nicht und macht ein hochfrequentes Geräusch. Wenn ich 1,5-V-AA-Batterien verwende, die direkt an den Motor angeschlossen sind, läuft er gut, sodass nicht die Last das Problem ist, sondern irgendwie das PWM-Setup.

Antworten (3)

Wenn Sie sich mit dem Design des H-Brückentreibers befassen, werden Sie vielleicht überrascht sein, wie er sich unter Lastbedingungen verhält. Ihr PWM-Verhältnis beträgt 80/255 = 0,313 und Sie hätten gedacht, der mit 5 V betriebene Treiber würde Folgendes erzeugen: -

Vout = 5 V x 0,313 = 1,57 Volt. Aber das wird nicht passieren. Unter leichten Lasten schätze ich, dass der Treiber in der Lage ist, auf etwa 4,3 V und auf etwa 1 V zu schwingen - dies bedeutet, dass Ihr angenommenes Ziel von 5 V tatsächlich eher 3,3 V entspricht, wodurch Ihre tatsächliche Ausgangsgleichspannung (aufgrund von PWM) eher 1,04 entspricht Volt.

Bei höheren Lastströmen wird es schlimmer. Das Datenblatt gibt an, dass der Ausgang bei einer Versorgung von 1 A auf bis zu 3,6 Volt und auf 1,2 Volt schwingen kann. Dies bedeutet, dass die Ausgangsspannung bei Ihrem angegebenen PWM-Verhältnis: -

80 255 × ( 3.6 1.2 ) v = 0,753 v

Ohne das PWM-Verhältnis zu ändern, wird Ihr Motor bei leichten Lasten mit 1,04 Volt gespeist, und wenn die mechanische Last zunimmt, sinkt diese bei 1 A auf etwa 0,75 Volt: -

Geben Sie hier die Bildbeschreibung ein

Es ist wirklich kein guter Treiber für Ihre Anwendung, und es ist noch schlimmer, wenn Sie Worst-Case-Werte (statt typische) verwenden.

Aber rechtfertigt das wirklich die umgekehrt proportionale Last und Spannung? Dies klingt eher nach dem Minimum und dem Maximum, das hier abhängig von anderen Umständen "berücksichtigt" werden muss ... aber vielleicht irre ich mich? Denn wenn ich mit der 1,5-V-Alkalibatterie teste, bleibt sie einfach 1,5 V, egal was passiert.
Ich kann nur sagen, dass es einige Leute gibt, die von diesem Problem erwischt wurden.
Du sagst also auch, dass ich mir eine andere H-Brücke zulegen soll? Ich dachte, das hier wäre beliebt...
Ich denke nicht, dass es für Ihre Anwendung sehr geeignet ist, es sei denn, Sie können mit den Verlusten leben und sich mit einem Regelkreis stabilisieren.
Hm, also sollte ich lieber eine eigene Schaltung mit Dioden und Transistoren bauen?
Es gibt Schaltkreise mit geringem Spannungsabfall, und höchstwahrscheinlich müssen Sie nach solchen mit MOSFET-Ausgangsstufen wie ti.com/general/docs/lit/… suchen - sie haben einen kombinierten Einschaltwiderstand von 0,33 Ohm, was bedeutet, von einer 5-V-Versorgung Sie verlieren 0,33 V bei 1 A. Es ist oberflächenmontiert, also passt DIP vielleicht besser zu Ihnen, aber TI ist wahrscheinlich die Jungs, die nach dem richtigen Teil suchen.
Die andere Sache, die Sie tun können, ist die Verwendung eines differentiell konfigurierten Operationsverstärkers, um die tatsächliche Gleichspannung zu messen. Führen Sie es in einen ADC-Eingang ein und passen Sie Ihre PWM entsprechend an. Viel Glück. Mit ein bisschen Trial-and-Error kommst du da hin. Es ist nie so einfach, wie es zunächst aussieht!!
Ich verstehe nicht; Kann ich es nicht einfach direkt füttern, da es 5 V sind? Der Treiberchip enthält zum Schutz interne Dioden.
Ich verstehe deine Frage nicht.
Sie sagten, ich sollte einen Operationsverstärker verwenden, um die tatsächliche Gleichspannung zu messen, die durch die Motoren fließt, oder? Kann ich es nicht einfach parallel zu einem Arduino-Eingangspin verdrahten und dann von dort aus messen?
Nein, da die PWM auf und ab pulsiert und Sie direkt über dem Motor messen müssen (nicht gegen Masse) oder Sie Ihre tatsächliche Motorspannung PLUS nicht genau bestimmen können, könnte der Operationsverstärker so konfiguriert werden, dass er den PWM-Ausgang glättet ein einfaches ADC-Verfahren in Software. Es ist einfacher, ich vermute, ein alternatives Teil zum SN75441 zu finden.
Ah ... nun, ich kann es mir nicht wirklich leisten, andere Komponenten dafür zu kaufen ... aber ich werde das für das nächste Mal berücksichtigen. Ich schätze, ich kann einfach ein PWM einstellen, das unter typischer Last 1,5 V erzeugt, und hoffen, dass es ohne Last nicht brennt ... Vielen Dank!
Manchmal muss man etwas riskieren!!!
Entschuldigung für das erneute Öffnen, aber selbst wenn PWM auf und ab pulsierte, kann ich die Spannung nicht immer noch messen, weil ich bereits weiß, dass die PWM-Frequenz konstant ist?
Die Frequenz mag konstant sein, aber das Tastverhältnis ist es nicht ...
Warum nicht? Ist es in diesem Fall nicht immer 80/255?
@ user35485 Sie können die Spannung am Motor messen, dies muss jedoch mit einem Differenzverstärker und einem Filter erfolgen, um das Differenz-PWM-Signal in ein 0-V-Referenzsignal umzuwandeln, das dann durch einen Filter geglättet und dann gemessen wird (möglicherweise unter Verwendung eines ADC-Eingangs). Dies gibt Ihnen Vertrauen in die genaue Spannung, die Sie an den Motor anlegen, aber das ist alles. Im großen Schema ändert sich die mechanische Motorlast und dies verlangsamt den Motor, daher würden einige Leute die Verwendung von Geschwindigkeits- oder Positionsrückmeldung vorschlagen.
Okay, ich bräuchte ein paar zusätzliche Komponenten, also bleibe ich schließlich bei diesem etwas riskanten Design. Danke noch einmal!

Das Problem scheint ein Mangel an Positionsrückmeldung zu sein.

Die Motoren laufen wie erwartet im Freien, sobald sie jedoch mechanisch belastet werden, müssen Sie die Position des Rotors kennen, damit Sie die PWM verlangsamen und die Welle drehen können.

Versuchen Sie, Ihre Schaltfrequenz zu verringern, wenn die Last zunimmt. Dadurch kann den Wicklungen über einen längeren Zeitraum mehr Leistung zugeführt werden, wodurch sie sich drehen können. Idealerweise benötigen Sie einen Rückkopplungsmechanismus, der Ihrem Prozessor die Position des Rotors mitteilt und ob der Antriebsimpuls verlängert werden muss, um den nächsten Wicklungskontakt / Bürstenpunkt im Motor zu erreichen.

Zweitens gibt es einen grundlegenden Unterschied zwischen einem „H-Bridge-Treiber“ und der eigentlichen „H-Bridge“. Die Aufgabe des Treiber-ICs besteht ausschließlich darin, die Basis/das Gate einer Reihe von 4 Leistungs-MOSFETs/BJTs in einer H-Konfiguration zu sättigen, wie hier dargestellt:

Der Versuch, die Last direkt über den Treiber-IC zu treiben, kann diesen dauerhaft beschädigen, da er dafür nicht ausgelegt ist.

Hm, ich habe nicht wirklich die Komponenten für Feedback (einen Encoder, schätze ich). Gibt es einen anderen Weg?

Sie berücksichtigen nicht den Spannungsabfall, den die Ausgangstransistoren einführen, er kann bis zu 1,5 V für die High-Seite und 2 V für die Low-Seite betragen, wenn der Strom ansteigt (angegeben bei 1A).

Sie haben das PWM-Tastverhältnis berechnet, um einen Prozentsatz der Eingangsspannung auszugeben, aber wenn der Strombedarf des Motors zunimmt (wenn er belastet wird), kommt es zu einem zusätzlichen Spannungsabfall (VCE-Abfall) an den Ausgangstransistoren, und ich weiß es nicht Ich weiß nicht, ob die 12-V-Versorgung auch abfällt.

Normalerweise benötigen Sie eine Art Feedback, um den Ausgangsstrom zu erkennen und die Einschaltdauer der PWM entsprechend zu ändern.

Ja, ich denke darüber nach, die Spannung mit einem digitalen Arduino-Pin zu den Motoren zu bringen ... ist das in Ordnung? Ich meine, sollte ich mir Sorgen um Spitzen oder irgendetwas machen (dieser Chip sollte afaik Dioden enthalten).
@ user35485 Ein digitaler Pin kann die Spannung nicht messen, die Sie für einen analogen Pin benötigen. Ich glaube nicht, dass ich die Spannung des Motors direkt an einen I / O-Pin anschließen würde, es ist normalerweise eine gute Idee, einen Puffer wie einen Operationsverstärker hinzuzufügen.
unterstützt es nicht bis zu 5,5 V? Warum sollte es Risiken geben?
@ user35485 Die Risiken bestehen darin, dass jedes Mal, wenn die Versorgung einer Induktivität entfernt wird (dh bei den PWM-Schaltübergängen), von der Induktivität eine Gegen-EMK mit Spitzen erzeugt wird, die die Versorgungsspannung durchaus überschreiten können. Die Spulen des Motors sind Induktivitäten. Es besteht eine starke Möglichkeit von gebratenem Arduino.
@AnindoGhosh ja, aber der Treiber enthält Flyback-Dioden. Das sollte es also tun?