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.
Dependencies: BLDC_V2 mbed-dev-f303 FastPWM3
PositionSensor/PositionSensor.h
- Committer:
- Wooden
- Date:
- 2021-04-07
- Revision:
- 48:a74e401a6d84
- Parent:
- 47:f4ecf3e0576a
File content as of revision 48:a74e401a6d84:
#ifndef POSITIONSENSOR_H
#define POSITIONSENSOR_H
class PositionSensor {
public:
virtual void Sample(float dt) = 0;
virtual float GetMechPosition() {return 0.0f;}
virtual float GetMechPositionFixed() {return 0.0f;}
virtual float GetElecPosition() {return 0.0f;}
virtual float GetMechVelocity() {return 0.0f;}
virtual float GetElecVelocity() {return 0.0f;}
virtual void ZeroPosition(void) = 0;
virtual int GetRawPosition(void) = 0;
virtual void SetElecOffset(float offset) = 0;
virtual int GetCPR(void) = 0;
virtual void WriteLUT(int new_lut[128]) = 0;
};
//class PositionSensorEncoder: public PositionSensor {
//public:
// PositionSensorEncoder(int CPR, float offset, int ppairs);
// virtual void Sample(float dt);
// virtual float GetMechPosition();
// virtual float GetElecPosition();
// virtual float GetMechVelocity();
// virtual float GetElecVelocity();
// virtual void ZeroPosition(void);
// virtual void SetElecOffset(float offset);
// virtual int GetRawPosition(void);
// virtual int GetCPR(void);
// virtual void WriteLUT(int new_lut[128]);
//private:
// InterruptIn *ZPulse;
// DigitalIn *ZSense;
// //DigitalOut *ZTest;
// virtual void ZeroEncoderCount(void);
// virtual void ZeroEncoderCountDown(void);
// int _CPR, flag, rotations, _ppairs, raw;
// //int state;
// float _offset, MechPosition, MechOffset, dir, test_pos, oldVel, out_old, velVec[40];
// int offset_lut[128];
//};
class PositionSensorAM5147: public PositionSensor{
public:
PositionSensorAM5147(int CPR, float offset, int ppairs);
virtual void Sample(float dt);
virtual float GetMechPosition();
virtual float GetMechPositionFixed();
virtual float GetElecPosition();
virtual float GetMechVelocity();
virtual float GetElecVelocity();
virtual int GetRawPosition();
virtual void ZeroPosition();
virtual void SetElecOffset(float offset);
virtual void SetMechOffset(float offset);
virtual int GetCPR(void);
virtual void WriteLUT(int new_lut[128]);
private:
float position, ElecPosition, ElecOffset, MechPosition, MechOffset, modPosition, oldModPosition, oldVel, velVec[40], MechVelocity, ElecVelocity, ElecVelocityFilt, MechPositionVec[40];
int raw, _CPR, rotations, old_counts, _ppairs;
bool flag_first_time; // avoid the first time angle - old_counts
SPI *spi;
DigitalOut *cs;
int readAngleCmd;
int offset_lut[128];
};
#endif