martes, 20 de febrero de 2018

Respecto de las calibraciones de SLab

Este es un breve artículo sobre cuánto se puede confiar en las calibraciones de los DAC en el sistema SLab.

Observando el comando CurveVV de trazado de curvas entrada salida de tensión del módulo DC, se observa que se puede usar la configuración básica que usa DAC1 y ADC1:

 

O también se puede usar una configuración alternativa que usa DAC1, ADC1 y ADC2:


Si la operación DAC1 se ha calibrado adecuadamente, uno puede preguntarse por qué es necesario tomar medidas en Vi usando ADC2.

Bien, la verdad es que no siempre se puede confiar en las calibraciones de los DAC porque pueden depender de la carga aplicada a sus nodos. Los circuitos de los drivers de los DAC, se basan en amplificadores operacionales seguidores o amplificadores no inversores:



  
Los operacionales están limitados en las corrientes que pueden entregar. Ello no afecta a los ADC porque no toman corriente en los nodos que miden, pero si afecta a los DAC que ven la carga asociada a los nodos en los que fuerzan una tensión.

La siguiente figura muestra un circuito de prueba para las capacidades de carga de salida de los DAC. DAC 1 está conectado a ADC1 y a una resistencia R con conexión a tierra.

La siguiente figura muestra las lecturas de ADC en función de los valores de DAC establecidos, para diferentes valores de la resistencia R. Puede se puede ver, el valor programado en el DAC proporciona la tensión adecuada al nodo para resistencias de 10k o más. Para cargas más bajas hay una degradación que aumenta a voltajes más altos. Para una carga de 100 ohmios, el voltaje solo alcanza aproximadamente 1.5 voltios con cierta degradación antes de llegar a este punto.

¿Era de esperar este comportamiento? Bien, la hoja de datos del opamp MCP6002 muestra las siguientes corrientes máximas de cortocircuito:



A 3.3V y 25ºC, la corriente de cortocircuito es de aproximadamente 15 mA. Para una carga de 100 ohmios, por tanto, la tensión máxima será de 1.5 V. Este es el resultado que se muestra en las curvas obtenidas.
Para una resistencia de 1k, el límite de voltaje debe ser de 15 V, pero vemos cierta degradación antes de alcanzar el límite de 3.3V. ¿Porqué es así?

El límite en este caso es el margen de tensión a las alimentaciones. El MCP6002 es un opamp full rail. Ello significa que deben poder alcanzar ambos raíles de alimentación en el voltage de salida. En la práctica, sin embargo, ningún opamp puede ser realmente full rail. Es siempre necesario disponer de alguna diferencia de voltaje entre la salida y las alimentaciones para mantener la corriente de salida. Esta diferencia mínima de voltaje a las alimentaciones se define como voltage headroom. La siguiente figura, tomada de la hoja de datos de opamp, muestra este parámetro para nuestro opamp.


En nuestro caso, para alcanzar 3.3V usando una resistencia de 1k, necesitamos proporcionar 3.3mA. De la curva anterior, podemos ver que necesitamos un margen de aproximadamente 100 mV para mantener esta corriente. Por tanto, no podemos alcanzar los 3.2V y eso es lo que estamos viendo en nuestras mediciones.

El mismo experimento se puede realizar para cargas conectadas a Vdd.

Como es posible imaginar, la degradación será, en este caso, en los voltajes bajos, cuando el opamp necesita drenar más corriente.


Para una corriente de cortocircuito especificada de 15 mA, la caída máxima de voltaje a Vcc será de 1.5 V con una carga de 100 Ohm. Como Vdd es 3.3 V, se obtiene un voltaje mínimo de 1.8 V respecto a la refencia. Más o menos lo que estamos midiendo.
El margen de voltaje también explica por qué no podemos alcanzar el límite de 0V con una carga de 1k.

