Forum: Mikrocontroller und Digitale Elektronik Motoransteuerung mit PWM


von P. S. (Gast)


Lesenswert?

Hallo liebe Community.

Ich möchte einen 24V/6A DC-Motor antreiben. Hierbei möchte ich sowohl 
die Drehzahl, als auch die Richtung über einen PC steuern. Leider kann 
ich mit der vorhandenen Analog I/O-Karte nur Frequenzen bis 500 Hz 
ausgeben. Aus diesem Grund habe ich mir überlegt, die PWM-Erzeugung 
einen µC erledigen zu lassen (z. B. Arduino Uno). Der PC übergibt dem µC 
nur ein Analogsignal, dessen Spannung das Tastverhältnis der PWM 
kodiert. DAS PWM-Signal möchte ich anschließend an eine 
2-Quadrantensteller mit Halbbrücken Mosfettreiber 
(https://www.mikrocontroller.net/articles/Motoransteuerung_mit_PWM) 
übergeben, der dann den Motor steuert.

Die PWM-Frequenz sollte ich sicherlich irgendwo im kHz-Bereich suchen, 
ja?
Über das Tastverhältnis kann ich letztlich auch die Richtung festlegen?
Muss ich bei der Richtungsumkehr irgendetwas softwareseitig dämpfen (z. 
B. langsam stoppen und dann in die andere Richtung drehen)?
Habe ich etwas in meiner Betrachtung vergessen oder gibt es eine 
schönere als die PC-Arduino-Treiber-Lösung?

Vielen Dank euch schonmal.

von MaWin (Gast)


Lesenswert?

P. S. schrieb:
> Die PWM-Frequenz sollte ich sicherlich irgendwo im kHz-Bereich suchen,
> ja?

Warum ?

Drehstrommotore und Wechselstrommotore arbeiten auch an 50Hz gut.

> Ich möchte einen 24V/6A DC-Motor antreiben.

Wie viel Strom braucht denn der Motor beim Anlaufen=Blockieren ? Das ist 
nämlich der Strom, auf den die Elektronik auszulegen ist, sonst ist sie 
schon beim ersten Anlauf kaputt.

> Über das Tastverhältnis kann ich letztlich auch die Richtung festlegen?

Besser nicht, wo ist sonst 0 ?

> Muss ich bei der Richtungsumkehr irgendetwas softwareseitig dämpfen (z.
> B. langsam stoppen und dann in die andere Richtung drehen)?

Wäre zu empfehlen, sonst ruckt's doch gewaltig.

von Oleg A. (oga)


Lesenswert?

P. S. schrieb:
> Über das Tastverhältnis kann ich letztlich auch die Richtung festlegen?

Das geht nur, wenn Du am Motor die Polarität wechselst, also mit einem 
4-quadrantensteller. Mit dem 2-quadrantensteller kannst Du nur treiben, 
bzw. bremsen.

von P. S. (Gast)


Lesenswert?

Vielen Dank für eure Antworten.

MaWin schrieb:
> P. S. schrieb:
>> Die PWM-Frequenz sollte ich sicherlich irgendwo im kHz-Bereich suchen,
>> ja?
>
> Warum ?
> Drehstrommotore und Wechselstrommotore arbeiten auch an 50Hz gut.

In dem Artikel "Motoransteuerung mit PWM" habe ich gelesen, dass aus 
elektrischer Sicht 1 bis 2 kHz günstig sind. Also gilt es, die 
PWM-Frequenz einfach zu testen?

>> Ich möchte einen 24V/6A DC-Motor antreiben.
>
> Wie viel Strom braucht denn der Motor beim Anlaufen=Blockieren ? Das ist
> nämlich der Strom, auf den die Elektronik auszulegen ist, sonst ist sie
> schon beim ersten Anlauf kaputt.

Ich habe gerade mal gemessen. Der Anlaufstrom liegt bei etwa 6,5 A (für 
etwa 100ms), anschließend sind es etwa 0,5 A.

Oleg Ayranov schrieb:
> P. S. schrieb:
>> Über das Tastverhältnis kann ich letztlich auch die Richtung festlegen?
>
> Das geht nur, wenn Du am Motor die Polarität wechselst, also mit einem
> 4-quadrantensteller. Mit dem 2-quadrantensteller kannst Du nur treiben,
> bzw. bremsen.

Das habe ich im Nachhinein auch gesehen. Aus diesem Grund habe ich 
überlegt einen LMD18200T zu verwenden. Meint ihr ich kann diesen 
verwenden, trotz dass der Anlaufstrom etwa 0,5A zu hoch ist (dafür aber 
nur 100 ms)?

Unter "Typical Applications" sind noch einige Schaltungserweiterungen, 
wie z. B. "Fixed Off-Time Control", aufgeführt. Für welche Fälle ist das 
zwingend notwendig? Oder anders gefragt: Benötige ich außer dem 
LMD18200T noch weitere Bauteile (abgesehen von evtl. bestimmten 
Widerständen / Kondensatoren)?

Noch eine Sache: Ansteuern möchte ich wiefolgt. An meinen Arduino Uno 
möchte ich ein 0 - 10V Singal geben, dass sowohl die Drehrichtung, als 
auch die Geschwindigkeit kodiert. Hierbei habe ich gedacht, dass < 5V 
den Motor in deine eine Richtung drehen lässt (0V hohe Drehzahl) und bei 
> 10V in die andere Richtung (10V hohe Drehzahl). Macht das so Sinn, 
oder habe ich etwas nicht bedacht?

Viele Grüße.

von Oleg A. (oga)


Lesenswert?

P. S. schrieb:
> Noch eine Sache: Ansteuern möchte ich wiefolgt. An meinen Arduino Uno
> möchte ich ein 0 - 10V Singal geben, dass sowohl die Drehrichtung, als
> auch die Geschwindigkeit kodiert. Hierbei habe ich gedacht, dass < 5V
> den Motor in deine eine Richtung drehen lässt (0V hohe Drehzahl) und bei
> 10V in die andere Richtung (10V hohe Drehzahl). Macht das so Sinn,
> oder habe ich etwas nicht bedacht?

Es wird schwierig eine exakte Spannung von 5V zu halten um den 
Stillstand zu garantieren. Falls die Stellgrösse in digitaler Form 
verfügbar ist, sollte es besser über eine UART, oder SPI oder wie auch 
immer kodiert dem Arduino zugewiesen werden.

von BirgerT (Gast)


Lesenswert?

In der Praxis wird dazu ein "Totband" definiert; zum Beispiel:

Spannung kleiner 0,5V = Volle Pulle links
Spannung zwischen 0,5 und 4,5 Volt = analog Geschwindigkeit links
Spannung 4,5 bis 5,5 Volt = Stillstand
5,5 bis 9,5 Volt = Geschwindigkeitsstellung rechts rum
Größer 9,5 Volt = Volle Pulle rechts

Aber woher sollen die 0..10 Volt kommen?
Arbeitet der Arduino nicht nur mit 5 oder gar 3,3 Volt?

Bzw. der ADC im Arduino liefert ja einen Digitalwert von 0..1023.
Da kann man dann ein 10kOhm Trimmer als Spannungsteiler vorschalten..

von MaWin (Gast)


Lesenswert?

P. S. schrieb:
> Ich habe gerade mal gemessen. Der Anlaufstrom liegt bei etwa 6,5 A (für
> etwa 100ms),

Unwahrscheinlich, dass dein 6A Motor nur 6.5A beim Anlauf zieht, eher 
12A, blockier ihn doch mal zum messen.

In 100ms ist ein Transistor schon kaputt.

von Ursus P. (unwichtig)


Lesenswert?

MaWin schrieb:
> P. S. schrieb:
>> Die PWM-Frequenz sollte ich sicherlich irgendwo im kHz-Bereich suchen,
>> ja?
> Warum ?
> Drehstrommotore und Wechselstrommotore arbeiten auch an 50Hz gut.

50 Hz Grundfrequenz, aber nicht die Modulationsfrequenz, sind zwei 
verschiedene paar Schuhe.

>> Ich möchte einen 24V/6A DC-Motor antreiben.
> Wie viel Strom braucht denn der Motor beim Anlaufen=Blockieren ? Das ist
> nämlich der Strom, auf den die Elektronik auszulegen ist, sonst ist sie
> schon beim ersten Anlauf kaputt.

Quatsch, dann wäre jeder Umrichter weit mehr als Überdimensioniert. 
Ungefähr 1,2 x Nennstrom. Du hast ja PWM, also kannst den Motor sanft 
hochfahren lassen.

von batman (Gast)


Lesenswert?

Ja wenn er sanft hochfährt, d.h. geringes Losbrechmoment hat. Bei 
Drehzahl 0 braucht er auch viel mehr Strom fürs Drehmoment, als bei 
Nenndrehzahl. Daher hatte man früher bei Festplatten auch ne extra 
Startstromleitung.

von P. S. (Gast)


Lesenswert?

BirgerT schrieb:
> In der Praxis wird dazu ein "Totband" definiert; zum Beispiel:
>
> Spannung kleiner 0,5V = Volle Pulle links
> Spannung zwischen 0,5 und 4,5 Volt = analog Geschwindigkeit links
> Spannung 4,5 bis 5,5 Volt = Stillstand
> 5,5 bis 9,5 Volt = Geschwindigkeitsstellung rechts rum
> Größer 9,5 Volt = Volle Pulle rechts

Vielen Dank, das ist guter Hinweis. So werde ich das wohl machen.

> Aber woher sollen die 0..10 Volt kommen?
> Arbeitet der Arduino nicht nur mit 5 oder gar 3,3 Volt?
>
> Bzw. der ADC im Arduino liefert ja einen Digitalwert von 0..1023.
> Da kann man dann ein 10kOhm Trimmer als Spannungsteiler vorschalten.

Da habe ich nicht dran gedacht, dass der Arduino an den Input Pins nur 0 
bis 5 V handeln kann. Meine Spannung kommt von extern (ein PC). Dann 
muss ich wohl die Mitte auf 2,5V legen. Seht ihr eine andere 
Möglichkeit, da ich so ja nur einen recht kleinen Bereich habe, um die 
Drehzahl zu steuern (2V)?

MaWin schrieb:
> P. S. schrieb:
>> Ich habe gerade mal gemessen. Der Anlaufstrom liegt bei etwa 6,5 A (für
>> etwa 100ms),
>
> Unwahrscheinlich, dass dein 6A Motor nur 6.5A beim Anlauf zieht, eher
> 12A, blockier ihn doch mal zum messen.
>
> In 100ms ist ein Transistor schon kaputt.

Ich habe mich wohl geirrt. Die 6A im Eingangspost waren wohl falsch. 
Also der Motor benötigt 500mA im normalen Betrieb und im Anlauf 6,5A. 
Also nochmal die Frage: Kann ich den LMD18200T verwenden? Der 
Maximalstrom liegt laut Datenblatt bei 6A. Brauche ich außer 
Widerständen/Kondensatoren weitere Beschaltung?

Vielen Dank für eure Antworten. :)

