From aea2abc9ea16bcbf4a98bf50ecb3d6f55b1d4e8c Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Fri, 9 Feb 2024 19:07:52 +0100 Subject: [PATCH] Adjust pinout and add LED support for HW Rev. B --- src/fan_ctrl_pwm.c | 32 ++++++++++++++++---------------- src/main.c | 13 ++++++++++++- src/pinout.h | 16 +++++++++++----- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/fan_ctrl_pwm.c b/src/fan_ctrl_pwm.c index feb23c7..54ceb91 100644 --- a/src/fan_ctrl_pwm.c +++ b/src/fan_ctrl_pwm.c @@ -11,32 +11,32 @@ void fan_ctrl_pwm_init(void) gpio_clear(DCDC_PORT, DCDC_BYPASS_SWITCH_PIN); gpio_mode_setup(DCDC_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, DCDC_BYPASS_SWITCH_PIN); - // *** TIM21 *** - // Configure channel 1 for PWM + // *** TIM2 *** + // Configure channel 2 for PWM // Ch1 = charge pump output - timer_set_mode(TIM21, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); + timer_set_mode(TIM2, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); // set up PWM channel - timer_set_oc_mode(TIM21, TIM_OC1, TIM_OCM_PWM1); - timer_enable_oc_output(TIM21, TIM_OC1); - timer_enable_oc_preload(TIM21, TIM_OC1); - timer_set_oc_polarity_high(TIM21, TIM_OC1); + timer_set_oc_mode(TIM2, TIM_OC2, TIM_OCM_PWM1); + timer_enable_oc_output(TIM2, TIM_OC2); + timer_enable_oc_preload(TIM2, TIM_OC2); + timer_set_oc_polarity_high(TIM2, TIM_OC2); // prescaler - timer_set_prescaler(TIM21, 21 - 1); // Timer runs at 100 kHz + timer_set_prescaler(TIM2, 21 - 1); // Timer runs at 100 kHz // auto-reload value - timer_set_period(TIM21, 100 - 1); // overflow every 100 cycles = 1 kHz + timer_set_period(TIM2, 100 - 1); // overflow every 100 cycles = 1 kHz // output compare value - timer_set_oc_value(TIM21, TIM_OC1, 0); // No PWM output by default + timer_set_oc_value(TIM2, TIM_OC2, 0); // No PWM output by default // only generate interrupt on overflow - timer_update_on_overflow(TIM21); + timer_update_on_overflow(TIM2); // enable main output - timer_enable_break_main_output(TIM21); + timer_enable_break_main_output(TIM2); } @@ -50,7 +50,7 @@ void fan_ctrl_pwm_enable(void) gpio_set_af(FAN_PORT, GPIO_AF0, FAN_PWM_PIN); // start the PWM timer - timer_enable_counter(TIM21); + timer_enable_counter(TIM2); } @@ -60,8 +60,8 @@ void fan_ctrl_pwm_disable(void) gpio_clear(DCDC_PORT, DCDC_BYPASS_SWITCH_PIN); // set PWM value to 0 and stop the counter - timer_set_oc_value(TIM21, TIM_OC1, 0); - timer_disable_counter(TIM21); + timer_set_oc_value(TIM2, TIM_OC2, 0); + timer_disable_counter(TIM2); // configure the PWM GPIO as input so the fan runs full speed if powered gpio_mode_setup(FAN_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, FAN_PWM_PIN); @@ -71,5 +71,5 @@ void fan_ctrl_pwm_disable(void) void fan_ctrl_pwm_set_duty(uint8_t percent) { // as the timer has 100 steps per cycle, we can directly use the percentage value - timer_set_oc_value(TIM21, TIM_OC1, percent); + timer_set_oc_value(TIM2, TIM_OC2, percent); } diff --git a/src/main.c b/src/main.c index ac905d1..61a6d62 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -9,6 +10,8 @@ #include "fan_controller.h" #include "eeprom_config.h" +#include "pinout.h" + #define SYSTICK_FREQ 10 // Hz static uint64_t timebase_ms = 0; @@ -66,7 +69,9 @@ int main(void) uart_enqueue("TinyFanControl v" VERSION " initialized.\n"); uint8_t last_duty = 0; - bool use_dcdc = EEPROM_CONFIG_FLAGS & EEPROM_CONFIG_FLAG_USE_DCDC_CONTROL; + + gpio_clear(LED_PORT, LED_PIN); + gpio_mode_setup(LED_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN); while (1) { if(systick_triggered) { @@ -74,6 +79,8 @@ int main(void) timebase_ms += 1000 / SYSTICK_FREQ; + //uint32_t timebase_ms_fast = timebase_ms & 0xFFFFFFFF; + // start the measurement in the background. temp_sensor_trigger_update(); } @@ -87,12 +94,16 @@ int main(void) // handle fan power-on and power-off if(last_duty == 0 && duty != 0) { + gpio_set(LED_PORT, LED_PIN); + if(use_dcdc) { fan_ctrl_dc_enable(); } else { fan_ctrl_pwm_enable(); } } else if(last_duty != 0 && duty == 0) { + gpio_clear(LED_PORT, LED_PIN); + if(use_dcdc) { fan_ctrl_dc_disable(); } else { diff --git a/src/pinout.h b/src/pinout.h index eb8ac27..8777aa4 100644 --- a/src/pinout.h +++ b/src/pinout.h @@ -3,10 +3,10 @@ /* Fan-related pins */ -#define FAN_PORT GPIOA +#define FAN_PORT GPIOB -#define FAN_PWM_PIN GPIO2 -#define FAN_TACHO_PIN GPIO3 +#define FAN_PWM_PIN GPIO3 +//#define FAN_TACHO_PIN GPIO3 /* DC/DC control pins */ @@ -29,8 +29,14 @@ #define UART_PORT GPIOA -#define UART_TX_PIN GPIO14 -#define UART_RX_PIN GPIO15 +#define UART_TX_PIN GPIO2 +#define UART_RX_PIN GPIO3 + +/* LED */ + +#define LED_PORT GPIOA + +#define LED_PIN GPIO10 #endif // PINOUT_H