Chetan Sharma / Mbed OS HKCC_Controller_MBed_OS

Dependencies:   FastPWM3

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PositionSensor.h Source File

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