Debo admitir que no sé mucho sobre electrónica analógica, pero estoy interesado en saber si es posible construir un muestreador de tiempo equivalente (ETS) usando los A/D en un micro.
Espero que esta pregunta no sea demasiado vaga. Básicamente, tengo entendido que ETS se usa para muestrear señales de muy alta frecuencia y es un truco que se usa para osciloscopios digitales.
Me pregunto si alguien ha probado esto antes o conoce una buena referencia.
Saludos,
natan
El muestreo de tiempo equivalente (ETS) es un truco para medir señales de alta frecuencia cuando puede hacer suposiciones sobre la señal que está midiendo. La suposición es que la señal que está muestreando es una señal repetitiva (es decir, una onda sinusoidal u otra señal de "constante de tiempo").
Para hacer esto de manera casera, necesita un medio para disparar de manera precisa y repetitiva en una ubicación fija (su punto de activación), retrasar una cantidad variable de tiempo y luego iniciar y adquirir ADC a intervalos fijos.
La activación se puede realizar con un comparador rápido y una referencia precisa. Si su referencia precisa es una salida DAC filtrada o estable, entonces tiene un punto de activación ingenioso (aunque simplista) controlado por software. Alimente la salida del comparador a una entrada de captura de "temporizador de inicio" en su microcontrolador. La idea es hacer que el temporizador de su microcontrolador comience a contar en el instante en que se dispara el comparador. Cuando el temporizador se desborda, inicia una captura de ADC y se detiene (hasta que le indique que busque el evento nuevamente).
Si está utilizando un ciclo cerrado o una rutina de interrupción (es decir, software) para detectar cuándo expira el temporizador para iniciar la captura de ADC, es posible que experimente cierta inestabilidad, ya que llevará una cantidad variable de tiempo detectar que el temporizador ha terminado. Si puede, configure la interrupción del temporizador para iniciar la transferencia ADC automáticamente. Esto es posible en numerosos microcontroladores.
Si aún no lo ha adivinado, ajustará el valor inicial del temporizador para darle una "pausa" variable antes de comenzar el ciclo de muestreo. En esencia, estará "caminando a través" de la forma de onda repetitiva.
Ahora para el ADC. Para simplificar, digamos que tomará muestras tan rápido como pueda en todo momento. (Hablaré sobre las alternativas a continuación). Lo que esto significa es que tan pronto como finalice el ADC, le indicará que comience de nuevo. Ahora, algunos microcontroladores son mejores en esto que otros; si puede DMA sus resultados ADC y reiniciar automáticamente, esta es su mejor opción. De lo contrario, tendrá OTRA fuente de fluctuación en su ETS: el retraso entre una interrupción completa del ADC (o un sondeo que detecta la finalización), el almacenamiento de la muestra y el inicio de otra captura.
Ahí está su sistema básico. pseudocódigo:
volatile int adc_count;
/* assumes you can't use DMA to drive the ADC */
void adc_interrupt(void)
{
store_value();
if(--adc_count) {
start_adc();
}
}
do {
int offset;
offset = 0; /* offset from trigger to first ADC sample */
do {
adc_count = 256; /* arbitrary, how many samples per trigger */
load_timer(offset); /* set timer value */
arm_timer(); /* timer will now start when the trigger occurs */
} while(adc_count);
offset += 10; /* arbitrary, how much to "move over" each trigger */
} while(offset < 100); /* arbitrary, how many triggers to use for an ETS capture */
Algo bastante sencillo, pero como mencioné, debe diseñar el código y seleccionar un microcontrolador que le permita tener la menor fluctuación posible. Esto significa que desea un microcontrolador que pueda configurarse de modo que pueda iniciarse una interrupción del temporizador y la captura de ADC y que un evento de finalización de ADC pueda generar resultados de DMA (y reiniciar el ADC). Si su microcontrolador no puede hacer esto, tendrá algo de fluctuación en su muestreo y la forma de onda capturada puede verse un poco "apagada" ya que los puntos de muestra no estarán a intervalos espaciados uniformemente.
Ahora, ¿qué sucede si no desea muestrear lo más rápido posible? Desearía que la interrupción del ADC iniciara un segundo temporizador que esperara la cantidad de tiempo que desea tener entre muestras, y que la interrupción del segundo temporizador iniciara el ADC nuevamente. Si está haciendo esto, debe tener en cuenta que esta es otra fuente de inestabilidad si tiene que usar una rutina de interrupción o sondeo (es decir, software) para detectar e iniciar los periféricos.
En pocas palabras, eso es ETS.
Creo que la respuesta es sí, pero el rendimiento sería limitado. Hasta donde yo sé, las frecuencias de muestreo más altas en los A/D integrados en los microcontroladores están en el rango de 10-100 kHz. También está limitado por el tiempo de establecimiento de la A/D. Con un registro A/D de aproximación sucesiva, de alta velocidad y dedicado, puede obtener más de 1 MHz.
Para señales repetitivas, podría aproximarse a señales más rápidas utilizando múltiples canales, pero sospecho que tendría problemas para reconstruir con precisión incluso señales de 1 MHz, que es peor que incluso el osciloscopio más barato del mercado.
Podría ser divertido intentarlo de todos modos.
Encontré útil esta descripción: http://www2.tek.com/cmswpt/tidetails.lotr?ct=TI&cs=Application+Note&ci=14295&lc=EN
He estado allí, hecho eso.
Tenga ETS trabajando en un microchip dsPIC de 40 MHz, que tiene un ADC de ~500 kHz, haciendo TES de 40 MHz con una fluctuación de 25 nseg.
El S/H en el ADC es malo, por supuesto, por lo que el ancho de banda de la señal termina limitado por eso. Es útil impulsar la entrada ADC con una salida de amplificador operacional de baja impedancia, dado que la entrada se cambia básicamente a un condensador para el muestreo, y desea que se realice un seguimiento bastante rápido.
El truco para hacer que esto funcione fue:
Su adquisición consiste en, digamos, 80 de esas corridas de ADC, cada corrida recolectando muestras separadas por 2 usec. Cada nueva ejecución comienza 25 nseg más tarde en el ciclo que la ejecución anterior, por lo que 80 ejecuciones terminan tomando una muestra en cada retraso posible, en incrementos de 25 nseg.
Ahora bien, esto era muy específico del microchip; la configuración en otra MCU puede ser muy diferente.
kevin vermeer
akohlsmith
connor lobo
akohlsmith