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.
95 lines
2.1 KiB
C++
95 lines
2.1 KiB
C++
/*
|
|
* ScaleCompute.cpp
|
|
*
|
|
* Author: Aleksey Gerasimenko
|
|
* gerasimenko.aleksey.n@gmail.com
|
|
*/
|
|
|
|
#include "SYSCTRL/ScaleCompute.h"
|
|
|
|
namespace SYSCTRL
|
|
{
|
|
|
|
//CONSTRUCTOR
|
|
ScaleCompute::ScaleCompute(float& phase_a, float& phase_b, float& phase_c, float& scale_a, float& scale_b, float& scale_c):
|
|
m_command(),
|
|
m_enable(),
|
|
//
|
|
m_reference_value(FP_ZERO),
|
|
//
|
|
m_p_phase_a(phase_a),
|
|
m_p_phase_b(phase_b),
|
|
m_p_phase_c(phase_c),
|
|
//
|
|
m_p_scale_a(scale_a),
|
|
m_p_scale_b(scale_b),
|
|
m_p_scale_c(scale_c),
|
|
//
|
|
m_value_phase_a(FP_ZERO),
|
|
m_value_phase_b(FP_ZERO),
|
|
m_value_phase_c(FP_ZERO),
|
|
//
|
|
m_scale_phase_a(FP_ZERO),
|
|
m_scale_phase_b(FP_ZERO),
|
|
m_scale_phase_c(FP_ZERO)
|
|
{}//CONSTRUCTOR
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void ScaleCompute::set_reference(float reference)
|
|
{
|
|
m_reference_value = reference;
|
|
//
|
|
}//
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void ScaleCompute::set_enable()
|
|
{
|
|
m_enable.bit.enable = 1;
|
|
//
|
|
}//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void ScaleCompute::clear_enable()
|
|
{
|
|
m_enable.bit.enable = 0;
|
|
//
|
|
}//
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void ScaleCompute::fix()
|
|
{
|
|
if(m_enable.bit.enable == 1)
|
|
{
|
|
m_value_phase_a = m_p_phase_a;
|
|
m_value_phase_b = m_p_phase_b;
|
|
m_value_phase_c = m_p_phase_c;
|
|
//
|
|
m_scale_phase_a = new_scale_compute(m_reference_value, m_value_phase_a, m_p_scale_a);
|
|
m_scale_phase_b = new_scale_compute(m_reference_value, m_value_phase_b, m_p_scale_b);
|
|
m_scale_phase_c = new_scale_compute(m_reference_value, m_value_phase_c, m_p_scale_c);
|
|
//
|
|
m_p_scale_a = m_scale_phase_a;
|
|
m_p_scale_b = m_scale_phase_b;
|
|
m_p_scale_c = m_scale_phase_c;
|
|
//
|
|
}//if
|
|
}//
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
inline float ScaleCompute::new_scale_compute(float ref, float value, float scale)
|
|
{
|
|
//
|
|
if((value != FP_ZERO) && (ref != FP_ZERO))
|
|
{
|
|
return ref * scale / value;
|
|
//
|
|
}
|
|
else
|
|
{
|
|
return scale;
|
|
//
|
|
}//if else
|
|
//
|
|
}//
|
|
|
|
} /* namespace SYSCTRL */
|