From 3b36f178aa27263d29f252cd58844de3bac03894 Mon Sep 17 00:00:00 2001 From: alro1965 Date: Fri, 22 May 2026 10:19:24 -0400 Subject: [PATCH] fix: update analog input SPICE to reflect corrected 100K+27K resistor values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All analog ports (IN-BAT, IN-WATER, IN-OILP, IN-RPM) now use R_high=100K, R_low=27K — unified design confirmed in schematic. Updated .param values, voltage divider netlist, verification comments, and design notes. Vout @ 14.4V (alternator) = 3.06V — just at the ADC limit, correct. Vout @ 15.5V = 3.30V — absolute maximum safe input voltage. Filter fc = 747 Hz with 100K||27K and 10nF. Co-Authored-By: Claude Sonnet 4.6 --- tools/spice/3_analog_input.cir | 85 +++++++++++++++++----------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/tools/spice/3_analog_input.cir b/tools/spice/3_analog_input.cir index 68b3f2a..b2e5f89 100644 --- a/tools/spice/3_analog_input.cir +++ b/tools/spice/3_analog_input.cir @@ -38,23 +38,24 @@ * ----------------------------------------------------------------------- * PARAMETROS DEL DIVISOR (modificar segun sensor) * ----------------------------------------------------------------------- -* Configuracion activa: Tension de bateria 12V → ADC 3.3V -* Vout = Vin * R_low / (R_high + R_low) -* 3.3V = 12V * R_low / (R_high + R_low) -* R_low/(R_high+R_low) = 0.275 -* Con R_low=15k: R_high = 15k*(1/0.275 - 1) = 15k*2.636 = 39.5k → usar 39.2k +* VALORES CORREGIDOS EN ESQUEMATICO (todos los puertos analogicos unificados): +* IN-BAT: R41=100K, R40=27K → Vmax_input = 3.3*(100+27)/27 = 15.5V ✓ +* IN-WATER: R31=100K, R30=27K → igual configuracion ✓ +* IN-OILP: R33=100K, R32=27K → igual configuracion ✓ +* IN-RPM: R41=100K, R40=27K → igual (ya estaba bien) ✓ * -* VALORES EN TU ESQUEMATICO (segun imagen): -* IN-BAT: R35=10K (R_high?), R34=15K (R_low?) → Vmax = 3.3*(10+15)/15 = 5.5V -* IN-OILP: R33=10K, R32=15K → igual configuracion -* IN-WATER: R31=10K, R30=15K → igual -* IN-RPM: R41=100K, R40=27K → Vmax = 3.3*(100+27)/27 = 15.5V (para RPM de 12V ok) +* Analisis del divisor con 100K + 27K: +* Vout @ 12.0V = 12.0 * 27/127 = 2.55V ← OK, bateria descargada +* Vout @ 14.4V = 14.4 * 27/127 = 3.06V ← OK, alternador cargando (limite) +* Vout @ 15.5V = 15.5 * 27/127 = 3.30V ← limite absoluto del ADC +* Vout @ 28.0V = pico load dump → clamp ESP32 lo absorbe ✓ * -* NOTA: Revisar R35/R34 si el sensor es bateria 12V — el divisor da Vmax=5.5V -* que excede el rango del ADC (3.3V). Posible ajuste: R35=27k para dar 3.3V @ 12V exacto. +* Rango de tension segura en la entrada del sensor: hasta 15.5V +* Fc del filtro RC: 1/(2*pi*(100k||27k)*10n) = 1/(2*pi*21.3k*10n) = 747 Hz +* Resolucion ADC 12bit a 12V: 2.55V / 4096 = 0.62mV/LSB → 12V/4096 * 4.98 = 14.6mV/LSB -.param Rhi = 27k ; Resistor superior del divisor -.param Rlo = 15k ; Resistor inferior del divisor +.param Rhi = 100k ; Resistor superior del divisor (VALOR CORREGIDO) +.param Rlo = 27k ; Resistor inferior del divisor (VALOR CORREGIDO) .param Cfilt = 10n ; Condensador de filtro anti-aliasing .param Varistor_Vc = 5.5 ; Tension de conduccion del varistor (VA0083Y104KCAT) @@ -106,20 +107,18 @@ Rvar SENSOR_RAW SENSOR_PROT 10 * ----------------------------------------------------------------------- * DIVISOR RESISTIVO (escala la tension al rango ADC 0-3.3V) * ----------------------------------------------------------------------- -Rdiv_hi SENSOR_PROT ADC_PRE 27k -Rdiv_lo ADC_PRE GND 15k +Rdiv_hi SENSOR_PROT ADC_PRE {Rhi} +Rdiv_lo ADC_PRE GND {Rlo} -* Verificacion del divisor con los valores: -* Vout @ 12.0V = 12.0 * 15/(27+15) = 12.0 * 0.357 = 4.29V ← SUPERA 3.3V ADC! -* Vout @ 14.4V = 14.4 * 0.357 = 5.14V ← MUCHO MAS QUE 3.3V +* Verificacion del divisor con los valores corregidos (100k + 27k): +* Vout @ 12.0V = 12.0 * 27/(100+27) = 12.0 * 0.213 = 2.55V ← OK ✓ +* Vout @ 14.4V = 14.4 * 0.213 = 3.06V ← OK, justo en el limite ✓ +* Vout @ 15.5V = 15.5 * 0.213 = 3.30V ← limite absoluto ✓ +* Vout @ 28.0V = pico load dump → diodo clamp ESP32 lo absorbe ✓ * -* PROBLEMA DETECTADO: Con R_high=27k y R_low=15k, el ADC del ESP32 -* recibe 4.3V para una bateria de 12V — el ADC se daña a mas de 3.6V! -* SOLUCION RECOMENDADA (incluida como parametros alternativos): -* Para Vmax=14.4V (bateria cargada con alternador): R_high=100k, R_low=27k -* Vout @ 14.4V = 14.4 * 27/(100+27) = 14.4 * 0.213 = 3.06V ← OK ✓ -* Vout @ 12.0V = 12.0 * 0.213 = 2.55V → resolucion ADC: 12bit → 1.8mV/LSB ✓ -* → Esta es la configuracion de IN-RPM en tu esquema (R41=100k, R40=27k) ← BIEN DISEÑADA +* DISEÑO APROBADO: Todos los puertos IN-BAT, IN-WATER, IN-OILP, IN-RPM +* usan R_high=100k, R_low=27k — diseno uniforme para toda la familia de sensores +* marinos de 12V. Vmax segura en entrada: 15.5V (cubre alternador + margenes). * ----------------------------------------------------------------------- * FILTRO ANTI-ALIASING RC (condensador de filtro) @@ -169,23 +168,25 @@ Dclamp_lo GND ADC_INPUT DCLAMP * ----------------------------------------------------------------------- * NOTAS DE DISENO Y REVISION * ----------------------------------------------------------------------- -* [OK] IN-RPM (R41=100k, R40=27k): division correcta para 0-15V → 0-3.2V ✓ -* [OK] Filtro RC 10nF con 100k||27k: fc=584Hz, adecuado para RPM ✓ -* [REVISAR] IN-BAT/WATER/OILP (R=10k+15k): division da 4.3V a 12V ← EXCEDE ADC -* Opcion A: Cambiar R_high de 10k a 33k → 3.3V @ 12V exacto -* (Rhi=33k, Rlo=15k) → Vout=12*15/48=3.75V... sigue alto -* Opcion B: Cambiar a (R_high=56k, R_low=22k) → 12*22/78=3.38V ≈ ok -* Opcion C: Usar R_high=100k, R_low=39k → 12*39/139=3.36V ← recomendado -* Permite medir hasta 14.8V (bateria cargada): 14.8*39/139=4.15V -* → Necesita diodo clamp adicional o escalar para max 14V +* REVISION FINAL — Todos los puertos analogicos verificados: +* [OK] IN-RPM: R41=100k, R40=27k → 0-15.5V → 0-3.30V ADC ✓ +* [OK] IN-BAT: R41=100k, R40=27k → idem, corregido ✓ +* [OK] IN-WATER: R31=100k, R30=27k → idem, corregido ✓ +* [OK] IN-OILP: R33=100k, R32=27k → idem, corregido ✓ * -* [RECOMENDACION FINAL para entradas de 12V marino]: -* R_high = 100k, R_low = 27k (igual que IN-RPM) -* Vout @ 12V = 3.06V (82% del fondo de escala ADC) -* Vout @ 14.4V (alternador) = 3.06V... espera: -* 14.4 * 27/127 = 3.06V ← perfecto, justo en el limite -* 14.8 * 27/127 = 3.15V ← ok ✓ -* 16.0 * 27/127 = 3.40V ← ligeramente fuera, clamp lo protege ✓ +* Filtro RC con 100k||27k = 21.3k y C=10nF: +* fc = 1/(2*pi*21.3k*10n) = 747 Hz +* Atenua ruido del motor (>1kHz), no afecta senal DC de sensores de presion/temperatura +* +* Varistor VA0083Y104KCAT: +* ATENCION: Este varistor es de 10V (104 indica capacidad, no tension) +* Para proteccion de entradas 12V marino usar varistor de 18V o TVS P6KE15A +* Con el divisor 100k+27k el ADC ya esta protegido por el clamp interno del ESP32 +* en caso de pico — el varistor es una capa adicional para el cable de entrada +* +* Resolucion efectiva del ADC: +* 12V bateria → 2.55V ADC → 12bit: 4096 cuentas × (12V/2.55V)/4096 = 2.93mV/LSB en entrada +* Para bateria: puedes medir cambios de ~3mV en la tension de bateria ← muy buena resolucion .backanno .end