Forum: Mikrocontroller und Digitale Elektronik AVR-basierter I2C Motortreiber inkl. Encoder?


von Sven (Gast)


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

von Sven (Gast)


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.

von Einer K. (Gast)


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)

von Sven (Gast)


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?

von Einer K. (Gast)


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.

von Tobias Benn (Gast)


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.

von Olaf (Gast)


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

von Sven (Gast)


Lesenswert?

Tobias Benn schrieb:
> Nur Mal so als Hinweis, die meisten Schrittmotor Treiber von Trinamics
> haben einen Encoder Eingang und sind per SPI, Uart ansteuerbar.

Vielen Dank für den Hinweis, die kannte ich noch nicht, schaue ich mir 
gerne an.

@Olaf: Freut mich, dass ich Dir helfen konnte!

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
Noch kein Account? Hier anmelden.