HallsToAngle.h
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


robodyn_mechanisms
Author(s):
autogenerated on Thu Jun 6 2019 21:22:48