Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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:45:42 by
1.7.2