try to fix submodule

This commit is contained in:
2023-11-09 19:02:15 -05:00
parent c1d45aa443
commit deea94b076
366 changed files with 40228 additions and 2 deletions

View File

@@ -0,0 +1,50 @@
/*
* PreciseMagneticSensorAS5048A.cpp
*
* Created on: 1 May 2021
* Author: runger
*/
#include <encoders/as5048a/PreciseMagneticSensorAS5048A.h>
#include "common/foc_utils.h"
#include "common/time_utils.h"
PreciseMagneticSensorAS5048A::PreciseMagneticSensorAS5048A(int nCS, bool fastMode, SPISettings settings) : AS5048A(settings, nCS), fastMode(fastMode) { }
PreciseMagneticSensorAS5048A::~PreciseMagneticSensorAS5048A() { }
void PreciseMagneticSensorAS5048A::init(SPIClass* _spi) {
this->AS5048A::init(_spi);
// velocity calculation init
current_ts = _micros();
/*uint16_t angle_data =*/ readRawAngle();
current_angle = PreciseAngle(readRawAngle(), 0);
getAngle();
}
float PreciseMagneticSensorAS5048A::getSensorAngle() {
previous_ts = current_ts;
previous_angle = current_angle;
uint16_t angle_data = readRawAngle();
if (!fastMode) // read again to ensure current value
angle_data = readRawAngle();
current_ts = _micros();
current_angle.update(angle_data);
return current_angle.asFloat();
}
/*
unlike the normal MagneticSensorSPI implementation, this one uses the angle previously read by the last call to getAngle to do its
calculation, and does not directly poll any data from the sensor.
This is an optimisation for speed, based on the assumption that loopFOC() (which calls getAngle()) is invoked at least as often as
move() (which calls getVelocity()). If this is the case, getVelocity() should always have a sufficiently "fresh" value to work with.
If using this function in a different context, simply call getAngle() first to be sure of a fresh angle value.
*/
float PreciseMagneticSensorAS5048A::getVelocity() {
return current_angle.velocity(previous_angle, (current_ts-previous_ts));
}