www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR schnell genug für Motorcontroller


Autor: Stefan H. (stefan_h16)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Berger (casandro) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: P. M. (o-o)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan H. (stefan_h16)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.