67 lines
1.9 KiB
C++
67 lines
1.9 KiB
C++
/*
|
||
* LoadEstimation.hh
|
||
*
|
||
* Created on: 29 дек. 2020 г.
|
||
* Author: titov
|
||
*/
|
||
|
||
#ifndef UMLIBRARY_PROCESSING_LOADESTIMATION_HH_
|
||
#define UMLIBRARY_PROCESSING_LOADESTIMATION_HH_
|
||
|
||
#include "../systemic/ISignal.hh"
|
||
#include "../systemic/IProcess.hh"
|
||
|
||
namespace processing {
|
||
|
||
//!Модуль осуществляет оценку момента нагрузки на валу на основе решения кинематического уравнения.
|
||
/*!Оценка момента нагрузки на валу осущетсвляется путем построения наблюдателя системы:
|
||
* W[n] = W[n-1] + (T[n] - L[n]) * dT / J, где
|
||
* W - угловая скорость,
|
||
* T - момент двигателя,
|
||
* L - момент нагрузки.
|
||
*/
|
||
class LoadEstimation : public systemic::IProcess {
|
||
public:
|
||
struct Setting {
|
||
float L1; //!<Коэффициент следящей системы, коррекция момента.
|
||
float L2; //!<Коэффициент следящей системы, коррекция скорости.
|
||
float Jp; //!<Приведенный момент инерции, кг*м^2.
|
||
|
||
bool isValid();
|
||
Setting();
|
||
};
|
||
|
||
void configure( const Setting & setting );
|
||
|
||
void process();
|
||
void setSampleTime( float ts_in_second );
|
||
|
||
const float & getEstimatedLoad() const;
|
||
const float & getEstimatedSpeed() const;
|
||
|
||
LoadEstimation( systemic::ISignal & speed, systemic::ISignal & torque );
|
||
private:
|
||
|
||
float _Ts;
|
||
|
||
//Настройки наблюдателя позиции.
|
||
float _L1Base;
|
||
float _L2Base;
|
||
float _Base_J;
|
||
|
||
float _L1Ts;
|
||
float _L2Ts;
|
||
float _Ts_J;
|
||
|
||
systemic::ISignal & speed;
|
||
systemic::ISignal & torque;
|
||
|
||
float est_speed;
|
||
float est_load;
|
||
|
||
};
|
||
|
||
}
|
||
|
||
#endif /* UMLIBRARY_PROCESSING_LOADESTIMATION_HH_ */
|