zebra
/
ZebraJointController
zebra joint controller firmware (originally from MIT HKC motor controller by benkatz)
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Sun Jul 17 2022 04:31:50 by 1.7.2