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) {}
|
||
|