Forum: Mikrocontroller und Digitale Elektronik PWM mit Lastregelung


von Heiko Wilkens (Gast)


Lesenswert?

Hallo zusammen,

steuere mittels PWM einen Motor an einem ATMEL Prozessor. Suche nach
einer Möglichkeit, die Drehzahl auch bei Laständerungen relativ
konstant zu halten. Gibt es eine einfache Möglichkeit? Die Lastregelung
muss nicht über den µP laufen.

Gruß - Heiko

von Thomas O. (Gast)


Lesenswert?

Hallo,

über den ADC kannst du den Spannungsabfall bei höherer Last messen,
daraufhin den PWM-Wert erhöhen um das auszugleichen. Da der ADC aber
nur etwas über knapp 5V messen kann, musst du einen Spannungsteiler
verwenden um z.b. die Versorgungsspannung des Motors(12V) unter die 5V
Grenze zu bringen. Und achte auch die Störungen die so ein Motor in
Stromversorgung einstreuen kann evtl. bringt er den AVR aus dem Tritt.

Da solltest du dann an jede Motorleitung einen Spule und einen
Kondensator von + nach - reinmachen.

Eine genauere Beschreibug des Projekts wäre hilfreich. Was für
Motor(Lüfter), welche Spannung/Strom, hängt der AVR an der gleichen
Versorgungsspannung über einen Spannungregler usw.

von Heiko Wilkens (Gast)


Lesenswert?

Hallo Thomas,

zunächst weitere Informationen zum Projekt:

Ich steuere einen Motor zur Fokussierung eines Teleskops.
Der Motor ist fest im Teleskop eingebaut. 6V Modell, zieht ca. 70mA.
Ich benötige rechts/links Lauf sowie einen weiten Drehzahlbereich um
feinfühlig scharf zu stellen, aber auch große Entfernungen schnell zu
durchfahren. Die Originaldrehzahlsteuerung arbeitet analog durch
Anlegen unterschiedlicher Spannung (1,25-6V), dies funktioniert gerade
bei langsamen Geschwindigkeiten nicht gut. Ausserdem ändert sich die
Belastung des Motors bei rechts/links Lauf und damit habe ich
unterschiedliche Drehzahlen.

Mit meiner PWM Steuerung will ich
- den Motor mit geringeren Drehzahlen betreiben
- das Drehmoment bei geringeren Drehzahlen erhöhen
- eine hohe Drehzahlkonstanz bei unterschiedlichen Belastungen
- das Teleskop vom PC aus bedienen

Mein jetziger PWM Prototyp arbeitet mit ATMEL 2313, BUK-100
(überdimensioniert, hatte grad nix anderes) auf 6V und Relais zur
Drehrichtungsumkehr. Später wollte ich einen L293 als Ersatz für BUK
und Relais verwenden.

Nun habe mit der jetzigen ATMEL PWM Steuerung festgestellt, dass die
Drehzahl viel stärker von der Belastung des Motors abhängig ist als bei
der analogen Steuerung. Da die Belastung vor allem von der Drehrichtung
abhängt, habe ich nun in einer Richtung eine ca. doppelte Drehzahl bei
gleicher PWM Einstellung.

Gibt es eine nutzbare Ressource für die von Dir vorgeschlagene Lösung.
Ich hab mal darüber gelesen, in den PWM "Pausen" die Motorspannung zu
messen und daraus die Drehzahl abzuleiten. Wie hoch darf den bei dieser
Methode die PWM Frequenz sein, damit das noch sicher funktioniert? Gibt
es irgendetwas Verwertbares dazu (Prinzip, Schaltungen etc.)?

Alternativ wäre bei den popeligen Motorwerten auch eine analoge
Regelung denkbar. Hat hierfür jemand eine Rssource? Wichtig wäre in der
Tat die Ansteuerung über den µP.

Besten Dank im Voraus
Heiko



Ich dachte das niedrige Drehmoment bei geringer Geschwindigkeit durch
PWM zu verbessern, habe dabei festgestellt, dass die Drehzahl bei PWM
viel stärker von der Belastung des Motors abhängt.

von Phip (Gast)


Lesenswert?

Hi,

