AVR-basierter I2C Motortreiber inkl. Encoder?

Gast #5705842
Lesenswert?

Hallo,

ich möchte Folgendes realisieren und kann mir nicht recht vorstellen, 
dass es dazu noch nichts Wiederverwendbares oder Anpassbares gibt, 
konnte aber bisher trotz wiederholter Suchen nichts finden. Meine Frage 
ist, ob ich etwas übersehen habe, bevor ich mich an eine eigene 
Realisierung mache (wäre für meine jetzigen AVR-Programmierkenntnisse 
anspruchsvoll):

Ich möchte per I2C DC-Modellbaumotoren (ca. 6V-12V, < 1A je Motor) 
steuern und dabei per Encoder Position und Geschwindigkeit möglichst 
exakt regulieren. Gesucht ist eine quelloffene Software, die ich 
idealerweise anpassen kann bzw. die nicht auf eine konkrete 
Treiberlösung angewiesen ist. *Ideal*lösung wäre:

Slave:
- AVR-basiert
- steuert selbstständig mind. einen, ggf. auch mehrere, DC-Motoren über 
passende Treiber gemäß I2C-Kommandos des Masters
- überwacht per Interrupt die dazugehören Encoder zur genauen 
Positionierung/Geschwindigkeitskontrolle
- Kann auf verschiedene Konstellationen je Motor konfiguriert werden 
(z.B. Anzahl und Pins der Endswitches und Encodereingänge je Motor)
- Kann eine Selbstkalibrierung durchführen (Ermitteln der 
Endposition(en), Ermittlung der erforderlichen Anlauf- und 
Erhaltungswerte)
- Relativ abstraktes Set an Steuerbefehlen/Registern zum Anfahren 
bestimmter Positionen oder Dauerlauf, Start/soft stop/hard stop, sowie 
Status-Abfrage je Motor
- Ein Traum wären natürlich noch Beschleunigung ähnlich z.B. der 
AccelStepper library

Master:
- Mögl. Arduino Library zur Ansteuerung des Slave

Das einzige Projekt, das ich finden konnte und das einer solchen Lösung 
ziemlich nahe kommt, ist SAMI:

https://hackaday.io/project/158429-smart-motor-driver-for-robotics
https://www.tindie.com/products/Danny024/sami-smart-motor-driver/

Dummerweise ist das auf Slave-Seite PIC-basiert und harwareseitig nicht 
flexibel.

Was es für AVRs ansonsten natürlich gibt, sind diverse I2C-Motortreiber 
Lösungen, nur fehlt denen halt die Encoder-Komponente.

Weitere Infos:
- Schrittmotoren sind für meinen Bedarf keine Lösung
- Gedacht ist das sowohl für originäre Encodermotoren als auch für die 
separate Ergänzung von Encodern zu normalen DC-Motoren. Ob die Encoder 
also per Hall-Sensor, Lichtschranken oder Taster realisiert werden, 
sollte egal sein, aus Sicht des Slave wäre das einfach je ein 
Digitaleingang bzw. 2 zur Richtigungserkennung je Motor

Bin dankbar für alle konstruktiven Tipps!
Sven
Gast #5707046
Lesenswert?

Ich erlaube mir noch mal einen vorsichtigen Bump.

Vermutlich gibt es dann aber einfach nichts.

Wobei es mir ja gar nicht unbedingt um das volle Feature-Set geht, 
quelloffene AVR-Lösung für einen I2C-slave mit Motortreiber und Encoder 
wären schon ein Anfang.
Gast #5707094
Lesenswert?

Muss es denn unbedingt AVR sein?
Denn da wird es wohl nur mit SoftwareDecoder gehen.
Da besteht immer die Chance, dass EncoderSchritte verloren gehen.
z.B. während ISR Aufrufen

Alternativ:
Viele ARM haben HardwareDecoder (z.B. das BluePillBoard)
Gast #5707201
Lesenswert?

Gute Frage. Was der Bauer nicht kennt...

Vielen Dank aber für den Hinweis, hatte ich bisher nicht auf dem Schirm, 
werde ich mir genauer ansehen.

Wobei grundsätzlich ein Softwaredecoder bei hinreichender Taktung das 
doch auch zuverlässig hinbekommen sollte, v.a. wenn der Slave außer der 
I2C-Kommunikation nichts Nennenswertes zu tun hat?
Gast #5707216
Lesenswert?

Naja...
Die I2C Lib(Wire) nutzt selber Interrupts. In den Zeiten, ist der 
Decoder dann schon mal blind.
Und eine Timer ISR wird man auch benötigen.

Außerdem ist ja bisher noch völlig unklar, wieviele Encoder Schritte 
überhaupt pro Sekunde zu erwarten sind.
Das wäre die Basis für erste Abschätzungen.
Gast #5707787
Lesenswert?

Nur Mal so als Hinweis, die meisten Schrittmotor Treiber von Trinamics 
haben einen Encoder Eingang und sind per SPI, Uart ansteuerbar.
Gleichzeitig kannst du an die Halbbrücke einen DC-Motor(Kein Brushless) 
anklemmen.
Gast #5707796
Lesenswert?

> Vermutlich gibt es dann aber einfach nichts.

Ein bisschen PWM-Ausgabe fuer den Motortreiber und in einem Timer den 
Encoder abzutasten ist banal. Auch der Regler besteht letztlich nur aus 
1-2Zeilen Code. Wer das nicht selber hin bekommt hat sowieso nicht die 
geringste Chance so ein System auf die Beine zu stellen. Das was 
naemlich komplex ist, das ist die Parametrisierung des Reglers. Und die 
muss jedesmal an deine spezielle Hardware angepasst werden. Da kann man 
zum Glueck nichts einfach so abschreiben.
Selbst so Grundlagen wie PWM-Frequenz, Abtastfrequenz des Encoders und 
Zykluszeit des Kaskadenreglers sind stark anwendungsabhaengig.

Olaf

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