|
|
@ -7,34 +7,60 @@ using namespace iflytop; |
|
|
|
|
|
|
|
#define TAG "WaterCoolingTemperatureControlModule"
|
|
|
|
|
|
|
|
void WaterCoolingTemperatureControlModule::initialize(config_t* cfg, //
|
|
|
|
ZITemperatureSensor** temperature_sensor, int32_t ntemperature, //
|
|
|
|
DRV8710** m_peltier_ctrl, int32_t m_peltier_ctrl_num, //
|
|
|
|
PWMSpeedCtrlModule** fan, int32_t nfan, //
|
|
|
|
PWMSpeedCtrlModule* pump //
|
|
|
|
) { |
|
|
|
ZASSERT(ntemperature < 4); |
|
|
|
|
|
|
|
m_n_temperature_sensor = ntemperature; |
|
|
|
m_fanNum = nfan; |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ntemperature; i++) { |
|
|
|
m_temperature_sensor[i] = temperature_sensor[i]; |
|
|
|
ZASSERT(m_temperature_sensor[i]); |
|
|
|
void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, hardwared_config_t* hardwaredconfig) { |
|
|
|
#if 0
|
|
|
|
ZITemperatureSensor* temperature_sensor[4]; |
|
|
|
PWMSpeedCtrlModule* fanTable[4]; |
|
|
|
PWMSpeedCtrlModule* pump; |
|
|
|
DRV8710* peltier_ctrl[2]; |
|
|
|
|
|
|
|
ZGPIO::OutputGpioCfg_t ext_input[10]; |
|
|
|
ZGPIO::InputGpioCfg_t ext_output[10]; |
|
|
|
#endif
|
|
|
|
|
|
|
|
for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->temperature_sensor); i++) { |
|
|
|
if (!hardwaredconfig->temperature_sensor[i]) break; |
|
|
|
m_temperature_sensor[i] = hardwaredconfig->temperature_sensor[i]; |
|
|
|
m_n_temperature_sensor++; |
|
|
|
} |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->fanTable); i++) { |
|
|
|
if (!hardwaredconfig->fanTable[i]) break; |
|
|
|
m_fanTable[i] = hardwaredconfig->fanTable[i]; |
|
|
|
m_fanNum++; |
|
|
|
} |
|
|
|
|
|
|
|
for (int32_t i = 0; i < nfan; i++) { |
|
|
|
m_fanTable[i] = fan[i]; |
|
|
|
ZASSERT(m_fanTable[i]); |
|
|
|
m_pump = hardwaredconfig->pump; |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->peltier_ctrl); i++) { |
|
|
|
if (!hardwaredconfig->peltier_ctrl[i]) break; |
|
|
|
m_peltier_ctrl[i] = hardwaredconfig->peltier_ctrl[i]; |
|
|
|
m_peltier_ctrl_num++; |
|
|
|
} |
|
|
|
|
|
|
|
for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->ext_input); i++) { |
|
|
|
if (hardwaredconfig->ext_input[i].pin == PinNull) break; |
|
|
|
ZGPIO::InputGpioCfg_t* incfg = &hardwaredconfig->ext_input[i]; |
|
|
|
m_ext_input[i].initAsInput(incfg->pin, incfg->mode, incfg->irqtype, incfg->mirror); |
|
|
|
m_n_ext_input++; |
|
|
|
} |
|
|
|
|
|
|
|
m_pump = pump; |
|
|
|
for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->ext_output); i++) { |
|
|
|
if (hardwaredconfig->ext_output[i].pin == PinNull) break; |
|
|
|
ZGPIO::OutputGpioCfg_t* outcfg = &hardwaredconfig->ext_output[i]; |
|
|
|
m_ext_output[i].initAsOutput(outcfg->pin, outcfg->mode, outcfg->mirror, outcfg->initLevel); |
|
|
|
m_n_ext_output++; |
|
|
|
} |
|
|
|
|
|
|
|
m_pidmodule.initialize(&cfg->pid_cfg); |
|
|
|
m_thread.init("WaterCoolingTemperatureControlModule"); |
|
|
|
|
|
|
|
ZLOGI(TAG, "WaterCoolingTemperatureControlModule initialized..."); |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::getid(int32_t* id) { |
|
|
|
*id = m_id; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { |
|
|
|
cfg->fanlevel = 90; |
|
|
@ -58,23 +84,6 @@ void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { |
|
|
|
*param_value = modulereg / precision; \ |
|
|
|
break; |
|
|
|
|
|
|
|
#if 0
|
|
|
|
kreg_pid_kp = REG_INDEX(3000, 0), // kp
|
|
|
|
kreg_pid_ki = REG_INDEX(3000, 1), // ki
|
|
|
|
kreg_pid_kd = REG_INDEX(3000, 2), // kd
|
|
|
|
kreg_pid_max_output = REG_INDEX(3000, 3), // 最大输出
|
|
|
|
kreg_pid_min_output = REG_INDEX(3000, 4), // 最小输出
|
|
|
|
kreg_pid_max_integral = REG_INDEX(3000, 5), // 最大积分
|
|
|
|
kreg_pid_min_integral = REG_INDEX(3000, 6), // 最小积分
|
|
|
|
kreg_error_limit = REG_INDEX(3000, 7), // 误差限制
|
|
|
|
kreg_compute_interval = REG_INDEX(3000, 8), // 计算间隔
|
|
|
|
|
|
|
|
kreg_pid_target = REG_INDEX(3050, 0), // 目标数值
|
|
|
|
kreg_pid_nowoutput = REG_INDEX(3050, 1), // 当前输出
|
|
|
|
kreg_pid_feedbackval = REG_INDEX(3050, 2), // 当前输出
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t param_id, int32_t param_value) { |
|
|
|
switch (param_id) { |
|
|
|
SET_REG(kreg_pid_kp, m_cfg.pid_cfg.kp, 0.01); |
|
|
@ -271,3 +280,20 @@ float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t inde |
|
|
|
} |
|
|
|
return m_temperature_sensor[index]->getTemperature(); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_readio(int32_t* io) { |
|
|
|
uint32_t iostate = 0; |
|
|
|
|
|
|
|
for (int32_t i = 0; i < m_n_ext_input; i++) { |
|
|
|
iostate |= m_ext_input[i].getStateUint32() << i; |
|
|
|
} |
|
|
|
*io = (int32_t)iostate; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_writeio(int32_t idindex, int32_t io) { |
|
|
|
if (idindex < 0 || idindex >= m_n_ext_output) { |
|
|
|
return err::kparam_out_of_range; |
|
|
|
} |
|
|
|
m_ext_output[idindex].setState(io); |
|
|
|
return 0; |
|
|
|
} |