/* * PwmGenAdapter.cpp * * Created on: 6 сент. 2019 г. * Author: titov */ #include "PwmGenAdapter.hh" #include "../../control/function/SpaceVectorPwm.hh" #include 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) {}