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 2531b367d63265c36649ab95e8dd713dc8ba791b
parent 0b8407e6c5557cdee6ee6c0592bf8d00e8c9b933
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Tue,  2 Jun 2026 23:34:59 -0300

Actualizar sección 3.1: "Hardware del sistema"

Diffstat:
MMEMORIA.md | 173++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Aimg/npn_inv_mosfet_driver.png | 0
Aimg/npn_inv_mosfet_driver_plot.png | 0
3 files changed, 119 insertions(+), 54 deletions(-)
diff --git a/MEMORIA.md b/MEMORIA.md
@@ -105,7 +105,7 @@ Se desarrolló un sistema de control de temperatura basado en el microcontrolado
 STM32F103RB de la placa NUCLEO-F103RB y el sensor de temperatura digital
 DS18B20. El sistema lee la temperatura de la miel a traves del sensor y controla
 automáticamente el dispositivo de calefacción del derretidor. El calefactor del
-derretidor se modela como una resistencia de 12V y 48 W.
+derretidor se modela como una resistencia de 12 V y 48 W.
 
 El usuario puede interactuar con el sistema a traves de dos interfaces: una
 local, mediante botones, un display, luces indicadoras y un buzzer; y de manera
@@ -185,13 +185,12 @@ del derretidor de miel para cada uno de los modos de operación del sistema.
 
 El control principal se implementa en la placa NUCLEO-F103RB, la cual se puede
 ver en la figura 2.3.1. Esta placa utiliza un microcontrolador ARM Cortex-M3 de
-32 bits, el STM32F103RBT6, operando a una frecuencia de 64 MHz. En la placa se
-ejecuta el firmware principal del sistema, compuesto por un ejecutor cíclico con
-una pauta establecida de que un tick nunca supere 1 ms. Este ejecutar cíclico
-tiene asociado 8 tareas, las cuales controlan diferentes partes del sistema:
-'system', 'buttons', 'buzzer', 'leds', 'menu', 'temp_ctrl', 'temp_sensor' y
-'remote'. La comunicación entre tareas se realiza mediante eventos y una
-estructura de datos compartida.
+32 bits, el STM32F103RBT6. En la placa se ejecuta el firmware principal del
+sistema, compuesto por un ejecutor cíclico con una pauta establecida de que un
+tick nunca supere 1 ms. Este ejecutar cíclico tiene asociado 8 tareas, las
+cuales controlan diferentes partes del sistema: 'system', 'buttons', 'buzzer',
+'leds', 'menu', 'temp_ctrl', 'temp_sensor' y 'remote'. La comunicación entre
+tareas se realiza mediante eventos y una estructura de datos compartida.
 
 <div align="center">
     <img src="img/nucleo_f103rb_views.png" style="padding: 10px;" width="600">
@@ -209,14 +208,14 @@ microcontrolador Espressif ESP8266. Este se comunica a través de UART con la
 placa NUCLEO para intercambiar comandos con un formato especifico. La elección
 se basó en su bajo costo, disponibilidad en el mercado local y capacidad para
 actuar como servidor web. En la figura 2.2 se pueden ver imágenes de la placa,
-asi como también las conexiones que ofrece la misma.
+así como también las conexiones que ofrece la misma.
 
 <div align="center">
     <img src="img/esp01s_views.png" style="padding: 10px;" width="600">
     <p align="center"><em>Figura 2.2: Modulo ESP-01S</em></p>
 </div>
 
-El firmware utilizado en la placa ESP01S fue desarrollado utilizando librerías
+El firmware utilizado en la placa ESP-01S fue desarrollado utilizando librerías
 de Arduino a través de PlatformIO. El firmware implementa funciones como la
 conexión a una red Wi-Fi fija, un servidor HTTP en el puerto 80 para servir la
 interfaz web estática desde el sistema de archivos, un servidor WebSocket en el
@@ -246,7 +245,7 @@ del ejecutor cíclico.
 ### 2.3.4. Control de temperatura
 
 Para controlar la temperatura, se modeló el derretidor eléctrico de miel
-utilizando un resistor de 12V y 48W, y el control de temperatura mediante un
+utilizando un resistor de 12 V y 48 W, y el control de temperatura mediante un
 transistor MOSFET, controlado por modulación de ancho de pulsos (Pulse Width
 Modulation, PWM). El sistema regula la temperatura mediante un controlador
 Proporcional-Integral-Derivativo (PID) implementado en el firmware, siendo la
