MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/technological/adapter/PwmGenAdapter.cpp

60 lines
1.9 KiB
C++

/*
* PwmGenAdapter.cpp
*
* Created on: 6 ñåíò. 2019 ã.
* Author: titov
*/
#include "PwmGenAdapter.hh"
#include "../../control/function/SpaceVectorPwm.hh"
#include <cmath>
using namespace std;
void technological::adapter::PwmGenAdapter::set( control::StandingVector voltage ) {
float voltage_dc_value = voltage_dc;
float factor = ( voltage_dc_value > minimum_control_voltage ? voltage_utilization_factor / voltage_dc_value : 0.0f );
control::NaturalCoordinate times = control::function::SpaceVectorPwm::generate( voltage * factor );
output->pwm( times.u, times.v, times.w );
}
void technological::adapter::PwmGenAdapter::set_output( driver::IInverter * output_interface ) {
output = output_interface;
}
technological::adapter::PwmGenAdapter::Setting::Setting() : voltage_utilization_factor(NAN), minimum_control_voltage(INFINITY) {}
bool technological::adapter::PwmGenAdapter::Setting::isValid() {
const Setting non_valid;
if( voltage_utilization_factor < 0.0f or voltage_utilization_factor > 1.0f
or not isfinite(voltage_utilization_factor) )
voltage_utilization_factor = non_valid.voltage_utilization_factor;
if( minimum_control_voltage < 0.0f or not isfinite(minimum_control_voltage) )
minimum_control_voltage = non_valid.minimum_control_voltage;
return voltage_utilization_factor != non_valid.voltage_utilization_factor and minimum_control_voltage != non_valid.minimum_control_voltage;
}
void technological::adapter::PwmGenAdapter::configure( const Setting & config ) {
voltage_utilization_factor = config.voltage_utilization_factor;
minimum_control_voltage = config.minimum_control_voltage;
}
technological::adapter::PwmGenAdapter::PwmGenAdapter( systemic::ISignal & voltage_dc ) :
voltage_dc(voltage_dc),
voltage_utilization_factor(0.0f), minimum_control_voltage(INFINITY) {}