You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.8 KiB
C++
82 lines
2.8 KiB
C++
/*
|
|
* GeneratorSymmetricalComponents.cpp
|
|
*
|
|
* Author: Aleksey Gerasimenko
|
|
* gerasimenko.aleksey.n@gmail.com
|
|
*/
|
|
|
|
#include "SYSCTRL/GeneratorSymmetricalComponents.h"
|
|
|
|
namespace SYSCTRL
|
|
{
|
|
//CONSTRUCTOR
|
|
GeneratorSymmetricalComponents::GeneratorSymmetricalComponents():
|
|
m_amplitude(),
|
|
m_phase(),
|
|
m_ort_direct_alpha(FP_ZERO),
|
|
m_ort_direct_beta(FP_ZERO),
|
|
m_ort_inverse_alpha(FP_ZERO),
|
|
m_ort_inverse_beta(FP_ZERO),
|
|
m_direct_alpha(FP_ZERO),
|
|
m_direct_beta(FP_ZERO),
|
|
m_inverse_alpha(FP_ZERO),
|
|
m_inverse_beta(FP_ZERO),
|
|
m_direct_a(FP_ZERO),
|
|
m_direct_b(FP_ZERO),
|
|
m_direct_c(FP_ZERO),
|
|
m_inverse_a(FP_ZERO),
|
|
m_inverse_b(FP_ZERO),
|
|
m_inverse_c(FP_ZERO),
|
|
m_out_a(FP_ZERO),
|
|
m_out_b(FP_ZERO),
|
|
m_out_c(FP_ZERO)
|
|
//
|
|
{}//CONSTRUCTOR
|
|
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void GeneratorSymmetricalComponents::configure(GeneratorSymmetricalComponentsConfiguration& config)
|
|
{
|
|
m_amplitude = config.amplitude;
|
|
m_phase = config.phase;
|
|
//
|
|
}//
|
|
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void GeneratorSymmetricalComponents::execute(float ort_alpha, float ort_beta)
|
|
{
|
|
m_phase.direct.cos_phase = cosf(m_phase.direct.phase);
|
|
m_phase.direct.sin_phase = sinf(m_phase.direct.phase);
|
|
m_phase.inverse.cos_phase = cosf(m_phase.inverse.phase);
|
|
m_phase.inverse.sin_phase = sinf(m_phase.inverse.phase);
|
|
//
|
|
m_ort_direct_alpha = ort_alpha * m_phase.direct.cos_phase - ort_beta * m_phase.direct.sin_phase;
|
|
m_ort_direct_beta = ort_alpha * m_phase.direct.sin_phase + ort_beta * m_phase.direct.cos_phase;
|
|
//
|
|
m_ort_inverse_alpha = ort_alpha * m_phase.inverse.cos_phase + ort_beta * m_phase.inverse.sin_phase;
|
|
m_ort_inverse_beta = ort_alpha * m_phase.inverse.sin_phase - ort_beta * m_phase.inverse.cos_phase;
|
|
//
|
|
FLTSYSLIB::Transformation::park_inverse(m_ort_direct_alpha, m_ort_direct_beta, m_amplitude.direct.d, m_amplitude.direct.q, m_direct_alpha, m_direct_beta);
|
|
FLTSYSLIB::Transformation::park_inverse(m_ort_inverse_alpha, m_ort_inverse_beta, m_amplitude.inverse.d, m_amplitude.inverse.q, m_inverse_alpha, m_inverse_beta);
|
|
FLTSYSLIB::Transformation::clarke_inverse(m_direct_alpha, m_direct_beta, m_direct_a, m_direct_b, m_direct_c);
|
|
FLTSYSLIB::Transformation::clarke_inverse(m_inverse_alpha, m_inverse_beta, m_inverse_a, m_inverse_b, m_inverse_c);
|
|
//
|
|
m_out_a = m_direct_a + m_inverse_a + m_amplitude.zero_a;
|
|
m_out_b = m_direct_b + m_inverse_b + m_amplitude.zero_b;
|
|
m_out_c = m_direct_c + m_inverse_c + m_amplitude.zero_c;
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void GeneratorSymmetricalComponents::get_output(float& out_a, float& out_b, float& out_c)
|
|
{
|
|
out_a = m_out_a;
|
|
out_b = m_out_b;
|
|
out_c = m_out_c;
|
|
//
|
|
}//
|
|
//
|
|
|
|
} /* namespace SYSCTRL */
|