Mathematisches Problem Zahlenreihenumwandlung

#6889991
Lesenswert?

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
Angehängte Dateien:
#6889997
Lesenswert?

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.
#6890066
Lesenswert?

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.
Gast #6890071
Lesenswert?

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°.
Angehängte Dateien:
#6890198
Lesenswert?

@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!!!
#6890211
Lesenswert?

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.
Gast #6890346
Lesenswert?

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.
#6890367
Lesenswert?

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.
Gast #6890452
Lesenswert?

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.
Gast #6890918
Lesenswert?

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.
#6893022
Lesenswert?

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
Gast #6893034
Lesenswert?

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?
#6894484
Lesenswert?

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.
Gast #6894535
Lesenswert?

> 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.
Gast #6894546
Lesenswert?

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.
#6894566
Lesenswert?

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
Gast #6894570
Lesenswert?

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 ...
#6894655
Lesenswert?

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...
Gast #6894678
Lesenswert?

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 :-)
#6894724
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren