Browse Source

update

master
zhaohe 1 year ago
parent
commit
d5d5ce658e
  1. 35
      components/sensors/tmp117/tmp117.cpp
  2. 2
      components/sensors/tmp117/tmp117.hpp
  3. 34
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp

35
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;
}

2
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();

34
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;
}

Loading…
Cancel
Save