try to fix submodule
This commit is contained in:
225
firmware/lib/Arduino-FOC-drivers/src/encoders/as5047u/AS5047U.h
Normal file
225
firmware/lib/Arduino-FOC-drivers/src/encoders/as5047u/AS5047U.h
Normal file
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
* AS5047.h
|
||||
*
|
||||
* Created on: 24 Feb 2022
|
||||
* Author: runger
|
||||
*/
|
||||
|
||||
#ifndef AS5047U_H_
|
||||
#define AS5047U_H_
|
||||
|
||||
#include "Arduino.h"
|
||||
#include "SPI.h"
|
||||
|
||||
|
||||
union AS5047UDisableSettings {
|
||||
struct {
|
||||
uint16_t :9;
|
||||
uint16_t filter_disable:1;
|
||||
uint16_t :4;
|
||||
uint16_t abi_off:1;
|
||||
uint16_t uvw_off:1;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
|
||||
union AS5047UDiagnostics {
|
||||
struct {
|
||||
uint16_t spi_cnt:2;
|
||||
uint16_t :1;
|
||||
uint16_t agc_finished:1;
|
||||
uint16_t off_finished:1;
|
||||
uint16_t sin_finished:1;
|
||||
uint16_t cos_finished:1;
|
||||
uint16_t maghalf_flag:1;
|
||||
uint16_t comp_h:1;
|
||||
uint16_t comp_l:1;
|
||||
uint16_t cordic_ovf:1;
|
||||
uint16_t loops_finished:1;
|
||||
uint16_t vdd_mode:1;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047UZPosM {
|
||||
struct {
|
||||
uint16_t zposm:8;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047UZPosL {
|
||||
struct {
|
||||
uint16_t zposl:6;
|
||||
uint16_t dia1_en:1; // automotive version only
|
||||
uint16_t dia2_en:1; // automotive version only
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047USettings1 {
|
||||
struct {
|
||||
uint16_t k_max:3;
|
||||
uint16_t k_min:3;
|
||||
uint16_t dia3_en:1; // not applicable
|
||||
uint16_t dia4_en:1; // not applicable
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
union AS5047USettings2 {
|
||||
struct {
|
||||
uint16_t iwidth:1;
|
||||
uint16_t noiseset:1;
|
||||
uint16_t dir:1;
|
||||
uint16_t uvw_abi:1;
|
||||
uint16_t daecdis:1;
|
||||
uint16_t abi_dec:1;
|
||||
uint16_t data_select:1;
|
||||
uint16_t pwm_on:1;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
union AS5047USettings3 {
|
||||
struct {
|
||||
uint16_t uvwpp:3;
|
||||
uint16_t hys:2;
|
||||
uint16_t abires:3;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
union AS5047UECCSettings {
|
||||
struct {
|
||||
uint16_t ecc_chsum:7;
|
||||
uint16_t ecc_en:1;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
struct AS5047UError {
|
||||
struct {
|
||||
uint16_t cordic_ovf:1;
|
||||
uint16_t off_notfinished:1;
|
||||
uint16_t :1;
|
||||
uint16_t wdtst:1;
|
||||
uint16_t crc_error:1;
|
||||
uint16_t cmd_error:1;
|
||||
uint16_t frame_error:1;
|
||||
uint16_t p2ram_error:1;
|
||||
uint16_t p2ram_warning:1;
|
||||
uint16_t maghalf:1;
|
||||
uint16_t agc_warning:1;
|
||||
};
|
||||
uint16_t reg;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define AS5047U_CPR 16384
|
||||
#define AS5047U_ANGLECOM_REG 0x3FFF
|
||||
#define AS5047U_ANGLEUNC_REG 0x3FFE
|
||||
#define AS5047U_MAGNITUDE_REG 0x3FFD
|
||||
#define AS5047U_VELOCITY_REG 0x3FFC
|
||||
#define AS5047U_SIN_REG 0x3FFA
|
||||
#define AS5047U_COS_REG 0x3FFB
|
||||
#define AS5047U_AGC_REG 0x3FF9
|
||||
#define AS5047U_DIAGNOSTICS_REG 0x3FF5
|
||||
#define AS5047U_ERROR_REG 0x0001
|
||||
#define AS5047U_PROG_REG 0x0003
|
||||
#define AS5047U_ECCCHK_REG 0x00D1
|
||||
|
||||
#define AS5047U_DISABLE_REG 0x0015
|
||||
#define AS5047U_ZPOSM_REG 0x0016
|
||||
#define AS5047U_ZPOSL_REG 0x0017
|
||||
#define AS5047U_SETTINGS1_REG 0x0018
|
||||
#define AS5047U_SETTINGS2_REG 0x0019
|
||||
#define AS5047U_SETTINGS3_REG 0x001A
|
||||
#define AS5047U_ECC_REG 0x001B
|
||||
|
||||
#define AS5047U_WARNING 0x8000
|
||||
#define AS5047U_ERROR 0x4000
|
||||
#define AS5047U_RW 0x4000
|
||||
#define AS5047U_ERRFLG 0xC000
|
||||
#define AS5047U_RESULT_MASK 0x3FFF
|
||||
|
||||
|
||||
#define AS5047U_BITORDER MSBFIRST
|
||||
|
||||
static SPISettings AS5047USPISettings(8000000, AS5047U_BITORDER, SPI_MODE1); // @suppress("Invalid arguments")
|
||||
|
||||
|
||||
class AS5047U {
|
||||
public:
|
||||
AS5047U(SPISettings settings = AS5047USPISettings, int nCS = -1);
|
||||
virtual ~AS5047U();
|
||||
|
||||
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
|
||||
uint16_t readVelocity(); // 14bit magnitude value
|
||||
|
||||
bool isErrorFlag();
|
||||
bool isWarningFlag();
|
||||
AS5047UError clearErrorFlag();
|
||||
|
||||
AS5047UDiagnostics readDiagnostics();
|
||||
uint8_t readAGC();
|
||||
uint8_t readECCCHK();
|
||||
|
||||
AS5047UDisableSettings readDisableSettings();
|
||||
void writeDisableSettings(AS5047UDisableSettings settings);
|
||||
AS5047USettings1 readSettings1();
|
||||
void writeSettings1(AS5047USettings1 settings);
|
||||
AS5047USettings2 readSettings2();
|
||||
void writeSettings2(AS5047USettings2 settings);
|
||||
AS5047USettings3 readSettings3();
|
||||
void writeSettings3(AS5047USettings3 settings);
|
||||
AS5047UECCSettings readECCSettings();
|
||||
void writeECCSettings(AS5047UECCSettings settings);
|
||||
|
||||
void enablePWM(bool enable, bool pwmOnWPin = true);
|
||||
void enableABI(bool enable);
|
||||
void enableUVW(bool enable);
|
||||
|
||||
uint16_t setZero(uint16_t);
|
||||
uint16_t getZero();
|
||||
|
||||
private:
|
||||
|
||||
uint16_t nop16();
|
||||
uint16_t spi_transfer16(uint16_t outdata);
|
||||
uint8_t calcCRC(uint16_t data);
|
||||
uint16_t writeRegister24(uint16_t reg, uint16_t data);
|
||||
SPIClass* spi;
|
||||
SPISettings settings;
|
||||
bool errorflag = false;
|
||||
bool warningflag = false;
|
||||
int nCS = -1;
|
||||
|
||||
};
|
||||
|
||||
#endif /* AS5047U_H_ */
|
||||
Reference in New Issue
Block a user