Browse Source

添加帕尔贴

master
tianjialong 2 years ago
parent
commit
4f3281be53
  1. 74
      src/board/hardware.cpp
  2. 14
      src/board/hardware.hpp

74
src/board/hardware.cpp

@ -15,11 +15,13 @@ void Hardware::hardwareinit() {
debug_light_init(); debug_light_init();
can_init(); can_init();
temperature_init(); temperature_init();
peltier_init();
} }
void Hardware::periodicJob() { void Hardware::periodicJob() {
debug_light_periodicJob(); debug_light_periodicJob();
can_periodicJob(); can_periodicJob();
temperature_periodicJob(); temperature_periodicJob();
peltier_periodicJob();
} }
/******************************************************************************* /*******************************************************************************
@ -150,3 +152,75 @@ void Hardware::temperature_periodicJob() {
} }
} }
} }
/*******************************************************************************
* *
*******************************************************************************/
void Hardware::peltier_cold_ctr_pwm(int pwm) { STM32_HAL::setPWMDuty(&htim1, TIM_CHANNEL_1, pwm); }
// PB0 HOT_CTR_PWM0
void Hardware::peltier_hot_ctr_pwm(int pwm) { STM32_HAL::setPWMDuty(&htim3, TIM_CHANNEL_3, pwm); }
void Hardware::peltier_init() { //
STM32_HAL::gpioInitAsOutput(GPIOB, GPIO_PIN_1, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL::gpioInitAsOutput(GPIOE, GPIO_PIN_10, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, GPIO_SPEED_FREQ_LOW, GPIO_PIN_RESET);
STM32_HAL::setPWMFreq(&htim1, 100);
STM32_HAL::setPWMFreq(&htim3, 100);
}
int Hardware::peltier_get_pwm() { return m_peltier.pwm; }
void Hardware::peltier_set_pwm(int pwm) {
/**
* @brief
*
*
* HOT_CTR_PWM0(AL) = 0
* HOT_CTR(AH) = 0
* COLD_CTR_PWM0(BL) = 0
* COLD_CTR(BH) = 0
*
* HOT_CTR_PWM0(AL) = 1(PWM)
* HOT_CTR(AH) = 0
* COLD_CTR_PWM0(BL) = 0
* COLD_CTR(BH) = 1(IO/)
*
* HOT_CTR_PWM0(AL) = 0
* HOT_CTR(AH) = 1(IO/)
* COLD_CTR_PWM0(BL) = 1(PWM)
* COLD_CTR(BH) = 0
*/
if (m_peltier.pwm * pwm < 0) {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
}
m_peltier.pwm = pwm;
if (pwm == 0) {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
} else if (pwm > 0) {
peltier_hot_ctr_pwm(pwm); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); /*HOT_CTR*/
peltier_cold_ctr_pwm(0); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET); /*COLD_CTR*/
} else {
peltier_hot_ctr_pwm(0); /*HOT_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); /*HOT_CTR*/
peltier_cold_ctr_pwm(-pwm); /*COLD_CTR_PWM0*/
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/
}
}
void Hardware::peltier_periodicJob() {
if (testHardwareFlag) {
static uint32_t lastcall;
static int duty = 0;
if (hasPassedMS(lastcall) > 1000) {
lastcall = getTicket();
duty += 10;
if (duty > 100) duty = 0;
peltier_set_pwm(duty);
ZLOGI(TAG, "paltier set pwm:%d", duty);
}
}
}

14
src/board/hardware.hpp

@ -33,8 +33,12 @@ class Hardware {
struct temperature_res_t { struct temperature_res_t {
TMP117 tmp117[4]; TMP117 tmp117[4];
}; };
struct peltier_res_t {
int32_t pwm;
};
can_res_t m_can; can_res_t m_can;
temperature_res_t m_temperature; temperature_res_t m_temperature;
peltier_res_t m_peltier;
bool testHardwareFlag; bool testHardwareFlag;
public: public:
@ -74,6 +78,16 @@ class Hardware {
virtual uint32_t getTicket() { return HAL_GetTick(); }; virtual uint32_t getTicket() { return HAL_GetTick(); };
virtual uint32_t getNowMS() { return HAL_GetTick(); }; virtual uint32_t getNowMS() { return HAL_GetTick(); };
virtual void sleepus(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); } virtual void sleepus(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); }
/*******************************************************************************
* *
*******************************************************************************/
void peltier_init();
void peltier_cold_ctr_pwm(int pwm);
void peltier_hot_ctr_pwm(int pwm);
void peltier_set_pwm(int pwm);
int peltier_get_pwm();
void peltier_periodicJob();
}; };
} // namespace iflytop } // namespace iflytop
Loading…
Cancel
Save