Eso es todo de momento. Cuando se fuerzan voltajes utilizando SLab o cualquier otro instrumento como una fuente de alimentación o un generador de funciones, siempre hay límites para la carga se puede sorpotar.
Si no se está seguro de que no habrá problemas de carga, es una buena idea medir el valor de voltaje REAL en el nodo en lugar de confiar en el voltaje seleccionado en el instrumento.

En el caso particular del comando CurveVV, el uso de ADC 2 en el nodo forzado por DAC 1 garantiza que las curvas finales obtenidas relacionan la entrada de voltaje REAL con la tensión de salida en el circuito.


lunes, 12 de febrero de 2018

Primera version de SLab

Esta es la primera versión de Small Lab (SLab), un proyecto en el que he estado trabajando durante bastante tiempo.


SLab es un proyecto para desarrollar una herramienta de aprendizaje práctico de electrónica bajo un presupuesto mínimo. La idea es proporcionar, a cualquiera que lo desee, un sistema capaz de inyectar excitaciones en un circuito y obtener mediciones de maner que se a fácil entender, de manera práctica, como operan los circuitos.

Bajo costo significa un costo realmente bajo, menos de 40 € según mis cálculos aproximados para un sistema completo con instrumentación y los componentes para construir los circuitos.

El sistema completo (y algunos avisos)

El sistema Slab está compuesto de la cadena de elementos mostrada en la figura siguiente:


Primero tenemos nuestro circuito bajo prueba. Este es un circuito que nos permite aprender algo sobre electrónica. Luego tenemos una placa de hardware que puede inyectar señales en el circuito y medir el voltaje en algunos de sus nodos. La placa se conecta a un PC donde algunos módulos en lenguaje Python interactúan con la placa enviando comandos a través de una conexión COM serie implementada en USB. El usuario final se halla en el extremo derecho de la cadena enviando comandos de alto nivel para que se ejecuten en el sistema SLab. Esos comandos, si es necesario, se pueden escribir en scripts Python para facilitar las tareas repetitivas. También es posible crear bibliotecas propias que se conecten con las de SLab para ampliar las capacidades del sistema.

Obsérvese la zona de aislamiento roja en el dibujo anterior. Se supone que solo se debe conectar el circuito bajo prueba a la placa de hardware. Ninguna conexión eléctrica, excepto el cable USB, deberá salir de la zona de protección. El circuito también será alimentado solo por la placa de hardware. Operando de esta manera el sistema es bastante seguro.

Si se desea una capa adicional de protección, o no se está seguro de las propias acciones, es posible utilizar un cable USB aislado junto con un HUB con alimentación para conectarse a la placa de harware como en la figura siguiente. De esa forma, es todavía posible podría dañar la placa de hardware o el HUB, pero el PC estará bastante más seguro.

En cualquier caso, siempre se aplica el siguiente descargo de responsabilidad:

El autor de este documento no se hace responsable por ningún daño a usted, sus propiedades o equipos debido al uso del sistema SLab. Esto es cierto tanto si se están siguiendo los procedimientos indicados como si no.
 

El hardware

Para mantener los costes lo más bajos posible, el principal elemento de hardware del sistema es una placa de demostración de un microcontrolador. La placa elegida para esta primera versión es la placa STM32 Nucleo64 F303RE.

Placa Nucleo64 F303RE

¿Por qué esta placa? Bueno, es barata, a dia de hoy solo 9 € en Farnell y es bastante capaz. Incluye el microcontrolador STM32F303RE que tiene dos DACs de 12 bits, cuatro ADCs de 12 bits, 512 KB de flash y 80 KB de SRAM. También soporta MBED. Ello significa que instalar un firmware binario es tan simplemente arrastrarlo sobre la unidad de almacenamiento que aparece en el PC cuando se conecta la placa. Además, la comunicación USB incluye un enlace Serie sobre USB que instala el controlador tan pronto como se conecta la placa a un PC. Finalmente, como MBED es tan fácil de usar, y la placa es mucho más potente que la mayoría de los Arduinos, tener esta placa también te permite jugar con el desarrollo de firmware en tu tiempo libre si así lo deseas.

