82 lines
2.1 KiB
C++
82 lines
2.1 KiB
C++
#ifndef __MA330_H__
|
|
#define __MA330_H__
|
|
|
|
|
|
#include "Arduino.h"
|
|
#include "SPI.h"
|
|
|
|
enum FieldStrength : uint8_t {
|
|
FS_NORMAL = 0x00,
|
|
FS_LOW = 0x01,
|
|
FS_HIGH = 0x02,
|
|
FS_ERR = 0x03 // impossible state
|
|
};
|
|
|
|
|
|
#define _2PI 6.28318530718f
|
|
#define MA330_CPR 65536.0f
|
|
|
|
#define MA330_REG_ZERO_POSITION_LSB 0x00
|
|
#define MA330_REG_ZERO_POSITION_MSB 0x01
|
|
#define MA330_REG_BCT 0x02
|
|
#define MA330_REG_ET 0x03
|
|
#define MA330_REG_ILIP_PPT_LSB 0x04
|
|
#define MA330_REG_PPT_MSB 0x05
|
|
#define MA330_REG_MGLT_MGHT 0x06
|
|
#define MA330_REG_NPP 0x07
|
|
#define MA330_REG_RD 0x09
|
|
#define MA330_REG_FW 0x0E
|
|
#define MA330_REG_HYS 0x10
|
|
#define MA330_REG_MGH_MGL 0x1B
|
|
|
|
#define MA330_BITORDER MSBFIRST
|
|
|
|
static SPISettings MA330SPISettings(1000000, MA330_BITORDER, SPI_MODE3); // @suppress("Invalid arguments")
|
|
|
|
class MA330 {
|
|
public:
|
|
MA330(SPISettings settings = MA330SPISettings, int nCS = -1);
|
|
virtual ~MA330();
|
|
|
|
virtual void init(SPIClass* _spi = &SPI);
|
|
|
|
float getCurrentAngle(); // angle in radians, return current value
|
|
|
|
uint16_t readRawAngle(); // 9-14bit angle value
|
|
|
|
uint16_t getZero();
|
|
uint8_t getBiasCurrentTrimming();
|
|
bool isBiasCurrrentTrimmingX();
|
|
bool isBiasCurrrentTrimmingY();
|
|
uint16_t getPulsesPerTurn();
|
|
uint8_t getIndexLength();
|
|
uint8_t getNumberPolePairs();
|
|
uint8_t getRotationDirection();
|
|
uint8_t getFilterWidth();
|
|
uint8_t getHysteresis();
|
|
uint8_t getFieldStrengthHighThreshold();
|
|
uint8_t getFieldStrengthLowThreshold();
|
|
FieldStrength getFieldStrength();
|
|
|
|
void setZero(uint16_t);
|
|
void setBiasCurrentTrimming(uint8_t);
|
|
void setBiasCurrrentTrimmingEnabled(bool Xenabled, bool Yenabled);
|
|
void setPulsesPerTurn(uint16_t);
|
|
void setIndexLength(uint8_t);
|
|
void setNumberPolePairs(uint8_t);
|
|
void setRotationDirection(uint8_t);
|
|
void setFilterWidth(uint8_t);
|
|
void setHysteresis(uint8_t);
|
|
void setFieldStrengthThresholds(uint8_t high, uint8_t low);
|
|
|
|
private:
|
|
SPIClass* spi;
|
|
SPISettings settings;
|
|
int nCS = -1;
|
|
|
|
uint16_t transfer16(uint16_t outValue);
|
|
uint8_t readRegister(uint8_t reg);
|
|
uint8_t writeRegister(uint8_t reg, uint8_t value);
|
|
};
|
|
|
|
#endif |