Hallo Community! Es geht um Modellbauservos, gesteuert vom Raspberry über ein Interface von AZ-Delivery (PCA9685 16 Kanal PWM Servotreiber). Beim Umrechnen von realen Winkelgraden, die der Anwender einstellen möchte zum Ausgabewert, der über die I2C-Verbindung an das Interface geht, hab ich Probleme mit der Umwandlung der Zahlenreihe. So zB bei der gewünschten Einstellung von 30 Grad nach rechts muss ich den Wert 50 an's Servo senden. Bei 40 Grad nach links sende ich den Wert 150 an's Servo. Siehe Tabelle! Gibt es einen einfachen Weg, eine Formel, mit der ich den gewünschten Winkel so umwandeln kann, dass das Interface das Servo korrekt ansteuert? Dann bräuchte ich nur diese Formel im Python-Script einbauen, das den Winkel empfängt und den korrigierten Wert an's Interface schickt. Vielen Dank für Eure Tipps und bleibt gesund! Rudi
Rudi H. schrieb: > Gibt es einen einfachen Weg, eine Formel, mit der ich den gewünschten > Winkel so umwandeln kann, dass das Interface das Servo korrekt > ansteuert? Ändere Dein Excel-Diagramm so das Du beide gezeigten Zahlenreihen gegeneinander aufträgst (an X- und Y-Achse, und nicht über eine laufende Nummer wie gezeigt). Dann Rechtsklick auf die Linie -> "Trendlinie hinzufügen" -> "Formel anzeigen". Fertig.
Das nennt sich Regressionsanalyse. Wenn Du die Werte noch als .csv hier rein stellst und nicht nur als Bild zum abtippen, motiviert das eventuell jemanden, schnell mal scilab oder matlab anzuwerfen.
Oder ganz pragmatisch. Wenn eine lineare Abbildung gut genug ist: Die Standardgleichung (x-70)*(180/(-60-70)) Und dann mit den Zahlen rumprobieren, bis alle Abweichungen klein genug sind. Oder wenn du die Wellenlinien berücksichtigen willst - die Tabelle in ein Python-Array kopieren und interpolieren.
Die Werte in der Tabelle kann ich kaum glauben. Wenn das Übergebene die Puls-Zeit sein soll (Oder eine proportionals Abbildung zur Puls-Zeit), dann wäre der Servo extrem unlinear. Wie wurden die Winkel gemessen? Was sagt denn die Beschreibung deines AZ-Delivery Moduls über gültige Eingangswerte und welcher Servoposition sie entsprechen? Ich hätte jetzt eher gültige Ansteuerwerte von 100 (entspricht 100ms) bis 200 für 200ms erwartet. Das würde der Pulsweite der PWM Steuerung von Modellbauservos entsprechen. Aber das muss die die Beschreibung des Moduls sagen. Vieleichtz wurde ja der Eingabebereich proportional gestreckt um eine höhere Auflösung zu erhalten. Ein Modellbauservo macht aus den 100 bis 200ms dann recht linear -90° bis +90° Siehe dazu auch https://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung Egal wie, wenn man annimmt dass die Eingangs und Servoausgangswerte proportional sind, dann würde als Gleichung eine Gerade herauskommen. Die kann man sich einfach über die Zwei Punkte Form ausrechnen. Siehe https://www.matheretter.de/wiki/zweipunkteform Wichtig ist nur dass die Werte wirklich proportional zueinander sind und die Messwerte genau genug.
Die Frage ist, wie gut sind deine Messwerte und wie genau muss die Ausgabe sein, vor allem an den Grenzen. Wenn die 0° und 180° ein Anschlag sind, muss man eben neu rechnen und dafür an anderer Stelle mehr Abweichungen in Kauf nehmen. Mein Bild mit Gleichung wäre ein Vorschlag zur Umrechnung; ich bin von den Werten der Trendgleichung etwas abgewichen, weil sonst die größten Abweichungen am Rand waren. Ob das besser für dich passt? Keine Ahnung 😀. Sollen die Randwerte besser passen, muss man mit Offset 70 und Steigung -0.72 rechnen. Dafür steht dann der Servo bei Soll 90° auf rund 5° statt 0°.
> und wie genau muss die Ausgabe sein
Diese Frage lässt sich nicht beantworten :-)
In den Datenblättern der Modellbauservos findest du keine Angaben zu
Wiederholgenauigkeit, Temperaturdrift und Langzeitdrift.
Noch ein Kommentar schrieb: >> und wie genau muss die Ausgabe sein > > Diese Frage lässt sich nicht beantworten :-) Für die 0° und 180° evtl. schon, falls das der Anschlag ist.
Rudi H. schrieb: > Gibt es einen einfachen Weg, eine Formel, mit der ich den gewünschten > Winkel so umwandeln kann, dass das Interface das Servo korrekt > ansteuert? Ja. Mathe 5.Klasse, Geradengleichung. Du schaffst das. Oliver
@HildeK Servus Hilde! Du hast Dir da eine Menge Arbeit gemacht! Vielen Dank dafür. Habe die Formel probiert, aber als mathematische Null bin ich zu doof, um sie anzuwenden: y = - 0.73 * x + 68 --> wird ja ((0.73 * x) * -1) + 68 ?? Da kommen aber nur ganz krumme Werte heraus, egal, welche Achse ich als X oder Y bezeichne. Hast Du noch einen Tipp? @Stefan P. Das Diagramm habe ich versucht zu ändern, aber bekomme keine Trendlinie angezeigt :-( @fop Guter Vorschlag! Hier die Daten als Text: 0 70 10 60 20 55 30 45 40 40 50 30 60 22 70 15 80 7 90 0 100 -7 110 -15 120 -22 130 -28 140 -35 150 -40 160 -50 170 -54 180 -60 @Noch ein Kommentar Deine Formel (x-70)*(180/(-60-70)) kapier ich nicht: Was meinst Du mit (-60-70)? @Udo S. Es ist ein Billigservo aus Fernost. Die Pulsdauer des PWM-Signals ist: Winkel Dauer -60 Grad 2.25 ms (Anschlag links) -35 Grad 2 ms 0 Grad 1.5 ms +45 Grad 1 ms +70 Grad 0.75 ms (Anschlag rechts) @Oliver S. Da lese ich mich jetzt ein. Hoffentlich nützt es etwas! ;-) Vielen herzlichen Dank noch an alle Poster für die Beiträge!!!
Rudi H. schrieb: > -60 Grad 2.25 ms (Anschlag links) > -35 Grad 2 ms > 0 Grad 1.5 ms > +45 Grad 1 ms > +70 Grad 0.75 ms (Anschlag rechts) Werte unter 1ms und über 2ms sind machbar aber das Ergebnishängt vom Servo ab. Die -35° kann ich nicht glauben, Entweder ist dein Billigservo so mies dass jegliche genauere Interpolation eh nichts bringt, oder du misst ungenau. Deshalb noch einmal meine Frage: Wie hast du den Winkel gemessen? Welche Ungenauigkeit hast du beim Messen? Rudi H. schrieb: > aber als mathematische Null bin ich zu doof Das ist kein Naturgesetz. An dem kann man arbeiten. Willst du für jedes so einfache Problem wie eine Geradengleichung immer in einem Forum nachfragen? Das ist zwar keine 5. Klasse Mathematik aber irgendwas zwischen 8. und 9. Klasse.
:
Bearbeitet durch User
Noch was. Es macht keinen Sinn Modellbauservos am Anschlag zu betreiben. Damit kann man sie ganz schnell killen.
Ich bin HildeK! Rudi H. schrieb: > y = - 0.73 * x + 68 --> wird ja ((0.73 * x) * -1) + 68 ?? Ja. > Da kommen aber nur ganz krumme Werte heraus, egal, welche Achse ich als > X oder Y bezeichne. Hast Du noch einen Tipp? Klar kommen da krumme Werte heraus. Deine Messungen sind ja auch geschönt, oder waren das exakte Gradzahlen vom Servohebel? Also einfach Runden; hab ich in Excel auch gemacht. Soviel Arbeit war das nicht, hauptsächlich das Abschreiben deiner als Grafik gelieferten Zahlen.
Udo S. schrieb: > Wie hast du den Winkel gemessen? > Welche Ungenauigkeit hast du beim Messen? > Winkelmessung erfolgte über eine kleine Scheibe mit Gradeinteilung in 15 Grad-Schritten, daher nur ungenau. Das würde mir aber auch reichen, denn ich muss sowieso beim Einbau nochmals nachjustieren. Es geht aber um eine Ersteinstellung, die halbwegs passen soll. Servos am Anschlag -> ich weiß, deshalb meine Voreinstellung mit ausreichend Abstand. Anschlagmessung war nur testhalber.
Rudi H. schrieb: > Habe die Formel probiert, aber als mathematische Null bin ich zu doof, > um sie anzuwenden: > y = - 0.73 * x + 68 --> wird ja ((0.73 * x) * -1) + 68 ?? Falls du wissen möchtest, welchen Wert du zum Servo schicken musst, damit der einen bestimmten Winkel einstellt, nützt dir die Formel sowieso wenig. Du brauchst die Umkehrfunktion
1 | y = -1.3739 * x + 92.3 |
x ist der gewünschte Winkel y ist der Wert, den du zum Servo schicken musst.
Wolfgang, ich hab' die Formel jetzt im Programm eingebaut und die Servos drehen nun genau wie gewünscht. Da freu' ich mich :-))
Prima, dann solltest du das nochmal in Excel nachvollziehen, um zu verstehen, wie das mit der Trendlinie funktioniert. Das bescheuerte bei Excel ist, dass die Icons zum Einfügen eines Diagramms einem suggerieren, dass man für ein Diagramm mit durchgezogenen Linien ein Liniendiagramm verwenden muss. Dass ist Unsinn. Du brauchst ein xy-Diagramm, bei dem du dann die Wahl hast, ob du Punkt und/oder Linien zeichnest. Und im xy-Diagramm funktioniert es dann auch mit der Trendlinie.
...und es ist mir jetzt doch nicht ganz unwichtig zu sagen, dass das hier kein Mathematisches Problem ist! Es ist ein lächerlicher Dreisatz...auch wenn das heute niemand mehr unter diesem Namen kennt! Gruß Rainer
Rainer V. schrieb: > Es ist ein lächerlicher Dreisatz...auch wenn das heute niemand mehr > unter diesem Namen kennt! Erstmal geht es um die Methode der kleinsten Fehlerquadrate zur Bestimmung der Parameter für die Ausgleichsgerade. Sonst käme man mit zwei Messpunkten aus ;-)
Wolfgang schrieb: > Erstmal geht es um die Methode der kleinsten Fehlerquadrate zur > Bestimmung der Parameter für die Ausgleichsgerade. Aber hier im Beispiel doch nicht! Nur weil die Werte des TO von der (zu erwartenden) Gerade abweicht, ist doch keine Aproximation nötig. Und erst recht macht man sich in diesem Fall doch nicht die Arbeit, die Werte akribisch durchzufahren...beide Größen sind linear und können auch so ineinander überführt werden. Damit reichen in der Tat Anfangs- und Endwert bzw. Servostellung links und rechts...allenfalls stellt man noch Servo-Nullstellung fest und korrigiert die Endwerte entsprechend. Gruß Rainer
Rainer V. schrieb: > allenfalls stellt man noch > Servo-Nullstellung fest und korrigiert die Endwerte entsprechend. Und genau das macht die lineare Approximation unter Verwendung von mehr Messwerten und damit typischerweise besserem Ergebnis auf mathematischer Basis und du probierst halt. Kann man beides tun; da aber eine Tabellenkalkulation das frei Haus liefert, warum sollte man nicht darauf zurückgreifen?
Rainer V. schrieb: > ...und es ist mir jetzt doch nicht ganz unwichtig zu sagen, dass das > hier kein Mathematisches Problem ist! Es ist ein lächerlicher > Dreisatz...auch wenn das heute niemand mehr unter diesem Namen kennt! > Gruß Rainer Blöd nur, dass es ganz klar falsch ist. Nix Dreisatz. Da haste es immer mit Proportionalitäten und vor allem mit exakten Zahlen zu tun. Bei der linearen Regression nimmst du aber sozusagen Mittelwerte (ist technisch korrekt, aber eine vernünftige Vorstellung imo) von deinen Zahlen und nicht mehr die Zahlen selbst. Hier mal etwas schlau machen: https://en.wikipedia.org/wiki/Regression_analysis (gibts auch auf Deutsch). Das ist ein gigantisches Feld in der Mathematik.
:
Bearbeitet durch User
> Da haste es immer mit Proportionalitäten und vor allem mit exakten Zahlen zu
tun.
Na ja, hier geht es um ein Modellbauservo. Die Geradengleichung, die du
aus 0->70 und 90->0 bekommst, dürfte in diesem Fall mehr als gut genug
sein.
Für so ein Schlabberservo erst mal in ein "gigantisches Feld in der
Mathematik" einarbeiten lohnt sich einfach nicht.
Hm, ich kann nur Zahnreihenumwandlung, dafür bin Spezialist.
fop schrieb: > Das nennt sich Regressionsanalyse. Um Gottes Willen! Das ist eine simple Geradeumformung die man in der 8. Klasse lernt! Ich weiß es weil ich immer wieder Nachschüler hatte und noch die Bücher von damals hier rumliegen haben.
Noch ein Kommentar schrieb: > Für so ein Schlabberservo erst mal in ein "gigantisches Feld in der > Mathematik" einarbeiten lohnt sich einfach nicht. So gigantisch ist das Feld für die praktische Anwendung in diesem Fall nun wirklich nicht. Früher (tm) hätte man das Thema mit einem Stück Karo- oder Millimeterpapier und einer Geraden nach Augenmaß gelöst. Heute muss man dafür eine Tabellenkalkulation bedienen können und daran scheitert es oft genug.
Noch ein Kommentar schrieb: >> Da haste es immer mit Proportionalitäten und vor allem mit exakten Zahlen zu > tun. > > Na ja, hier geht es um ein Modellbauservo. Die Geradengleichung, die du > aus 0->70 und 90->0 bekommst, dürfte in diesem Fall mehr als gut genug > sein. Das kann ich nicht beurteilen. Fakt ist, dass das nur gut geht, wen die Winkelmessung gut genug ist. Wenn man mehrfach misst, reduziert man den Fehler. Und das kann auch hier helfen. > > Für so ein Schlabberservo erst mal in ein "gigantisches Feld in der > Mathematik" einarbeiten lohnt sich einfach nicht. Muss man ja auch nicht, macht ja Python, Matlab oder Excel für einen ;) Wolfgang schrieb: > Heute muss man dafür eine Tabellenkalkulation bedienen können und daran > scheitert es oft genug. Ich bin sehr froh, das nicht aufzeichnen zu müssen :D
Wolfgang schrieb: > Früher (tm) hätte man das Thema mit einem Stück > Karo- oder Millimeterpapier und einer Geraden nach Augenmaß gelöst. Kann man heute auch noch. Und dann scheitert es an der Bestimmung der Geradengleichung, die man noch immer braucht fürs Programm 😀. > Heute muss man dafür eine Tabellenkalkulation bedienen können und daran > scheitert es oft genug. Ist doch kein Fehler, da etwas Übung zu bekommen ...
Jan K. schrieb: > Das ist ein gigantisches Feld in der Mathematik. Freue mich, dass wenigstens Einige den Blick für das tatsächlich Simple noch nicht verloren haben! Aber klar, gigantisch bleibt gigantisch :-) Gruß Rainer
Rainer V. schrieb: > Freue mich, dass wenigstens Einige den Blick für das tatsächlich Simple > noch nicht verloren haben! Es ist simpel. In ML (oder Octave oder Python oder Julia) ist es `p = polyfit(x,y,1)`. in p stehen die Koeffizienten deiner Geraden. Das ist sogar x-fach einfacher, als was auf Millimeterpapier zu malen, oder in Excel rumzuklicken. Und es ist genauer, weil Messfehler ausgeglichen werden können. PS, will ich die Umkehrabbildung haben, tausche ich x und y. Ist vermutlich 10 Sekunden schneller, als die Geradengleichug umzustellen ;) Aber macht ihr mal...
:
Bearbeitet durch User
Jan K. schrieb: >> Na ja, hier geht es um ein Modellbauservo. Die Geradengleichung, die du >> aus 0->70 und 90->0 bekommst, dürfte in diesem Fall mehr als gut genug >> sein. > Das kann ich nicht beurteilen. Fakt ist, dass das nur gut geht, wen die > Winkelmessung gut genug ist. Wenn man mehrfach misst, reduziert man den > Fehler. Und das kann auch hier helfen. Bei so einer Problemstellung möchte man normalerweise, dass der Nullpunkt 'stimmt'. Oder dass die beiden 'Außenwerte' stimmen. Beides verhindert die 0815-Regression zuverlässig. Und man ist mit einer handgefitteten Gerade besser bedient. Fakt :-)
Und gerade Modellbauservos sind alles andere als Präzisionsgeräte! Deshalb bringt hier irgendeine wüste Rechnerei gerade nichts. Ja, Nullstellung ist wichtig und natürlich Verhindern, dass der Servo in die Begrenzung fährt und sowohl das Getriebe schnell schrottet, als auch die Batterie im Nu leersaugt. Ansonsten ist ein Mensch an der Fernsteuerung und spielt quasi den Regler für eine gewünschte Aktion. Wenn das Flugzeug geradeaus fliegen soll, dann mach ich das als "Steuermann" durch hinschauen und nicht indem ich den Steuerknüppel auf "Wert 0" resette. Das gilt sinngemäß auch für selbststeuernde Dinger wie Copter. Nur das hier mehrere Instanzen des Steuermann in Form von Regelkreisen arbeiten. Gruß Rainer
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.