fix: update analog input SPICE to reflect corrected 100K+27K resistor values

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 <noreply@anthropic.com>
This commit is contained in:
2026-05-22 10:19:24 -04:00
parent 210c44341f
commit 3b36f178aa
+43 -42
View File
@@ -38,23 +38,24 @@
* ----------------------------------------------------------------------- * -----------------------------------------------------------------------
* PARAMETROS DEL DIVISOR (modificar segun sensor) * PARAMETROS DEL DIVISOR (modificar segun sensor)
* ----------------------------------------------------------------------- * -----------------------------------------------------------------------
* Configuracion activa: Tension de bateria 12V → ADC 3.3V * VALORES CORREGIDOS EN ESQUEMATICO (todos los puertos analogicos unificados):
* Vout = Vin * R_low / (R_high + R_low) * IN-BAT: R41=100K, R40=27K → Vmax_input = 3.3*(100+27)/27 = 15.5V ✓
* 3.3V = 12V * R_low / (R_high + R_low) * IN-WATER: R31=100K, R30=27K → igual configuracion ✓
* R_low/(R_high+R_low) = 0.275 * IN-OILP: R33=100K, R32=27K → igual configuracion ✓
* Con R_low=15k: R_high = 15k*(1/0.275 - 1) = 15k*2.636 = 39.5k → usar 39.2k * IN-RPM: R41=100K, R40=27K → igual (ya estaba bien) ✓
* *
* VALORES EN TU ESQUEMATICO (segun imagen): * Analisis del divisor con 100K + 27K:
* IN-BAT: R35=10K (R_high?), R34=15K (R_low?) → Vmax = 3.3*(10+15)/15 = 5.5V * Vout @ 12.0V = 12.0 * 27/127 = 2.55V ← OK, bateria descargada
* IN-OILP: R33=10K, R32=15K → igual configuracion * Vout @ 14.4V = 14.4 * 27/127 = 3.06V ← OK, alternador cargando (limite)
* IN-WATER: R31=10K, R30=15K → igual * Vout @ 15.5V = 15.5 * 27/127 = 3.30V ← limite absoluto del ADC
* IN-RPM: R41=100K, R40=27K → Vmax = 3.3*(100+27)/27 = 15.5V (para RPM de 12V ok) * 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 * Rango de tension segura en la entrada del sensor: hasta 15.5V
* que excede el rango del ADC (3.3V). Posible ajuste: R35=27k para dar 3.3V @ 12V exacto. * 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 Rhi = 100k ; Resistor superior del divisor (VALOR CORREGIDO)
.param Rlo = 15k ; Resistor inferior del divisor .param Rlo = 27k ; Resistor inferior del divisor (VALOR CORREGIDO)
.param Cfilt = 10n ; Condensador de filtro anti-aliasing .param Cfilt = 10n ; Condensador de filtro anti-aliasing
.param Varistor_Vc = 5.5 ; Tension de conduccion del varistor (VA0083Y104KCAT) .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) * DIVISOR RESISTIVO (escala la tension al rango ADC 0-3.3V)
* ----------------------------------------------------------------------- * -----------------------------------------------------------------------
Rdiv_hi SENSOR_PROT ADC_PRE 27k Rdiv_hi SENSOR_PROT ADC_PRE {Rhi}
Rdiv_lo ADC_PRE GND 15k Rdiv_lo ADC_PRE GND {Rlo}
* Verificacion del divisor con los valores: * Verificacion del divisor con los valores corregidos (100k + 27k):
* Vout @ 12.0V = 12.0 * 15/(27+15) = 12.0 * 0.357 = 4.29V ← SUPERA 3.3V ADC! * Vout @ 12.0V = 12.0 * 27/(100+27) = 12.0 * 0.213 = 2.55V ← OK ✓
* Vout @ 14.4V = 14.4 * 0.357 = 5.14V ← MUCHO MAS QUE 3.3V * 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 * DISEÑO APROBADO: Todos los puertos IN-BAT, IN-WATER, IN-OILP, IN-RPM
* recibe 4.3V para una bateria de 12V — el ADC se daña a mas de 3.6V! * usan R_high=100k, R_low=27k — diseno uniforme para toda la familia de sensores
* SOLUCION RECOMENDADA (incluida como parametros alternativos): * marinos de 12V. Vmax segura en entrada: 15.5V (cubre alternador + margenes).
* 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
* ----------------------------------------------------------------------- * -----------------------------------------------------------------------
* FILTRO ANTI-ALIASING RC (condensador de filtro) * FILTRO ANTI-ALIASING RC (condensador de filtro)
@@ -169,23 +168,25 @@ Dclamp_lo GND ADC_INPUT DCLAMP
* ----------------------------------------------------------------------- * -----------------------------------------------------------------------
* NOTAS DE DISENO Y REVISION * NOTAS DE DISENO Y REVISION
* ----------------------------------------------------------------------- * -----------------------------------------------------------------------
* [OK] IN-RPM (R41=100k, R40=27k): division correcta para 0-15V → 0-3.2V ✓ * REVISION FINAL — Todos los puertos analogicos verificados:
* [OK] Filtro RC 10nF con 100k||27k: fc=584Hz, adecuado para RPM * [OK] IN-RPM: R41=100k, R40=27k → 0-15.5V → 0-3.30V ADC
* [REVISAR] IN-BAT/WATER/OILP (R=10k+15k): division da 4.3V a 12V ← EXCEDE ADC * [OK] IN-BAT: R41=100k, R40=27k → idem, corregido ✓
* Opcion A: Cambiar R_high de 10k a 33k → 3.3V @ 12V exacto * [OK] IN-WATER: R31=100k, R30=27k → idem, corregido ✓
* (Rhi=33k, Rlo=15k) → Vout=12*15/48=3.75V... sigue alto * [OK] IN-OILP: R33=100k, R32=27k → idem, corregido ✓
* 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
* *
* [RECOMENDACION FINAL para entradas de 12V marino]: * Filtro RC con 100k||27k = 21.3k y C=10nF:
* R_high = 100k, R_low = 27k (igual que IN-RPM) * fc = 1/(2*pi*21.3k*10n) = 747 Hz
* Vout @ 12V = 3.06V (82% del fondo de escala ADC) * Atenua ruido del motor (>1kHz), no afecta senal DC de sensores de presion/temperatura
* Vout @ 14.4V (alternador) = 3.06V... espera: *
* 14.4 * 27/127 = 3.06V ← perfecto, justo en el limite * Varistor VA0083Y104KCAT:
* 14.8 * 27/127 = 3.15V ← ok ✓ * ATENCION: Este varistor es de 10V (104 indica capacidad, no tension)
* 16.0 * 27/127 = 3.40V ← ligeramente fuera, clamp lo protege ✓ * 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 .backanno
.end .end