Browse Source

v1200 | 更新 基础协议

master
zhaohe 3 months ago
parent
commit
add23c02a7
  1. 2
      a8000_protocol
  2. 5
      sdk/components/sensors/tmp117/tmp117.cpp
  3. 45
      sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp
  4. 13
      sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp
  5. 2
      sdk/components/zcancmder/zcanreceiver.hpp
  6. 1
      usrc/subboards/subboard40_and_50_temperature_ctrl/subboard40_and_50_temperature_ctrl.cpp
  7. 2
      usrc/version.h

2
a8000_protocol

@ -1 +1 @@
Subproject commit 7bd8886d760c19b67dd64510c6bd9b72014b0df9
Subproject commit 59632e0e01796d9328625c95a1800158861a5ce6

5
sdk/components/sensors/tmp117/tmp117.cpp

@ -86,8 +86,8 @@ bool TMP117::writereg(uint8_t regoff, uint16_t data) {
* 305s左右I2C之后可以恢复正常
* I2C来解决这个问题
*/
// ZLOGW(TAG, "writereg fail, reset i2c");
if (m_i2cResetCb) m_i2cResetCb();
ZLOGI(TAG, "TMP117 %d WRITE REG FAIL", m_id);
osDelay(100);
}
osDelay(1);
@ -104,6 +104,7 @@ bool TMP117::readreg(uint8_t regoff, uint16_t* data) {
* I2C来解决这个问题
*/
if (m_i2cResetCb) m_i2cResetCb();
ZLOGI(TAG, "TMP117 %d WRITE REG FAIL", m_id);
osDelay(100);
}
osDelay(1);
@ -135,7 +136,7 @@ bool TMP117::_readreg(uint8_t regoff, uint16_t* data) {
}
// return ((buf[1] << 8) | buf[2]);
*data = ((buf[1] << 8) | buf[2]);
// vPortExitCritical();
// vPortExitCritical();
return true;
}

45
sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp

@ -22,7 +22,7 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg,
m_temperature_sensor[i] = hardwaredconfig->temperature_sensor[i];
m_n_temperature_sensor++;
}
ZASSERT(m_temperature_sensor[m_hardwared_config.temp_fb_index] != nullptr);
ZASSERT(m_temperature_sensor[m_cfg.temp_fb_index] != nullptr);
m_fan_ctrl = hardwaredconfig->fan_ctrl;
m_pelter_ctrl = hardwaredconfig->pelter_ctrl;
@ -30,6 +30,7 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg,
m_pidmodule.initialize(&cfg->pid_cfg);
m_thread.init("WaterCoolingTemperatureControlModule");
m_sensor_update_thread.init("WCTC-SensorUpdateThr");
m_cfg = *cfg;
m_default_cfg = *cfg;
m_target_temperature = 25;
@ -39,6 +40,22 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg,
m_pelter_ctrl->stop();
m_pump_ctrl->stop();
module_clear_error();
m_sensor_update_thread.start([this]() {
while (true) {
m_sensor_update_thread.sleep(1000);
if (module_status != 1) m_feedbak_temperature = read_pid_temperature_from_upper();
if (m_temperature_sensor[0]->isError()) m_temperature_sensor_cache[0] = getTemperatureSensorVal(0);
if (m_temperature_sensor[1]->isError()) m_temperature_sensor_cache[1] = getTemperatureSensorVal(1);
if (m_temperature_sensor[2]->isError()) m_temperature_sensor_cache[2] = getTemperatureSensorVal(2);
if (m_temperature_sensor[3]->isError()) m_temperature_sensor_cache[3] = getTemperatureSensorVal(3);
if (module_status != 1) {
ZLOGI(TAG, "T0:%0.2f T1:%0.2f T2:%0.2f T3:%0.2f", m_temperature_sensor_cache[0], m_temperature_sensor_cache[1], m_temperature_sensor_cache[2], m_temperature_sensor_cache[3]);
}
}
});
ZLOGI(TAG, "WaterCoolingTemperatureControlModule initialized...");
}
@ -54,6 +71,7 @@ void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) {
cfg->pid_cfg.max_integral = 150;
cfg->pid_cfg.min_integral = -150;
cfg->pidcompute_periodms = 1000;
cfg->temp_fb_index = 0;
}
int32_t WaterCoolingTemperatureControlModule::module_reset_reg() {
@ -74,6 +92,7 @@ int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t regindex, i
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_min_integral, m_cfg.pid_cfg.min_integral, 1);
MODULE_REG_CASE__SET_REG_TO(kreg_water_cooling_tmp_controler_pid_compute_interval, m_cfg.pidcompute_periodms);
MODULE_REG_CASE__SET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_target, m_target_temperature, 0.1);
MODULE_REG_CASE__SET_REG_TO(kreg_water_cooling_tmp_controler_pid_feedbak_index, m_cfg.temp_fb_index);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_nowoutput);
MODULE_REG_CASE__NOT_SUPPORT(kreg_water_cooling_tmp_controler_pid_feedbackval);
@ -104,14 +123,16 @@ int32_t WaterCoolingTemperatureControlModule::module_get_reg(int32_t regindex, i
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_min_integral, m_cfg.pid_cfg.min_integral, 1);
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_compute_interval, m_cfg.pidcompute_periodms);
MODULE_CFG_CASE__GET_REG_FLOAT(kreg_water_cooling_tmp_controler_pid_target, m_target_temperature, 0.1);
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_feedbak_index, m_cfg.temp_fb_index);
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, (read_pid_temperature_from_upper() * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_pid_feedbackval, (m_feedbak_temperature * 10 + 0.5));
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_FROM(kreg_water_cooling_tmp_controler_temp0, (getTemperatureSensorVal(0) * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp1, (getTemperatureSensorVal(1) * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp2, (getTemperatureSensorVal(2) * 10 + 0.5));
MODULE_CFG_CASE__GET_REG_FROM(kreg_water_cooling_tmp_controler_temp3, (getTemperatureSensorVal(3) * 10 + 0.5));
default:
return err::kmodule_not_find_reg;
break;
@ -232,7 +253,7 @@ void WaterCoolingTemperatureControlModule::workloop() {
#define BIT(x, n) ((x >> n) & 0x01)
int32_t WaterCoolingTemperatureControlModule::checkdevice() {
ZITemperatureSensor* sensor = m_temperature_sensor[m_hardwared_config.temp_fb_index];
ZITemperatureSensor* sensor = m_temperature_sensor[m_cfg.temp_fb_index];
if (m_fan_ctrl->isError()) {
ZLOGE(TAG, "fan_ctrl is error");
module_errorcode = err::kwater_cooling_fan_error;
@ -260,17 +281,11 @@ int32_t WaterCoolingTemperatureControlModule::checkdevice() {
/*******************************************************************************
* BASIC *
*******************************************************************************/
float WaterCoolingTemperatureControlModule::read_pid_temperature_from_upper() {
if (module_status == 1) {
return m_feedbak_temperature;
} else {
return read_pid_temperature();
}
}
float WaterCoolingTemperatureControlModule::read_pid_temperature_from_upper() { return read_pid_temperature(); }
float WaterCoolingTemperatureControlModule::read_pid_temperature() {
zlock_guard lock(m_temperature_sensor_mutex);
ZITemperatureSensor* sensor = m_temperature_sensor[m_hardwared_config.temp_fb_index];
ZITemperatureSensor* sensor = m_temperature_sensor[m_cfg.temp_fb_index];
float val[3] = {0};
for (int32_t i = 0; i < 3; i++) {
val[i] = sensor->getTemperature();

13
sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp

@ -44,11 +44,11 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
int32_t min_fanlevel;
int32_t pumplevel;
int32_t pidcompute_periodms;
int32_t temp_fb_index;
} config_t;
typedef struct {
ZITemperatureSensor* temperature_sensor[4];
int32_t temp_fb_index = 0;
ZIPWMFanCtrlModule* fan_ctrl;
ZIDcMotorCtrlModule* pelter_ctrl;
ZIPWMPumpCtrlModule* pump_ctrl;
@ -68,11 +68,14 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
PidModule m_pidmodule;
ZThread m_thread;
ZThread m_sensor_update_thread;
int32_t m_enable_log = 0;
float m_target_temperature = 0;
float m_feedbak_temperature = 0;
int32_t m_output = 0;
int32_t m_enable_log = 0;
float m_target_temperature = 0;
int32_t m_output = 0;
float m_feedbak_temperature = 0;
float m_temperature_sensor_cache[4] = {0};
zmutex m_temperature_sensor_mutex;

2
sdk/components/zcancmder/zcanreceiver.hpp

@ -58,7 +58,7 @@ class ZCanReceiver : public ZCanIRQListener {
int txPacketInterval_ms = 0;
zmutex m_lock;
int8_t m_reportIndex = 0;
int16_t m_reportIndex = 0;
public:
ZCanReceiver() {}

1
usrc/subboards/subboard40_and_50_temperature_ctrl/subboard40_and_50_temperature_ctrl.cpp

@ -80,7 +80,6 @@ void Subboard40And50TemperatureCtrl::initialize() {
WaterCoolingTemperatureControlModule::hardwared_config_t hardwared_config = //
{
.temperature_sensor = {&temp[0], &temp[1], &temp[2], &temp[3]},
.temp_fb_index = 0,
.fan_ctrl = &fan,
.pelter_ctrl = &peltier,
.pump_ctrl = &pump,

2
usrc/version.h

@ -1,2 +1,2 @@
#pragma once
#define APP_VERSION 1104
#define APP_VERSION 1200
Loading…
Cancel
Save