Forum: Mikrocontroller und Digitale Elektronik Dekodierung eines Winkels von Motorsteuerung


von HansKanns...Nicht! (Gast)


Lesenswert?

Hallo,
ich habe eine kleine Knobelaufgabe :-)

Es geht um die Dekodierung eines Datenprotokolls einer seriellen 
Schnittstelle. Es ist eine Verbindung zwischen einem 
Motoren(2)-Steuercomputer und einem PC über eine Serieller 
RS422-Schnittstelle.

Gerade hänge ich bei der Dekodierung der aktuellen Position (Winkel in ° 
) des Motors. Die Tabelle zeigt ein paar Messwerte. Links die Winkel, 
welche die Software des PCs ausspuckt und rechts der Hexwert, welche die 
Software bekommt (Über COM-Port ausgelesen). Ich muss die Dekodierung 
dazu finden...
1
Winkel1 in °|Winkel2 in °| Hex_Wert zu Winkel 1  | Hex-Wert zu Winkel 2
2
3
  0,038       59,977     98 DD 93 87 85 5A A3 3F | 30 BB 27 0F 0B FD 4D
4
  0,038       69,909     98 DD 93 87 85 5A A3 3F | 2E 90 A0 F8 31 7A 51
5
  0,038       79,949     98 DD 93 87 85 5A A3 3F | 78 9C A2 23 B9 FC 53
6
  0,038       89,981     98 DD 93 87 85 5A A3 3F | C2 86 A7 57 CA 7E 56
7
 10,033       89,984     53 74 24 97 FF 10 24 40 | 82 73 46 94 F6 7E 56
8
 19,954       89,984     87 A7 57 CA 32 F4 33 40 | 82 73 46 94 F6 7E 56
9
 49,955       89,984     98 4C 15 8C 4A FA 48 40 | 82 73 46 94 F6 7E 56
10
350,036       89,986     2B F6 97 DD 93 E0 75 40 | 02 BC 05 12 14 7F 56
11
340,038       89,986     F8 53 E3 A5 9B 40 75 40 | 02 BC 05 12 14 7F 56
12
310,036       89,986     DD 24 06 81 95 60 73 40 | 02 BC 05 12 14 7F 56

Fest- und Fließkommazahlen sind es irgendwie nicht. Reine ASCII-Zeichen 
irgendwie auch nicht. Das ein kleiner Winkelwert inkrementiert wird, 
kann ich auch nicht erkennen...Bin also völlig ratlos. Hat einer eine 
Idee??

Es sei auch noch erwähnt, dass die Software um 1995 von einer 
Amerikanischen Firma entwickelt wurde. Ich gehe also davon aus, dass es 
was ganz einfaches sein muss. Keine Prüfsumme innerhalb des Hexwertes, 
kein Scrambling etc.
Andere Datenpakete habe ich schon dekodiert und bis jetzt wurden Werte 
direkt übermittelt, bis auf hier...

Vielen Dank schon mal...
Hans

von wendelsberg (Gast)


Lesenswert?

Da faellt mir auf Anhieb das Wort Graycode ein.

wendelsberg

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


Lesenswert?

Die Spalte mit 3F und 40 passt da nicht ganz rein, sonst hättest du 
unterschiedliche Datenbreiten für die beiden Winkel. Und wenn man die 
gedanklich weg lässt sieht es einfach nach LSB first aus.

Mit freundlichen Grüßen
Thorsten Ostermann

von littleHelper (Gast)


Lesenswert?

Thorsten Ostermann schrieb:
> Die Spalte mit 3F und 40 passt da nicht ganz rein, sonst hättest
> du
> unterschiedliche Datenbreiten für die beiden Winkel. Und wenn man die
> gedanklich weg lässt sieht es einfach nach LSB first aus.
>
> Mit freundlichen Grüßen
> Thorsten Ostermann

nee das kommt auch nich hin... auch wenn die unterschiedliche Länge 
irgendwie komisch ist...

sind das vllt sin cos Werte die der PC zu nem Winkel umrechnet?

und warum sind die Werte alle ,0 oder ,9??? das kann doch kein Zufall 
sein!
hast du noch mehr Infos? wie Winkelauflösung oder verbaute Controller?

von littleHelper (Gast)


Lesenswert?

achja nochwas
für LSB bin ich auch aber kann es sein das er die umdrehungen mitzählt? 
dann passt auch die 3f 40 spalte ins muster

von littleHelper (Gast)


Lesenswert?

kann ich mehr Werte haben? Ich liebe Knobelaufgaben ;)

(sry wegwn dem 3-fach post)

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


Lesenswert?

Es könnte auch sein dass da nur Geberinkremente übertragen werden, und 
anschließend (also nach der Übertragung) in Grad umgerechnet wird. Dann 
müsste man den Umrechnungsfaktor kennen, also die Anzahl der 
Inkremente/U.

Mit freundlichen Grüßen
Thorsten Ostermann

von HansKanns...Nicht! (Gast)


Lesenswert?

Danke für die rege Resonanz!

Ich habe gerade auch noch in anderen Paketen entdeckt, dass scheinbar 
jede Zahl als 16-Bit Zahl und somit als 2 BYTE übermittelt wird! Also 
ein WORD.
Und dieses scheint tatsächlich (zumindest für ganze Zahlen) als Little 
Endian dekodiert.

So existiert z.B. ein Paket indem ich dem Kasten die aktuelle Uhrzeit 
mitteilen kann, welche wie folgt aussieht:

... 0B 00 04 00 2E 00 06 00 18 00 72 00 02 00 ...

0B 00 => 00 0B => 11
04 00 => 00 04 => 04
...
72 00 => 00 72 => Jahr ab 1900 = 2014
Dies trifft zumindest auf ganze Zahlen zu!

Gab es früher gängige Praxen wie man Kommazahlen als 16-Bit Word kodiert 
hat?

Dass ein Wert lediglich inkrementiert wird, finde ich auch fast sehr 
wahrscheinlich.

Weitere Werte kann ich gern liefern!

von littleHelper (Gast)


Lesenswert?

HansKanns...Nicht! schrieb:
> Weitere Werte kann ich gern liefern!

nur her damit! Gerade die Lücke von 90 bis 300 Grad is noch 
interressant.

von HansKanns...Nicht! (Gast)


Lesenswert?

Die Kodierung ist eine einfache Half-precision float (16 bit) Zahl in 
Little Endian kodiert...

kann einfach über matlab mit hex2num überprüft werden:

hex2num('40567F141205BC02') = 89.9856
hex2num('40736095810624DD') = 310.0365

Danke für eure Hilfe und den zündenden Hinweis in die richtige 
Richtung!!

Der Hans kann's nun doch ;-)

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.