From add23c02a7a149c4bad7a7596a6949409a8f16e5 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 21 Apr 2025 19:33:15 +0800 Subject: [PATCH] =?UTF-8?q?v1200=20|=20=E6=9B=B4=E6=96=B0=20=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a8000_protocol | 2 +- sdk/components/sensors/tmp117/tmp117.cpp | 5 ++- .../water_cooling_temperature_control_module.cpp | 45 ++++++++++++++-------- .../water_cooling_temperature_control_module.hpp | 13 ++++--- sdk/components/zcancmder/zcanreceiver.hpp | 2 +- .../subboard40_and_50_temperature_ctrl.cpp | 1 - usrc/version.h | 2 +- 7 files changed, 44 insertions(+), 26 deletions(-) diff --git a/a8000_protocol b/a8000_protocol index 7bd8886..59632e0 160000 --- a/a8000_protocol +++ b/a8000_protocol @@ -1 +1 @@ -Subproject commit 7bd8886d760c19b67dd64510c6bd9b72014b0df9 +Subproject commit 59632e0e01796d9328625c95a1800158861a5ce6 diff --git a/sdk/components/sensors/tmp117/tmp117.cpp b/sdk/components/sensors/tmp117/tmp117.cpp index 732662d..0f89680 100644 --- a/sdk/components/sensors/tmp117/tmp117.cpp +++ b/sdk/components/sensors/tmp117/tmp117.cpp @@ -86,8 +86,8 @@ bool TMP117::writereg(uint8_t regoff, uint16_t data) { * 代码测试发现,当读取温度多次之后,会出现通信一直失败的现象(每30毫秒读一次,读5s左右),重启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; } diff --git a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp b/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp index cc9568a..8f78abc 100644 --- a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp +++ b/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(); diff --git a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp b/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp index e730b09..9f6224b 100644 --- a/sdk/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp +++ b/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; diff --git a/sdk/components/zcancmder/zcanreceiver.hpp b/sdk/components/zcancmder/zcanreceiver.hpp index 068921b..dd05632 100644 --- a/sdk/components/zcancmder/zcanreceiver.hpp +++ b/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() {} diff --git a/usrc/subboards/subboard40_and_50_temperature_ctrl/subboard40_and_50_temperature_ctrl.cpp b/usrc/subboards/subboard40_and_50_temperature_ctrl/subboard40_and_50_temperature_ctrl.cpp index eee2b2d..d277dc3 100644 --- a/usrc/subboards/subboard40_and_50_temperature_ctrl/subboard40_and_50_temperature_ctrl.cpp +++ b/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, diff --git a/usrc/version.h b/usrc/version.h index a3cc52b..d05e14b 100644 --- a/usrc/version.h +++ b/usrc/version.h @@ -1,2 +1,2 @@ #pragma once -#define APP_VERSION 1104 +#define APP_VERSION 1200