@@ -331,11 +330,12 @@ pines de la placa NUCLEO a cable con conector IDC de 2x10.
     <p align="center"><em>Figura 3.3: Placa perforada adaptador NUCLEO a conector IDC 2x10</em></p>
 </div>
 
-La segunda placa perforada se utilizo para unir todos los módulos restantes del
-sistema, como el modulo de acceso remoto, la bornera para el sensor de
-temperatura, las luces indicadoras, los botones, el portapilas para almacenar la
-pila CR2032, entre otros. A continuación en la figura 3.3 se muestra una vista
-de como se conectan los módulos dentro de la placa y al conector IDC.
+La segunda placa perforada, considerada la placa principal, se utilizó para unir
+todos los módulos restantes del sistema, como el modulo de acceso remoto, la
+bornera para el sensor de temperatura, las luces indicadoras, los botones, el
+portapilas para almacenar la pila CR2032, entre otros. A continuación en la
+figura 3.3 se muestra una vista de como se conectan los módulos dentro de la
+placa y al conector IDC.
 
 <div align="center">
     <img src="img/main_perf_board.png" style="padding: 10px" align=center width="400px">
@@ -344,11 +344,10 @@ de como se conectan los módulos dentro de la placa y al conector IDC.
 
 ### 3.1.1 Placa NUCLEO
 
-Como bien se mencionó, el trabajo se desarrolló utilizando la placa NUCLEO
-F103RB de STM, esta placa utiliza el procesador STM32F103RBT6 configurado para
-operar a 64 MHz, ya que esta frecuencia es la que mejor se adapta a los
-periféricos utilizados. En particular los periféricos que se utilizaron son los
-siguientes:
+Como bien se mencionó, el trabajo se desarrolló utilizando la placa NUCLEO, esta
+placa utiliza el procesador STM32F103RBT6 configurado para operar a 64 MHz, ya
+que esta frecuencia es la que mejor se adapta a los periféricos utilizados. En
+particular los periféricos que se utilizaron son los siguientes:
 
 - I2C1: Conexion con display LCD 16x2.
 - USART1: Sensor DS18B20 (modo half-duplex, emulacion de protocolo OneWire).
@@ -386,61 +385,63 @@ las funciones para los que fueron utilizados.
 
 <p align="center"><em>Tabla 3.1: Pinout del sistema</em></p>
 
-La placa NUCLEO se puede alimentar a través del USB (ST-Link) o por el pin de 5V
-externo. Los 5V externos provienen de un regulador LM7505 el cual recibe
-alimentación de una fuente de 12V externa. Para seleccionar que tipo de
-alimentación se desea utilizar se debe ajustar la posicion del jumper JP5 en la
-placa NUCLEO, tal como lo indica la Tabla 8 del manual de usuario de la placa.[^1]
+La placa NUCLEO se puede alimentar a través del USB (ST-Link) o por el pin de 5 V
+externo. Los 5 V externos provienen de un regulador LM7505 ubicado sobre la placa
+perforada principal, este regulador recibe alimentación de una fuente de 12 V
+externa. Para seleccionar que tipo de alimentación se desea utilizar se debe
+ajustar la posición del jumper JP5 en la placa NUCLEO, tal como lo indica la
+Tabla 8 del manual de usuario de la placa.[^1]
 
 [^1]: STMicroelectronics, "UM1724 User manual - STM32 Nucleo-64 boards (MB1136)"
     Rev. 17, 2025. [En linea]. Disponible en: https://www.st.com/resource/en/user_manual/um1724-stm32-nucleo64-boards-mb1136-stmicroelectronics.pdf
 
 ### 3.1.2 Sensor DS18B20
 
-El sensor DS18B20 se conectó al USART1 en modo half-duplex, utilizando una sola
-linea del periférico. De esta forma se puede aprovechar el periférico emulando
-el protocolo OneWire. Este protocolo requiere temporización y niveles
-específicos, tal como se indica en el manual del sensor DS18B20.[^2]
+El sensor DS18B20 se conectó al USART1 de la placa NUCLEO en modo half-duplex,
+es decir, utilizando una sola linea del par TX/RX. De esta forma se puede
+aprovechar el periférico emulando el protocolo OneWire. Este protocolo requiere
+temporización y niveles específicos, tal como se indica en el manual del sensor
+DS18B20.[^2]
 
