Ich (arduino-newbie) möchte bei einen einfachen DC-Motor (1-Phase, 2A) die Drehzahl PWM lastunabhängig regeln.
Als Umdrehungsreferenz-Taktgeber setze ich einen einfachen Hallsensor oder ein Lichtschranke auf der Welle ein.
H-Bridge L6205 (grösser Bruder vom L298)
Arduino-UNO
Sensor Hall oder LED
Ich hab versucht die richtigen sketchs zu finden, bin aber nicht ganz schlau geworden, was ich nun wirklich einsetzen soll.
Welche Libary (wenn es überhaupt eine braucht) soll (kann) ich einsetzen ?
Es gibt da ja die servo.h und eventuell die AFMotor.h (wenn diese nicht nur mit dem Motor-Shield eingesetzt werden kann).
Wie soll ich diese Simple-Testumgebung am besten aufbauen ?
Der Zusatz mit dem Sensor muss dann aber noch zusätzlich realisiert werden.
Da du noch ein Newbie bist, empfehle ich dir dass du zuerst eine “einfache” Motorsteuerung, wie das Beispiel aufbaust. Wenn du die Schaltung und den Programmcode verstehst, kannst du noch die Erweiterung mit dem Sensor machen.
Bitte jetzt nicht einfachen fragen “wie mach ich das?”.
die beiden Beispiele habe ich bereits schon gesehen. Was ich nicht gefunden habe ist der Input für den Sensor, der die Drehzahl synchronisiern soll. damit diese konstant bleibt. das müsste doch ihrgend ein counter sein oder ?
Hallo Pet
Das mußt Du selbst programmieren. Die Ansteuerung der Motore sieht keine Sollgröße vor.
Du mußt die Drehzahl messen und dementsprechend das PWM Signal regeln.
Um die Drehzahl zu messen kannst Du PulseIn verwenden. Sei DIr aber bewußt daß PulseIn wie Delay die Ausführung des Programms stoppt und erst nach erfolgter Messung das Programm weiter abarbeitet.
http://arduino.cc/en/Reference/PulseIn
Das ganze wird ne ziemlich harte Nuss für einen Einstiger, da das in den Bereich Regelungstechnik abdriftet.
Da gibt es ja verschiedene Regler. Welcher davon für dein Vorhaben geeignet ist, lässt sich aufgrund mangelnder Informationen auch nicht sagen. Unter Umständen tut es ja auch ein vergleichsweise einfacher I-Regler. Schlimmstenfalls ist ein PID-Regler zu programmieren. Bevor Fragen aufkommen: selbst habe ich das noch nicht gemacht. Im "Exhibition"-Teil des Forums findet man jedoch einen selbstbalancierenden Roboter, der auf eine PID-Regelung setzt. eventuell kann man sich da was abschauen.
ich habe hier ein filmprojektor, den ich umbauen (steuern) möchte.
da muss die drehzahl genau stimmen.
also eigentlich keine grosse rechenleistung (... zumindest wie ich gedacht habe).
aber eben nur eine konstante geschwindigkeit braucht es hier.
vielleicht gibts ja auch eine regelbare h-bridge, die dann über den arduino angesteuert werden kann. hab so was schon mal gesehen, finde den artikel aber nicht mehr.
schrittmotor wäre dann einfach eine weitere option.
Ich bin anfangs davon ausgegangen, dass mit stark wechselnden Drehmomenten zu rechnen ist. Spult man ein paar Filmrollen ab, bleibt die Last ja nahezu konstant. Im Normalfall sind das ja auch Getriebemotoren, die entsprechend untersetzt sind und damit ein hohes Drehmoment liefern können, ohne stark gebremst zu werden. Probier es doch erst mal ohne Regelung und stell die Drehzahl passend ein, bevor du dich an andere Antriebsmöglichkeiten wagst.
das hab ich bereits getestet. ich müsste einen sehr grossen motor nehmen um das absolut lastunabhängig zu bauen. eine filmspule 450mm/16mm hat, wenn sie ganz voll ist, einges mehr an energiebedarf, als wenn diese dann am schluss fast leer ist. auch die tonübertragung bedingt eine möglichst genaue lastunabhängige drehzahl.
die besseren projektoren hatten genau für das früher auch teilweise rein analoge steuerungen.
das müsste so vor etwa 20-30 jahren gewesen sein.
arduino finde ich eine absulut geniales projekt (nicht nur um einen motor zu steuern) und 'nur' um einen motor zu regeln müsste das ding ja wohl auch von nutzen sein :)
Die Spule die den Film aufrollt hat eine Drehzahl die von der Menge Film abhängt. Vmin zu Vmax ist normalerweise 1:4. Dies wird entweder mit einer Kupplung oder mit einem Motor gemacht der überdimensioniert ist und darum nicht kaputgeht wenn er ganz eingebremst wird, realisiert.
Die konstante Drehzahl des Films vor dem Tonabnehmer bzw das schrittweise Vorrücken des Films vor dem Bildfenster wird durch einen Redundanz-synchromotor oder Asynchronmotor bewerkstelligt. Diese Last ist konstant.
Da die Drehrichtung immer die gleiche ist brauchst Du keine H-Brücke sondern nur einen Transistor.
Wie schnell kommen die Impulse von deinem Encoder daher oder wie schnell sollen sich die Spulen drehen? Wenn sich das in einem vernünftigen Rahmen abspielt, dann ist das nicht so kompliziert. Für einen Anfänger trotzdem eher anspruchsvoll, aber es sollte machbar sein. Wegen der Algorithmen für den Regelkreis kannst du mit den einfachen anfangen und dich nach Bedarf zu den komplizierten raufarbeiten, bis das Resultat gut genug ist.
@uwefed
der antrieb ist eine vorlaufrolle, die unmittelbar vor der filmbühne den film unabhängig von der spulenwicklung durchzieht. die last aber ändert sich, wenn der film sich abrollt. also muss der motor geregelt laufen.
die sogenannte ueberlast ist nur die bremse, die dafür sorgt, dass der film nicht nachläuft.
eine capstan-rolle übernimmt dann den absoluten glaichlauf, wie bei einem tonband.
@Korman
die anzahl pulse kommt auf den geber(encoder) drauf an, den kann ich so einbauen, wie es für die umsetzung dann notwendig ist.
aktuell habe ich einen motor mit 1200 u/min
ein signal von 1-6 pulsen pro umdrehung sollte in etwa funktionieren.
@Megaionstorm
das habe ich mir auch schon für den 298er überlegt
ich weiss nicht ob man die parallel schalten darf.
1200 rpm mit 6 Impulsen pro Umdrehung gibt etwa einen Impuls alle 8 ms maximal. Das klingt nicht so schlimm.
Ich würde die Impulsdauer mit einer simplen Interruptfunktion messen, die bei jedem Puls an Pin 2 oder 3 ausgelöst wird. In loop() hast du dann immer wie von magischer Hand die aktuelle Impulsdauer und du kannst gemütlich deinen Motor regeln. Bei der Interruptfunktion muß man nur auf ein paar Details achten, es ist aber nicht so kompliziert.
Ja Pet, Du hast Recht, hab die erste Antriebsrolle Rolle vergessen. hab lange keinen 16mm Projektor von nahem mehr gesehen.
Die Ausgänge des L293B kannst Du nicht paralell schalten.
Ich verstehe noch nicht wieso Du den Motor in beide Richtungen drehen lassen willst. Der Film läuft nur in eine Richtung.
Um einen Motor in eine Richtung laufen zu lassen genügt ein Transistor der zwischen Minuspol des Motors und Masse geschaltet ist. zB eine MOSFET IRF540.
Naja, du kannst entweder Impulse zählen oder die Dauer der Impulse messen. Bei schnellen Impulsen ist zählen besser, bei langsamen messen. Mit maximal 120 Impulse pro Sekunde bist du schon im Bereich langsame Impulse, da dauert zählen bald zu lange bis du eine genaue Drehgeschwindigkeit bekommst. Messen ist da besser.
Wegen der Interrupts mußt du dir keine Sorgen machen, deine Interruptroutine belastet das System etwa genau so wenig wie die Aktualisierung von millis() wenn sie richtig geschrieben ist. Du bist auch sonst im sicheren Bereich, da es weder bei deiner Messung auf 8µs nicht ankommen sollte (das wäre ein maximaler Fehler von 0.1%) noch die Frequenz hoch genug ist damit Interrupts verloren gehen.