Usando el software adecuado en la placa, se le puede hacer que envíe señales desde los DAC y lea voltages con las entradas ADC. El problema es que generalmente es necesario añadir algo de buffering para evitar los efectos de carga cuando se conectan ADCs y DACs a un circuito bajo test (CUT).
La siguiente figura muestra una solución adecuada basada en seguidores de tensión, basados en amplificadores operacionales, para todas las salidas DAC y entradas ADC. Observese que también se agrega un LED y una resistencia para poder ver que el CUT está correctamente alimentado.

Drivers para los ADC y DAC
Obsérvese que DAC2, asociado al pin D13, tiene un amplificador no inversor en lugar de un seguidor. Esto es necesario porque, en la placa F303RE, el pin D13 también está conectada a un LED, lo que nos impide utilizar todo el rango de la DAC y estamos limitados a la mitad inferior del rango completo. Esto no es problema, sin embargo, como veremos más adelante.

Es posible implementar el circuito con los drivers en una placa protoboard, sin soldadura, y queda suficiente espacio para un circuito a medir. La siguiente figura muestra la placa F303RE, los drivers y un circuito de prueba compuesto por una resistencia y un diodo.


Si tienes la capacidad de soldar, puedes implementar el circuito de los drivers en un shield. La siguiente figura muestra los controladores en una placa diseñada para Arduino. Esta es un abuena solución porque la placa F303RE tiene conectores compatibles con Arduino.

Driver shield
Si tienes la opción de construir tus propios PCB, se puede crear un shield mejor. La siguiente figura muestra la "Long Board". Incluye la placa F303RE, un shield basado en un PCB fresado que incluye los drivers, una placa de protoboard para el circuito de prueba y un a lámina de aluminio para unirlo todo. Un pequeño laboratorio de electrónica en un sólo 28 x 8 cm. Los detalles están en la documentación de SLab.
 
Long Board

Respecto a la documentación del proyecto. Actualmente está toda en inglés. Ello es debido a que mi tiempo es limitado e intento llegar al máximo de gente. Si tengo tiempo miraré de generarla también en castellano.

La siguiente imagen muestra el diagrama del shield con sus 17 pines macho. Incluye dos pines de masa (GND), un pin de alimentación Vdd de 3,3 V, las dos salidas DAC con búfer, las cuatro entradas ADC con búfer y ocho líneas de E/S digitales. Todo ello se puede controlar desde código escrito en Python.

Dependiendo de los recursos y capacidades disponibles, se puede usar cualquiera de las opciones de hardware para unir la placa MCU de demostración, los controladores y el espacio para montar un circuito a prueba. En cualquier caso, al final, tendrás los elementos que se muestran en la siguiente figura: Una alimentación Vdd, dos salidas DAC y cuatro entradas ADC. También se puede agregar la E/S digital, pero esta no es necesaria para la mayoría de los circuitos analógicos.

Elementos de SLab
Usando los integrados amplificadore operacionales MCP6002 y MCP6004 propuestos, se obtiene una impedancia de entrada muy alta en los ADC, y una operación full rail casi completa dentro del rango de 3,3V de la placa. Las capacidad de suministrar corriente del los amplificadores operacionales no son es muy grande grandes, pero, como estamos alimentando el sistema desde el puerto USB, de todos modos estamos bastante limitados en la corriente disponible.

Sería posible diseñar un circuito de interfaz con más rango de voltaje y corriente. Y se hará en el futuro, pero, por ahora, la idea es mantener el sistema lo más barato y simple posible. Hacer un mejor circuito de interfaz no es difícil en absoluto, el problema es que esté disponible, a bajo costo, para todos.

El software

Un mal software puede hacer que un dispositivo de instrumentación de bajo presupuesto sea una pesadilla de usar, y desarrollar un buen software es difícil y lleva mucho tiempo. Para este proyecto, he aprovechado la gran biblioteca de Python y, en particular, de algunas bibliotecas de SciPy (NumPy y Matplotlib).

