01 · Punto de partida
Un número que sea una medida
Hasta acá armaste las piezas por separado: el divisor y el puente (Temas 10 y 13), el filtro (Temas 23 y 24), el amplificador de instrumentación (Tema 25) y el ADC. Un sensor real las usa todas a la vez, y el resultado final no es un voltaje sino un número en un float que pretende decir «21,3 °C» o «497,5 g». Entre lo que el sensor entrega y ese número hay cinco eslabones, cada uno con sus errores, y ninguno se puede diseñar mirando solo a los demás por separado.
Dos escenas. Un termómetro de ambiente: un NTC de 10 kΩ cambia su resistencia unas 30 veces entre 0 y 50 °C y vos querés 0,1 °C de resolución. Una balanza de cocina: una celda de carga entrega 1 mV por cada volt de excitación a fondo de escala (5 mV con 5 V) y vos querés distinguir 1 g sobre 5 kg. Son sensores opuestos: el primero tiene una señal enorme y fuertemente no lineal; el segundo una señal diminuta y casi perfectamente lineal. La misma cadena resuelve los dos con otra elección de ganancia, filtro y calibración.
Es la misma situación que tiene un programador al integrar una API de terceros: la documentación dice qué entrega, pero el sistema funciona o no según los contratos entre capas: rangos, unidades, tiempos y qué pasa en los bordes. Este tema es sobre esos contratos.
- ¿Qué ganancia pide cada sensor y quién la limita?
- ¿Cómo se adapta una señal bipolar a un ADC de 0 a 3,3 V?
- ¿Por qué la linealidad se verifica en vez de suponerse?
- ¿Cómo se calibra una balanza sin laboratorio?
- ¿Qué error domina en cada eslabón y cómo se presupuesta?
- ¿Cómo se depura una cadena que mide mal?
02 · La cadena de señal
Cinco eslabones y un presupuesto
Todo sensor resistivo de este curso termina en la misma cadena. Lo que cambia entre un termómetro y una balanza no es el orden, sino los números de cada eslabón.
- 1Sensor y puente.
Convierten una magnitud física en una diferencia de tensión. El puente (Tema 13) además resta el valor de reposo: con el sensor en su valor nominal la diferencia es cero, y todo el rango del amplificador queda disponible para la variación.
- 2Amplificador de instrumentación.
Lleva los milivoltios a voltios sin amplificar el modo común (Tema 25). Su ganancia es el parámetro de diseño más delicado: poca desperdicia resolución, demasiada satura.
- 3Filtro.
Recorta el ruido y el aliasing antes del muestreo (Temas 23 y 24). Su frecuencia de corte se decide por la velocidad real del fenómeno: una temperatura o un peso cambian en segundos, no en milisegundos.
- 4ADC.
Fija el rango (por ejemplo 0 a 3,3 V) y la resolución (12 bits: 0,8 mV por cuenta). Lo que la etapa anterior le entregue fuera de ese rango se pierde.
- 5Calibración y linealización.
Código que convierte cuentas en unidades físicas con constantes medidas, no supuestas: tara, escala, tabla o fórmula.
| Eslabón | Termómetro NTC | Balanza (celda + HX711) |
|---|---|---|
| Señal del puente | +1354 mV (0 °C) a −1180 mV (50 °C) | 0 a 5 mV |
| Ganancia | 1 a 5: la fija el peor extremo | 128 dentro del HX711 |
| Linealidad | Exponencial: hay que linealizar | Casi lineal: se verifica |
| Velocidad | Segundos (inercia térmica) | Décimas de segundo a segundos |
| Filtro | fc ≈ 1 Hz con muestreo a 10 Hz | Promedio de varias lecturas |
| Calibración | Tabla o fórmula Beta + offset | Tara + escala con un patrón |
| Error dominante | Autocalentamiento y tolerancias | Ruido y deriva térmica |
03 · Presupuesto de rango
Del sensor al ADC: caber sin desperdiciar
Antes de elegir un solo componente hay que hacer la cuenta de rango. Se parte del extremo más exigente de la señal y se retrocede hasta la ventana que admite la etapa siguiente.
- 1Calculá la diferencia en cada extremo.
El NTC da +1354 mV a 0 °C y −1180 mV a 50 °C. Cuenta el mayor módulo: 1354 mV. No el valor del centro (que es cero), ni el promedio.
- 2Elegí el cero de la salida con REF.
Con alimentación partida, REF = 0 V y la salida es bipolar. Con un ADC de 0 a 3,3 V, REF = 1,65 V centra la señal en la ventana. REF se alimenta con baja impedancia (Tema 25).
- 3Dividí el semiancho útil por el peor caso.
Con rieles de ±7,5 V: 7,5/1,354 = G ≤ 5,54. Con un ADC que acepta entre 0,1 y 3,2 V (semiancho 1,55 V): 1,55/1,354 = G ≤ 1,14, es decir G = 1.
- 4Dejá margen y verificá los dos extremos.
Con G = 1 y REF = 1,65 V la salida va de 3,00 V (0 °C) a 0,47 V (50 °C): cabe, y sobran 0,2 V arriba y 0,4 V abajo para la tolerancia de los resistores y el cero del puente.
| Entorno | G | Vout a 0 °C | Vout a 25 °C | Vout a 50 °C |
|---|---|---|---|---|
| ±7,5 V, REF = 0 | 2 | +2,71 V | 0,00 V | −2,36 V |
| ±7,5 V, REF = 0 | 5 | +6,77 V | 0,00 V | −5,90 V |
| ±7,5 V, REF = 0 | 10 | +7,50 V* | 0,00 V | −7,50 V* |
| ADC 0–3,3 V, REF = 1,65 V | 1 | 3,00 V | 1,65 V | 0,47 V |
| ADC 0–3,3 V, REF = 1,65 V | 2 | 3,20 V* | 1,65 V | 0,10 V* |
Dos lecciones. Primera: la ganancia la fija el peor extremo, y con G = 10 el termómetro satura en los dos lados mientras que a 25 °C parece perfecto: probar solo en el centro no descubre el problema. Segunda: más ganancia no es más resolución útil. Una vez que la salida cubre casi toda la ventana, subir G solo recorta los extremos.
04 · Termómetro
NTC de 0 a 50 °C
El termistor NTC (Tema 13) disminuye su resistencia con la temperatura según el modelo Beta:
Se lo pone en un puente de 5 V con tres resistores fijos de 10 kΩ. La diferencia del puente es VA − 2,5 V con VA = 5·Rx/(10 kΩ + Rx), y el INA la multiplica por G.
| T (°C) | Rx | ΔV puente | Vout (G = 2) | Vout (G = 5) |
|---|---|---|---|---|
| 0 | 33,6 kΩ | +1353,8 mV | +2,71 V | +6,77 V |
| 10 | 20,2 kΩ | +843,0 mV | +1,69 V | +4,21 V |
| 20 | 12,5 kΩ | +281,3 mV | +0,56 V | +1,41 V |
| 25 | 10,0 kΩ | 0,0 mV | 0,00 V | 0,00 V |
| 30 | 8,0 kΩ | −272,1 mV | −0,54 V | −1,36 V |
| 40 | 5,3 kΩ | −767,7 mV | −1,54 V | −3,84 V |
| 50 | 3,6 kΩ | −1179,7 mV | −2,36 V | −5,90 V |
La columna del medio muestra la no linealidad: de 0 a 10 °C la salida cae 1,02 V (G = 2), de 40 a 50 °C cae 0,82 V. La sensibilidad del puente es de 46,8 mV/°C a 0 °C, 55,5 mV/°C a 25 °C y 36,8 mV/°C a 50 °C: la pendiente de la curva cambia más de un 50 % a lo largo del rango.
Los tres errores que ningún ADC arregla
- Autocalentamiento
- La corriente del puente disipa potencia en el propio NTC: a 25 °C son 2,5 V sobre 10 kΩ, es decir 0,62 mW. Con una constante de disipación de unos 1,5 mW/°C en aire quieto (varía según el encapsulado; mirá la hoja), eso son 0,42 °C de calentamiento propio: el termómetro mide su propia temperatura. Se baja reduciendo la excitación (con 2,5 V la potencia cae a la cuarta parte: 0,10 °C) o alimentando el puente solo durante la lectura.
- Tolerancia de R0 y de B
- Un NTC de 1 % en R0 introduce 0,19 a 0,26 °C de error de offset en todo el rango, y 1 % en B agrega hasta 0,27 °C en los extremos (cero a 25 °C, donde B no influye). Son errores sistemáticos: se corrigen midiendo contra un termómetro de referencia, no promediando.
- Conducción por los cables
- El calor viaja por los terminales hacia el sensor. Un NTC pegado a una pared o con cables gruesos mide algo entre el aire y el soporte. Es un error mecánico, no eléctrico, y la causa más común de «mi termómetro no coincide con el otro».
05 · Calibración
Linealizar y calibrar: lo que hace el software
La ganancia escala la curva pero no la endereza. Hay tres caminos para convertir la salida en grados, de menor a mayor esfuerzo:
Recta de dos puntos
Simple, pero falla en el medio
Se mide a 0 y a 50 °C y se interpola linealmente. A 25 °C estima 26,7 °C: +1,7 °C de error. El máximo es +2,1 °C entre 30 y 38 °C. Los dos puntos coinciden por construcción; el error vive donde no se midió.
Fórmula Beta inversa
Exacta si el modelo vale
1/T = 1/T0 + ln(Rx/R0)/B. Se recupera Rx de la tensión medida y se aplica. En el modelo ideal el error es cero; en un NTC real queda el error del propio modelo Beta (décimas de grado en 0 a 50 °C).
| Paso de la tabla | Puntos | Error máximo | Cuándo conviene |
|---|---|---|---|
| 25 °C | 3 | 1,30 °C | Solo para una idea burda |
| 10 °C | 6 | 0,27 °C | Termómetro doméstico |
| 5 °C | 11 | 0,07 °C | Cuando el sensor garantiza décimas |
El método de calibración del offset es independiente: se mide un punto con un termómetro de referencia (un baño de agua con hielo es 0 °C, y es un patrón gratis) y se corrige por una constante. Corrige R0, la tolerancia de las fijas del puente y el cero del INA, pero no el autocalentamiento ni la forma de la curva.
06 · Balanza
Celda de carga y HX711
Una celda de carga es un puente completo de galgas extensométricas que se deforma con el peso. Su especificación principal es la sensibilidad en mV por cada volt de excitación: una celda de 1 mV/V excitada con 5 V entrega 5 mV a plena carga. Esa es toda la señal: una balanza de 5 kg tiene 1 µV por gramo.
El HX711 integra el amplificador (ganancia 128, 64 o 32) y un ADC de 24 bits. Con ganancia 128 y excitación de 5 V, el rango diferencial es de ±19,5 mV y un LSB equivale a 2,33 nV en la entrada (Tema 25). Para la celda de 5 kg eso da:
| Magnitud | Valor | Cómo se obtiene |
|---|---|---|
| Señal a 5 kg | 5 mV (26 % del rango) | 1 mV/V × 5 V |
| Señal por gramo | 1 µV/g | 5 mV / 5000 g |
| Cuentas por gramo | ≈ 429,5 | 1 µV / 2,33 nV |
| Un LSB | 2,33 mg | 2,33 nV / (1 µV/g) |
| Ruido de entrada | ≈ 50 nV rms = 50 mg rms | Valor típico de la hoja |
| Ruido tras promediar 16 | ≈ 12,5 mg rms | 50 mg / √16 |
El LSB es 20 veces menor que el ruido: los 24 bits no son 24 bits útiles. Con 50 nV rms de ruido solo se mantienen estables unos 17 a 19 bits, y para un peso es más que suficiente.
Tara, escala y verificación
Las cuentas crudas incluyen el peso del plato, el cero eléctrico del HX711 y la deriva de la celda. Se separan con dos constantes medidas:
- 1Tara.
Con el plato vacío, promediar muchas lecturas (64 es razonable). Es el cero: se repite cada vez que arranca la balanza o cambia la temperatura.
- 2Escala con un patrón.
Una botella de 1 L de agua pesa casi 1 kg (en una cocina, ±5 g); un paquete de azúcar o harina cerrado de 1 kg, mejor. Con la tara y la lectura del patrón sale la escala en cuentas por gramo. Si tenés dos patrones, usá el mayor para calcular y el otro para verificar.
- 3Verificación a medio rango.
Pesá un patrón distinto (500 g) y comprobá que lee 500 g dentro de la tolerancia. Una celda real se aparta de la recta unas décimas por mil del fondo de escala (consultá la hoja): ahí vive el error de linealidad.
Balanza (señal lenta y diminuta)
Ganancia alta, mucho promedio
El peso cambia en segundos. Se promedia, no se sube el ancho de banda. Domina el ruido (50 mg por lectura) y la deriva térmica (del orden de 1 g cada 10 °C de variación en una celda de 5 kg típica; depende del modelo).
Termómetro (rango amplio, no lineal)
Ganancia moderada, tabla o fórmula
La señal es enorme. Domina el sensor (autocalentamiento, tolerancias) y la linealización; el ADC y el ruido casi no importan.
La deriva térmica merece una nota aparte: el promedio elimina el ruido pero no la deriva, porque la deriva no es aleatoria. Se tara de nuevo cuando la temperatura cambia, o se mide la temperatura y se compensa por software.
07 · Filtro y muestreo
Filtrar y promediar: dos herramientas distintas
El filtro analógico (Temas 23 y 24) y el promedio digital se parecen —los dos «suavizan»— pero resuelven problemas diferentes. Elegir mal es una fuente clásica de errores.
| Herramienta | Qué elimina | Qué no puede hacer |
|---|---|---|
| Filtro analógico (antes del ADC) | Ruido por encima de fs/2, que si no se pliega sobre la banda útil (aliasing) | Quitar ruido ya dentro de la banda |
| Promedio de N lecturas (después) | Ruido aleatorio dentro de la banda: baja √N veces | Deshacer el aliasing, ni la deriva, ni un error sistemático |
Ejemplo concreto con el termómetro: se muestrea a 10 Hz (Nyquist = 5 Hz) y la temperatura cambia en segundos. Un pasa-bajos RC de 150 kΩ y 1 µF tiene fc = 1/(2π·150 kΩ·1 µF) = 1,06 Hz, una década por debajo de la frecuencia de muestreo, para dejar margen a un filtro de un solo polo.
| Frecuencia | Atenuación | Qué significa |
|---|---|---|
| 1,06 Hz | −3 dB | Frecuencia de corte |
| 5 Hz (Nyquist) | −13,6 dB | Un ruido de 5 Hz pasa a un 21 % |
| 9 Hz | −18,6 dB | Se pliega a 1 Hz con un 12 % |
| 50 Hz (red) | −33,5 dB | Pasa a un 2,1 % |
Lo interesante es el último renglón: 50 Hz es múltiplo exacto de 10 Hz, así que el zumbido de la red se pliega justo a 0 Hz, es decir a un corrimiento de continua que ningún promedio puede distinguir de la medida. Un zumbido de 100 mV a la salida del INA queda en 2,1 mV tras el RC, que a 111 mV/°C (INA ×2, 25 °C) son 0,02 °C de error permanente. Por eso muchos conversores de precisión muestrean a una frecuencia que rechaza la red (el HX711 y los ADC sigma-delta incluyen filtros internos; mirá la hoja) y por eso el próximo tema trata del ruido por sí mismo.
08 · Depurar
Depurar la cadena eslabón por eslabón
Cuando la lectura final está mal, no se prueba «todo junto»: se mide en cada nodo, de a uno, como se hace con un pipeline de datos. Un multímetro y la mitad de la cabeza alcanzan para localizar casi cualquier falla.
- 1 · La alimentación
- ¿La excitación del puente es de 5,000 V y limpia? Una caída por carga o ruido de conmutación aparece como error de ganancia: en un puente, el voltaje de salida es proporcional a la excitación.
- 2 · El puente en equilibrio
- Reemplazá el sensor por su valor nominal (el NTC por 10 kΩ de 0,1 %, la celda por nada). La diferencia debe ser casi 0 mV y, a la salida del INA, VREF. Si no lo es, el problema está en las fijas, el INA o su referencia.
- 3 · Sensor abierto y en corto
- Un NTC desconectado da VA = 5 V, ΔV = +2,5 V y, con G = 2, +5,00 V a la salida; en corto, −5,00 V. Ambos quedan fuera del rango válido (+2,71 a −2,36 V), de modo que el software puede detectarlo: con REF = 1,65 V y G = 1, lo normal está entre 0,47 y 3,00 V, y todo por debajo de 0,3 V o por encima de 3,1 V es «sensor fallado».
- 4 · La ganancia
- Aplicá una diferencia conocida (un divisor de precisión) y comprobá la relación. Es la verificación de Rg, que no se hace sola.
- 5 · El filtro y el ruido
- Mirá la salida con y sin el filtro: la diferencia es el ruido que se estaba recortando. Si cambia al tocar el cable, falta blindaje o un mejor camino de retorno (tema siguiente).
- 6 · El ADC y el código
- Con una tensión conocida en la entrada del ADC (un potenciómetro y el multímetro), comprobá que las cuentas coinciden con V/Vref·2n. Si no, el defecto es de configuración (referencia, ganancia, formato) y no de analógica.
09 · Taller
Dos laboratorios: el termómetro y la balanza
El primero muestra la salida de la cadena NTC en todo el rango, con la ventana del siguiente eslabón sombreada: se ve cuándo satura y cuánto aleja la recta de dos puntos de la curva real. El segundo muestra cuarenta lecturas simuladas de una balanza: el ruido, el efecto de promediar y la deriva térmica que el promedio no corrige.
Termómetro analógico
V_out = V_REF + G·(V_A − 2,5 V)
Recorrido guiado (10 minutos)
- 1Pestaña ①, «ADC ×1 (cabe)».
La curva verde baja de 3,00 V (0 °C) a 0,47 V (50 °C), dentro de la ventana sombreada. La recta punteada une los extremos. A 25 °C la curva queda por debajo de la recta: la calibración de dos puntos estima 26,7 °C (error +1,7 °C), exactamente lo que mostraba el código.
- 2Pasá a «ADC ×2 (satura)».
La curva naranja (sin límite) sale de la ventana por los dos lados y la verde queda aplastada contra 3,2 V y 0,1 V. Los extremos de calibración ya no son 0 ni 50 °C sino el techo y el piso: la estimación es inservible y el simulador lo dice.
- 3Pasá a «Partida ×2», «×5» y «×10».
Con ×2 se ve 2,71 V a 0 °C. Con ×5, 6,77 V: justo por debajo del techo de 7,5 V. Con ×10, el tramo de 0 a 10 °C y el de 40 a 50 °C se aplanan: la ganancia que parecía generosa en el centro era demasiado para los bordes.
- 4Movete por el rango en cada caso.
La sensibilidad (mV/°C) cambia con la temperatura: es máxima cerca de 25 °C y menor en los extremos. La resolución en grados por cuenta empeora donde la curva es más plana.
- 5Pestaña ②, «1 kg, una lectura».
Cada punto es una lectura individual: dispersan unos 50 mg rms (300 mg pico a pico) sobre el peso real, aunque un LSB equivale a 2,3 mg. El ruido es 20 veces mayor que la resolución nominal.
- 6Pasá a «1 kg, promedio de 16».
La línea verde ya no baila: el ruido cae a 12,5 mg rms (√16 = 4 veces menos). Promediar 64 lo baja a 6 mg. Cuesta tiempo: 16 lecturas a 10 SPS son 1,6 s.
- 7Pasá a «Deriva de 10 °C».
La nube de puntos y el promedio se corren 1 g hacia arriba: el promedio es muy estable pero equivocado. Es el caso típico de una balanza que se calentó desde la tara. Promediar más no ayuda; hay que volver a tarar o compensar.
- 8Pasá a «Celda de 2 mV/V» y «Ganancia 64».
Con 2 mV/V la señal por gramo se duplica y el ruido equivale a 25 mg: otra celda mejora la resolución sin tocar la electrónica. Con ganancia 64 el rango se duplica (la señal usa la mitad del porcentaje) pero el LSB se duplica a 4,7 mg: se pierde resolución nominal a cambio de rango, que acá no hace falta.
Preguntas para pensar
- Llevá el termómetro a 0 °C en «Partida ×2» y en «Partida ×10». ¿Qué voltaje da cada uno y qué decide G?
- ¿La salida es lineal con la temperatura? Compará el cambio de 0 a 10 °C con el de 40 a 50 °C.
- Calibrás con 0 y 50 °C. ¿Cuánto error hay a 25 °C y cómo lo corregirías?
- En la balanza, ¿cuántas lecturas hay que promediar para llegar a 10 mg rms con la celda de 1 mV/V?
- ¿Promediar más puede corregir la deriva térmica? ¿Por qué?
Ver respuestas sugeridas
- +2,71 V con ×2 y el techo de 7,5 V con ×10 (la ideal sería +13,5 V). El peor extremo, no el centro, fija G.
- No: de 0 a 10 °C la salida cae 1,02 V con G = 2 y de 40 a 50 °C cae 0,82 V. La curva es exponencial y la ganancia solo la escala.
- Estima ≈ 26,7 °C (+1,7 °C). Se corrige con una tabla de consulta (paso de 10 °C: 0,27 °C de error máximo) o con la fórmula Beta inversa en el microcontrolador.
- N ≥ (50/10)² = 25; en la práctica 32 lecturas (3,2 s a 10 SPS) darían 8,8 mg rms.
- No. La deriva es un corrimiento sistemático y común a todas las lecturas: el promedio la conserva intacta. Solo reduce el ruido aleatorio.
10 · En código
La cadena de punta a punta en Python
Cuatro bloques que se ejecutan en orden y comparten variables: la cadena del NTC con su presupuesto de rango, la linealización y la calibración, la balanza con tara y escala, y el presupuesto de error del termómetro.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar. Ejecutalos en orden.
Paso 1: la cadena NTC y el presupuesto de rango
import math
B, R0, VS, RFIJA = 3950.0, 10000.0, 5.0, 10000.0
def rx_ntc(t_c, r0=R0, b=B):
t_k = t_c + 273.15
return r0 * math.exp(b * (1 / t_k - 1 / 298.15))
def cadena_ntc(t_c, g, ref=0.0, lo=-7.5, hi=7.5):
rx = rx_ntc(t_c)
dif = VS * rx / (RFIJA + rx) - VS / 2 # tensión diferencial del puente
ideal = ref + g * dif
real = min(max(ideal, lo), hi)
return rx, dif, ideal, real
print("T(C) Rx dif(mV) G=2 G=5 G=10 (rieles ±7,5 V)")
for t in (0, 10, 20, 25, 30, 40, 50):
rx, dif, _, _ = cadena_ntc(t, 1)
fila = []
for g in (2, 5, 10):
_, _, ideal, real = cadena_ntc(t, g)
fila.append(f"{real:+6.2f}{'*' if real != ideal else ' '}")
print(f"{t:3d} {rx/1000:5.1f}k {dif*1000:+7.1f} " + " ".join(fila))
print("(* = saturado)")
_, dif0, _, _ = cadena_ntc(0, 1)
_, dif50, _, _ = cadena_ntc(50, 1)
print(f"G máxima sin saturar con rieles de 7,5 V: {7.5 / max(abs(dif0), abs(dif50)):.2f}")
print("ADC 0,1-3,2 V, REF = 1,65 V, G = 1:", [round(cadena_ntc(t, 1, 1.65, 0.1, 3.2)[3], 2) for t in (0, 25, 50)])
print("ADC 0,1-3,2 V, REF = 1,65 V, G = 2:", [round(cadena_ntc(t, 2, 1.65, 0.1, 3.2)[3], 2) for t in (0, 25, 50)])
La tabla de la sección 4 sale de acá. La G máxima es 5,54, y con G = 10 satura en 0, 10, 40 y 50 °C (el 25 °C «perfecto» no avisa nada). Con el ADC, G = 1 da 3,00 / 1,65 / 0,47 V; G = 2 clava los extremos en 3,2 y 0,1 V. Probá cadena_ntc(0, 5): 6,77 V.
Paso 2: linealizar y calibrar
v = lambda t: cadena_ntc(t, 2)[3] # cadena con G = 2 y rieles de ±7,5 V
v0, v50 = v(0), v(50)
print("Calibración lineal de dos puntos (0 y 50 °C):")
peor = 0
for t in (5, 10, 20, 25, 30, 38, 40, 45):
est = (v(t) - v0) * 50 / (v50 - v0)
print(f" {t:2d} °C: estima {est:5.2f} °C (error {est - t:+.2f} °C)")
peor = max(peor, abs(est - t))
print(f"peor error de la muestra: {peor:.2f} °C")
def t_beta(rx): # fórmula Beta inversa
return 1 / (1 / 298.15 + math.log(rx / R0) / B) - 273.15
print("Beta inversa:", [round(t_beta(rx_ntc(t)), 2) for t in (0, 25, 37, 50)])
def error_lookup(paso):
ts = list(range(0, 51, paso))
vs = [v(t) for t in ts]
peor = 0
for k in range(501):
t = k / 10
x = v(t)
for i in range(len(ts) - 1):
a, b = vs[i], vs[i + 1]
if min(a, b) - 1e-12 <= x <= max(a, b) + 1e-12:
est = ts[i] + (x - a) * paso / (b - a)
peor = max(peor, abs(est - t))
break
return peor
for paso in (25, 10, 5):
print(f"tabla cada {paso:2d} °C: error máximo {error_lookup(paso):.3f} °C")
La recta de dos puntos estima 26,72 °C a 25 °C (+1,72), con un máximo de +2,09 °C a 30 °C. La Beta inversa recupera 0, 25, 37 y 50 °C sin error. Las tablas de 25, 10 y 5 °C dejan 1,30, 0,27 y 0,07 °C: duplicar los puntos reduce el error unas 4 veces (interpolación lineal: el error crece con el cuadrado del paso).
Paso 3: la balanza, con tara y escala
import random
import statistics
CELDA_MV_V, EXCITACION, CAPACIDAD_G = 1.0, 5.0, 5000.0
LSB_NV = 5 / 128 / 2**24 * 1e9 # 1 LSB del HX711 referido a la entrada
CUENTAS_POR_G = (CELDA_MV_V * 1e-3 * EXCITACION / CAPACIDAD_G) / (LSB_NV * 1e-9)
print(f"1 LSB = {LSB_NV:.2f} nV, {CUENTAS_POR_G:.1f} cuentas/g ({1000 / CUENTAS_POR_G:.2f} mg por cuenta)")
random.seed(26)
TARA_REAL, RUIDO_NV = 52310, 50.0
def leer(peso_g, deriva_g=0.0):
ruido = random.gauss(0, RUIDO_NV / LSB_NV) # 50 nV rms expresados en cuentas
return round(TARA_REAL + (peso_g + deriva_g) * CUENTAS_POR_G + ruido)
def promedio(peso_g, n=16, **kw):
return statistics.fmean(leer(peso_g, **kw) for _ in range(n))
tara = promedio(0, 64)
c1000 = promedio(1000, 64)
escala = (c1000 - tara) / 1000
print(f"tara = {tara:.0f} cuentas, con 1 kg = {c1000:.0f}, escala = {escala:.2f} cuentas/g")
for patron in (200, 500, 2000):
medidas = [(promedio(patron) - tara) / escala for _ in range(10)]
print(f"patrón {patron:4d} g: media {statistics.fmean(medidas):7.2f} g, desvío {statistics.stdev(medidas):.3f} g")
print("sin promediar (n = 1), patrón 500 g:", f"desvío {statistics.stdev([(leer(500) - tara) / escala for _ in range(200)]):.3f} g")
print("deriva térmica de 1 g (≈ 10 °C): lectura de 0 g =", f"{(promedio(0, 64, deriva_g=1.0) - tara) / escala:.2f} g")
Cada cuenta vale 2,33 mg (429,5 cuentas por gramo). Con 64 lecturas para la tara y el patrón, la escala sale en 429,50 cuentas/g. Promediando 16 lecturas, el desvío es de ≈ 0,01 g; sin promediar, de ≈ 0,05 g (los 50 mg rms del modelo). Y la deriva de 1 g aparece completa en la lectura de 0 g: el promedio no la toca.
Paso 4: el presupuesto de error del termómetro
B, T25, VS, RF = 3950.0, 298.15, 5.0, 10000.0
def pendiente(t_c): # |dRx/Rx| por °C
return B / (t_c + 273.15) ** 2
def mv_por_c(t_c, vs=VS):
rx = rx_ntc(t_c)
return vs * RF * rx * pendiente(t_c) / (RF + rx) ** 2 * 1000
def presupuesto(t_c, vs=5.0, theta=1.5):
rx = rx_ntc(t_c)
s = pendiente(t_c)
tol_r0 = 0.01 / s # R0 con 1 %
tol_b = 0.01 * B * abs(1 / (t_c + 273.15) - 1 / T25) / s # B con 1 %
lsb = 3100 / 4096 / mv_por_c(t_c, vs) # ADC de 12 bits sobre 3,1 V, G = 1
va = vs * rx / (RF + rx)
autocal = (va ** 2 / rx) * 1000 / theta # mW / (mW por °C)
azar = math.sqrt(tol_r0 ** 2 + tol_b ** 2 + lsb ** 2)
print(f"{t_c:2d} °C: R0 {tol_r0:.2f} | B {tol_b:.2f} | ADC {lsb:.3f} | autocalentamiento {autocal:.2f} | total ≈ {azar + autocal:.2f} °C")
print("Excitación de 5 V:")
for t in (0, 25, 50):
presupuesto(t)
print("Excitación de 2,5 V (potencia 4 veces menor):")
for t in (0, 25, 50):
presupuesto(t, vs=2.5)
Con 5 V el total ronda 0,6 a 0,7 °C y el autocalentamiento (0,3 a 0,4 °C) es el término mayor; el ADC aporta solo 0,014 a 0,021 °C. Con 2,5 V el total baja a 0,33–0,46 °C aunque el ADC empeore al doble de la resolución (sigue siendo irrelevante). Se suman en cuadratura los errores aleatorios y se agrega el autocalentamiento, que es sistemático, en lineal.
11 · Analogía de programador
Un pipeline ETL con contratos entre etapas
| En un pipeline de datos | En la cadena de señal |
|---|---|
| Extraer: leer la fuente cruda | Sensor y puente: lo físico se vuelve señal eléctrica pequeña |
| Transformar: escalar, normalizar, quitar outliers | INA y filtro: ganancia y recorte del ruido |
| Cargar: guardar en el esquema de destino | ADC y calibración: cuentas con unidades y constantes medidas |
| Un contrato de rangos entre etapas (tipo, mín, máx) | La ventana de cada eslabón: G·ΔV debe caber en el rango del siguiente |
| Un test de borde: valores vacíos, nulos, máximos | Probar con el sensor a 0 °C y a 50 °C, no solo a 25 °C |
| Validar datos imposibles y marcarlos como fallo | Sensor abierto o en corto: salida fuera de rango, aviso en software |
| Datos de entrenamiento y de prueba separados | Calibrar con dos puntos y verificar con uno distinto en el medio |
| Una muestra sesgada que el promedio no corrige | La deriva térmica y el error sistemático: no se eliminan promediando |
| Un job de re-sincronización periódica | Re-tarar la balanza o recalibrar el cero cuando cambia el clima |
La enseñanza es la de siempre en sistemas de varias capas: cada etapa puede estar bien y el resultado estar mal si nadie verificó los contratos entre ellas. Un INA perfecto detrás de un puente mal escalado es un componente correcto en un sistema equivocado.
12 · Comprensión
Confusiones frecuentes
«Un INA y un ADC alcanzan»
Faltan el filtro anti-alias, una referencia estable, el desacople de las alimentaciones y la calibración. La cadena tiene cinco eslabones, no dos, y los que se omiten son los que arruinan la medida.
«Más ganancia es más precisión»
La ganancia amplifica también el ruido, la deriva y el offset. La precisión la dan el CMRR, el filtrado, el sensor y la calibración. Una ganancia mayor que la que cabe en la ventana solo recorta la señal.
«La ganancia endereza la curva»
G escala, no linealiza. El NTC sigue siendo exponencial a la salida; linealizar es un trabajo del software (Beta, tabla, polinomio).
«Más bits significa más exactitud»
La resolución (cuántas cuentas distingue) no es la exactitud (cuánto se acerca a la verdad). Un ADC de 24 bits detrás de un NTC de 1 % y 0,4 °C de autocalentamiento sigue midiendo con décimas de error. Los 24 bits del HX711 rinden unos 17 a 19 útiles por el ruido.
«Calibré en dos puntos y ya está»
En una curva no lineal, los puntos de calibración coinciden y el medio no: +1,7 °C a 25 °C. Hay que verificar a mitad de rango, y la calibración deriva con el tiempo y la temperatura.
«Promediar arregla cualquier error»
El promedio reduce el ruido aleatorio (√N), pero no el offset, la deriva, el error de escala ni el aliasing. Es una herramienta contra un solo tipo de error.
«El sensor no afecta a lo que mide»
El NTC se autocalienta (0,42 °C a 5 V), el cable conduce calor y la celda deriva con la temperatura. Cada sensor perturba y es perturbado; la medida lo refleja.
13 · Práctica guiada
Ejercicios de cadena
Ejercicio 1: rango sin techo
Con el NTC del tema y rieles de ±7,5 V, ¿cuál es la mayor ganancia que admite el extremo frío sin saturar? Elegí Rg de un AD620 con un valor E96 y calculá las salidas a 0 y a 50 °C.
Ver solución razonada
Gmáx = 7,5 / 1,354 = 5,54. Para G ≈ 5: Rg = 49,4 kΩ / 4 = 12,35 kΩ, y el E96 más cercano es 12,4 kΩ (G = 1 + 49,4/12,4 = 4,98). Salidas: 4,98 × 1,354 = +6,74 V a 0 °C y 4,98 × (−1,180) = −5,88 V a 50 °C. Cabe, con 0,76 V de margen en el frío. G = 10 satura en los dos extremos.
Ejercicio 2: el filtro de la cadena
El termómetro se muestrea a 10 Hz. Elegí un RC de un solo polo con fc cercana a una década menos y valores E12. Calculá cuánto queda de un zumbido de 50 Hz y qué error en grados produce si a la salida del INA (G = 2) vale 100 mV. Nota: 50 Hz con muestreo de 10 Hz se pliega a 0 Hz.
Ver solución razonada
Objetivo: fc ≈ 1 Hz. R = 150 kΩ (E12) y C = 1 µF dan fc = 1/(2π·150 kΩ·1 µF) = 1,06 Hz. A 50 Hz: 1/√(1 + (50/1,06)²) = 0,0212 (−33,5 dB). El zumbido de 100 mV queda en 2,1 mV, y como se pliega a continua es un corrimiento permanente: 2,1 mV / 111 mV/°C ≈ 0,02 °C. Mejor aún: muestrear de modo que 50 y 60 Hz no caigan en 0 (a 11 Hz dejan de caer en continua y se pueden filtrar o restar) o usar un filtro de dos polos.
Ejercicio 3: la balanza casera
Medís: tara = 52 310 cuentas; con una bolsa de 1000 g, 481 840 cuentas; con un objeto desconocido, 266 000 cuentas. Calculá la escala y el peso del objeto. Con 1 LSB = 2,33 mg y ruido de 50 mg rms, ¿cuántas lecturas promediarías para una incertidumbre de 5 mg?
Ver solución razonada
Escala = (481 840 − 52 310) / 1000 = 429,53 cuentas/g. Peso = (266 000 − 52 310) / 429,53 = 497,5 g. Para 5 mg: N = (50/5)² = 100 lecturas (10 s a 10 SPS). Cuidado: si el cuarto cambió de temperatura 3 °C desde la tara, la deriva (≈ 0,3 g) supera de lejos esos 5 mg y hay que volver a tarar.
Ejercicio 4: ¿qué paso de tabla?
Necesitás que la interpolación de la tabla NTC no agregue más de 0,1 °C. ¿Cuántos puntos hacen falta en 0 a 50 °C? ¿Y si podés tolerar 0,3 °C?
Ver solución razonada
El paso de 10 °C (6 puntos) deja 0,27 °C; el de 5 °C (11 puntos) deja 0,07 °C. Para ≤ 0,1 °C: 11 puntos, cada 5 °C. Para ≤ 0,3 °C: 6 puntos, cada 10 °C. Alternativa sin tabla: la fórmula Beta inversa, que cuesta un logaritmo y no ocupa memoria.
Ejercicio 5: presupuesto de error del termómetro
A 50 °C, el NTC tiene R0 con 1 % y B con 1 %, el autocalentamiento es 0,32 °C y el ADC de 12 bits aporta 0,02 °C. ¿Cuál es el error total? ¿Qué eslabón mejorarías primero y cómo?
Ver solución razonada
A 50 °C: R0 aporta 0,26 °C y B 0,27 °C. Cuadratura de los aleatorios: √(0,26² + 0,27² + 0,02²) = 0,375 °C; más el autocalentamiento sistemático: ≈ 0,70 °C. El ADC es irrelevante. Lo primero que se mejora es la excitación: pasar de 5 V a 2,5 V baja el autocalentamiento a 0,08 °C (el total pasa a 0,46 °C) sin tocar nada más. Después, calibrar R0 contra un patrón (el baño de hielo) para anular el 0,26 °C sistemático.
Ejercicio 6: diagnosticar síntomas
(a) El termómetro marca +5,00 V constante, a cualquier temperatura. (b) Después de calibrar a 0 y 50 °C, a 25 °C marca 26,7 °C. (c) La balanza marca 1 g de más al cabo de media hora, sin tocar nada. (d) La balanza salta ±5 g cuando alguien toca el cable.
Ver solución razonada
(a) NTC desconectado: VA = 5 V, ΔV = +2,5 V × G = 2 da +5,00 V, fuera del rango válido (+2,71 a −2,36 V): el software debe marcarlo como falla. (b) No linealidad: la recta de dos puntos no sirve; usar tabla o fórmula Beta. (c) Deriva térmica de la celda y de la electrónica al calentarse: dejar calentar antes de tarar, o re-tarar, o compensar con la temperatura. (d) Ruido por cable sin blindaje o con mal retorno: es el tema siguiente.
14 · Síntesis
Ideas para recordar
- La cadena: sensor → puente → INA → filtro → ADC → calibración. Cada eslabón se presupuesta: rango y error.
- Gmáx = semiancho de la ventana / diferencia máxima del puente: la fija el peor extremo (NTC: 5,54 con ±7,5 V, 1 con un ADC de 3,3 V).
- REF centra la salida en la ventana del ADC (1,65 V para 3,3 V); se alimenta con baja impedancia.
- El NTC es exponencial: la recta de dos puntos da +1,7 °C a 25 °C; tabla cada 10 °C (0,27 °C), cada 5 °C (0,07 °C) o fórmula Beta.
- El NTC se autocalienta (0,42 °C con 5 V): bajar la excitación mejora más que subir bits.
- Balanza: 1 µV por gramo; tara con el plato vacío, escala con un patrón, verificación con otro; 429,5 cuentas/g con HX711 a ganancia 128.
- Promediar baja el ruido √N veces; no corrige la deriva, el offset ni el aliasing.
- Un sensor abierto o en corto cae fuera del rango válido: el software lo detecta.
- Depurar eslabón por eslabón: alimentación, puente en equilibrio, sensor abierto/corto, ganancia, filtro, ADC.
- Calibración y verificación: dos puntos más uno en el medio, y re-tarar cuando cambia el clima.
¿Listo para el Tema 27?
Podés avanzar si sos capaz de responder esto sin mirar:
- Calcular la ganancia máxima de una cadena a partir de la diferencia extrema del puente y la ventana del ADC.
- Elegir REF y G para que un NTC de 0 a 50 °C quepa en un ADC de 0 a 3,3 V.
- Explicar por qué la calibración de dos puntos falla en el medio de una curva exponencial.
- Calibrar una balanza con tara, escala y verificación, y estimar su resolución real.
- Decidir entre filtrar y promediar según el tipo de error.
- Enumerar los errores del termómetro y decir cuál domina.
- Diagnosticar sensor abierto, no linealidad, deriva y ruido de cable por sus síntomas.
La cadena ya funciona, pero hay un enemigo que apareció varias veces sin nombre: el ruido de los cables, de la red y de las propias fuentes. En el próximo tema lo estudiamos: tipos de ruido y cómo mitigarlos.