Forum: Mikrocontroller und Digitale Elektronik DC Servo Motor mit Encoder ABZ (ABN) ansteuern Roboterarm


von Digit-22 N. (digit-22)


Lesenswert?

Guten Morgen liebe µC Gemeinde,

ich habe ein "kleines" Projekt in der Planung.
Es geht im Grunde um einen mehrachsigen (Max 6 Achsen) Roboterarm.
Die Kinematik wird selbst konstruiert und mithilfe von CNC-Maschinen und 
3D-Druckern (alles vorhanden) hergestellt...

Als antriebe für die Achsen (Gelenke oder Drehachsen)sollen DC Büsten 
Servomotoren mit integriertem Encoder ABZ (2Bit Graycode Signal) zum 
Einsatz kommen. Diese Motoren sind in verschiedenen Größen vorhanden. 
Die Antriebe sollen mit 24 bis 48 V versorget. Strom Dauerbetrieb Max 1 
A. Peak Max 4 A.

Einige Motoren haben 500 p/r (500 Pulse Pro Umdrehung) Theoretisch auch 
eine Auflösung von 2000 Counts/U möglich. Drehzahlen sind noch nicht 
festgelegt. Aber um einfach mal eine Zahl zu nennen sagen wir mal Max 
10000 U/min.

Das Projekt soll natürlich nicht von heute auf Morgen entstehen da bis 
der Roboterarm läuft, vieles entwickelt werden muss.

Die Hauptentwicklung bezieht sich zunächst nur auf die Auswertung des 
Encoders und Regelung des Motors. Später wird der Motor z.B. eine 
Position als Sollwert bekommen und soll diese Position dann anfahren.

Folgende Schritte sind für die Fertigstellung der ersten Meilensteine 
geplant.


1. Auswertung des Encoders
2. Regelung des Motors (µC, Motortreiber Endstufen)
3. Verheiraten von Punkt 1 mit Punkt 2
4. Parallel wird die Kinematik entwickelt

Das sind die ersten Meilensteine.
Später geht es in Richtung Ansteuerung aller Achsen (eventuell mit 
Raspberry Pi) und einer Roboter Software...

Zur Regelung der einzelnen Achsen ist jeweils ein Atmega328P mit 16MHz 
geplant. Dh. jede Achse bekommt einen eigenen separaten Regler. Mit 
diesen µC habe ich DC Motoren schon per PWM angesteuert. Nur noch nie 
mit Feedback und richtige Regelung.

Zum Thema Encoder Auswertung habe ich mich hier 
(https://www.mikrocontroller.net/articles/Drehgeber)
auch schon eingelesen und einige Beispiel Codes mir angeschaut. 
Zugegeben habe nicht den gesamten Code verstanden aber das Grundprinzip 
ist verstanden.

Thema Regelung kommt mir denke ich Regelungstechnik ausm Studium 
zugute...

Bevor ich mit den oben genannten Punkten überhaupt richtig starte, 
wollte ich das Projekt hier erst mal vorstellen und euch um Rat im Bezug 
auf Punkt 1 bis 3 bitten.

Macht es Sinn einen eigenen kleinen Regler zu entwickeln der auch einen 
Encoder auswerten kann? (Haupt Grund Kostengünstiger?)

Gibt es alternativ einen Fertigen kleinen Regler für DC Bürstenmotoren 
mit Encoder in dieser Leistungsklasse (keine Hallsensoren)?

Würde der 328P mit 16MHz die Auswertung und Regelung schaffen oder 
müsste da ein Größerer µC her?

Kennt jemand ähnliche Projekte wo jemand so einen Regler entwickelt hat?



Über eure Tipps, Kritik, Verbessrungen und Anregungen würde ich mich 
Sehr freuen.



Ich bedanke mich schon mal im Voraus.


LG
Digit-22

von aSma>> (Gast)


Lesenswert?

Servus,
dein kleines Projekt kann schnell mehrere Jahre verschlucken.

Du wirst ganz schnell viele Probleme kriegen, die momentan noch nicht zu 
riechen sind.

Die Regelung ist eigentlich das kleinste Problem. Da kannst du nach 
Lageregelung mal googeln. Ein PID Regler würde auch funktionieren...

Das größte Problem ist eingentlich das Getriebespiel. Wobei ich deine 
Güteanforderung nicht kenne. Schon 1° Getriebespiel (Planetengetriebe) 
macht bei einen Hebel von 10cm...

Spielfreie Getriebe sind sehr teuer.

Ich würde vielleicht einen großen µC nehmen, der alles regelt.

Linux CNC kannst du auch nehmen:
https://www.youtube.com/watch?v=m3lWKGQuQoc

mfg

von Digit-22 N. (digit-22)


Lesenswert?

Hallo aSma,

danke für deine Tipps.
Ja das KLEIN sollte ein bissel ironisch sein ;-).