Pero Python no es fácil de usar en la placa F303RE y, además, sería muy ineficiente para realizar mediciones temporizadas. Por lo tanto, el sistema completo necesita un elemento adicional: el firmware de la placa que es el elemento intermedio entre los ADCs y DACs de la placa y el código de Python en el PC. Este firmware actúa como un servidor para comandos enviados desde un PC cliente.

Sistema SLab completo
La estructura del software se asemeja un tanto al protocolo firmata con un servidor en la placa de hardware y un cliente en el PC. Pero no es firmata. La diferencia principal, aparte del hecho de que la comunicación no es MIDI, es que los comandos pueden incluir la generación de formas de onda y la lectura de secuencias de valores de voltaje a velocidades  de muestreo constantes (hasta aproximadamente 80 kHz con el firmware actual). Algunas funcionalidades, como las de contínua, se podrían realizar agregando una capa de Python a la firmata, pero no a todas, especialmente para las transitorias y de alterna. En general, el sistema SLab está más orientado a las señales analógicas que a las digitales.

El firmware de la placa

Como la placa F303RE está habilitada para MBED, la primera versión del firmware se ha desarrollado en el compilador en la nube de MBED. Planeo diseñar una versión futura del firmware, probablemente sin MBED, para optimizar el código tan cerca como sea posible de los límites de la placa. En la siguiente tabla, puede ver que, cuando se usa un solo canal, el tiempo de muestreo en mediciones transitorias puede ser tan bajo como 13 microsegundos. Esto no es malo del todo para una placa de microcontrolador, pero está lejos de las capacidades de la placa F303RE que pueden obtener frecuencias de muestreo en el rango de MHz. La mayoría de los problemas asociados a usar más de un canal se deben al hecho de que MBED usa sólo un ADC para todas las entradas analógicas. Los cuatro canales no se pueden leer, por tanto, al mismo tiempo. Siempre hay margen de mejora, y seguramente el firmware mejorará. Cuando tengo tiempo, claro.

Capacidades de muestreo
El firmware de la placa se comunica con el PC y básicamente recibe comandos, interactua con el circuito a través de los DAC y ADC, y responde al PC. Algunos ejemplos de comandos son:

  •     Establecer un voltaje en un DAC
  •     Lee el voltaje en una entrada ADC
  •     Leer una secuencia de valores de ADC con una determinada frecuencia de muestre
  •     Almacenar formas de onda que se generarán más adelante en los DAC
  •     Generar formas de onda y leer  la respuesta del circuito a ellas

Lo más complejo que puede hacer el firmware de la placa es generar dos formas de onda arbitrarias diferentes en las dos salidas DAC y leer simultáneamente las cuatro entradas ADC. Después de generar las ondas y leer los ADCs durante un tiempo, los datos se envían al PC para su procesamiento.El protocolo de comunicación entre la placa y la PC está completamente documentado, de modo que si tienes una placa con al menos dos DAC y cuatro entradas ADC y sabes sobre desarrollo de firmwares, puedes crear tu propio firmware para interactuar con el sistema SLab. El enlace de comunicación implementa verificación CRC, pero, como la comunicación USB es bastante fiable a cortas distancias, el objetivo principal del CRC es detectar errores de software.Las capacidades de la placa se leen en el momento en que ésta se conecta al PC, por lo que no es necesario realizar modificaciones en el código del PC si se desarrolla firmware para una nueva placa.

El firmware actual de la placa ocupa aproximadamente 2500 líneas de código "C". Éste se puede obtener en el proyecto SLab en Github. Pero, si sólo quieres usarlo, basta descargar el archivo binario y arrástrarlo en la unidad masiva asociada a la placa que aparece en el PC cuando ésta se conecta.

El firmwar también está disponible en MBED.


El código Python

El firmware de la placa interactua con el circuito por lo que debe estar lo más optimizado posible ya que es quien establece los límites del sistema completo. No obstante, una parte importante del software, es el código Python. Actualmente el proyecto SLab tiene cerca de 6000 líneas de código Python. Realmente no es tanto debido a los comentarios y las líneas en blanco. Aunque los comentarios también son importantes porque generan el subsistema de ayuda SLab. No exactamente doxygen pero es la misma idea.