Wie tut's denn, wenn du die Drehzahl einfach bei der einen
Drehrichtung verdoppelst? Das ist zwar etwas Quick'n'Dirty, aber
immerhin hättest du dann einen kleineren Unterschied...
Nur so als Idee...

von Benedikt (Gast)


Lesenswert?

>Ich dachte das niedrige Drehmoment bei geringer Geschwindigkeit durch
>PWM zu verbessern, habe dabei festgestellt, dass die Drehzahl bei PWM
>viel stärker von der Belastung des Motors abhängt.

Ist klar, denn PWM ist im Prinzip soetwas wie eine Stromregelung.
Annäherungsweise kann man die Drehzahl eines Motors über die Spannung
und das Drehmoment über den Strom regeln.

Du müsstest irgendwie die Drehzahl messen und dann über den uC das PWM
Signal anpassen.
Entweder über eine Lichtschranke an der Motorwelle o.ä.
oder über eine Spule in der Leitung zum Motor. Aufgrund der
Kommutierung geibt es viele kleine Kurzschlüsse die man als Peaks am
Spannungsabfall der Spule erkennen kann. Dann darf der Motor aber
nichtmehr mit PWM angesteuert werden.

von Thomas O. (Gast)


Lesenswert?

Hallo,

also für so einen Fall würde ich einen Schrittmotor verwenden, wenn der
ein Untersetzungsgetriebe vorne dranhat wie z.B. ein Tachoschrittmotor
sind die Sehr fein in der Auflösung meist um die 720°/Umdrehung. Das
Drehmoment wäre dann durch den Motor und das Getriebe fest gegeben aber
durch Pausen in der Steuerung kannst du das ganze langsammer machen,
also das z.b. zw. jeden Schritt die Pause länger wird.
Von der PRogrammierung sollte es ziemlich einfach sein man muss ja nur
in der richtigen Reihenfolge die einzelnen Spulen bestromen.

Da könntest dann evtl. 4 Tasten benutzen z.b. 2 für schnellen
Links/Rechtslaif des Motors und 2 für einen langsammen Lauf. Noch
besser wäre evtl. ein Poti pro Richtung so das man sehr genau und sehr
schnell die Geschwindigkeit regeln kann. Also wie bei einem Analog
Joystick, der nicht nur 8 Richtungen hat, sondern viel mehr
Schwischenpositionen.

Das ganze würde aber mit einem normalen Motor auch funktionieren, nur
könnte es sein das er einfach zu weit dreht wenn er einen kurzen
Stromimpuls bekommt. Aber hier könnte man auch durch PWM die
Geschwindigkeit des Motors beeinflussen.

von AxelR. (Gast)


Lesenswert?

Hi,
ich würde die Spannung messen, die der Motor in den PWM-Pausen selbst
erzeugt (er läuft zu diesem Zeitpunkt als Generator).
Sinkt die Drehzahl bei vorgegebener PWM-Einstellung, wird auch diese
Spannung geringer. Nun gibst Du mehr DutyCycle, bis die
(Generator)Spannung deines Motors wieder dem erwarteten Wert
entspricht. So entsteht eine Kopplung zwischen PWM und Drehzahl.
Von PD und PID Reglern habe ich keine Ahnung, soll mal jemand was
anderes was zu sagen. Das schwingt sich sonst auf und könnte unschöne
mechanische Resonanzen nachsich ziehen.
Gruß
AxelR.

von Thomas O. (Gast)


Lesenswert?

Hallo,

wie gesagt die Motorspule(n) einfach etwas entstören. Dann kann man die
Spannung schön messen. Denn die wird ziemlich linear sein also 12Volt
Motor wird bei 6Volt mit der halben Drehzahl laufen nur würde er evtl.
nicht mit 6Volt anlaufen.

von Heiko Wilkens (Gast)


Lesenswert?

Hallo nochmal,

Dank für die zahlreichen Vorschläge.
Ich finde den Vorschlag mit der Messung der Motorspannung gut geeignet.