-Para emular el protocolo OneWire utilizando el periférico USART, se cambian
+Para emular el protocolo OneWire utilizando el periférico USART1, se cambian
 dinámicamente la tasa en baudios (baud rate) de transmisión. Para enviar una
 señal de reset se requiere de como mínimo 480 μs, por lo que enviando un byte a
-9600 baudios por segundo de tasa de transmisión, con los respectivos bits de
-inicio y fin (resultando en total 10 bits) se tiene un período de
-aproximadamente $1.04ms$:
+9600 baudios de tasa de transmisión, con los respectivos bits de inicio y fin
+(resultando en total 10 bits) se tiene un período de aproximadamente $1.04ms$:
 
-$$T_{bit} = \frac{1}{9600\ \frac{\text{baud}}{s}} \approx 104 \mu s \Rightarrow
-\boxed{T_{byte} \approx 1.04ms}$$
+$$T_{bit} = \frac{1}{9600\ baud} \approx 104 \mu s \Rightarrow \boxed{T_{byte}
+\approx 1.04ms}$$
 
-En cambio tomando 96000 baudios por segundo de tasa de transmisión, se tiene un
+En cambio tomando 96000 baudios de tasa de transmisión, se tiene un
 período de bit, y de byte, de aproximadamente $10.4\mu s$ y $104\mu s$,
 respectivamente.
 
-$$T_{bit} = \frac{1}{96000\ \frac{\text{baud}}{s}} \approx 10.4 \mu s \Rightarrow
+$$T_{bit} = \frac{1}{96000\ baud} \approx 10.4 \mu s \Rightarrow
 \boxed{T_{byte} \approx 104\mu s}$$
 
-Teniendo estas dos tasas de transmisión enviando el byte hexadecimal 0xF0
-(equivalente al numero binario 11110000) a 9600 baudios por segundo, se logra
-un pulso lo suficientemente parecido al reset de OneWire. Para transmitir datos,
-se utiliza la tasa más rápida, de 96000 baudios, y se envía cada bit
-de datos en un byte, es decir si se desea enviar un byte de datos, se deben
-enviar 8 bytes en la transmisión, un byte por cada dato. Se transmite el byte
-0xFF para representar un bit lógico 1 y el byte 0x00 para representar un bit
-lógico 0. Al transmitir el byte 0xFF, la línea permanece en nivel alto
-durante casi toda la trama, excepto por el bit de inicio, que es siempre bajo,
-lo que genera un pulso bajo corto, compatible con la escritura de un bit lógico
-1 en OneWire. Por otro lado, al transmitir el byte 0x00, la línea permanece en
-nivel bajo durante casi toda la trama, a excepción del bit de fin, que es
-siempre 1, esto produce un pulso bajo de mayor duración, similar al requerido
-para transmitir un bit lógico 0.
+Teniendo estas dos tasas de transmisión, enviando el byte hexadecimal 0xF0
+(equivalente al numero binario 11110000) a 9600 baudios, se logra un pulso lo
+suficientemente parecido al reset de OneWire.
+
+Para transmitir datos, se utiliza la tasa más rápida, de 96000 baudios, y se
+envía cada bit de datos en un byte, es decir si se desea enviar un byte de
+datos, se deben enviar 8 bytes en la transmisión, un byte por cada dato. Se
+transmite el byte 0xFF para representar un bit lógico 1 y el byte 0x00 para
+representar un bit lógico 0. Al transmitir el byte 0xFF la línea permanece en
+nivel alto durante casi toda la trama, salvo el bit de inicio que es siempre
+bajo, esto genera un pulso bajo breve, compatible con la escritura de un bit
+lógico 1 del protocolo OneWire. Por otro lado, al transmitir el byte 0x00, la
+línea permanece en nivel bajo durante casi toda la trama, a excepción del bit de
+fin que es siempre 1, esto produce un pulso bajo de mayor duración, similar al
+requerido para transmitir un bit lógico 0.
 
 Por lo tanto se utiliza la tasa de 9600 baudios únicamente para aproximar el
 pulso de reset, el cual posee una duración considerablemente mayor y es
 necesario para comenzar al comunicación con el sensor, y la tasa de 96000
-baudios para transmitir datos, ya que se generar intervalos temporales
+baudios para transmitir datos, ya que se generan intervalos temporales
 compatibles con los slots de tiempo definidos por el protocolo OneWire.
 
