Schönen Abend zusammen, Ich möchte für mein Lego NXT System einen "intelligenten" Motortreiber bauen für die NXT Motoren bauen. Dieser soll nicht nur die Geschwindigkeit einstellen und die Encoder auslesen, sondern die Motoren auch noch gleich regeln. Dazu habe ich folgende Anforderungen: - (Software-)PWM für 6 Motoren - Einlesen der eingebauten Quadrature-Rotationsencoder aller 6 Motoren über interrupts - Bei 720 Ticks pro umdrehung - max 160 rpm - 1920 ticks pro sekunde pro motor - 11520 ticks pro sekunde für 6 motoren - Dazu noch eine Art Regelung (PID?) die es ermöglicht, entweder bestimmte Positionen genau anzufahren, oder eine bestimmte Geschwindigkeit genau zu halten - Die Kommandos dafür vom Host dafür sollen über RS485 (bzw über UART) kommen. Die grundsätzliche Hardware- und Softwareinfrastruktur habe ich auf einem Steckbrett getestet, jetzt für mich wichtig ob ich eine passende Platine ätzen und bestücken sollte. Dazu folgende Fragen: - Irgendwo ein Denkfehler ? - Hat z.B. ein Atmega644 bei 20 MHZ genug Resourcen dafür, oder sollte ich die Anzahl der Motoren abspecken bzw einen anderen Mikrocontroller ansehen ? Mir geht es dabei vor allem darum ob ich zuviele Ticks der Encoder verliere wenn die Interrupts nicht schnell genug bearbeitet werden, da wahrscheinlich sowohl für das PWM als auch für die Motorregelung noch mal zusätzliche Timer interrupts dazu kommen. Bitte alle konstruktiven Vorschläge zum Thema. Wäre echt schade wenn ich die Schaltung aufbaue und dann feststelle das ich nur die Hälfte der verbauten Motortreiber wirklich nutzen kann. Edit: Tippfehler
Nimm lieber einfachere Mikrocontroller und dann aber einen pro Motor. Dann könnte es vielleicht funktionieren. Der 644 ist für Deine Anforderungen viel zu groß, Du brauchst höchstwahrscheinlich die 32 Kilobit Speicher nicht. Also lieber mehr kleine Regler, dann kannst Du wirklich detailiert regeln. Wenn Du da nichts besonderes machen musst, so sollte ein Controller, auch ein AtMega 8, für 6 Motoren reichen.
Stefan H. schrieb: > Schönen Abend zusammen, > > Ich möchte für mein Lego NXT System einen "intelligenten" Motortreiber > bauen für die NXT Motoren bauen. Dieser soll nicht nur die > Geschwindigkeit einstellen und die Encoder auslesen, sondern die Motoren > auch noch gleich regeln. > Dazu habe ich folgende Anforderungen: > - (Software-)PWM für 6 Motoren > - Einlesen der eingebauten Quadrature-Rotationsencoder aller 6 Motoren > über interrupts > - Bei 720 Ticks pro umdrehung > - max 160 rpm > - 1920 ticks pro sekunde pro motor > - 11520 ticks pro sekunde für 6 motoren > - Dazu noch eine Art Regelung (PID?) die es ermöglicht, entweder > bestimmte Positionen genau anzufahren, oder eine bestimmte > Geschwindigkeit genau zu halten > - Die Kommandos dafür vom Host dafür sollen über RS485 (bzw über UART) > kommen. Was für Motoren willst Du verwenden? Normale DC-Motoren. Brushless DC? mit/ohne Hallsensor? Ich empfehle wie mein Vorgänger auch, einen Controller pro Motor zu verwenden. Damit kannst Du nämlich die Leitungen zum Motor minimal kurz machen, was das EMV-Verhalten (zur Erinnerung: Du willst PWM machen) verbessert. Als Controller empfielt sich dann eher etwa aus der AT90PWM* Familie oder ein kleiner dsPIC30/33*MC (MC steht für Motor Control). Für beide gibts auch fertige BLDC-AppNotes. Für normale DC-Motoren wäre auch ein Mega88 oder ein PIC18 denkbar. Wenn Du mal über den AVR-Tellerrand hinausschauen willst, lege ich Dir die dsPICs ans Herz - insbesondere wenn es ums Rechnen geht (DSP-Erweiterungen!) fchk
Ich würde auch lieber mehrere µCs empfehlen. Dann kann man Hardware-PWM nutzen und hat deutlich weniger zu tun. 2 Motoren mit einem µC könnte aber noch gut gehen.
Schafft er lockerst. Verwende aber am besten keine Interrupts, sondern ein starres zeitliches Ablaufschema der Software. Bei genau definierten, zeitkritischen Anwendungen spart fährt man damit meist besser.
Frank K. schrieb: > Was für Motoren willst Du verwenden? Normale DC-Motoren. Brushless DC? > mit/ohne Hallsensor? Sind ganz normale DC-Motoren, 9V, 2A max (wg. thermischer Sicherung) mit eingebauten optischem Encoder. Die Motoren des Lego NXT Systems halt. Ansonsten hatte ich mir auch schon überlegt die Arbeit auf mehrere Attinys zu Verteilen die an einem Atmega als Master hängen (über i2c).Ist wohl die bessere Lösung. Den Atmega 644 hatte ich Beispiel da der grad in der Bastelkiste rumlag.
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.