Forum: PC-Programmierung Regler für Lenkrad - Forcefeedback - AVR


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 Marco D. (marco_d859)


Bewertung
0 lesenswert
nicht lesenswert
Moin moin zusammen,

ich hatte bereits zu diesem Thema viele Foreneinträge durchstöbert und 
vieles hat mir auch weitergeholfen - jetzt gerade bin ich allerdings an 
einem Punkt, an dem ich mal gut ein bisschen "maßgeschneidertere Hilfe" 
benötige.

Es geht um folgendes: Ich bau derzeit ein Lenkrad, in welches irgendwann 
auch Force Feedback integriert werden soll. Momentan geht es aber im 
wesentlichen um zwei Betriebsmodi.

- Modus 1: Ich kann das Lenkrad drehen wie ich will und es verharrt in 
dieser Position.
- Modus 2: Ich lenke das Lenkrad aus und es verfährt wieder in die 
Nullposition (geradeaus).

Ich realisiere dies mit Hilfe eines NEMA 34 Schrittmotors, einem 
entsprechendem Treiber (DM860), einem Potentiometer, welches an die 
Lenkradwelle gekoppelt ist, zum Auslesen der Position und ein Arduino 
Uno als Controller. Für Modus 1 schalte ich den Motor einfach aus - das 
Rastmoment des Motors reicht zum arretieren aus. Modus 2 bereitet mir 
Probleme. Momentan sieht mein Code schematisch so aus:

WENN: ( IstPosition < Soll Position ) DANN: DREH MOTOR IM UHRZEIGERSINN
SONST WENN: ( IstPosition > Soll Position ) DANN: DREH MOTOR GEGEN 
UHRZEIGERSINN
SONST: BLEIB

Problem hierbei ist, dass ich erstens bei dem NEMA 34 sehr stark gegen 
halten muss und zweitens die Schritte sehr stark spüre - das will ich 
natürlich nicht. Dank eines Projektes auf Hackaday weiß ich, dass das 
was ich machen will auf jeden Fall realisierbar ist:

https://www.youtube.com/watch?v=gG_dbnKfH5Q&feature=emb_title

In dem Video sieht man bei ca. 1.20 genau was ich will. Die meisten DIY 
FFB Projekte nutzen allerdings fertige Software. Ich will das selbst 
programmieren.
Meine Frage daher an euch: Was mache ich falsch bzw. wie könnte ich das 
besser realisieren?

Danke im Voraus für die Hilfe
Marco

von Axel R. (axlr)


Bewertung
1 lesenswert
nicht lesenswert
einfach "gegenlenken" wird nicht gehen, musst auch die Differenz zur 
Sollposition berücksichtigen und mitm Strom dann runtergehen.
(Gefällt mir gut, was man da im Video sah. Sehr bemerkenswert, solch 
einen riesigen Industriemotor für so ne Spielerei zu verwenden. Will 
garnicht wissen, was die Chinesen alles so kopieren:
diese Motore hätte man vor 10Jahren sicher nicht unter 1000€ bekommen)

von Marco D. (marco_d859)


Bewertung
0 lesenswert
nicht lesenswert
Okay, ja an einen PID Regler hatte ich auch schon gedacht. Würde ich 
dann das Drehmoment über die Geschwindigkeit regeln? Das Problem was ich 
nur habe ist, dass ich auf den Strom ja an sich keinen wirklichen 
Einfluss habe oder? Ich kann zwar beim Treiber einen maximalen Strom 
einstellen - minimal sind das beim DM860 2.0A, aber auch das ist beim 
NEMA 34 schon ordentlich was...

Und ja das ganze Projekt von dem Ersteller des Youtube Videos ist echt 
der Hammer.

