Browse Source

update

master
zhaohe 2 years ago
parent
commit
95bf1917c6
  1. 92
      chip/basic/chip_helper.cpp
  2. 2
      chip/basic/chip_helper.hpp
  3. 2
      chip/zgpio.hpp
  4. 16
      chip/zpwm_generator_muti_channel.cpp
  5. 13
      chip/zpwm_generator_muti_channel.hpp
  6. 4
      components/api/zi_temperature_sensor.hpp
  7. 8
      components/sensors/tmp117/tmp117.cpp
  8. 7
      components/sensors/tmp117/tmp117.hpp
  9. 7
      components/ti/drv8710.cpp
  10. 6
      components/ti/drv8710.hpp
  11. 6
      components/water_cooling_temperature_control_module/pwm_ctrl_module.cpp
  12. 5
      components/water_cooling_temperature_control_module/pwm_ctrl_module.hpp
  13. 15
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp
  14. 2
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp

92
chip/basic/chip_helper.cpp

@ -103,6 +103,97 @@ uint16_t chip_get_pinoff(Pin_t pin) {
return 0;
}
// TIM2
// TIM3
// TIM4
// TIM5
// TIM6
// TIM7
// TIM12
// TIM13
// TIM14
// TIM1
// TIM8
// TIM9
// TIM10
// TIM11
// TIM_CR1_CEN_Pos
const char* chip_tim_get_name(TIM_TypeDef* tim) {
#ifdef TIM1
if (tim == TIM1) {
return "TIM1";
}
#endif
#ifdef TIM2
if (tim == TIM2) {
return "TIM2";
}
#endif
#ifdef TIM3
if (tim == TIM3) {
return "TIM3";
}
#endif
#ifdef TIM4
if (tim == TIM4) {
return "TIM4";
}
#endif
#ifdef TIM5
if (tim == TIM5) {
return "TIM5";
}
#endif
#ifdef TIM6
if (tim == TIM6) {
return "TIM6";
}
#endif
#ifdef TIM7
if (tim == TIM7) {
return "TIM7";
}
#endif
#ifdef TIM8
if (tim == TIM8) {
return "TIM8";
}
#endif
#ifdef TIM9
if (tim == TIM9) {
return "TIM9";
}
#endif
#ifdef TIM10
if (tim == TIM10) {
return "TIM10";
}
#endif
#ifdef TIM11
if (tim == TIM11) {
return "TIM11";
}
#endif
#ifdef TIM12
if (tim == TIM12) {
return "TIM12";
}
#endif
#ifdef TIM13
if (tim == TIM13) {
return "TIM13";
}
#endif
#ifdef TIM14
if (tim == TIM14) {
return "TIM14";
}
#endif
return "unknowntim";
}
const char* chip_gpio_group_get_name(GPIO_TypeDef* gpio_group) {
if (gpio_group == GPIOA) {
return "GPIOA";
@ -290,6 +381,7 @@ static float zfeq(float val0, float val1, float eps = 0.0001) {
float dv = val0 - val1;
if (dv < 0) dv = -dv;
if (dv < eps) return true;
return false;
}
bool chip_calculate_prescaler_and_autoreload_by_expect_freq(uint32_t timerInClk, float infreqhz, uint32_t* prescaler, uint32_t* autoreload) {

2
chip/basic/chip_helper.hpp

@ -11,6 +11,8 @@ const char* chip_gpio_group_get_name(GPIO_TypeDef* gpio_group);
uint16_t chip_get_pinoff(Pin_t pin);
const char* chip_pinoff_get_name(uint16_t pinoff);
const char* chip_tim_get_name(TIM_TypeDef* tim);
void chip_critical_enter(void);
void chip_critical_exit(void);

2
chip/zgpio.hpp

@ -72,7 +72,7 @@ class ZGPIO {
initAsOutput(outputcfg->pin, outputcfg->mode, outputcfg->mirror, outputcfg->initLevel);
}
void initAsInput(InputGpioCfg_t *inputcfg) { initAsInput(inputcfg->pin, inputcfg->mode, inputcfg->irqtype, inputcfg->mirror); }
void enableTrace(bool enable) { m_log_when_setstate = enable; }
void regListener(onirq_t listener);
bool isMirror();

16
chip/zpwm_generator_muti_channel.cpp

@ -2,11 +2,15 @@
#include "zirq_dispatcher.hpp"
using namespace iflytop;
void ZPWMGeneratorMutiChannel::initialize(zchip_tim_t *htim, float freq, bool polarity) {
m_htim = htim;
m_polarity = polarity;
m_freq = freq;
#define TAG "ZPWM_GMC"
void ZPWMGeneratorMutiChannel::initialize(hardware_config_t *cfg) {
ZEARLY_ASSERT(cfg);
ZEARLY_ASSERT(cfg->name);
ZEARLY_ASSERT(cfg->htim);
m_cfg = *cfg;
m_htim = m_cfg.htim;
m_polarity = m_cfg.polarity;
m_freq = m_cfg.freq;
ZEARLY_ASSERT(m_htim->Init.AutoReloadPreload == TIM_AUTORELOAD_PRELOAD_ENABLE);
ZEARLY_ASSERT(m_htim->Init.CounterMode == TIM_COUNTERMODE_UP);
@ -61,6 +65,7 @@ void ZPWMGeneratorMutiChannel::updatePWMState(int32_t channelindex /*1
if (HAL_TIM_PWM_ConfigChannel(m_htim, &sConfigOC, channel) != HAL_OK) {
Error_Handler();
}
// m_htim->
HAL_TIM_PWM_Stop(m_htim, channel);
if (HAL_TIM_PWM_Start(m_htim, channel) != HAL_OK) {
Error_Handler();
@ -70,6 +75,7 @@ void ZPWMGeneratorMutiChannel::updatePWMState(int32_t channelindex /*1
void ZPWMGeneratorMutiChannel::startPWM(int32_t channelindex /*1£¬2£¬3£¬4*/, float duty) {
if (channelindex < 1 || channelindex > 4) return;
m_pwmstate[channelindex] = true;
ZEARLY_LOGI(TAG, "[%s] startPWM tim:%s channelindex:%d duty:%f", m_cfg.name, chip_tim_get_name(m_htim->Instance), channelindex, duty);
updatePWMState(channelindex, duty);
}
void ZPWMGeneratorMutiChannel::stopPWM(int32_t channelindex) {

13
chip/zpwm_generator_muti_channel.hpp

@ -9,9 +9,17 @@
namespace iflytop {
using namespace iflytop;
// https://iflytop1.feishu.cn/wiki/DhNhwteIGijHy5kC53Dcfp83nZ6
class ZPWMGeneratorMutiChannel {
public:
typedef function<void()> ontimirq_t;
typedef struct {
const char *name;
zchip_tim_t *htim;
float freq;
bool polarity; // Polarity 1:高为有效电平,0:低为有效电平
bool calltrace; // 使能追踪日志
} hardware_config_t;
private:
zchip_tim_t *m_htim;
@ -19,6 +27,9 @@ class ZPWMGeneratorMutiChannel {
float m_freq;
bool m_pwmstate[4] = {0};
bool m_enablelog = false;
hardware_config_t m_cfg;
public:
ZPWMGeneratorMutiChannel() {}
@ -29,7 +40,7 @@ class ZPWMGeneratorMutiChannel {
* @param Channel PWM通道 TIM_CHANNEL_1 TIM_CHANNEL_2 TIM_CHANNEL_3 TIM_CHANNEL_4
* @param Polarity 1:0
*/
void initialize(zchip_tim_t *htim, float freq, bool polarity);
void initialize(hardware_config_t *cfg);
/*******************************************************************************
* PWM_MODE *
*******************************************************************************/

4
components/api/zi_temperature_sensor.hpp

@ -10,6 +10,8 @@ using namespace std;
class ZITemperatureSensor {
public:
virtual ~ZITemperatureSensor() {}
virtual float getTemperature() = 0; // ÉãÊ϶È
virtual float getTemperature() = 0; // ÉãÊ϶È
virtual bool isOnline() = 0;
virtual bool isError() = 0;
};
} // namespace iflytop

8
components/sensors/tmp117/tmp117.cpp

@ -26,6 +26,14 @@ void TMP117::initializate(I2C_HandleTypeDef* i2c, ID_t id) {
setTemperatureOffset(0x0000);
}
bool TMP117::isOnline() {
getTemperature();
return m_lastCallStatus == HAL_OK;
}
bool TMP117::isError() {
return m_lastCallStatus != HAL_OK;
}
const char* TMP117::getLastCallStatusString() {
switch (m_lastCallStatus) {
case HAL_OK:

7
components/sensors/tmp117/tmp117.hpp

@ -71,6 +71,13 @@ class TMP117 : public ZITemperatureSensor {
virtual float getTemperature() override;
/**
* @brief
*
*/
virtual bool isOnline() override;
virtual bool isError() override;
/**
* @brief
*
* @return HAL_StatusTypeDef

7
components/ti/drv8710.cpp

@ -2,12 +2,15 @@
using namespace iflytop;
void DRV8710::initialize(config_t* cfg) { //
m_cfg = *cfg;
m_pwmCtrl.initialize(cfg->tim, 10 * 1000, false);
m_cfg = *cfg;
cfg->pwm_cfg.calltrace = cfg->enableTrace;
m_pwmCtrl.initialize(&cfg->pwm_cfg);
m_nsleep.initAsOutput(cfg->nsleep, ZGPIO::kMode_nopull, false, false);
m_nsleep.enableTrace(cfg->enableTrace);
m_nfault.initAsInput(cfg->nfault, ZGPIO::kMode_pullup, ZGPIO::kIRQ_noIrq, false);
m_in2.initAsOutput(cfg->in2, ZGPIO::kMode_nopull, false, false);
m_in2.enableTrace(cfg->enableTrace);
enable(false);
}

6
components/ti/drv8710.hpp

@ -27,13 +27,15 @@ namespace iflytop {
class DRV8710 {
public:
typedef struct {
TIM_HandleTypeDef* tim;
int32_t in1_chnannel_index;
ZPWMGeneratorMutiChannel::hardware_config_t pwm_cfg;
int32_t in1_chnannel_index;
Pin_t in2;
Pin_t nsleep;
Pin_t nfault;
bool shaft;
bool enableTrace;
} config_t;
ZPWMGeneratorMutiChannel m_pwmCtrl;

6
components/water_cooling_temperature_control_module/pwm_ctrl_module.cpp

@ -5,7 +5,7 @@ using namespace iflytop;
void PWMSpeedCtrlModule::initialize(config_t* pcfg) {
ZASSERT(pcfg);
ZASSERT(pcfg->fanCtrlTim);
// ZASSERT(pcfg->fanCtrlTim);
cfg = *pcfg;
m_enablefbcheck = pcfg->enablefbcheck;
@ -29,10 +29,12 @@ void PWMSpeedCtrlModule::initialize(config_t* pcfg) {
cfg.fanPowerGpioCfg[i].mode, //
cfg.fanPowerGpioCfg[i].initLevel, //
cfg.fanPowerGpioCfg[i].mirror);
m_fanPowerGpio[i].enableTrace(pcfg->enableTrace);
m_nfanPowerPin++;
}
}
m_fanCtrlPwm.initialize(cfg.fanCtrlTim, 1000, false);
cfg.pwm_cfg.calltrace = pcfg->enableTrace;
m_fanCtrlPwm.initialize(&cfg.pwm_cfg);
}
void PWMSpeedCtrlModule::onfbgpioirq(int32_t fanindex) {

5
components/water_cooling_temperature_control_module/pwm_ctrl_module.hpp

@ -24,12 +24,15 @@ namespace iflytop {
class PWMSpeedCtrlModule {
public:
typedef struct {
TIM_HandleTypeDef* fanCtrlTim;
// TIM_HandleTypeDef* fanCtrlTim;
ZPWMGeneratorMutiChannel::hardware_config_t pwm_cfg;
int32_t nfan;
int32_t fan0Channel[4];
ZGPIO::InputGpioCfg_t fanFBGpioCfg[4];
ZGPIO::OutputGpioCfg_t fanPowerGpioCfg[4];
bool enablefbcheck;
bool enableTrace;
} config_t;
typedef struct {

15
components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp

@ -21,6 +21,7 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg,
ZGPIO::OutputGpioCfg_t ext_input[10];
ZGPIO::InputGpioCfg_t ext_output[10];
#endif
m_id = id;
for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->temperature_sensor); i++) {
if (!hardwaredconfig->temperature_sensor[i]) break;
@ -58,6 +59,7 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg,
m_pidmodule.initialize(&cfg->pid_cfg);
m_thread.init("WaterCoolingTemperatureControlModule");
m_cfg = *cfg;
ZLOGI(TAG, "WaterCoolingTemperatureControlModule initialized...");
}
@ -103,6 +105,8 @@ int32_t WaterCoolingTemperatureControlModule::module_xxx_reg(int32_t param_id, b
PROCESS_REG(kreg_compute_interval, REG_GET(m_cfg.pidcompute_periodms), REG_SET(m_cfg.pidcompute_periodms));
PROCESS_REG(kreg_pid_target, REG_GET_FLOAT(m_target_temperature, 0.1), REG_SET_FLOAT(m_target_temperature, 0.1));
PROCESS_REG(kreg_module_private0, gettemperature_sensor_state(val), ACTION_NONE);
PROCESS_REG(kreg_pid_nowoutput, REG_GET(m_pidmodule.get_output()), ACTION_NONE);
PROCESS_REG(kreg_pid_feedbackval, REG_GET(read_pid_temperature()), ACTION_NONE);
@ -112,10 +116,6 @@ int32_t WaterCoolingTemperatureControlModule::module_xxx_reg(int32_t param_id, b
PROCESS_REG(kreg_module_errorcode, REG_GET(m_errorcode), ACTION_NONE);
PROCESS_REG(kreg_module_initflag, REG_GET(module_get_inited_flag()), ACTION_NONE);
PROCESS_REG(kreg_module_errorbitflag0, REG_GET(geterrorbitflag0()), ACTION_NONE);
PROCESS_REG(kreg_module_errorbitflag1, REG_GET(geterrorbitflag1()), ACTION_NONE);
PROCESS_REG(kreg_module_input_state, REG_GET(read_input_state()), ACTION_NONE);
PROCESS_REG(kreg_module_output_state, REG_GET(read_output_io_state()), ACTION_NONE);
PROCESS_REG(kreg_sensor_temperature0, REG_GET(getTemperatureSensorVal(0)), ACTION_NONE);
PROCESS_REG(kreg_sensor_temperature1, REG_GET(getTemperatureSensorVal(1)), ACTION_NONE);
@ -129,6 +129,13 @@ int32_t WaterCoolingTemperatureControlModule::module_xxx_reg(int32_t param_id, b
}
return 0;
}
int32_t WaterCoolingTemperatureControlModule::gettemperature_sensor_state(int32_t& state) {
for (int32_t i = 0; i < m_n_temperature_sensor; i++) {
state |= m_temperature_sensor[i]->isOnline() << i;
}
return 0;
}
int32_t WaterCoolingTemperatureControlModule::do_action(int32_t actioncode) {
if (actioncode == ACTION_TEST_PELTIER_SET_POWER_LEVEL) {
return test_peltier_set_power_level(m_reg.module_action_param1);

2
components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp

@ -153,6 +153,8 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
int32_t geterrorbitflag0();
int32_t geterrorbitflag1();
int32_t gettemperature_sensor_state(int32_t& state);
float getTemperatureSensorVal(int32_t index);
int32_t do_action(int32_t actioncode);
};

Loading…
Cancel
Save