von Christian M. (Gast)


Lesenswert?

Oleg Ayranov schrieb:

> Stillstand zu garantieren. Falls die Stellgrösse in digitaler Form
> verfügbar ist, sollte es besser über eine UART, oder SPI oder wie auch
> immer kodiert dem Arduino zugewiesen werden.

P. S. (n0r0) schrieb:

> Hierbei möchte ich sowohl die Drehzahl, als auch
> die Richtung über einen PC steuern.

Er kann also direkt über USB verbinden.

Gruss Chregu

von noti (Gast)


Lesenswert?

Ich schlage eine fertige Lösung um nicht von der Kernaufgabe des TE 
abzulenken / unnötig viel Aufwand zu betreiben. Es sehr viele Module, 
meist aus dem Bereich der Robotik / des Modellbaus, die über 
verschiedene Schnittstellen Motoren direkt ansteuern können.
Z.B. Pololu: 
https://www.pololu.com/category/10/brushed-dc-motor-controllers
Beispielsweise der Simple-High-Power Motor Controller 24V12, der 5,5 bis 
40V und 12A kann und auf verschiedneste Weise angesteuert werden kann.

von m.n. (Gast)


Lesenswert?

batman schrieb:
> Bei
> Drehzahl 0 braucht er auch viel mehr Strom fürs Drehmoment, als bei
> Nenndrehzahl.

