52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
#ifndef MAGNETICSENSORANALOG_LIB_H
|
|
#define MAGNETICSENSORANALOG_LIB_H
|
|
|
|
#include "Arduino.h"
|
|
#include "../common/base_classes/Sensor.h"
|
|
#include "../common/foc_utils.h"
|
|
#include "../common/time_utils.h"
|
|
|
|
/**
|
|
* This sensor has been tested with AS5600 running in 'analog mode'. This is where output pin of AS6000 is connected to an analog pin on your microcontroller.
|
|
* This approach is very simple but you may more accurate results with MagneticSensorI2C if that is also supported as its skips the DAC -> ADC conversion (ADC supports MagneticSensorI2C)
|
|
*/
|
|
class MagneticSensorAnalog: public Sensor{
|
|
public:
|
|
/**
|
|
* MagneticSensorAnalog class constructor
|
|
* @param _pinAnalog the pin to read the PWM signal
|
|
*/
|
|
MagneticSensorAnalog(uint8_t _pinAnalog, int _min = 0, int _max = 0);
|
|
|
|
|
|
/** sensor initialise pins */
|
|
void init();
|
|
|
|
int pinAnalog; //!< encoder hardware pin A
|
|
|
|
// Encoder configuration
|
|
Pullup pullup;
|
|
|
|
// implementation of abstract functions of the Sensor class
|
|
/** get current angle (rad) */
|
|
float getSensorAngle() override;
|
|
/** raw count (typically in range of 0-1023), useful for debugging resolution issues */
|
|
int raw_count;
|
|
|
|
private:
|
|
int min_raw_count;
|
|
int max_raw_count;
|
|
int cpr;
|
|
int read();
|
|
|
|
/**
|
|
* Function getting current angle register value
|
|
* it uses angle_register variable
|
|
*/
|
|
int getRawCount();
|
|
|
|
};
|
|
|
|
|
|
#endif
|