Go to the documentation of this file.00001
00005 #ifndef HALLS_TO_ANGLE_H
00006 #define HALLS_TO_ANGLE_H
00007
00008 #include <math.h>
00009
00010 class HallsToAngle
00011 {
00012 public:
00013 inline HallsToAngle();
00014 inline ~HallsToAngle();
00015
00016 inline void useCoeffs(float coeff0, float coeff1, float coeff2, float coeff3, float scaleFactor);
00017 inline void useOffsetGain(float offset, float multiplier);
00018
00019 inline float getAngleFromHalls(float halls);
00020 static inline float getAngleFromHalls(float halls, float coeff0, float coeff1, float coeff2, float coeff3, float scaleFactor);
00021 static inline float getAngleFromHalls(float halls, float offset, float multiplier);
00022 private:
00023 float coeff0, coeff1, coeff2, coeff3, scaleFactor;
00024 float offset, multiplier;
00025 bool use_coeff;
00026
00027 };
00028
00029
00030 HallsToAngle::HallsToAngle()
00031 {
00032
00033 }
00034 HallsToAngle::~HallsToAngle()
00035 {
00036
00037 }
00038
00039 void HallsToAngle::useCoeffs(float coeff0, float coeff1, float coeff2, float coeff3, float scaleFactor)
00040 {
00041 use_coeff = true;
00042 this->coeff0 = coeff0;
00043 this->coeff1 = coeff1;
00044 this->coeff2 = coeff2;
00045 this->coeff3 = coeff3;
00046 this->scaleFactor = scaleFactor;
00047 }
00048
00049 void HallsToAngle::useOffsetGain(float offset, float multiplier)
00050 {
00051 use_coeff = false;
00052 this->offset = offset;
00053 this->multiplier = multiplier;
00054 }
00055
00056 float HallsToAngle::getAngleFromHalls(float halls)
00057 {
00058 if(use_coeff)
00059 {
00060 return getAngleFromHalls(halls, coeff0, coeff1, coeff2, coeff3, scaleFactor);
00061 }
00062 else
00063 {
00064 return getAngleFromHalls(halls, offset, multiplier);
00065 }
00066 }
00067
00068 float HallsToAngle::getAngleFromHalls(float halls, float coeff0, float coeff1, float coeff2, float coeff3, float scaleFactor)
00069 {
00070 halls *= scaleFactor;
00071 float hallSq = halls*halls;
00072 return coeff0 + coeff1*halls + coeff2*hallSq + coeff3*hallSq*halls;
00073 }
00074
00075
00076 float HallsToAngle::getAngleFromHalls(float halls, float offset, float multiplier)
00077 {
00078 return ((halls-offset)*multiplier);
00079 }
00080
00081 #endif