: Bearbeitet durch User
Beitrag #6594227 wurde von einem Moderator gelöscht.
von Mike (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dein Problem ist der Schrittmotor.
Marco D. schrieb:
> Drehmoment über die Geschwindigkeit regeln?
Das wird nicht funktionieren.

Bei Lenkrädern möchte man erstmal nicht die Position regeln, sondern das 
Drehmoment (umgangssprachlich auch als Kraft bezeichnet). Deswegen FORCE 
Feedback. Das hast du ja schon erkannt!
Du kannst einen Stepper aber nicht Drehmomentregeln, zumindest nicht gut 
genug.
Du schreibst oben, dass du bei deinem Stepper zu stark gegenhalten 
musst. Wenn du den Strom reduzierst, musst du weniger stark drehen um 
den Stepper zu bewegen, hast dann aber ein "Ruckeln" bzw. "Rasten" durch 
den Schrittverlust. Das ist aber absolut nicht das, was du willst.

Der Typ aus dem Video verwendet KEINEN Stepper Motor, sondern einen 
SERVOMOTOR. Großer Unterschied, da sich Servomotoren perfekt für eine 
Drehmomentregelung eignen. Das Drehmoment ist fast perfekt proportional 
zum Spulenstrom.

Paar Stichworte für die nächsten Steps (pun intended):
- Schau dir an, was Drehmomentregelung genau bedeutet
- Schau dir den Unterschied zwischen Steppermotor und Servomotor an.
- Lies dich in paar Projekte ein, die Motoren mit Drehmomentsignalen und 
Positionsfeedback steuern können. Bestes Projekt ist vermutlich der 
Odrive (odriverobotics.com)
- Besorg dir einen entsprechenden Motor mit Controller.
- Bau Software dafür. Interface Odrive <> Arduino ist easy.
- Bau dir einen Regelkreis auf. Beachte, dass du vermutlich mehr als nur 
eine reine Drehmomentregelung benötigst, sondern auch weitere Regler für 
Geschwindigkeit und Position. Stichwort "Kaskadenregler".

Ist ein super spannendes Thema, ich hab beruflich damit zu tun und 
deswegen leider nicht wirklich Lust auf Hobbyprojekte in dem Bereich... 
Leider :-/

Viele Grüße und viel Erfolg.

von Mike (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Upps,
Habe die eine Stelle grad nochmal angeschaut, und das ist tatsächlich 
ein Stepper Motor.
Naja, deswegen muss er das Lenkrad auch immer wieder loslassen, weil das 
Lenkrad halt feste Positionen anfährt? Was soll das für einen Sinn 
machen? Ergibt irgendwie wenig Sinn für mich.

Dein oben beschriebener "Regelalgorithmus" scheint schon richtig zu sein 
und sollte theoretisch funktionieren. Die von dir beschriebenen 
Schwächen liegen aber am Schrittmotor und du wirst sie nur bedingt 
beseitigen können...

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mike schrieb:
> Upps,
> Habe die eine Stelle grad nochmal angeschaut, und das ist tatsächlich
> ein Stepper Motor.
> Naja, deswegen muss er das Lenkrad auch immer wieder loslassen, weil das
> Lenkrad halt feste Positionen anfährt? Was soll das für einen Sinn
> machen? Ergibt irgendwie wenig Sinn für mich.

Ein Stepper mit encoder. Wenn der encoder deutlich höher aufgelöst ist 
als der Stepper, ist es eigentlich auch kein Problem ein Drehmoment zu 
stellen. Ein Stepper ist auch nur ein Synchronmotor mit sehr hoher 
polpaarzahl. Man muss sich halt von dem Gedanken lösen, dass der Motor 
dort steht wo es der Schrittzähler suggeriert.

von Mike (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Karl schrieb:
> Ein Stepper ist auch nur ein Synchronmotor mit sehr hoher
> polpaarzahl.

Naja, nur teilweise. Eigentlich nicht.
Die spezielle Konstruktion sorgt dafür, dass der Stepper auch ein 
unglaublich hohes Rastmoment und Torque-Ripple hat. Genau das will man 
bei Servomotoren und auch bei Force-Feedback Wheels nicht.

Karl schrieb:
> Man muss sich halt von dem Gedanken lösen, dass der Motor
> dort steht wo es der Schrittzähler suggeriert.
Absolut richtiger Einwurf! Encoder ist also immer Pflicht bei solchen 
Anwendungen.
@TO, eventuell macht es auch Sinn, hier keinen Poti sondern was 
"anständiges" zu verwenden.

Problem ist nur, dass der Stepper beim "durchrutschen", also beim 
Schrittverlust, plötzlich ein völlig anderes Verhalten und Drehmoment 
aufweist.

=> Hast du schonmal einen Stepper durchgedreht? Hat sich das bei den 
Schrittverlusten auch nur im Entferntesten irgendwie wie ein Lenkrad 
angefühlt?

=> Servomotor.

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mike schrieb:
> Naja, nur teilweise. Eigentlich nicht.
> Die spezielle Konstruktion sorgt dafür, dass der Stepper auch ein
> unglaublich hohes Rastmoment und Torque-Ripple hat. Genau das will man
> bei Servomotoren und auch bei Force-Feedback Wheels nicht.

Das lässt sich in quasi stationären Anwendungen wie hier zum Teil 
kompensieren. Gewollt ist es sicher nicht für ein Ffb Lenkrad. Ändert 
aber nichts an der Tatsache, dass ein Stepper eine synchronmaschine ist, 
einfach weil das Geld synchron zur Welle dreht.

Mike schrieb:
> Problem ist nur, dass der Stepper beim "durchrutschen", also beim
> Schrittverlust, plötzlich ein völlig anderes Verhalten und Drehmoment
> aufweist
Das darf nicht passieren, weil dann ist es nicht mehr synchron. Die 
Ansteuerung muss die tatsächliche Rotorposition schon berücksichtigen. 
Also Vektorregelung für einen Stepper sozusagen.

Abgesehen vom Preis ist ein Stepper sicher nicht die richtige Wahl für 
so eine Anwendung.

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Geld ->Feld
Autokorrektur:-(

von Mike (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Karl schrieb:
> dass ein Stepper eine synchronmaschine ist,
> einfach weil das Geld synchron zur Welle dreht.

Ja stimmt, da hast du absolut recht! Mea culpa.
Manchmal ist man doch zu tief in seinem Feld drin und etwas 
"Betriebsblind" :)

Karl schrieb:
> Also Vektorregelung für einen Stepper sozusagen.
Ja moin, klingt kompliziert (aber sicherlich möglich!).
Hast du da mehr erfahrung, würd mich schon interessieren!

@TO, schau dir den Odrive mal an, das ist genau das richtige für dich.
Passender Motor ~ 30-50€ und dann noch eine Riemenstufe dahinter für 
genug Drehmoment. Dann kannst du mit den meisten kommerziellen Lösungen 
locker mithalten.

Mike

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.