Komisch, bei mir braucht er überhaupt keinen Strom, wenn er sich nicht 
dreht.

P. S. schrieb:
> Also nochmal die Frage: Kann ich den LMD18200T verwenden?

Kannst Du nehmen, wenn Du ihn gut bekommst. Ich würde einen L6202/3 
nehmen.
Mit kurzer Rampe anzufahren und abzubremsen ist immer ratsam.

von batman (Gast)


Lesenswert?

m.n. schrieb:
> batman schrieb:
>> Bei
>> Drehzahl 0 braucht er auch viel mehr Strom fürs Drehmoment, als bei
>> Nenndrehzahl.
>
> Komisch, bei mir braucht er überhaupt keinen Strom, wenn er sich nicht
> dreht.
>
Welches Drehmoment hat er denn dann?

von P. S. (Gast)


Lesenswert?

noti schrieb:
> Ich schlage eine fertige Lösung um nicht von der Kernaufgabe des
> TE
> abzulenken / unnötig viel Aufwand zu betreiben. Es sehr viele Module,
> meist aus dem Bereich der Robotik / des Modellbaus, die über
> verschiedene Schnittstellen Motoren direkt ansteuern können.
> Z.B. Pololu:
> https://www.pololu.com/category/10/brushed-dc-moto...
> Beispielsweise der Simple-High-Power Motor Controller 24V12, der 5,5 bis
> 40V und 12A kann und auf verschiedneste Weise angesteuert werden kann.

