60 lines
1.9 KiB
C++
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) {}
|
|
|