Forum: Mikrocontroller und Digitale Elektronik DC Motor Ansteuerung mit STM32H7 über PWM


von Michael (Gast)


Lesenswert?

Hallo,

ich möchte eine Regelung für einen DC-Motor mit dem DRV8432 und einem 
STM32H7 umsetzen. Beim Motor handelt es sich um einen kleinen Brushed DC 
Motor.

Ich habe lange nach einem passenden Baustein gesucht und mich für den 
DRV8432 entschieden. Auf dem STM32H7 möchte ich dann einen PID Regler 
implementieren. Der dann den Motor steuert.

Jedoch bin ich anscheinend zu Blöd die Ansteuerung der Vollbrücke zu 
verstehen. Ich habe schon bei vielen anderen Herstellern gesucht wie die 
PWM-Ansteuerung umgesetzt werden muss. Ich bin da z.B. auf den DRV887036 
gestoßen.

1. Gibt es beim STM32 für die PWM Ansteuerung von DC Motoren einen 
speziellen PWM-Mode der für Voll-Brücken geeignet ist?

2. Ich möchte am Ende 3 Motoren ansteuern benötige daher 2 ICs und somit 
6 PWM Signale. Ist das überhaupt mit einem STM32H7 möglich oder hat 
dieser dann zu wenig PWM Signale?

3. Ist das richtig das ich einen Positiven Strom durch den Motor gebe 
wenn das PWM_1-Signale 70% High und 30% Low besitzt und das PWM_2 Signal 
genau invertiert ist?

http://www.ti.com/product/DRV8432

von pegel (Gast)


Lesenswert?

Eigentlich wird das ja mit PWM und Richtungssteuerung gemacht.

Sieh dir mal den L9660 von ST an.

von m.n. (Gast)


Lesenswert?

Es müssen nie beide Ausgänge PWM-A und PWM-B gleichzeitig getaktet 
werden. Für die eine Richtung nutzt Du das Signal PWM-A und für die 
andere dann PWM-B. Oder Du nutzt nur PWM-A und schaltest die Richtung 
mit einem konstanten Signal an PWM-B um.

Der STM32H7 sollte dabei noch nicht an seine Leistungsgrenzen kommen ;-)

von narf (Gast)


Lesenswert?

Die STM32 haben "advanced" Timer. Die haben komplementäre Ausgänge die 
genau für sowas gedacht sind.

von Michael (Gast)


Lesenswert?

Ich hatte vorher auch immer nur einen PWM Ausgang zur gleichen mit Hilfe 
eines Funktionsgenerators eingeschaltet. Dann drehte der Motor in eine 
Richtung. Sofern ich dann den anderen PWM eingeschaltet hatte drehte der 
Motor in die andere Richtung.

Das mit den advanced Timern ist schon mal ein guter Hinweis. Dann kann 
ich schon mal weiter danach schauen.

Was ich halt noch nicht ganz verstehe ist folgendes:

Wenn der PWM_1 70% high und 30% low ist, dann ist der PWM_2 30% low und 
70% high.

Sofern dann der PWM_1 70% high ist dreht der Motor in die eine Richtung 
da der Strom positive ist. Während der low Phase vom PWM_1 ist ja der 
PWM_2 high. Somit müsste der Strom durch den Motor doch dann negative 
sein und somit der Motor in die andere Richtung drehen. Das wäre dann 
doch total blöd weil er dann 70% von meinem Duty-Cycle in die eine 
Richtung dreht und 30% in die andere Richtung.

von Michael (Gast)


Lesenswert?

Vor allem wie mache ich das z.B. wenn ich den Motor anhalten möchte. 
Wenn ich z.B. in den PWM_1 0% schreibe dann hat der PWM_2 ja 100% und 
dann erreiche ich genau das gegenteil, dann dreht der Motor mit 100% 
Strom in die eine Richtung. Ich kann mit nur vorstellen das da denn ein 
PWM mit exakt 50% hilft, da er dann in 50% der zeit in die eine Richtung 
dreht und 50% in die andere Richtung. Aber da müste denn doch sehr viel 
Strom fließen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hmm, hast du da nun einen BLDC oder einen DC-Motor mit 2 Anschlüssen?
Für den BLDC ist der o.a. Advanced Timer ein guter Tipp, für den 
einfachen DC Motor geht jeder Timer, dessen PWM Ausgänge auf Portpins zu 
routen sind.

Michael schrieb:
> Ich kann mit nur vorstellen das da denn ein
> PWM mit exakt 50% hilft, da er dann in 50% der zeit in die eine Richtung
> dreht und 50% in die andere Richtung. Aber da müste denn doch sehr viel
> Strom fließen.

Man nimmt 2 Portpins - einer davon PWM fähig. Der eine bestimmt die 
Drehrichtung, der andere die Power per PWM. An GPIOs dürfte es deinem H7 
nicht mangeln.

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Hallo Matthias,

