try to fix submodule
This commit is contained in:
167
firmware/lib/Arduino-FOC-drivers/src/encoders/as5047/AS5047.h
Normal file
167
firmware/lib/Arduino-FOC-drivers/src/encoders/as5047/AS5047.h
Normal file
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
* AS5047.h
|
||||
*
|
||||
* Created on: 2 May 2021
|
||||
* Author: runger
|
||||
*/
|
||||
|
||||
#ifndef AS5047_H_
|
||||
#define AS5047_H_
|
||||
|
||||
#include "Arduino.h"
|
||||
#include "SPI.h"
|
||||
|
||||
|
||||
|
||||
|
||||
union AS5047Diagnostics {
|
||||
struct {
|
||||
uint16_t agc:8;
|
||||
uint16_t lf:1;
|
||||
uint16_t cof:1;
|
||||
uint16_t magh:1;
|
||||
uint16_t magl:1;
|
||||
uint16_t unused:4;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047ZPosM {
|
||||
struct {
|
||||
uint16_t zposm:8;
|
||||
uint16_t unused:8;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047ZPosL {
|
||||
struct {
|
||||
uint16_t zposl:6;
|
||||
uint16_t comp_l_error_en:1;
|
||||
uint16_t comp_h_error_en:1;
|
||||
uint16_t unused:8;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047Settings1 {
|
||||
struct {
|
||||
uint16_t reserved:1;
|
||||
uint16_t noiseset:1;
|
||||
uint16_t dir:1;
|
||||
uint16_t uvw_abi:1;
|
||||
uint16_t daecdis:1;
|
||||
uint16_t abibin:1;
|
||||
uint16_t dataselect:1;
|
||||
uint16_t pwmon:1;
|
||||
uint16_t unused:8;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047Settings2 {
|
||||
struct {
|
||||
uint16_t uvwpp:3;
|
||||
uint16_t hys:2;
|
||||
uint16_t abires:3;
|
||||
uint16_t unused:8;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
struct AS5047Error {
|
||||
bool framingError;
|
||||
bool commandInvalid;
|
||||
bool parityError;
|
||||
};
|
||||
|
||||
|
||||
enum AS5047ABIRes : uint8_t {
|
||||
AS5047_ABI_1024 = 0b1010,
|
||||
AS5047_ABI_2048 = 0b1001,
|
||||
AS5047_ABI_4096 = 0b1000,
|
||||
AS5047_ABI_100 = 0b0111,
|
||||
AS5047_ABI_200 = 0b0110,
|
||||
AS5047_ABI_400 = 0b0101,
|
||||
AS5047_ABI_800 = 0b0100,
|
||||
AS5047_ABI_1200 = 0b0011,
|
||||
AS5047_ABI_1600 = 0b0010,
|
||||
AS5047_ABI_2000 = 0b0001,
|
||||
AS5047_ABI_4000 = 0b0000
|
||||
};
|
||||
|
||||
|
||||
#define AS5047_CPR 16384
|
||||
#define AS5047_ANGLECOM_REG 0x3FFF
|
||||
#define AS5047_ANGLEUNC_REG 0x3FFE
|
||||
#define AS5047_MAGNITUDE_REG 0x3FFD
|
||||
#define AS5047_DIAGNOSTICS_REG 0x3FFC
|
||||
#define AS5047_ERROR_REG 0x0001
|
||||
#define AS5047_PROG_REG 0x0003
|
||||
#define AS5047_ZPOSM_REG 0x0016
|
||||
#define AS5047_ZPOSL_REG 0x0017
|
||||
#define AS5047_SETTINGS1_REG 0x0018
|
||||
#define AS5047_SETTINGS2_REG 0x0019
|
||||
|
||||
#define AS5047_PARITY 0x8000
|
||||
#define AS5047_RW 0x4000
|
||||
#define AS5047_ERRFLG 0x4000
|
||||
#define AS5047_RESULT_MASK 0x3FFF
|
||||
|
||||
|
||||
#define AS5047_BITORDER MSBFIRST
|
||||
|
||||
static SPISettings AS5047SPISettings(8000000, AS5047_BITORDER, SPI_MODE1); // @suppress("Invalid arguments")
|
||||
|
||||
|
||||
class AS5047 {
|
||||
public:
|
||||
AS5047(SPISettings settings = AS5047SPISettings, int nCS = -1);
|
||||
virtual ~AS5047();
|
||||
|
||||
virtual void init(SPIClass* _spi = &SPI);
|
||||
|
||||
float getCurrentAngle(); // angle in radians, return current value
|
||||
float getFastAngle(); // angle in radians, return last value and read new
|
||||
|
||||
uint16_t readRawAngle(); // 14bit angle value
|
||||
uint16_t readCorrectedAngle(); // 14bit corrected angle value
|
||||
uint16_t readMagnitude(); // 14bit magnitude value
|
||||
|
||||
bool isErrorFlag();
|
||||
AS5047Error clearErrorFlag();
|
||||
|
||||
AS5047Diagnostics readDiagnostics();
|
||||
AS5047Settings1 readSettings1();
|
||||
void writeSettings1(AS5047Settings1 settings);
|
||||
AS5047Settings2 readSettings2();
|
||||
void writeSettings2(AS5047Settings2 settings);
|
||||
void enablePWM(bool enable);
|
||||
void enableABI(bool enable);
|
||||
void setABIResolution(AS5047ABIRes res);
|
||||
void enableDEAC(bool enable);
|
||||
void useCorrectedAngle(bool useCorrected);
|
||||
void setHysteresis(uint8_t hyst);
|
||||
|
||||
uint16_t setZero(uint16_t);
|
||||
uint16_t getZero();
|
||||
|
||||
uint16_t calcParity(uint16_t data);
|
||||
|
||||
private:
|
||||
|
||||
uint16_t nop();
|
||||
uint16_t spi_transfer16(uint16_t outdata);
|
||||
SPIClass* spi;
|
||||
SPISettings settings;
|
||||
bool errorflag = false;
|
||||
int nCS = -1;
|
||||
|
||||
};
|
||||
|
||||
#endif /* AS5047_H_ */
|
||||
Reference in New Issue
Block a user