Forum: Mikrocontroller und Digitale Elektronik Mathematisches Problem Zahlenreihenumwandlung


von Rudi H. (rubberdog)


Angehängte Dateien:

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

von Stefan P. (form)


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.

von fop (Gast)


Lesenswert?

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.

von Noch ein Kommentar (Gast)


Lesenswert?

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.

von Udo S. (urschmitt)


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.

von HildeK (Gast)


Angehängte Dateien:

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°.

von Noch ein Kommentar (Gast)


Lesenswert?

> 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.

von HildeK (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


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?

Ja.
Mathe 5.Klasse, Geradengleichung.

Du schaffst das.

Oliver

von Rudi H. (rubberdog)


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!!!

von Udo S. (urschmitt)


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.

: Bearbeitet durch User
von Udo S. (urschmitt)


Lesenswert?

Noch was. Es macht keinen Sinn Modellbauservos am Anschlag zu betreiben. 
Damit kann man sie ganz schnell killen.

von HildeK (Gast)


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.

von Rudi H. (rubberdog)


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.

von Wolfgang (Gast)


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.

von Rudi H. (rubberdog)


Lesenswert?

Danke, Wolfgang!

von Rudi H. (rubberdog)


Lesenswert?

Wolfgang, ich hab' die Formel jetzt im Programm eingebaut und die Servos 
drehen nun genau wie gewünscht. Da freu' ich mich :-))

von Wolfgang (Gast)


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.

von Rainer V. (a_zip)


Lesenswert?

...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

von Wolfgang (Gast)


Lesenswert?

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 ;-)

von Rainer V. (a_zip)


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

von HildeK (Gast)


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?

von Jan K. (jan_k776)


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.

: Bearbeitet durch User
von Noch ein Kommentar (Gast)


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.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Hm, ich kann nur Zahnreihenumwandlung, dafür bin Spezialist.

von tipp (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


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.

von Jan K. (jan_k776)


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

von HildeK (Gast)


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 ...

von Rainer V. (a_zip)


Lesenswert?

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

von Jan K. (jan_k776)


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...

: Bearbeitet durch User
von Maxe (Gast)


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 :-)

von Rainer V. (a_zip)


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

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.