ich möchte diesen Motor verwenden und eine PID Regelung bauen.

https://www.scanlab.de/sites/default/files/PDF-Dateien/Data-Sheets/dynAXIS-EN.pdf

Jetzt bin ich mir unsicher ob es ein BLDC ist

von pegel (Gast)


Lesenswert?

Auf jeden Fall würde ich, egal ob DC, BLDC oder Schritt ein passendes 
X-Nucleo dazu verwenden.

von Johannes S. (Gast)


Lesenswert?

ist das nicht eher eine "einfache" Spule? Die Rückmeldung liefert max. 
+/- 19°. Da gibt es auch ein Scanlab Control Board zu, da wird einiges 
an know how drinstecken. Wenn so ein teurer Galvo drin ist dann doch 
sicher auch der Controller dazu.
Hier ist das Forum für solche Teile:
https://www.laserfreak.net/forum/viewtopic.php?f=11&t=58255&sid=1c159178f0e953ca3554e1186e8d4dd1

von Michael (Gast)


Lesenswert?

Ja da gibt es auch etwas vom Hersteller zu kaufen. Jedoch möchten wir 
unsere eigene Lösung implementieren. Ich habe schon ein STM32H7 
Demoboard.

Ich möchte noch einmal aufs Thema zurückkommen. Wir muss die PWM 
Steuerung für den DRV8432 aussehen? Müssen die Inverse sein und wenn ja 
wie muss es aussehen wenn ich den Motor anhalten möchte muss dann auf 
beiden PWM Signalen das Duty Cycle Verhältnis 50% sein und dann beide in 
Phase von 0°?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hier wird der Ansatz mit einer ständig bestromten Spule mit schneller 
PWM mögl. der richtige sein. Ansteuerung mit zwei nicht überlappenden 
Signalen aus dem Advanced Timer. Jeder Ausgang treibt eine Halbbrücke.

NB: Das sind keine

Michael schrieb:
> einen kleinen Brushed DC
> Motor

Die Funktion ist eher wie ein Drehspulinstrument aka Voice Coil.

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Hallo Matthias,

wenn ich den Motor in eine Richtung fahren möchte, dann sollte ich das 
eine PWM-Signal einschalten. Sofern ich dann anhalten möchte beide 
PWM-Signale ausschalten. Für die andere Richtung dann die das 2. PWM 
Signal einschalten. Das Ganze soll ja dann mit 500kHz laufen.

Ich überlege gerade ob ich die PWMs ganz ausschalte oder ob ich das 
Register für das Duty-Cycle Verhältnis auf 0% oder 1% setze.

von Stefan F. (Gast)


Lesenswert?

narf schrieb:
> Die STM32 haben "advanced" Timer. Die haben komplementäre Ausgänge die
> genau für sowas gedacht sind.

Ich denke, diese sind dafür gedacht, einzelne MOSFET Transistoren direkt 
anzusteuern. Die fertige H-Brücke braucht das nicht.

> Ich überlege gerade ob ich die PWMs ganz ausschalte oder ob ich das
> Register für das Duty-Cycle Verhältnis auf 0% oder 1% setze.

1% fände ich quatsch. Ob du die PWM Timer aus schaltest, oder auf 0% 
Duty Cycle stellst, ist letztendlich egal.

Aber: Du kannst mit einem Timer mehrere Motoren ansteuern. Wenn du den 
Timer stoppst, bleiben alle daran angeschlossenen Motoren stehen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich denke, diese sind dafür gedacht, einzelne MOSFET Transistoren direkt
> anzusteuern. Die fertige H-Brücke braucht das nicht.

Auch ein H-Brückentreiber braucht passende Signale. Da die Advanced 
Timer im H7 drin sind (vermutlich ein ganzer Sack voll) muss man da 
nicht sparen.
Vor allem können sie ohne Probleme hohe Wiederholfrequenzen und 
definierte Signale praktisch im Hintergrund liefern, ohne Rechenzeit zu 
schlucken.

Da jeder Timer vier CCR Register und acht Ausgänge liefert, kann man 
also zwei Motoren pro Timer steuern.

Michael schrieb:
> wenn ich den Motor in eine Richtung fahren möchte, dann sollte ich das
> eine PWM-Signal einschalten.

Prüf auf jeden Fall erstmal, wie die 'Motoren' nun tatsächlich 
funktionieren. Wenn da was von 'Galvanometer' oder Voicecoil steht, dann 
sind es, wie o.a., keine Motoren, sondern Drehspulaktuatoren.

Michael schrieb:
> Das Ganze soll ja dann mit 500kHz laufen.

Checke auf jeden Fall, ob Treiber und Endstufe sowas überhaupt 
verarbeiten können. Auch 30kHz wären vermutlich ausreichend.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.