MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/driver/EncoderQuadratureCounter.hh
2024-06-07 11:12:56 +03:00

66 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* EncoderQuadratureCounter.h
*
* Created on: 22 янв. 2020 г.
* Author: user
*/
#ifndef UMLIBRARY_DRIVER_ENCODERQUADRATURECOUNTER_HH_
#define UMLIBRARY_DRIVER_ENCODERQUADRATURECOUNTER_HH_
#include "IEncoder.hh"
#include "../math/math_inc.hh"
#include "../common/DoubleBuffer.hpp"
#include "../peripheral/ICounter.hh"
namespace driver { namespace derail {
class EncoderQuadratureCounter: public IEncoder {
public:
//!Описание настроек драйвера счетчика квадратурного энкодера.
struct Setting {
unsigned long max_turn_value; //!<Максимальное значение счетчиков оборотов.
unsigned long line_in_turn; //!<Количество штрихов диска энкодера на оборот.
};
virtual float getAngle() const override;
virtual float getTurn() const override;
virtual std::pair<float, float> getPosition() const override;
bool configure( Setting & set );
bool isFailure() const;
void resetFailure();
void process();
void setAbsolurePosition( float angle, unsigned long turn );
EncoderQuadratureCounter( peripheral::ICounter & counter );
private:
peripheral::ICounter & counter;
unsigned long max_turn_value; //!<Максимальное значение счетчиков оборотов из настроек.
unsigned long line_in_turn; //!<Количество штрихов диска энкодера на оборот из настроек.
bool failure = false;
long angle_position = 0; //!<Угловое положение в отсчетах энкодера.
unsigned long turn_counter = 0; //!<Счетчик оборотов. Изменяется от 0 до max_turn_value-1.
float _1_line_to_rad = NAN;
float angle = NAN; //!Угол внутри оборота [0..2pi).
DoubleBuffer< std::pair<float, float> > data;
};
} /* namespace derail */
} /* namespace driver */
#endif /* UMLIBRARY_DRIVER_ENCODERQUADRATURECOUNTER_HH_ */