Guten Morgen zusammen,
ich möchte mit einem TI F28335 die Signale eines Sin/Cos-Encoder zur
Bestimmung der elektrischen Rotorlage einer PMSM verarbeiten. Der
Encoder bringt vier Perioden pro mechanischer Umdrehung. Die Maschine
hat vier Polpaare, passt also.
Ich habe die Signale über eine Umdrehung mal aufgezeichnet. Dabei ist zu
sehen, dass die Amplituden der Signale nicht identisch sind. Und das
dürfte mir gerade beim Auswerten mein Problem bereiten.
Ziel sollte es sein, ein normiertes Winkelsignal, sprich 0 = 0° elektr.
bis 1 = 359° elektr. zu erhalten.
Das Signal wird extern noch durch einen ohmschen Spannungsteiler
halbiert, damit der ADC es voll erfassen kann. Ich habe nun zuerst
versucht, die Signale von -1... 1 zu normieren. Anschließend ließe sich
über die atan2-Funktion relativ bequem der Winkel bestimmen. Da aber die
Amplituden der jeweiligen Perioden verschieden sind, haut schon die
Normierung nicht hin und das Ergebnis wird sehr ungenau.
Hat da jemand eine Idee, wie man es anders lösen könnte?
EDIT: Hier noch mein bisheriger Ansatz:
1 | // ADC lesen und Werte normieren
|
2 | tempSin = (int32)(AdcMirror.ADCRESULT3-SinOffset)*SinNorm - 1;
|
3 | tempCos = (int32)(AdcMirror.ADCRESULT4-CosOffset)*CosNorm - 1;
|
4 |
|
5 | // Arcustangens2-Funktion
|
6 | Tmp1 = _IQatan2(_IQ(tempCos),_IQ(tempSin));
|
7 |
|
8 | // Für Winkel > 180° 2*PI addieren
|
9 | if(tempSin < 0)
|
10 | Tmp1 += _IQ(6.28318);
|
11 |
|
12 | // Ergebnis von 0 (=0°) bis 1 (=359°) normieren
|
13 | speed1.OutputTheta = _IQdiv(Tmp1,_IQ(6.28318));
|
Danke!
Gruß
Philipp