Hat jemand praktische Erfahrungen damit? Ich stelle mir das Timing
etwas komplex vor (Abstimmung der PWM Pausen mit dem Messen der
Spannung).
- Wie erkenne ich z.B. die Pause bei einem freilaufendem PWM?
- Wie lange sollte ich nach Abschalten der Spannung mit dem Beginn der
AD Wandlung warten?
- Wie aggresiv sollte die Regelung eingreifen, gibt es da
Erfahrungswerte oder Berechnungsmodelle?

Kann ich alternativ zur Messung der Motorspannung in den Pausen auch
Strommessung in den aktiven PWM Phasen benutzen? (Der Motor soll wegen
rechts/links Lauf in einer Brücke laufen - L293 oder so. Den Strom
könnte ich einfach gegen Masse mit einem Shunt messen. Bei der Spannung
müsste ich 2 AD Kanäle in der Brücke benutzen).

Viele Grüße - Heiko

von AxelR. (Gast)


Lesenswert?

Am Motor rechts und links 'ne Diode. Kathode zusammen, 10uF gegen
Masse. Spannungsmessung erledigt.
Die Zeit zwischen Oc0-Interrupt und Timer0-Overflow ist, je nach
einstellung, H-oder L Phase deiner PWM. Kannst aber auch immer messen.
Die Spanung bei z.B. 50%PWM ändert sich drastisch, wenn man den Motor
mit der Hand abbremst. bei95% nicht mehr soo stark, wenn du immer
misst, iss ja auch logisch (Hab' ich probiert) allerdings spielen die
Dioden das unschön rein. Du musst die C's belasten, damit diese sich
entladen können, sonst misst du keine ausreichend abfallende Spannung,
wenn der Finger die Achse abbremst, weil die Dioden sperren...
Strommessung geht natürlich auch, drehmoment ist dem Antriebsstrom
gleichzusetzen, passt mathematisch sogar besser, als die
Generatorspannung. Spannung war so mein erster Gedanke.
AxelR.

von Heiko Wilkens (Gast)


Lesenswert?

Hallo Axel,

so werde ich es tun. Danke nochmal für die schönen Hinweise und Tipps!
Wenn ich viel Zeit und Muße habe, probiere ich mal den Unterschied
zwischen integraler Spannungsmessung und Spannungsmessung in den PWM
Pausen, mal sehen...

Heiko

von Andreas Wiese (Gast)


Lesenswert?

Ich würde dir auch ne Stromregelung vorschlagen.
Wichtig ist der Messzeitpunkt: Er sollte, um die Schaltstörungen zu
eliminieren, möglichst in der Mitte zwischen den Schaltzeitpunkten
liegen. Da der 2313 im PWM-Modus als UP-Down Timer läuft, ist der Over-
oder Underflow Zeitpunkt also genau der richtige.
Im Idealfall würde man also genau dann messen, regeln und nachstellen.
Das Problem ist jetzt natürlcih die Zeit, die dafür drauf geht. Ich
weiß nicht, mit welcher PWM-Frequenz du arbeitest, aber da der A/D
Wandler von den AVRs mindestens 13µs(8bit z.B. ATMega128) oder
65µs(10bit) braucht, wird das ganze schon ziemlich knapp, daher würde
ich vorschlagen, beim ersten Interrupt zu messen, beim nächsten zu
regeln und beim dritten das Register zu aktualisieren.
Entsprechend langsamer muss dann der Regler, hierfür wäre ein PI-Regler
angebracht, sein.
Für schnellere Regelung muss ein schnellerer Wandler oder eine analoge
Regelung her.

von Stefan May (Gast)


Lesenswert?

Hi ho,

Und warum nicht ganz billig die Drehzahl mit einer Lichtschranke
messen?

ciao, Stefan.

von Heiko Wilkens (Gast)


Lesenswert?

Hallo Andreas,

Axel schrieb schon davon, dass die Strommessung mathematisch korrekter
sei für eine Drehzahlsteuerung. Bevor ich jetzt meinen neuen Prototypen
ätze möchte ich daher gern die Frage klären, was nun besser ist,
insbesondere aus pragmatischen Erwägungen aber auch bez. der zu
erzielenden Drehzahlkonstanz. Dafür folgende Kriterien:
- Effektivität der Drehzahlregelung (bei Generatorspannung vs. Strom)
- Einfachheit der Messung, insbesondere Timing und Störungen
- Berechnungsaufwand (Prozessorzeit) für die Regelung

Helf mir nochmal auf die Sprünge - ich hatte zwar während meines
Studiums die PI und PID Geschichten, aber naja...wie realisiert man
dies in AVR Code?

@Stefan: Der Motor ist eingebaut in einem Teleskop und schwer
zugänglich, ausserdem haben weitere Sternenfreunde Interesse an meinen
Aktivitäten bekundet. Daher wäre ein erforderlicher Eingriff in das
Teleskop hinderlich.

Dankeschön - Heiko

von Andreas Wiese (Gast)


Lesenswert?

Hallo,

Also zuerst mal: Alle meine Ausführungen gelten jetzt speziell für den
Gleichstrommotor mit Fremd, bzw. Fremderregung, d.h für ein konstantes
Erregerfeld. Ich gehe jetzt mal davon aus, dass es sich bei deinem
Antrieb um einen einfachen Permanentmagnet DC-Motor handelt.
Hier gilt: Drehmoment ist proportional zum Strom. Das bedeutet, du
musst bei bestimmtem Strom das Drehmoment kennen (Nennpunkt) den Rest
kannst du dir ausrechnen.
Die Drehzahlregelung realisiert man im Allgemeinen nach dem
Kaskadenprinzip: Das bedeutet, man realisiert einen Drehzahlregler(PI)
der aus der Drehzahldifferenz einen Drehmomentsollwert berechnet.
Dieser Sollwert stellt direkt für einen bestimment Sollstrom. Diesen
regelt man nun mit einem Stromregler(PI).
Das hat den großen Vorteil, dass ausgeschlossen werden kann, dass bei
großen Drehzahlabweichungen, z.B. weil der Motor klemmt, ein zu hoher
Strom fließt.
Die Regler sind im Prinzip gleich zu realisieren. Wichtig hierbei ist
eine getrennte Begrenzung von P und I Anteil, aber PI Regler war hier
im Forum schon des öfteren behandelt. Ansonsten könnte ich den in C mal
raussuchen.
Problematisch ist nun nur die Regelgeschwindigkeit. Drehzahlregelung
ist mit dem AVR kein Problem, denn diese muss wesentlich langsamer sein
als die unterlagerte Stromregelung.
Die Rechenzeit hängt natürlich im wesentlichen auch von der Genauigkeit
ab. Wenn du mit 8bit auskommst (gehe ich eigentlich von aus) und den
AVR-Wandler mit 1 MHz laufen lässt sollten die Zeiten auch für die
Stromregelung ausreichen. Wenn die PWM Frequenz zu hoch ist, kannst du
es ja machen, wie ich oben beschrieben habe.
Wichtig ist, dass du wirklich mit 8bit-Variablen arbeitest, falls du in
C-prgrammierst, also vom Typ char.
Die andere Variante, die bei deinem Projekt durchaus in Frage kommt ist
ein analoger Linarregler für den Strom, denn die Einschaltzeiten des
Motors sind doch vermutlich sehr gering, und die Gesamtleistung ist es
auch.
Den könnstest du mit einem OP als PI-Regler geschaltet und einem
Leistungstransistor realisieren.
Dann hättest du für den AVR nur noch den Drehzahlregler, dessen Werte
du per geglätteter PWM an die Analogregelung ausgeben könntest. Dann
hast du mit Performance keine Probleme, und keine Schaltstörungen im
Leistungskreis.
Also von Arbeistaufwand würde ich letztere Variante bevorzugen.

Gruß
Andreas

von AxelR. (Gast)


Lesenswert?

Na Leute, gab's da nich zu "ostzeiten" diese Reglemimik mit dieser
"Piko"Bohrmaschine? War doch relativ simpel und hat wunderbar
funktioniert. Ein Eingriff in die Maschine war hier auch nicht
erforderlich. PWM war analog gelöst, mit Dreieck und Komparator. Die
Drehzahlregelung ging über die Strommessung mittels 0.1 Ohm
Widerstand(den keiner hatte).
Frag den Fuchs, in welcher Publikation das zu finden ist. Vielleicht in
einem alten "Funkamateur"?
Gruß
Axel

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.