diff --git a/components/sensors/tmp117/tmp117.cpp b/components/sensors/tmp117/tmp117.cpp index 34fa6b7..732662d 100644 --- a/components/sensors/tmp117/tmp117.cpp +++ b/components/sensors/tmp117/tmp117.cpp @@ -30,9 +30,9 @@ void TMP117::initializate(I2C_HandleTypeDef* i2c, i2c_reset_cb_t i2cResetCb, ID_ } bool TMP117::isOnline() { getTemperature(); - return m_lastCallStatus == HAL_OK; + return m_isError; } -bool TMP117::isError() { return m_lastCallStatus != HAL_OK; } +bool TMP117::isError() { return m_isError; } const char* TMP117::getLastCallStatusString() { switch (m_lastCallStatus) { @@ -50,12 +50,19 @@ const char* TMP117::getLastCallStatusString() { } float TMP117::getTemperature() { uint16_t ret = 0; - readreg(TemperatureRegister, (uint16_t*)&ret); + bool suc = readreg(TemperatureRegister, (uint16_t*)&ret); + if (!suc) { + m_isError = true; + } else { + m_isError = false; + } + return ret * 0.0078125; } uint16_t TMP117::getConfiguration() { uint16_t ret = 0; readreg(ConfigurationRegister, (uint16_t*)&ret); + return ret; } void TMP117::setConfiguration(uint16_t value) { writereg(ConfigurationRegister, value); } @@ -71,7 +78,7 @@ uint16_t TMP117::getTemperatureOffset() { } bool TMP117::writereg(uint8_t regoff, uint16_t data) { bool suc = false; - for (int32_t i = 0; i < 3; i++) { + for (int32_t i = 0; i < 5; i++) { suc = _writereg(regoff, data); if (suc) break; /** @@ -81,13 +88,14 @@ bool TMP117::writereg(uint8_t regoff, uint16_t data) { */ // ZLOGW(TAG, "writereg fail, reset i2c"); if (m_i2cResetCb) m_i2cResetCb(); + osDelay(100); } - HAL_Delay(1); + osDelay(1); return suc; } bool TMP117::readreg(uint8_t regoff, uint16_t* data) { bool suc = false; - for (int32_t i = 0; i < 3; i++) { + for (int32_t i = 0; i < 10; i++) { suc = _readreg(regoff, data); if (suc) break; /** @@ -96,8 +104,9 @@ bool TMP117::readreg(uint8_t regoff, uint16_t* data) { * 目前还没有找到原因,暂时在代码中通过重置I2C来解决这个问题。 */ if (m_i2cResetCb) m_i2cResetCb(); + osDelay(100); } - HAL_Delay(1); + osDelay(1); return suc; } @@ -111,14 +120,22 @@ bool TMP117::_writereg(uint8_t regoff, uint16_t data) { return true; } bool TMP117::_readreg(uint8_t regoff, uint16_t* data) { + // vPortEnterCritical(); uint8_t buf[3] = {0}; buf[0] = regoff; m_lastCallStatus = HAL_I2C_Master_Transmit(m_i2c, (uint16_t)m_id, buf, 1, 10); - if (m_lastCallStatus != HAL_OK) return false; + if (m_lastCallStatus != HAL_OK) { + // vPortExitCritical(); + return false; + } m_lastCallStatus = HAL_I2C_Master_Receive(m_i2c, (uint16_t)m_id, &buf[1], 2, 10); - if (m_lastCallStatus != HAL_OK) return false; + if (m_lastCallStatus != HAL_OK) { + // vPortExitCritical(); + return false; + } // return ((buf[1] << 8) | buf[2]); *data = ((buf[1] << 8) | buf[2]); + // vPortExitCritical(); return true; } diff --git a/components/sensors/tmp117/tmp117.hpp b/components/sensors/tmp117/tmp117.hpp index 12bdc99..13f6acb 100644 --- a/components/sensors/tmp117/tmp117.hpp +++ b/components/sensors/tmp117/tmp117.hpp @@ -55,6 +55,8 @@ class TMP117 : public ZITemperatureSensor { i2c_reset_cb_t m_i2cResetCb; bool m_isOnlineWhenPowerOn = false; + bool m_isError = false; + public: TMP117(/* args */); ~TMP117(); diff --git a/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp b/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp index c4b501c..2998651 100644 --- a/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp +++ b/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp @@ -47,7 +47,7 @@ int32_t WaterCoolingTemperatureControlModule::getid(int32_t* id) { void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { cfg->fanlevel = 90; - cfg->min_fanlevel = 30; + cfg->min_fanlevel = 10; cfg->pumplevel = 100; cfg->pid_cfg.kp = 10; cfg->pid_cfg.ki = 0.5; @@ -112,8 +112,8 @@ int32_t WaterCoolingTemperatureControlModule::temp_controler_start_hearting(int3 } ZLOGI(TAG, "temp_controler_start_hearting %d", targetTemperature); - m_target_temperature = targetTemperature * 10; - creg.module_status = 1; + m_target_temperature = targetTemperature / 10.0; + creg.module_status = 1; m_fan_ctrl->clearError(); m_pelter_ctrl->clearError(); @@ -149,6 +149,7 @@ void WaterCoolingTemperatureControlModule::workloop() { fan_start(m_cfg.fanlevel); int32_t i = 0; uint32_t startticket = zos_get_tick(); +#if 0 while (!m_thread.getExitFlag()) { if (zos_haspassedms(startticket) > 1000) { if (checkdevice() != 0) { @@ -165,19 +166,29 @@ void WaterCoolingTemperatureControlModule::workloop() { float out = 0; m_pidmodule.compute(error, &out); - if (m_enable_log) { - ZLOGI(TAG, "temperature: %.2f %.2f integral_err:%.2f out:%d", m_target_temperature, val, m_pidmodule.get_integral_err(), (int32_t)out); - } + // if (m_enable_log) { + ZLOGI(TAG, "temperature: %.2f %.2f integral_err:%.2f out:%d", m_target_temperature, val, m_pidmodule.get_integral_err(), (int32_t)out); + // } peltier_set_power_level(out); i++; if (i % 10 == 0) { - int32_t fanspeed = prvabs(out) * 2; + int32_t fanspeed = prvabs(out) * 1; if (fanspeed > 100) fanspeed = 100; if (fanspeed < m_cfg.min_fanlevel) fanspeed = m_cfg.min_fanlevel; fan_start(fanspeed); } } +#endif + while (!m_thread.getExitFlag()) { + m_thread.sleep(10); + + float val = read_pid_temperature(); + + ZLOGI(TAG, "temperature %f", val); + // } + + } pump_stop(); fan_stop(); @@ -186,27 +197,26 @@ 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]; if (m_fan_ctrl->isError()) { ZLOGE(TAG, "fan_ctrl is error"); creg.module_errorcode = err::kwater_cooling_fan_error; - creg.module_status = 2; + creg.module_status = 2; return 1; } else if (m_pump_ctrl->isError()) { ZLOGE(TAG, "pump_ctrl is error"); creg.module_errorcode = err::kwater_cooling_pump_is_error; - creg.module_status = 2; + creg.module_status = 2; return 1; } else if (m_pelter_ctrl->isError()) { ZLOGE(TAG, "pelter_ctrl is error"); creg.module_errorcode = err::kwater_cooling_temperature_sensor_error; - creg.module_status = 2; + creg.module_status = 2; return 1; } else if (sensor->isError()) { creg.module_errorcode = err::kwater_cooling_temperature_sensor_error; - creg.module_status = 2; + creg.module_status = 2; ZLOGE(TAG, "sensor is error"); return 1; }