Motor control for robots. More compact, less object-oriented revision.

Dependencies:   FastPWM3 mbed-dev-f303

Fork of Hobbyking_Cheetah_V1 by Ben Katz

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PositionSensor.h Source File

PositionSensor.h

00001 #ifndef POSITIONSENSOR_H
00002 #define POSITIONSENSOR_H
00003 class PositionSensor {
00004 public:
00005     virtual void Sample(float dt) = 0;
00006     virtual float GetMechPosition() {return 0.0f;}
00007     virtual float GetMechPositionFixed() {return 0.0f;}
00008     virtual float GetElecPosition() {return 0.0f;}
00009     virtual float GetMechVelocity() {return 0.0f;}
00010     virtual float GetElecVelocity() {return 0.0f;}
00011     virtual void ZeroPosition(void) = 0;
00012     virtual int GetRawPosition(void) = 0;
00013     virtual void SetElecOffset(float offset) = 0;
00014     virtual int GetCPR(void) = 0;
00015     virtual  void WriteLUT(int new_lut[128]) = 0;
00016 };
00017   
00018   
00019 class PositionSensorEncoder: public PositionSensor {
00020 public:
00021     PositionSensorEncoder(int CPR, float offset, int ppairs);
00022     virtual void Sample(float dt);
00023     virtual float GetMechPosition();
00024     virtual float GetElecPosition();
00025     virtual float GetMechVelocity();
00026     virtual float GetElecVelocity();
00027     virtual void ZeroPosition(void);
00028     virtual void SetElecOffset(float offset);
00029     virtual int GetRawPosition(void);
00030     virtual int GetCPR(void);
00031     virtual  void WriteLUT(int new_lut[128]); 
00032 private:
00033     InterruptIn *ZPulse;
00034     DigitalIn *ZSense;
00035     //DigitalOut *ZTest;
00036     virtual void ZeroEncoderCount(void);
00037     virtual void ZeroEncoderCountDown(void);
00038     int _CPR, flag, rotations, _ppairs, raw;
00039     //int state;
00040     float _offset, MechPosition, MechOffset, dir, test_pos, oldVel, out_old, velVec[40];
00041     int offset_lut[128];
00042 };
00043 
00044 class PositionSensorAM5147: public PositionSensor{
00045 public:
00046     PositionSensorAM5147(int CPR, float offset, int ppairs);
00047     virtual void Sample(float dt);
00048     virtual float GetMechPosition();
00049     virtual float GetMechPositionFixed();
00050     virtual float GetElecPosition();
00051     virtual float GetMechVelocity();
00052     virtual float GetElecVelocity();
00053     virtual int GetRawPosition();
00054     virtual void ZeroPosition();
00055     virtual void SetElecOffset(float offset);
00056     virtual void SetMechOffset(float offset);
00057     virtual int GetCPR(void);
00058     virtual void WriteLUT(int new_lut[128]);
00059 private:
00060     float position, ElecPosition, ElecOffset, MechPosition, MechOffset, modPosition, oldModPosition, oldVel, velVec[40], MechVelocity, ElecVelocity, ElecVelocityFilt;
00061     int raw, _CPR, rotations, old_counts, _ppairs;
00062     SPI *spi;
00063     DigitalOut *cs;
00064     int readAngleCmd;
00065     int offset_lut[128];
00066 
00067 };
00068 
00069 #endif