tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
commit cc11dedf53aeb0d6ed333d9815847d973a71f777
parent 0dcb074f4b49a65b570ee2d8a1de21ddffcddd53
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Tue,  7 Apr 2026 16:55:09 -0300

Disminuir frecuencia de salida PWM de 10kHz a 500Hz

Diffstat:
Mfirmware/Core/Src/main.c | 4++--
Mfirmware/app/src/task_temp_ctrl.c | 17++++++++++++++---
Mfirmware/tdse-tf_3-02.ioc | 4++--
3 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/firmware/Core/Src/main.c b/firmware/Core/Src/main.c
@@ -312,9 +312,9 @@ static void MX_TIM1_Init(void)
 
   /* USER CODE END TIM1_Init 1 */
   htim1.Instance = TIM1;
-  htim1.Init.Prescaler = 64-1;
+  htim1.Init.Prescaler = 640-1;
   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
-  htim1.Init.Period = 100-1;
+  htim1.Init.Period = 200-1;
   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
   htim1.Init.RepetitionCounter = 0;
   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
diff --git a/firmware/app/src/task_temp_ctrl.c b/firmware/app/src/task_temp_ctrl.c
@@ -26,6 +26,7 @@ static const task_temp_ctrl_cfg_t task_temp_ctrl_cfg = {&htim1, TIM_CHANNEL_1};
 
 // Private functions declaration
 static inline int16_t ceil_i16(int16_t val, int16_t max_val);
+static void task_temp_ctrl_set_duty(TIM_HandleTypeDef *htim, uint32_t ch, uint8_t duty);
 
 // Public data definition
 volatile uint32_t g_task_temp_ctrl_tick_cnt; // Incremented by HAL_SysTick callback
@@ -38,9 +39,13 @@ void task_temp_ctrl_init(void *parameters)
     const task_temp_ctrl_cfg_t *p_task_cfg = &task_temp_ctrl_cfg;
     shared_data_type *p_shared_data = (shared_data_type *)parameters;
 
-    __HAL_TIM_SET_COMPARE(p_task_cfg->htim,
+    task_temp_ctrl_set_duty(p_task_cfg->htim,
             p_task_cfg->tim_channel,
             p_shared_data->temp_ctrl_pwm_dc);
+
+    // __HAL_TIM_SET_COMPARE(p_task_cfg->htim,
+    //         p_task_cfg->tim_channel,
+    //         p_shared_data->temp_ctrl_pwm_dc);
     HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
 
     LOGGER_INFO("Done initializing `task_temp_ctrl`");
@@ -86,14 +91,14 @@ void task_temp_ctrl_update(void *parameters)
             p_shared_data->temp_ctrl_pwm_dc = ceil_i16(error*error, 80);
         }
         else {
-            p_shared_data->temp_ctrl_pwm_dc = 0;
+                task_temp_ctrl_set_duty(p_task_cfg->htim, p_task_cfg->tim_channel, 0);
         }
 
         if (true == p_shared_data->temp_ctrl_enabled)
         {
             if (p_shared_data->temp_ctrl_pwm_dc != TIM1->CCR1)
             {
-                __HAL_TIM_SET_COMPARE(p_task_cfg->htim,
+                task_temp_ctrl_set_duty(p_task_cfg->htim,
                         p_task_cfg->tim_channel,
                         p_shared_data->temp_ctrl_pwm_dc);
             }
@@ -105,3 +110,9 @@ void task_temp_ctrl_update(void *parameters)
         }
     }
 }
+static void task_temp_ctrl_set_duty(TIM_HandleTypeDef *htim, uint32_t ch, uint8_t duty)
+{
+    uint32_t ARR = __HAL_TIM_GET_AUTORELOAD(htim);     // Auto Reload Reg
+    uint32_t CCR = (uint32_t)((ARR + 1) * duty / 100); // Capture/Compare Reg
+    __HAL_TIM_SET_COMPARE(htim, ch, CCR);
+}
diff --git a/firmware/tdse-tf_3-02.ioc b/firmware/tdse-tf_3-02.ioc
@@ -248,8 +248,8 @@ SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1
 SH.S_TIM3_CH1.ConfNb=1
 TIM1.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
 TIM1.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period
-TIM1.Period=100-1
-TIM1.Prescaler=64-1
+TIM1.Period=200-1
+TIM1.Prescaler=640-1
 TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
 TIM3.IPParameters=Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1
 TIM3.Period=8000