Vielen Dank, das ist auf jeden Fall eine gute Alternative. Um einen 
möglichst hohen Lerneffekt zu erzielen, gefällt mir aktuell die Arduino 
/ LM18200-Lösung am besten.

> P. S. schrieb:
>> Also nochmal die Frage: Kann ich den LMD18200T verwenden?
>
> Kannst Du nehmen, wenn Du ihn gut bekommst. Ich würde einen L6202/3
> nehmen.
> Mit kurzer Rampe anzufahren und abzubremsen ist immer ratsam.

Vielen Dank, ja an den LMD18200T komme ich recht gut ran. Der L6202 ist 
nur für 5A Peak Current ausgelegt und für bis zu 10A bei weniger als 
1ms. Da bin ich allerdings mit meinen 6,5A @ 100ms drüber. Du meinst, 
der hält das trotzdem aus (auch über einen längeren Zeitraum)?

Bezüglich des LMD18200 Ansonsten wurde in einem TI-Forum angeraten, 
weitere 4 Schottky-Dioden zu schalten, zwischen:
  * VCC --|<|-- Output1
  * VCC --|<|-- Output2
  * Output1 --|<|-- GND
  * Output2 --|<|-- GND
Welche Randbedingungen sollten die Dioden erfüllen? 40V / 10 A wäre 
okay?

Vielen Dank und beste Grüße

von m.n. (Gast)


Lesenswert?

P. S. schrieb:
> Vielen Dank, ja an den LMD18200T komme ich recht gut ran. Der L6202 ist
> nur für 5A Peak Current ausgelegt und für bis zu 10A bei weniger als
> 1ms. Da bin ich allerdings mit meinen 6,5A @ 100ms drüber. Du meinst,
> der hält das trotzdem aus (auch über einen längeren Zeitraum)?

