TIDUF97 September 2024
Since AMR sensors generate two sine and cosine periods over one mechanical revolution, additional sensing is required to distinguish between 0° to 180° and 180° to 360°. Therefore the TMAG6180 integrates two X,Y Hall switches, which help to extend the angle range from 180° to 360° using Q0 and Q1 outputs. The angle calculation flow chart is shown in Figure 3-6 and the example code in the following:
//----------------------------------------------------------------------
//Angle calculation
//----------------------------------------------------------------------
//comp0[0] = _IQ(0)
//comp0[1] = _IQ(1)
//comp1[0] = _IQ(1)
//comp1[1] = _IQ(0)
//----------------------------------------------------------------------
SinCosInput.SinCos.Sin = SinCosInput.SinCos.Sin - Adc16bitOffset;
SinCosInput.SinCos.Cos = SinCosInput.SinCos.Cos - Adc16bitOffset;
//ATAN2 calculation
DL_MathACL_startArcTan2Operation(MATHACL, &gAtanOpConfig, SinCosInput.SinCos.Sin, SinCosInput.SinCos.Cos);
DL_MathACL_waitForOperation(MATHACL);
SinCosOutput.PhasePU = DL_MathACL_getResultOne(MATHACL);
angle = _IQ(0.25) - (SinCosOutput.PhasePU>>1);
// Extend to 360 deg. 90 degree ~ 0.25, 45 degree ~ 0.125, 135 ~ 0.375
if((angle <= _IQ(0.375)) && (angle>_IQ(0.125)))
absangle=comp0[TMAG_Q0]+angle;
else
{
if (angle>_IQ(0.375))
absangle=comp1[TMAG_Q1]+angle;
else
absangle=_IQ(0.5)-comp1[TMAG_Q1]+angle;
}