Para trabajar con un circuito, se abre un intérprete de Python, se importa el módulo SLab, y luego se llama a las funciones de SLab que se comunican con la placa, realizan excitaciones y/o mediciones y devuelven los resultados. Gracias a Matplotlib, los resultados se pueden mostrar en la pantalla y, gracias a NumPy, los resultados se pueden manipular tanto como quieras.
Todo el código SLab Python está incluido en el mismo proyecto Github que el código de firmware.

La primera capa del código Python es el código de calibración. ¿Cómo se obtienen buenas mediciones de los instrumentos? Usando una calibración adecuada, evidentemente. Antes de usar la placa, debe ser calibrada. A partir del procedimiento de calibración, se obtiene un conjunto de curvas, una para cada DAC y ADC que describen cómo se relacionan los valores reales con las entradas o salidas de esos dispositivos. A modo de ejemplo, la siguiente figura muestra las curvas de calibración ratiométricas del DAC que incluyen los drivers indicados en el esquema anterior. Observese cómo el DAC2 tiene una pendiente de dos debido al amplificador no inversor con dos resistencias iguales. Pero no hay problema ya que la calibración se encarga de todo. Una vez que se completa la calibración, puedes olvidarte de ella, SLab se ocupa de los detalles internamente en cada medición.

Curvas de calibración de los DACs

La última capa del código SLab son las funciones que el usuario puede llamar. Esas funciones indican que la placa debe hacer algo y devolver un resultado, si está disponible. Puede ser tan simple como establecer un DAC a valor de voltaje dado o tan complejo como medir la distorsión que un circuito induce en una onda sinusoidal o obtener un diagrama de bode obteniendo la respuesta a varias ondas sinusoidales. Los comandos simples se envían directamente a la placa después de la calibración. Los comandos más complejos requieren más trabajo del código Python.

Algunos ejemplos

Ahora, demos paso a algunos ejemplos de lo que se puede hacer SLab. Puede consultarse la documentación de referencia para obtener más ejemplos. Comencemos jugando con un simple filtro paso bajo:
Filtro paso bajo
Se conecta la salida del DAC1, después del búfer, a la entrada del filtro y la entrada del ADC1, antes del búfer, a la salida del filtro. Luego, se ejecuta el siguiente código de Python. No es necesario usar el modo interactivo, pero siempre es posible usarlo si se desea.



Las primeras seis líneas calculan la respuesta ideal de un filtro paso bajo utilizando NumPy. La sexta línea mide la respuesta frecuencial real del circuito conectado entre DAC1 y ADC1 para el mismo conjunto de frecuencias utilizadas en los cálculos anteriores. Se obtiene el siguiente gráfico que compara las respuestas ideales y las medias justo después del último comando.

Diagramas de Bode

Como el sistema SLab, para mantener bajo el coste, no contiene etapas de amplificación, el rango dinámico no es muy bueno y los diagramas de Bode comienzan a ponerse feos, especialmente en el gráfico de fase, después de niveles de atenuación de unos 30 dB.
Los circuitos pueden ser mucho más complicados. El siguiente circuito usa DAC1 para generar una onda sinusoidal y DAC2 para generar una señal de ruido aleatorio. A partir de esas señales, se generan dos señales diferenciales con ruido común inyectado en V1 y V2. Luego, se usa un amplificador diferencial para rechazar el ruido y recuperar la señal original. En la imagen, los amplificadores de ganancia unitaria son seguidores con operacionales y el amplificador inversor es un amplificador inversor basado en operacional.

Circuito de medida diferencial

El circuito se ha montado en una placa de prueba y se ha probado utilizando el siguiente código que genera las señales, realiza la medición y muestra los resultados. En este caso, aunque SLab incluye la generación de ruido gaussiano y uniforme, usamos llamadas NumPy para generar el ruido.