Ich möchte das Projekt stück für Stück aufbauen und mich auch nur 
Stückweise mit den Problemen beschäftigen.

Das Getriebe ist ein großes Thema. Da gebe ich die vollkommen Recht. 
Habe aber da einen Entwickler Kollege der seit knapp 20 Jahren nichts 
anderes macht als Getriebe zu entwickeln. Ich werden wenn es soweit ist 
den Kollegen dies bezüglich anfunken.

Mein erstes Ziel ist wie oben schon beschrieben erst mal die 
Lageregelung.
(Werde auch nach Lageregelung googlen ;-)).

Ich nutze Linux CNC seit ca. 10 Jahren für meine CNC Maschinen...
Habe aber nicht daran gedacht das man eventuell auch Roboter mit 
ansteuern könnte. Danke für den Tipp.


Über weitere Tipps würde ich mich sehr freuen.



LG
Digit-22

: Bearbeitet durch User
von aSma>> (Gast)


Lesenswert?

Digit-22 N. schrieb:
> Über weitere Tipps würde ich mich sehr freuen.

Da muss du schon mehr an Infos rausrücken. Ein paar Skizzen, bewegte 
Massen, Einsatzgebiet...

Sonst müssest du konkrete Fragen stellen, falls du nicht weiter kommst.

von Digit-22 N. (digit-22)


Lesenswert?

Hej also wie schon oben erwähnt wird die Kinematik noch entwickelt. 
Somit gibt es noch keine Daten wie Masse, Trägheit...

Das Fertige System soll zunächst als eine Vorentwicklung dienen. Dh. 
dieses System wird ein Funktionsmodell und soll die Funktion eines 
Roboterarmes darstellen. Vielleicht ein paar Zuckerwürfel durch die 
Gegend schieben...

Aber einen Schritt nach dem anderen. Ich Beschäftige mich als aller erst 
mit den Antrieben bzw. Die Regelung der Antriebe. Dazu habe ich doch 
meine Fragen oben gestellt.

Vielleicht hätte ich oben nicht gleich über das gesamte Projekt 
schreiben sollen sondern nur über die Regelung der Servomotoren...
Nicht das es noch Verwirrung gibt.



LG
Digit-22

: Bearbeitet durch User
von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Hallo "Digit-22 N.",

> Macht es Sinn einen eigenen kleinen Regler zu entwickeln der auch einen
> Encoder auswerten kann? (Haupt Grund Kostengünstiger?)

Kostengünster als was? Fertig kaufen?

> Gibt es alternativ einen Fertigen kleinen Regler für DC Bürstenmotoren
> mit Encoder in dieser Leistungsklasse (keine Hallsensoren)?

Ja, natürlich. Diverse, z.B. von Maxon. Oder von miControl mit 
CANopen-Schnittstelle:
http://www.mechapro.de/mcDSA.html

Mit freundlichen Grüßen
Thorsten Ostermann

von Digit-22 N. (digit-22)


Lesenswert?

Hallo  Thorsten Ostermann,

ja günstiger als Fertigprodukte.

Wenn wir z.B. von 6 Achsen (Endstadium) aus gehen und so ein fertiger 
Regler (mcDSA-E60) 161 Euro Kostet (einziger Preis den ich auf die 
schnelle finden konnte) sind wir ganz schnell bei fast 1000 Euro nur für 
Regler die einen DC Motor ansteuern. Für ein Privatprojekt 
(Funktionsmodell) ziemlich teuer. Das sind ja schon Industrie 
Produkte.(Bitte Korrektur falls die Annahme falsch ist)...

Ein Controller und eine Endstufe ist denke ich mal günstiger. Natürlich 
darf man die Entwicklungszeit nicht mit einrechnen. Denn das ist Spaß an 
der Freude und die Leidenschaft neues zu lernen. Sonst würde sich das 
natürlich nicht rentieren.

Ich möchte natürlich nicht nur einen Regler entwickeln sondern auch das 
ganze besser verstehen. Die Theorie ist eine Sache und die Praxis eine 
Andere...


Aber das soll alles nicht abwertend sein. Ich bedanke mich natürlich 
vielmals für die Anregung.


LG
Digit-22

: Bearbeitet durch User
von aSma>> (Gast)


Lesenswert?

Servus,
wenn du die Position-/Lageregelung selber programmieren willst, dann 
brauchst nur ein kleinen Aufbauversuch:
-Motor mit Encoder/Poti festspannen
-eine Masse, z.B. als Stab, an die Welle befestigen.

