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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sven (Gast)


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


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


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


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


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

: Bearbeitet durch User
von Tobias Benn (Gast)


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


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


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

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]
  • [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.