El siguiente gráfico muestra la señal diferencial, con ruido común, en ADC1 y ADC2. También muestra el ruido en ADC4 y cómo se recupera la señal sin ruido en ADC3. Parece una simulación, pero son medidas reales.

Gráficas del amplificador diferencial
No es necesario proporcionar siempre entradas al circuito. El siguiente ejemplo es un circuito astable, basado en un comparador con histéresis que genera una onda cuadrada.

Circuito Astable
 Las medidas de algunos nodos de circuito se muestran a continuación. El código está aquí.

 
Medidas para el Astable
No siempre es necesario operar con señales variables en el tiempo. También se puede realizar medias de continua. La siguiente figura muestra la corriente del colector para varias corrientes de base en un transistor bipolar BC547. Cada punto de la curva es una lectura de continua independiente con un cierto tiempo entre la configuración de la entrada y la lectura de la salida. El código asociado está aquí.

Curvas características de un transistor bipolar

En el sistema SLab actual estamos limitado al rango de 3.3V de la placa Nucleo. Pero el uso de los dos DAC en configuración de puente puede dar un rango de -3.3V a + 3.3V en algunos circuitos. Este es el caso del rectificador en puente de diodos:

Rectificador en puente de diodos
La resistencia de 100k, R2, proporciona la polarización de las salidas cuando ningún diodo está conduciendo. Puede no tenerse en cuenta para facilitar la comprensión del circuito. La respuesta entrada-salida medida para el circuito se muestra en la siguiente figura:

 
Curva del rectificador en puente de diodos
El código asociado puede encontrarse aquí.


La documentación

Tenemos una placa de hardware. Tenemos el firmware en la placa y el código de Python en el PC. Si sabes lo suficiente sobre electrónica y quieres usar el sistema SLab, solo necesitas agregar la documentación de referencia de SLab y estás listo para jugar con los circuitos.

La documentación actual para configurar el hardware y el software y para la referencia a todas las funciones de SLab (hay unas cuantas) es de 239 páginas en varios archivos PDF. La carpeta de código de Python también incluye una carpeta con 31 ejemplos en archivos de código de Python independientes.

Pero uno de los objetivos del proyecto SLab era aprender electrónica. Es por eso que el proyecto SLab también contiene 222 páginas de tutoriales sobre varios dispositivos y circuitos. Actualmente los temas son:
  
  • Circuitos con amplificadores operacionales en modo lineal (7 archivos) 
  • Circuitos de diodos (4 archivos)
  • Circuitos con BJTs (2 archivos)

Seguiré agregando archivos cuando tenga tiempo. Quizás también agregue algunos experimentos asociados a SLab en el blog.


Ya para acabar

SLab es un proyecto en curso. El abeto de la junta se mejorará en el futuro y se agregarán más tutoriales sobre circuitos. Ahora estamos en la primera versión de lanzamiento 1.2. Todos los archivos se pueden obtener en Github o en un archivo Zip, también en Github.

Quiero terminar esta entrada de blog simplemente mostrando una forma de onda arbitraria, a doble onda, generada con el sistema SLab básicamente como entretenimiento.

Formas de onda arbitrarias

¿Quieres ver el código?  Está aquí.

Este artículo está disponible también, en inglés, en el blog R6500.


Actualizaciones

20/2/2018
Actualizado el código del filtro RC ya que actualmente las funciones AC se hallan contenidas en el módulo slab_ac y no en el módulo principal slab.
Actualizada la descripción del sistema.

 

viernes, 9 de febrero de 2018

Sonda simple para test de circuitos

Este artículo fué publicado previamente, en inglés, en el blog R6500.

El objetivo

Algunas veces necesitas verificar un circuito y testear algunos de sus nodos. Por lo general, un tester en modo de voltaje es una buena solución, pero tiene un par de problemas. En primer lugar, mide aproximadamente cero cuando el nodo está conectador a cero voltios (masa típicamente) y cuando el nodo está flotando (no funciona en absoluto). En segundo lugar, proporciona la información en la pantalla del tester, por lo que hay que separar la vista desde el circuito hacia el tester para verificar el voltaje.

