Browse Source

v1215| 为温度控制模块添加温度偏移参数

master
zhaohe 2 weeks ago
parent
commit
cbb68311e1
  1. 9
      sdk/components/api/zi_module.hpp
  2. 3
      sdk/components/water_cooling_temperature_control_module/pid_module.hpp
  3. 23
      sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp
  4. 7
      sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp
  5. 8
      usrc/a8000_protocol/protocol/reg_index.cpp
  6. 24
      usrc/a8000_protocol/protocol/reg_index.hpp
  7. 2
      usrc/version.c

9
sdk/components/api/zi_module.hpp

@ -4,7 +4,6 @@
#include <functional>
#include "a8000_protocol\protocol.hpp"
#include "version.h"
namespace iflytop {
using namespace std;
@ -44,8 +43,12 @@ using namespace std;
#define MODULE_CFG_CASE__GET_REG_FLOAT(reg, storage, precision) \
case reg: { \
*val = (int32_t)(storage / precision); \
ret = 0; \
if (storage >= 0) { \
*val = (int32_t)(storage / precision + 0.5); \
} else { \
*val = (int32_t)(storage / precision - 0.5); \
} \
ret = 0; \
break; \
}

3
sdk/components/water_cooling_temperature_control_module/pid_module.hpp

@ -45,8 +45,7 @@ class PidModule {
config_t *get_cfg();
void set_integral_err(float v);
void set_integral_err(float v);
private:
float pid_calc_positional(float error);

23
sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp

@ -96,12 +96,19 @@ int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t regindex, i
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_nowoutput);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_feedbackval);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_integral_errorval);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp0);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp1);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp2);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_temp3);
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp0_offset, m_temperature_sensor_offset[0], 0.1);
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp1_offset, m_temperature_sensor_offset[1], 0.1);
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp2_offset, m_temperature_sensor_offset[2], 0.1);
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp3_offset, m_temperature_sensor_offset[3], 0.1);
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_fanlevel_coefficient, m_fanlevel_coefficient, 0.1);
default:
return err::kmodule_not_find_reg;
break;
@ -127,12 +134,19 @@ int32_t WaterCoolingTemperatureControlModule::module_get_reg(int32_t regindex, i
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_nowoutput, m_output);
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_feedbackval, (m_feedbak_temperature * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_integral_errorval, m_pidmodule.get_integral_err(), 1);
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp0, (m_temperature_sensor_cache[0] * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp1, (m_temperature_sensor_cache[1] * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp2, (m_temperature_sensor_cache[2] * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp3, (m_temperature_sensor_cache[3] * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp0_offset, (m_temperature_sensor_offset[0]), 0.1);
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp1_offset, (m_temperature_sensor_offset[1]), 0.1);
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp2_offset, (m_temperature_sensor_offset[2]), 0.1);
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_temp3_offset, (m_temperature_sensor_offset[3]), 0.1);
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_fanlevel_coefficient, m_fanlevel_coefficient, 0.1);
default:
return err::kmodule_not_find_reg;
break;
@ -228,7 +242,7 @@ void WaterCoolingTemperatureControlModule::workloop() {
peltier_set_power_level(out);
i++;
if (i % 10 == 0) {
int32_t fanspeed = prvabs(out) * 0.7;
int32_t fanspeed = prvabs(out) * m_fanlevel_coefficient;
if (fanspeed > 100) fanspeed = 100;
if (fanspeed < m_cfg.min_fanlevel) fanspeed = m_cfg.min_fanlevel;
fan_start(fanspeed);
@ -286,6 +300,7 @@ float WaterCoolingTemperatureControlModule::read_pid_temperature_from_upper() {
float WaterCoolingTemperatureControlModule::read_pid_temperature() {
zlock_guard lock(m_temperature_sensor_mutex);
ZITemperatureSensor* sensor = m_temperature_sensor[m_cfg.temp_fb_index];
float offset = m_temperature_sensor_offset[m_cfg.temp_fb_index];
float val[3] = {0};
for (int32_t i = 0; i < 3; i++) {
val[i] = sensor->getTemperature();
@ -303,7 +318,7 @@ float WaterCoolingTemperatureControlModule::read_pid_temperature() {
}
float retval = val[1];
return retval;
return (retval + offset);
}
void WaterCoolingTemperatureControlModule::pump_start(int32_t pump_speed) {
@ -338,7 +353,9 @@ float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t inde
if (index < 0 || index >= m_n_temperature_sensor) {
return 0;
}
return m_temperature_sensor[index]->getTemperature();
float temp = m_temperature_sensor[index]->getTemperature();
float offset = m_temperature_sensor_offset[index];
return temp + offset;
}
int32_t WaterCoolingTemperatureControlModule::temp_controler_set_peltier_power_level(int32_t level) {
if (level == 0) {

7
sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp

@ -74,8 +74,11 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
float m_target_temperature = 0;
int32_t m_output = 0;
float m_feedbak_temperature = 0;
float m_temperature_sensor_cache[4] = {0};
float m_feedbak_temperature = 0;
float m_temperature_sensor_cache[4] = {0};
float m_temperature_sensor_offset[4] = {0};
float m_fanlevel_coefficient = 0.8f; // 风扇转速系数
zmutex m_temperature_sensor_mutex;

8
usrc/a8000_protocol/protocol/reg_index.cpp

@ -18,6 +18,7 @@ static reginfo_t table[] = {
REG_ITERM(kreg_water_cooling_tmp_controler_pid_target),
REG_ITERM(kreg_water_cooling_tmp_controler_pid_nowoutput),
REG_ITERM(kreg_water_cooling_tmp_controler_pid_feedbackval),
REG_ITERM(kreg_water_cooling_tmp_controler_pid_integral_errorval),
REG_ITERM(kreg_water_cooling_tmp_controler_temp0),
REG_ITERM(kreg_water_cooling_tmp_controler_temp1),
REG_ITERM(kreg_water_cooling_tmp_controler_temp2),
@ -34,6 +35,13 @@ static reginfo_t table[] = {
REG_ITERM(kreg_water_cooling_tmp_controler_pid_compute_interval),
REG_ITERM(kreg_water_cooling_tmp_controler_pid_feedbak_index),
REG_ITERM(kreg_water_cooling_tmp_controler_temp0_offset),
REG_ITERM(kreg_water_cooling_tmp_controler_temp1_offset),
REG_ITERM(kreg_water_cooling_tmp_controler_temp2_offset),
REG_ITERM(kreg_water_cooling_tmp_controler_temp3_offset),
REG_ITERM(kreg_water_cooling_tmp_controler_fanlevel_coefficient),
REG_ITERM(kreg_pipette_pos_nl),
REG_ITERM(kreg_pipette_capactitance_val),
REG_ITERM(kreg_pipette_tip_state),

24
usrc/a8000_protocol/protocol/reg_index.hpp

@ -22,13 +22,14 @@ typedef enum {
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
kreg_water_cooling_tmp_controler_pid_target = 3000, // 目标数值
kreg_water_cooling_tmp_controler_pid_nowoutput = 3001, // 当前输出
kreg_water_cooling_tmp_controler_pid_feedbackval = 3002, // 当前输出
kreg_water_cooling_tmp_controler_temp0 = 3003, // 温度1
kreg_water_cooling_tmp_controler_temp1 = 3004, // 温度2
kreg_water_cooling_tmp_controler_temp2 = 3005, // 温度3
kreg_water_cooling_tmp_controler_temp3 = 3006, // 温度4
kreg_water_cooling_tmp_controler_pid_target = 3000, // 目标数值
kreg_water_cooling_tmp_controler_pid_nowoutput = 3001, // 当前输出
kreg_water_cooling_tmp_controler_pid_feedbackval = 3002, // 当前输出
kreg_water_cooling_tmp_controler_pid_integral_errorval = 3003,
kreg_water_cooling_tmp_controler_temp0 = 3010, // 温度0
kreg_water_cooling_tmp_controler_temp1 = 3011, // 温度1
kreg_water_cooling_tmp_controler_temp2 = 3012, // 温度2
kreg_water_cooling_tmp_controler_temp3 = 3013, // 温度3
kreg_water_cooling_tmp_controler_pid_kp = 3050, // kp
kreg_water_cooling_tmp_controler_pid_ki = 3051, // ki
@ -39,7 +40,14 @@ typedef enum {
kreg_water_cooling_tmp_controler_pid_min_integral = 3056, // 最小积分
kreg_water_cooling_tmp_controler_pid_error_limit = 3057, // 误差限制
kreg_water_cooling_tmp_controler_pid_compute_interval = 3058, // 计算间隔
kreg_water_cooling_tmp_controler_pid_feedbak_index = 3059, // 返回index
kreg_water_cooling_tmp_controler_pid_feedbak_index = 3059, // 当前使用哪个温度
kreg_water_cooling_tmp_controler_temp0_offset = 3060, // 温度0 偏移
kreg_water_cooling_tmp_controler_temp1_offset = 3061, // 温度1 偏移
kreg_water_cooling_tmp_controler_temp2_offset = 3062, // 温度2 偏移
kreg_water_cooling_tmp_controler_temp3_offset = 3063, // 温度3 偏移
kreg_water_cooling_tmp_controler_fanlevel_coefficient = 3070, // 风扇转速系数0.1
/*******************************************************************************
* *

2
usrc/version.c

@ -1,5 +1,5 @@
#include "version.h"
int32_t APP_VERSION = 1214;
int32_t APP_VERSION = 1215;
int32_t get_app_version() { return APP_VERSION; }
Loading…
Cancel
Save