Zum Regler auslegen muss man die Streckenkoeffitienten bestimmen.
-Impulsantwort oder besser noch
-Sinussprung (Bodediagramm)
-Mathematische Herleitung

Dann kannst du heuristische Einstellverfahren nutzen und dir in 
Simulink/Xcos Sprungantworten schauen. Wichtig ist auch, dass nicht nur 
der Sollsprung untersucht wird, sondern auch die Rampensprungfunktion 
nicht außer acht lassen. Später soll der Arm ja nicht wie ein zuckender 
Legasteniker aussehen, sondern eine bestimmte Trajektorie, wie Rampe, 
S-Kurve, usw. wären schon schön.

Weiterhin kann man den erstandenen Regler mithilfe des C-Codegeneartors 
in deinen Controller reinschmeisen. Leider kann es bei Matlab etwas 
ineffektiver Code sein...

Mittels einer Schnittstelle wie: UART. Kann du auch den Regler in 
"Echtzeit" verändern...

Man kann den Regler auch selbst erstellen. Wenn du die Z-Transformation 
drauf hast oder du googelst nach PID Regler, dann kriegst du es auch 
hin.

Ich will jetzt keine Prosa schreiben. Als Literatur empfehle ich:
-Aström
-Lutz Wendt

Ich kenne da noch ein paar Bücher aber, dann wirst du ja in 10 Jahren 
noch nicht fertig.

von JB (Gast)


Lesenswert?

Auf basis dieser habe ich meine entwickelt:

http://elm-chan.org/works/smc/report_e.html
http://www.uhu-servo.de/

Gruß JB

von Digit-22 N. (digit-22)


Lesenswert?

Guten Morgen

@aSma

>wenn du die Position-/Lageregelung selber programmieren willst, dann
>brauchst nur ein kleinen Aufbauversuch:
>-Motor mit Encoder/Poti festspannen
>-eine Masse, z.B. als Stab, an die Welle befestigen.

Es sind mehrere Servomotoren mit Encoder (ABZ) vorhanden.
Den Aufbau mit einer Masse ist kein Problem.


>Zum Regler auslegen muss man die Streckenkoeffitienten bestimmen.
>-Impulsantwort oder besser noch
>-Sinussprung (Bodediagramm)
>-Mathematische Herleitung

Da kram ich mal meine Studiumsunterlagen wieder raus ;-).

>Dann kannst du heuristische Einstellverfahren nutzen und dir in
>Simulink/Xcos Sprungantworten schauen. Wichtig ist auch, dass nicht nur
>der Sollsprung untersucht wird, sondern auch die Rampensprungfunktion
>nicht außer acht lassen. Später soll der Arm ja nicht wie ein zuckender
>Legasteniker aussehen, sondern eine bestimmte Trajektorie, wie Rampe,
>S-Kurve, usw. wären schon schön.

>Weiterhin kann man den erstandenen Regler mithilfe des C-Codegeneartors
>in deinen Controller reinschmeisen. Leider kann es bei Matlab etwas
>ineffektiver Code sein...

Mathlab und Simulink ist ne gute Idee. Wusste garnicht das Matlab C-Code 
generieren kann.

>Man kann den Regler auch selbst erstellen. Wenn du die Z-Transformation
>drauf hast oder du googelst nach PID Regler, dann kriegst du es auch
>hin.

Ein PID Regler war auch mein ursprünglicher Gedanke. Hätte ich oben 
erwähnen sollen. Sorry mein Fehler. Die Z-Transformation ist mir nicht 
bekannt. Kenn nur die Fourier- und Laplace-Transformation...

Danke für die ausführliche Erklärung. Das hilft mir schon mal weiter.



@ JB

>Auf basis dieser habe ich meine entwickelt:

>http://elm-chan.org/works/smc/report_e.html
>http://www.uhu-servo.de/


Sehr Interessant. Besonders der Uhu. Allerdings ohne Quellcode ist der 
Lerneffekt sehr gering. Die elm-chan Seite werde ich mal genauer 
studieren...

Danke für die Links.




LG
Digit-22

von Bernd B. (berbog)


Lesenswert?

Hallo
Ich könnte noch dass Projekt von Andreas Hoelldorfer aufführen

https://hackaday.io/project/3800-3d-printable-robot-arm

Er macht die Winkelerfassung mit den AS5045B

http://ams.com/eng/Products/Magnetic-Position-Sensors/Angle-Position-On-Axis/AS5045B

vieleicht passt davon was

Gruss Bernd

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.