Den L6203 verwende ich für (Größenordnung) Scheibenwischermotore: kein 
Problem mit kurzer Rampe.

batman schrieb:
> Welches Drehmoment hat er denn dann?

Kein Drehmoment. Wenn ich Drehmoment brauche, gebe ich einen Strom vor. 
Das Drehmoment hängt vom Strom ab und nicht umgekehrt!

von Harald W. (wilhelms)


Lesenswert?

m.n. schrieb:

> Komisch, bei mir braucht er überhaupt keinen Strom, wenn er sich nicht
> dreht.

Dann hast Du aber einen ungewöhnlichen Motor. Im Stillstand wird
der Strom normalerweise nur durch den ohmschen Widerstand begrenzt
und beträgt typisch 10x Nennstrom.

von P. S. (Gast)


Lesenswert?

m.n. schrieb:
> P. S. schrieb:
>> Vielen Dank, ja an den LMD18200T komme ich recht gut ran. Der L6202 ist
>> nur für 5A Peak Current ausgelegt und für bis zu 10A bei weniger als
>> 1ms. Da bin ich allerdings mit meinen 6,5A @ 100ms drüber. Du meinst,
>> der hält das trotzdem aus (auch über einen längeren Zeitraum)?
>
> Den L6203 verwende ich für (Größenordnung) Scheibenwischermotore: kein
> Problem mit kurzer Rampe.

Alles klar, danke.

Als Schutzdioden (siehe mein vorheriger Post) eignen sich diese Dioden?
 * MULTICOMP MBR1060

Den Hinweis bezüglich der Dioden habe ich von hier: 
https://e2e.ti.com/support/power_management/isolated_controllers/f/188/t/184260

Viele Grüße.

von BirgerT (Gast)


Lesenswert?

Hi P.S.,

bevor Du selber das Schaltungsentwickeln und Platinenätzen anfängst..
..es sieht so aus, als ob man diesen Bausatz "hacken" kann
http://www.pollin.de/shop/dt/Mzc5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_Drehzahlsteller_fuer_Gleichstrommotoren.html

Da ist schon ein AtMega drauf, ein Analogeingang (für die 0..5V) wäre 
noch frei, und einen freien Pin für eine Relaisansteuerung 
(Motordrehrichtung umschalten) gibt es auch noch. nur das ganze Programm 
müsstest Du neu schreiben, weil die Sourcen nicht zur Verfügung stehen. 
Zum Programmieren müsste der Programmer an die Taster

Eine weitere Alternative wäre ein Fahrtregler aus dem Modellbau, der wie 
ein Servo angesteuert wird. Für den Arduino und andere Mikrocontroller 
gibt es ja Bibliotheken zur Servoansteuerung. Der Arduino müsste dann 
nur aus dem Analogsignal die Servo Pulse für den Fahrtregler generieren.

Oder man baut einen (passenden mit NE556) Servotester so um, dass er 
direkt mit 0..10V angesteuert werden kann, dann braucht man da gar nix 
zu programmieren.

Aber wieviel Geld und Zeit Du investieren möchtest, musst Du selber 
entscheiden.

Viel Erfolg, und halte uns auf dem Laufenden /BirgerT

von m.n. (Gast)


Lesenswert?

Ich nehme mal die Preise von Reichelt:
LMD18200 für 19,70
L6203 für 3,80

Der L6203 braucht definitiv keine zusätzlichen Schutzdioden und hat 
meines Erachtens den Vorteil, daß man die Brücken nach eigenem Gutdünken 
ansteuern kann. Wenn man nur eine Richtung braucht, paßt er auch für 
zwei Motore.

Geschickterweise nimmt man einen µC mit zwei PWM-Ausgängen, wie sie 
schon ein ATtiny25 bietet. Ein weiterer Ausgang für Enable, sowie zwei 
ADC-Eingänge für Strommessung und Poti zur Drehzahlvorgabe und die Sache 
läuft.
Reicht Dir ne Zeichnung oder soll ich auch gleich noch ein Programm dazu 
schreiben? ;-)

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.