try to fix submodule
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
|
||||
#include "MT6816.h"
|
||||
|
||||
MT6816::MT6816(SPISettings settings, int nCS) : settings(settings), nCS(nCS) {
|
||||
};
|
||||
|
||||
MT6816::~MT6816() {
|
||||
};
|
||||
|
||||
void MT6816::init(SPIClass* _spi) {
|
||||
spi = _spi;
|
||||
if (nCS >= 0) {
|
||||
pinMode(nCS, OUTPUT);
|
||||
digitalWrite(nCS, HIGH);
|
||||
spi->begin();
|
||||
}
|
||||
};
|
||||
|
||||
uint16_t MT6816::readRawAngle() {
|
||||
uint16_t angle_data = 0;
|
||||
angle_data = spi_transfer16(MT6816_READ_REG_03) << 8;
|
||||
angle_data |= spi_transfer16(MT6816_READ_REG_04);
|
||||
|
||||
if ((angle_data & MT6816_NO_MAGNET_WARNING_BIT) == MT6816_NO_MAGNET_WARNING_BIT) {
|
||||
this->no_magnetic_reading = true;
|
||||
} else {
|
||||
this->no_magnetic_reading = false;
|
||||
}
|
||||
|
||||
if (!this->parityCheck(angle_data)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (angle_data >> 2);
|
||||
}
|
||||
|
||||
bool MT6816::parityCheck(uint16_t data) {
|
||||
data ^= data >> 8;
|
||||
data ^= data >> 4;
|
||||
data ^= data >> 2;
|
||||
data ^= data >> 1;
|
||||
|
||||
return (~data) & 1;
|
||||
}
|
||||
|
||||
uint16_t MT6816::spi_transfer16(uint16_t outdata) {
|
||||
if (nCS>=0)
|
||||
digitalWrite(nCS, 0);
|
||||
spi->beginTransaction(settings);
|
||||
uint16_t result = spi->transfer16(outdata);
|
||||
spi->endTransaction();
|
||||
if (nCS>=0)
|
||||
digitalWrite(nCS, 1);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
#ifndef MT6816_H
|
||||
#define MT6816_H
|
||||
|
||||
#include "Arduino.h"
|
||||
#include "SPI.h"
|
||||
|
||||
#define _2PI 6.28318530718f
|
||||
#define MT6816_CPR 16384.0f
|
||||
|
||||
#define MT6816_READ_REG_03 0x8300
|
||||
#define MT6816_READ_REG_04 0x8400
|
||||
|
||||
#define MT6816_NO_MAGNET_WARNING_BIT 0x0002
|
||||
#define MT6816_BITORDER MSBFIRST
|
||||
|
||||
|
||||
static SPISettings MT6816SPISettings(1000000, MT6816_BITORDER, SPI_MODE3);
|
||||
|
||||
class MT6816 {
|
||||
public:
|
||||
MT6816(SPISettings settings = MT6816SPISettings, int nCS = -1);
|
||||
virtual ~MT6816();
|
||||
|
||||
virtual void init(SPIClass* _spi = &SPI);
|
||||
uint16_t readRawAngle();
|
||||
bool isNoMagneticReading() {
|
||||
return no_magnetic_reading;
|
||||
}
|
||||
|
||||
private:
|
||||
bool parityCheck(uint16_t data);
|
||||
uint16_t spi_transfer16(uint16_t outdata);
|
||||
SPIClass* spi;
|
||||
SPISettings settings;
|
||||
bool no_magnetic_reading = false;
|
||||
int nCS = -1;
|
||||
};
|
||||
|
||||
#endif /* MT6816_H */
|
||||
@@ -0,0 +1,26 @@
|
||||
|
||||
#include "common/foc_utils.h"
|
||||
#include "common/time_utils.h"
|
||||
#include "MagneticSensorMT6816.h"
|
||||
|
||||
|
||||
MagneticSensorMT6816::MagneticSensorMT6816(int nCS, SPISettings settings) : MT6816(settings, nCS) {
|
||||
}
|
||||
|
||||
MagneticSensorMT6816::~MagneticSensorMT6816(){
|
||||
}
|
||||
|
||||
void MagneticSensorMT6816::init(SPIClass* _spi) {
|
||||
this->MT6816::init(_spi);
|
||||
this->Sensor::init();
|
||||
}
|
||||
|
||||
float MagneticSensorMT6816::getSensorAngle() {
|
||||
uint16_t raw_angle_data = readRawAngle();
|
||||
|
||||
if (this->MT6816::isNoMagneticReading()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return static_cast<float>(raw_angle_data) / MT6816_CPR * _2PI;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
#ifndef MAGNETICSENSOR_MT6816_H
|
||||
#define MAGNETICSENSOR_MT6816_H
|
||||
|
||||
#include "common/base_classes/Sensor.h"
|
||||
#include "MT6816.h"
|
||||
|
||||
class MagneticSensorMT6816 : public Sensor, public MT6816 {
|
||||
public:
|
||||
MagneticSensorMT6816(int nCS = -1, SPISettings settings = MT6816SPISettings);
|
||||
virtual ~MagneticSensorMT6816();
|
||||
|
||||
virtual float getSensorAngle() override;
|
||||
virtual void init(SPIClass* _spi = &SPI);
|
||||
};
|
||||
|
||||
#endif /* MAGNETICSENSOR_MT6816_H */
|
||||
Reference in New Issue
Block a user