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