MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/processing/LoadEstimation.cpp

77 lines
1.5 KiB
C++
Raw Permalink Normal View History

/*
* TorqueEstimation.cpp
*
* Created on: 29 <EFBFBD><EFBFBD><EFBFBD>. 2020 <EFBFBD>.
* Author: titov
*/
#include "LoadEstimation.hh"
bool processing::LoadEstimation::Setting::isValid() {
const Setting non_valid;
if( Jp <= 0.0f )
Jp = non_valid.Jp;
if( L1 <= 0.0f )
L1 = non_valid.L1;
if( L2 <= 0.0f )
L2 = non_valid.L2;
return Jp != non_valid.Jp
and L1 != non_valid.L1
and L2 != non_valid.L2;
}
processing::LoadEstimation::Setting::Setting() : Jp(0.0f), L1(0.0f), L2(0.0f) {}
void processing::LoadEstimation::configure( const Setting & setting ) {
_L1Base = setting.L1;
_L2Base = setting.L2;
_Base_J = 1.0f / setting.Jp;
_L1Ts = _L1Base * _Ts;
_L2Ts = _L2Base * _Ts;
_Ts_J = _Base_J * _Ts;
}
void processing::LoadEstimation::process() {
const float error = ( speed - est_speed );
est_speed += error * _L1Ts + ( torque - est_load ) * _Ts_J;
est_load -= error * _L2Ts;
}
void processing::LoadEstimation::setSampleTime( float ts_in_second ) {
_Ts = ts_in_second;
_L1Ts = _L1Base * _Ts;
_L2Ts = _L2Base * _Ts;
_Ts_J = _Base_J * _Ts;
}
const float & processing::LoadEstimation::getEstimatedLoad() const {
return est_load;
}
const float & processing::LoadEstimation::getEstimatedSpeed() const {
return est_speed;
}
processing::LoadEstimation::LoadEstimation( systemic::ISignal & speed,
systemic::ISignal & torque ) : speed(speed), torque(torque) {}