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
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.
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.
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...
>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.
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.
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.
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.
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
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.
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
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.
Hi ho, Und warum nicht ganz billig die Drehzahl mit einer Lichtschranke messen? ciao, Stefan.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.