El circuito propuesto es similar a una sonda lógica. No debe indicar nada cuando nada fuerza la tensión en el nodo y debe dar una indicación diferente cuando el nodo se halla a nivel de alto o bajo voltaje.

Muchas sondas lógicas no son autoalimentadas. Confían en la tensión del propio circuito para funcionar. En mi caso, me gustaría que la sonda sea utilizable también como test de continuidad. Si establecemos tierra en un punto del circuito y testeamos en otro punto, la continuidad se puede detectar entre ambos puntos porque se generará un nivel bajo incluso si el circuito no está alimentado.


El circuito

La siguiente imagen muestra el esquema del circuito.



El circuito está alimentado con una batería CR2032 de 3V. Cuando la sonda no está conectada a nada, el voltaje de la sonda, tal y como como se establece con R1 y R2 será de 1.5V. Como ambos amplificadores operacionales (MCP6002) tienen una corriente de polarización muy baja (1pA), no cae tensión en R3 y también se ven 1.5V en la entrada no inversora de U2 y en la entrada inversora de U1.

Las resistencias R4, R5 y R6 definen un divisor de tensión que establece 1V en la entrada inversora de U2 y 2V en la entrada no inversora de U1. Con 1.5V en la sonda, ambos operacionales se saturan a un nivel alto (3V) por lo que ambos LED están apagados.

Si conectamos la punta de la sonda a un voltaje inferior a 1V (El umbral de disparo de U2), U2 se saturará a un nivel bajo y el LED azul se encenderá. De manera similar, si el voltaje de la punta de la sonda se halla por encima de 2V (El umbral de disparo de U1), U1 se saturará en el nivel bajo y el LED blanco se encenderá. Sé que el blanco es un color extraño para el alto nivel. Será mejor comprar un color rojo. No tenía LED rojos similares al azul que tenía a mano.

Los amplificadores operacionales no son los mejores componentes para este proyecto dado que se usan como comparadores. Un doble comparador podría ser mejor en este caso. La elección del opamp dual MCP6002 fue solo porque los tenía disponibles. Adicionalmente, este proyecto no requiere de la mayor velocidad que suelen tener los comparadores respecto de los operacionales.


Funcionamiento del circuito

En definitiva, el circuito pone un voltaje de 1.5V en la punta de la sonda, a partir de las dos resistencias de 100k. Por tanto se comporta como una fuente de 1.5V con una resistencia en serie de 50k. Si el voltaje de la sonda se mantiene entre 1 V y 2 V, no se enciende ningún LED. Si el voltaje de la sonda está por debajo de 1V, el LED azul se enciende. Y si el voltaje de la sonda es superior a 2V, el LED blanco se encenderá.

Cuando se testeta un nodo en el circuito, se puede detectar su voltaje usando un voltímetro de alta impedancia. Ello dará el voltaje de circuito abierto (Voc). Este voltaje puede ser forzado con diferentes niveles. El nivel con que se fuerza una tensión está relacionada con la resistencia equivalente en el nodo. Para un circuito no reactivo lineal, será la resistencia equivalente de Thevenin. Al final, el circuito equivalente será algo así:

Tenemos la fuente de 1.5V y la resistencia de 50k proporcionadas por la sonda y el valor de Voc y Rth asociados con el nodo testeado. Como sabemos, los LED se encenderán cuando el voltaje de la sonda Vp sea superior a 2V o inferior a 1V. El siguiente gráfico muestra el estado del LED en función de Voc y Rth.

Para bajas resistencias equivalentes de Thevenin (por debajo de 1k), solo el voltaje Voc determina si cada LED está encendido o no. Para resistencias de nodo más altas, el voltaje umbral de Voc se desplaza debido a la interacción de la resistencia con el circuito.
Podemos ver que a 100k de resistencia a Thevenin necesitamos 0V para encender el led azul. Para resistencias más altas necesitaremos un voltaje negativo para encender el LED. Lo mismo para el led blanco: a 100k o más de resistencia de Thevenin necesita más de 3 V para encender el LED. Por lo tanto, el circuito no solo detecta el voltaje del nodo sino también si la resistencia asociada es alta o baja.

