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.
244 lines
5.8 KiB
C++
244 lines
5.8 KiB
C++
/*
|
|
* CELL.cpp
|
|
*
|
|
* Author: Aleksey Gerasimenko
|
|
* gerasimenko.aleksey.n@gmail.com
|
|
*/
|
|
|
|
#include "SYSCTRL/HVCELL.h"
|
|
|
|
namespace SYSCTRL
|
|
{
|
|
|
|
HVCELL::HVCELL():
|
|
m_mode(SYSCTRL::HVCELL::UNDEFINED),
|
|
m_control_order(ORDER_STOP),
|
|
//m_switching_freq(SWITCHING_FREQ_2500),
|
|
m_cell_level(0),
|
|
m_cell_error(0),
|
|
m_pwm_version(),
|
|
m_cell_state(),
|
|
m_cell_dc_voltage(),
|
|
m_cell_version(),
|
|
m_cpu_cpld_version(0),
|
|
m_data_u(FP_ZERO),
|
|
m_data_v(FP_ZERO),
|
|
m_data_w(FP_ZERO),
|
|
//
|
|
m_dc_voltage_a(FP_ZERO),
|
|
m_dc_voltage_b(FP_ZERO),
|
|
m_dc_voltage_c(FP_ZERO),
|
|
//
|
|
m_fault_cell(false),
|
|
m_cell_error_fault(0),
|
|
m_cell_state_fault(),
|
|
//
|
|
p_send_syn_signal(&SYSCTRL::HVCELL::_empty),
|
|
p_send_control_order(&SYSCTRL::HVCELL::_empty),
|
|
p_set_cell_level(&SYSCTRL::HVCELL::_empty),
|
|
p_get_pwm_version(&SYSCTRL::HVCELL::_empty),
|
|
p_get_cell_state(&SYSCTRL::HVCELL::_empty),
|
|
p_get_cell_dc_voltage(&SYSCTRL::HVCELL::_empty),
|
|
p_get_cell_version(&SYSCTRL::HVCELL::_empty),
|
|
p_send_modulate_data(&SYSCTRL::HVCELL::_empty),
|
|
p_get_cpu_cpld_version(&SYSCTRL::HVCELL::_empty)
|
|
{}
|
|
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::configure(HVCELLConfiguration& config)
|
|
{
|
|
static bool status = true;
|
|
if(m_mode == SYSCTRL::HVCELL::UNDEFINED)
|
|
{
|
|
|
|
m_cell_level = config.cell_level;
|
|
//m_switching_freq = config.switching_freq;
|
|
|
|
status &= (m_cell_level >= 1)&&(m_cell_level <= 8) ? true : false;
|
|
|
|
if(status)
|
|
{
|
|
m_mode = SYSCTRL::HVCELL::OPERATIONAL;
|
|
//
|
|
p_send_syn_signal = &SYSCTRL::HVCELL::_send_syn_signal;
|
|
p_send_control_order = &SYSCTRL::HVCELL::_send_control_order;
|
|
p_set_cell_level = &SYSCTRL::HVCELL::_set_cell_level;
|
|
p_get_pwm_version = &SYSCTRL::HVCELL::_get_pwm_version;
|
|
p_get_cell_state = &SYSCTRL::HVCELL::_get_cell_state;
|
|
p_get_cell_dc_voltage = &SYSCTRL::HVCELL::_get_cell_dc_voltage;
|
|
p_get_cell_version = &SYSCTRL::HVCELL::_get_cell_version;
|
|
p_send_modulate_data = &SYSCTRL::HVCELL::_send_modulate_data;
|
|
p_get_cpu_cpld_version = &SYSCTRL::HVCELL::_get_cpu_cpld_version;
|
|
//
|
|
}//if
|
|
//
|
|
}//if
|
|
//
|
|
}//configure()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
SYSCTRL::HVCELL::mode_t HVCELL::get_mode()
|
|
{
|
|
return m_mode;
|
|
//
|
|
}//get_mode()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
bool HVCELL::compare(SYSCTRL::HVCELL::mode_t mode)
|
|
{
|
|
return m_mode == mode;
|
|
//
|
|
}//compare()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::send_syn_signal()
|
|
{
|
|
(this->*p_send_syn_signal)();
|
|
//
|
|
}//send_syn_signal()
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_send_syn_signal()
|
|
{
|
|
sendSynSignal();
|
|
//
|
|
}//_send_syn_signal()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::send_control_order()
|
|
{
|
|
(this->*p_send_control_order)();
|
|
//
|
|
}//send_control_order_start()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_send_control_order()
|
|
{
|
|
sendControlOrder(m_control_order);
|
|
//
|
|
}//_send_control_order()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::set_cell_level()
|
|
{
|
|
(this->*p_set_cell_level)();
|
|
//
|
|
}//set_cell_level()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_set_cell_level()
|
|
{
|
|
//m_cell_error = setCellLevel(m_cell_level, m_switching_freq);
|
|
m_cell_error = setCellLevel(m_cell_level);
|
|
//
|
|
}//_set_cell_level()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::get_pwm_version()
|
|
{
|
|
(this->*p_get_pwm_version)();
|
|
//
|
|
}//get_pwm_version()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_get_pwm_version()
|
|
{
|
|
getPwmVersion(m_pwm_version);
|
|
//
|
|
}//_get_pwm_version()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::get_cell_state()
|
|
{
|
|
(this->*p_get_cell_state)();
|
|
//
|
|
}//get_cell_state()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_get_cell_state()
|
|
{
|
|
getCellState(m_cell_level, m_cell_state);
|
|
//
|
|
}//_get_cell_state()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::get_cell_dc_voltage()
|
|
{
|
|
(this->*p_get_cell_dc_voltage)();
|
|
//
|
|
}//get_cell_dc_voltage()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_get_cell_dc_voltage()
|
|
{
|
|
static float aux_a, aux_b, aux_c;
|
|
|
|
getCellDCVoltage(m_cell_level, m_cell_dc_voltage);
|
|
|
|
aux_a = FP_ZERO;
|
|
aux_b = FP_ZERO;
|
|
aux_c = FP_ZERO;
|
|
//
|
|
for(Uint16 cellnum = 0; cellnum < m_cell_level; cellnum++)
|
|
{
|
|
aux_a += m_cell_dc_voltage[0][cellnum];
|
|
aux_b += m_cell_dc_voltage[1][cellnum];
|
|
aux_c += m_cell_dc_voltage[2][cellnum];
|
|
//
|
|
}//for
|
|
//
|
|
m_dc_voltage_a = aux_a;
|
|
m_dc_voltage_b = aux_b;
|
|
m_dc_voltage_c = aux_c;
|
|
//
|
|
}//_get_cell_dc_voltage()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::get_cell_version()
|
|
{
|
|
(this->*p_get_cell_version)();
|
|
//
|
|
}//get_cell_version()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_get_cell_version()
|
|
{
|
|
getCellVersion(m_cell_level, m_cell_version);
|
|
//
|
|
}//get_cell_version()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::send_modulate_data()
|
|
{
|
|
(this->*p_send_modulate_data)();
|
|
//
|
|
}//send_modulate_data()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_send_modulate_data()
|
|
{
|
|
//sendModulateData(m_data_u, m_data_v, m_data_w, m_switching_freq);
|
|
sendModulateData(m_data_u, m_data_v, m_data_w);
|
|
//
|
|
}//_send_modulate_data()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::get_cpu_cpld_version()
|
|
{
|
|
(this->*p_get_cpu_cpld_version)();
|
|
//
|
|
}//get_cpu_cpld_version()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_get_cpu_cpld_version()
|
|
{
|
|
m_cpu_cpld_version = getCpuCpldVersion();
|
|
//
|
|
}//_get_cpu_cpld_version()
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void HVCELL::_empty()
|
|
{}//_empty()
|
|
//
|
|
} /* namespace SYSCTRL */
|