Forum: Mikrocontroller und Digitale Elektronik Lagesensor - Orientierung ausgleichen


von Simon (Gast)


Lesenswert?

Hallo zusammen,

ich habe das Problem, dass ich in mehreren Geräten jeweils einen 
Lagesensor unterschiedlich orientiert (nur in 90° Schritten) habe, die 
Software aber am Besten einheitlich sein sollte.

Habt ihr eine Idee, wie ich die Angleichung am besten vornehme?

Theoretisch brauche ich einen Index für die drei Achsen und die 
Information über die entsprechenden Vorzeichen.

Vielen Dank,
Simon

von Adam P. (adamap)


Lesenswert?

Simon schrieb:
> ich habe das Problem, dass ich in mehreren Geräten jeweils einen
> Lagesensor unterschiedlich orientiert (nur in 90° Schritten) habe, die
> Software aber am Besten einheitlich sein sollte.

Falls es sich um die gleiche Schaltung handelt, dann hast du bestimmt 
HW-Rev. Pins am µC vorgesehen (oder ähnliches)?
Daraus könnte die Firmware erkennen ob sie eine Korrektur vornehmen 
muss.

Sonst wirst du die Geräte wohl Softwaretechnisch kalibrieren müssen,
also das die Firmware für jedes Baord weiß, ob sie nen Offset zurechnen 
soll.
Da reicht ja schon eine "bool" Info im Flash/eerpom ob eine Korrektur 
vorgenommen werden muss.

Hoffe ich habe dich da jetzt richtig verstanden.

von Simon (Gast)


Lesenswert?

Adam P. schrieb:
> Simon schrieb:
>> ich habe das Problem, dass ich in mehreren Geräten jeweils einen
>> Lagesensor unterschiedlich orientiert (nur in 90° Schritten) habe, die
>> Software aber am Besten einheitlich sein sollte.
>
> Falls es sich um die gleiche Schaltung handelt, dann hast du bestimmt
> HW-Rev. Pins am µC vorgesehen (oder ähnliches)?
> Daraus könnte die Firmware erkennen ob sie eine Korrektur vornehmen
> muss.
>
> Sonst wirst du die Geräte wohl Softwaretechnisch kalibrieren müssen,
> also das die Firmware für jedes Baord weiß, ob sie nen Offset zurechnen
> soll.
> Da reicht ja schon eine "bool" Info im Flash/eerpom ob eine Korrektur
> vorgenommen werden muss.
>
> Hoffe ich habe dich da jetzt richtig verstanden.

Ja, das hast du. Vielen Dank.
Das Programm weiß auch wie die Korrekturfaktoren sind.
Ich suche jetzt nur eine elegante Software-Struktur um diese Korrektur 
vorzunehmen.
Beispielsweise so:
1
int16_t lage[3] = {0};
2
static const uint8_t koord_index = { 1,  0,  2};
3
//                                   x   y   z
4
static const uint8_t koord_sign  = {-1,  1, -1};
5
MMA865x_out_xyz(lage);
6
for (uint8_t i = 0; i < 3; i++)
7
{
8
  lage[koord_index[i] = lage[koord_index[i] * koord_sign[i];
9
}
Problem ist hierbei bezieht sich koord_sign auf die "echten" Koordinaten 
oder auf die relativen.
Ich könnte mir aber auch ein
1
struct
 vorstellen.

von Adam P. (adamap)


Lesenswert?

Arbeitest du mit "g"-Werten?

Also ich würde die Rohdaten nehmen, die du erhälst und diese 
korrigieren.

Sprich:
Wenn X den Wert für 0g haben sollte aber +1g liefert,
dann subtrahiere ich den Digitalwert für 1g.

von Andreas R. (Gast)


Lesenswert?

Du könntest eine Drehmatrix verwenden. Die ist auch nicht auf 90° 
Schritte fest gelegt. In deinem Fall sind die matrix Einträge - 1 0 oder 
+1.
Das wäre in meinen Augen die eleganteste Lösung.
Die könnte man End of Linie sogar individuell bedaten um Toleranzen der 
Bestückung auszugleichen.

von Simon (Gast)


Lesenswert?

Adam P. schrieb:
> Arbeitest du mit "g"-Werten?
>
> Also ich würde die Rohdaten nehmen, die du erhälst und diese
> korrigieren.
>
> Sprich:
> Wenn X den Wert für 0g haben sollte aber +1g liefert,
> dann subtrahiere ich den Digitalwert für 1g.

Stimmt ich arbeite mit "g"-Werten.

nur leider ist mir nicht ganz klar, wie du die Vorgeschlagene Korrektur 
funktioniert.
Da die Werte am Ende vergleichbar sein sollen, müssen sie irgendwann ein 
gemeinsames Koordinatensystem haben.
Auch Veränderungen der Lage/Neigung müsen vergleichbar bleiben. Wäre das 
mit einem Offset möglich?

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.