A partir de la curva podemos ver que, cuando se usa como test de continuidad, puede detectar continuidad (o falta de aislamiento) para resistencias de hasta 100k. Para bajar el umbral de detección de resistencia, las resistencias R1 y R2 podrían cambiarse por valores más bajos.


Efectos de la sonda en el circuito bajo test

La medición de cualquier magnitud siempre modifica el dispositivo bajo prueba (DUT). Algunas veces este error es insignificante. Por ejemplo, el uso de un voltímetro de buena calidad para medir el voltaje entre dos nodos generalmente introduce una resistencia de 10 megaohmios entre los nodos medidos.

La medición de la resistencia asociada al nodo siempre afecta al circuito bajo test. En nuestro caso, estamos aplicando un voltaje de 1.5V con una resistencia asociada de 50k. Si el nodo tiene una resistencia a Thevenin similar o superior a 50k, estamos modificando activamente el voltaje del nodo y potencialmente induciendo una modificación en el comportamiento del circuito.


Dame algo de protección

Como se explicó anteriormente, la resistencia R3 no debería tener ninguna corriente en funcionamiento normal. A las entradas de cirucitos integrados, como las del dispositivo MCP6002, no les gusta tener tensiones por encima de Vcc (3 V en nuestro caso) o por debajo de GND. Intentar salir de estos límites activará las protecciones internas en el dispositivo. La resistencia R3 garantiza que no se provocará una alta corriente de entrada.
El circuito se ha utilizado para testear un nodo de 20 V de baja impedancia y funciona correctamente, detectando un nivel superior a 2 V, sin dañar la sonda. Este no sería el caso si R3 no estuviera presente.

Límites frecuenciales

Si el voltaje de la punta cambia con el tiempo alternando entre voltajes de más de 2 V y por debajo de 1 V, ambos LED se iluminarán durante un tiempo. A bajas frecuencias, el parpadeo es aparente. A frecuencias más altas, debido a la frecuencia de fusión Flicker del ojo, ambos LED parecen estar encendidos al mismo tiempo. El circuito, sin embargo, debido a algunos límites técnicos, como el uso de amplificadores operacionales en lugar de comparadores, tiene una frecuencia máxima de operación de aproximadamente 50 kHz. Una señal cuadrada por encima de esta frecuencia no enciende ningún LED.


Montando el circuito

El circuito se ha montado en una placa de topos


De izquierda a derecha tenemos la punta de la sonda, las tres resistencias R1, R2 y R3, ambos LED y sus resistencias R7 y R8, el doble opamp MCP6002 y las tres resistencias R4, R5 y R6.
Al final de la placa tenemos la conexión a tierra y el conector de alimentación de tres pines.
Los LED están cerca de la punta para que no tengamos que mover los ojos del circuito para verificar si están encendidos.

La parte posterior de la placa de la sonda se muestra en la siguiente figura. Todo el cableado se ha realizado con cable delgado, aislado y de un sólo núcleo.


El conector de alimentación de tres pines utiliza el pin central para Vdd (+3 V) y los otros dos pines para tierra. La pila CR2032 está conectada a un conector hembra de tres pines para proporcionar alimentación al circuito.
Como el conector es simétrico, se puede conectar con la batería hacia la parte superior o la parte inferior de la placa. Como la alimentación es es separable de la sonda, no necesitamos un interruptor de encendido.


La conexión a tierra se obtienen con una pinza de cocodrilo conectada a un cable corto.





La sonda final con la alimentación y el terminal de tierra se muestra en la siguiente figura.





Con objeto de verificar la continuidad o detectar voltajes diferenciales, se ha construido una segunda sonda de tierra con una pieza delgada de cobre y un tubo termorretráctil. Como se puede ver, tocar ambas puntas de prueba hace que el sistema se comporte como un probador de continuidad.