|
|
@ -15,11 +15,13 @@ void Hardware::hardwareinit() { |
|
|
|
debug_light_init(); |
|
|
|
can_init(); |
|
|
|
temperature_init(); |
|
|
|
peltier_init(); |
|
|
|
} |
|
|
|
void Hardware::periodicJob() { |
|
|
|
debug_light_periodicJob(); |
|
|
|
can_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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |