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,91 @@
#ifndef ENCODER_LIB_H
#define ENCODER_LIB_H
#include "Arduino.h"
#include "../common/foc_utils.h"
#include "../common/time_utils.h"
#include "../common/base_classes/Sensor.h"
/**
* Quadrature mode configuration structure
*/
enum Quadrature : uint8_t {
ON = 0x00, //!< Enable quadrature mode CPR = 4xPPR
OFF = 0x01 //!< Disable quadrature mode / CPR = PPR
};
class Encoder: public Sensor{
public:
/**
Encoder class constructor
@param encA encoder B pin
@param encB encoder B pin
@param ppr impulses per rotation (cpr=ppr*4)
@param index index pin number (optional input)
*/
Encoder(int encA, int encB , float ppr, int index = 0);
/** encoder initialise pins */
void init() override;
/**
* function enabling hardware interrupts for the encoder channels with provided callback functions
* if callback is not provided then the interrupt is not enabled
*
* @param doA pointer to the A channel interrupt handler function
* @param doB pointer to the B channel interrupt handler function
* @param doIndex pointer to the Index channel interrupt handler function
*
*/
void enableInterrupts(void (*doA)() = nullptr, void(*doB)() = nullptr, void(*doIndex)() = nullptr);
// Encoder interrupt callback functions
/** A channel callback function */
void handleA();
/** B channel callback function */
void handleB();
/** Index channel callback function */
void handleIndex();
// pins A and B
int pinA; //!< encoder hardware pin A
int pinB; //!< encoder hardware pin B
int index_pin; //!< index pin
// Encoder configuration
Pullup pullup; //!< Configuration parameter internal or external pullups
Quadrature quadrature;//!< Configuration parameter enable or disable quadrature mode
float cpr;//!< encoder cpr number
// Abstract functions of the Sensor class implementation
/** get current angle (rad) */
float getSensorAngle() override;
/** get current angular velocity (rad/s) */
float getVelocity() override;
virtual void update() override;
/**
* returns 0 if it does need search for absolute zero
* 0 - encoder without index
* 1 - ecoder with index
*/
int needsSearch() override;
private:
int hasIndex(); //!< function returning 1 if encoder has index pin and 0 if not.
volatile long pulse_counter;//!< current pulse counter
volatile long pulse_timestamp;//!< last impulse timestamp in us
volatile int A_active; //!< current active states of A channel
volatile int B_active; //!< current active states of B channel
volatile int I_active; //!< current active states of Index channel
volatile bool index_found = false; //!< flag stating that the index has been found
// velocity calculation variables
float prev_Th, pulse_per_second;
volatile long prev_pulse_counter, prev_timestamp_us;
};
#endif