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

78 lines
1.8 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.

/*
* FieldCalculation.hh
*
* Created on: 16 мар. 2021 г.
* Author: titov
*/
#ifndef UMLIBRARY_PROCESSING_FIELDCALCULATION_HH_
#define UMLIBRARY_PROCESSING_FIELDCALCULATION_HH_
#include "../systemic/ISignal.hh"
#include "../systemic/IProcess.hh"
#include "../units/LogicalEntities.hpp"
#include "../units/PhysicalQuantities.hpp"
#include "../math/math_inc.hh"
namespace processing {
//!Модуль осуществляет вычисление позиции поля из позиции ротора.
class FieldCalculation : public systemic::IProcess {
float _Np;
float _ThetaZero;
systemic::ISignal & position;
systemic::ISignal & speed;
float est_theta;
float est_omega;
public:
//vector::ITechValue & getThetaNull();
FieldCalculation( systemic::ISignal & position, systemic::ISignal & speed );
struct Setting {
units::Quantity Np; //!<Количество пар полюсов.
units::ElectricalAngle ThetaZero; //!<Позиция электрического нуля.
Setting() : Np(0), ThetaZero(-11.0f) {}
bool isValid() {
using namespace std;
Setting non_valid;
if( not Np or Np > 128 )
Np = non_valid.Np;
if(
not isfinite(ThetaZero)
or ThetaZero <= - math::constants::pi2
or ThetaZero >= math::constants::pi2
)
ThetaZero = non_valid.ThetaZero;
return Np != non_valid.Np
and ThetaZero != non_valid.ThetaZero;
}
};
void configure( const Setting & config );
const float & theta() const;
const float & omega() const;
void process();
};
}
#endif /* UMLIBRARY_PROCESSING_FIELDCALCULATION_HH_ */