Ich versuche, die Stromerfassungsfunktion von Arduino Motor Shield R3 zu verwenden , das Schild basiert auf L289 . Die Werte, die ich lese, scheinen sehr verrauscht zu sein. Ich verwende die analogRead () -Funktion von Arduino UNO A0, um Strom zu erfassen. Um dies zu beheben, habe ich versucht, einen Tiefpassfilter zwischen dem Motorschild und Arduino Uno zu verwenden.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Dies hat geholfen, das Messrauschen zu beheben, aber ich habe mehrere Fragen dazu:
Aus dem Blockschaltbild im Datenblatt ist ersichtlich, dass die Strommessung von den Ausgangsstufen der H-Brücke beeinflusst wird. Das bedeutet, dass, wenn Sie PWM verwenden, um den Motor anzutreiben, die Sense-Spannung mit dem PWM-Signal variiert. Die Spannung über dem Messwiderstand ist proportional zum Strom durch ihn, der wiederum von der Spannung über der Motorinduktion abhängt. Während der positiven Periode des PWM-Signals steigt der Strom „langsam“ an, während der Strom während der negativen Periode des PWM-Signals „langsam“ abnimmt. In der Praxis sieht dies ein bisschen wie eine Dreieckswelle aus, und das ist das Rauschen, das Sie messen.
Die Lösung besteht darin, sicherzustellen, dass Sie die Erfassungsspannungsmessung mit dem PWM-Signal synchronisieren. Sie können beispielsweise einen Interrupt an den Timer anhängen, der für das PWM-Signal verwendet wird, und es erfordert einiges an Graben im Datenblatt des Mikrocontrollers (und einige Versuche und Irrtümer), um herauszufinden, wie dies zu realisieren ist. Eine andere Möglichkeit besteht darin, einen Interrupt-Pin mit dem PWM-Ausgangspin zu verbinden, was zu Beginn einfacher sein kann. Dies ist möglich, obwohl Sie möglicherweise die PWM-Frequenz verringern müssen (um die ADC-Konvertierung in den PWM-Arbeitszyklus einzupassen), die Hardwareregister direkt programmieren (Arduino-Bibliotheken sind langsam) oder eine Baugruppe verwenden müssen.
Olin Lathrop
Kaz