-Y abrochando aún más el periférico USART se realizaron las operaciones de
+Y aprovechando aún más el periférico USART1, se realizaron las operaciones de
 forma no bloqueante mediante acceso directo a memoria (DMA) de esta forma se
 reduce aun más el tiempo de bloqueo del ejecutor cíclico y de uso de la CPU.
 
@@ -448,4 +449,68 @@ reduce aun más el tiempo de bloqueo del ejecutor cíclico y de uso de la CPU.
     Thermometer," Rev. 6, ago. 2019. [En linea]. Disponible en:
     https://www.analog.com/media/en/technical-documentation/data-sheets/ds18b20.pdf
 
+### 3.1.3 Módulo ESP-01S
+
+El módulo Wi-Fi ESP-01S se conecta con la placa NUCLEO a través del periférico
+USART3 a una tasa de transmisión de 115200 baud.
+
+Dado que el modulo ESP-01S trabaja con Wi-Fi y requiere, en promedio, entre 150
+mA y 250 mA, con picos de corriente durante la transmisión Wi-Fi de hasta 430 mA
+a 3,3 V, y dado que la corriente maxima suministrada por el regulador de la
+placa NUCLEO es de 500 mA, se decidió utilizar un regulador externo de 3,3 V, el
+AIC1117-33PT, montado sobre la misma placa perforada principal, suministrada por
+los 12 V de la fuente de tension externa.
+
+El firmware del modulo es ajeno al trabajo, pero se desarrollo de todas formas
+utilizando PlatformIO y el framework Arduino. El firmware se desarrolló para que
+cumpla las siguientes funciones:
+
+- Conexión a una red Wi-Fi fija.
+- Servidor HTTP en el puerto 80, sirviendo la página web estática desde el
+  sistema de archivos.
+- Servidor WebSocket en puerto 81 para evitar refrescar la pagina web
+  constantemente para actualizar la información.
+- Sistema de archivos LittleFS.
+
+### 3.1.4 Display LCD 16x2 I2C
+
+El display LCD se conecta al bus I2C1 a través del adaptador paralelo a serie
+mencionado previamente. Si bien es posible conectar el display directamente a la
+placa NUCLEO sin adaptador, esto requiere del uso de más pines de la placa, es
+por esto que se optó por el uso del adaptador I2C. Además al utilizar el
+periférico I2C se puede utilizar DMA, reduciendo el tiempo de bloqueo del
+ejecutor cíclico y for consiguiente el uso de la CPU.
+
+### 3.1.5 Control de temperatura
+
+La etapa de control de temperatura consiste en un MOSFET IRFZ44N de canal N, el
+IRFZ44N, controlado por la señal PWM del TIM1_CH1 (PA8). Dado que el MOSFET es
+un dispositivo controlador por tensión, se observó que utilizando directamente
+la salida GPIO de la placa NUCLEO para controlar el MOSFET esté elevaba su
+temperatura considerablemente. Para solucionar esto se implementó un driver para
+controlar el MOSFET con una señal PWM de mayor tensión, en particular 12 V de la
+fuente externa. El driver utiliza un transistor TBJ 2N3904 actuando como llave
+controlador por la señal PWM de la placa NUCLEO, como se puede ver en el
+esquemático de la figura 3.6.
+
+<div align="center">
+    <img src="img/npn_inv_mosfet_driver.png" style="padding: 10px" align=center width="700px">
+    <p><em>Figura 3.6: Driver para el MOSFET que controla el calefactor.</em></p>
+</div>
+
+Este circuito es simple de implementar, pero invierte la señal PWM como se
+observar en la figura 3.7 a continuación. Existen versiones del circuito que
+agregan un circuito inversor implementado con otro transistor, pero en este caso
+no es necesario ya que se puede invertir la polaridad de la señal PWM desde el
+firmware de la placa NUCLEO.
+
+<div align="center">
+    <img src="img/npn_inv_mosfet_driver_plot.png" style="padding: 10px" align=center width="700px">
+    <p><em>Figura 3.7: Simulación del driver para el MOSFET que controla el calefactor.</em></p>
+</div>
+
+El calefactor del derretidor de miel se modeló como una carga resistiva pura,
+por lo que se utilizó un resistor de alta potencia de 12 V y 48 W para las
+pruebas de laboratorio.
+
 
diff --git a/img/npn_inv_mosfet_driver.png b/img/npn_inv_mosfet_driver.png
Binary files differ.
diff --git a/img/npn_inv_mosfet_driver_plot.png b/img/npn_inv_mosfet_driver_plot.png
Binary files differ.