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
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.
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)
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?
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.
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.
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.