AVR schnell genug für Motorcontroller

OP #2111901
Lesenswert?

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
#2111909
Lesenswert?

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.
#2111927
Lesenswert?

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
OP #2111965
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren