Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cómo generar una forma de onda de alta precisión utilizando un DAC y una PCB personalizada

En este artículo, Desarrollaremos firmware que servirá como base para la generación de señales de alta precisión y alta velocidad.

Recientemente diseñé un PCB generador de forma de onda arbitraria (AWG) que está construido alrededor de un microcontrolador C8051F360 y un TxDAC de Analog Devices.

Estos dos circuitos integrados se comunican a través de una interfaz paralela que me permite generar señales analógicas de mayor frecuencia al buscar la velocidad máxima a la que el microcontrolador puede mover datos al DAC.

En este artículo no me desviaré de mi camino para explicar aspectos del diseño de hardware, porque he discutido extensamente el esquema y el diseño en una serie de artículos técnicos preparatorios. Tres de estos artículos se centran en una parte particular del esquema (a saber, el microcontrolador, el DAC y los circuitos de salida del DAC), y el cuarto cubre el diseño.

El objetivo

El objetivo de este proyecto es crear el marco de firmware que nos permitirá mover convenientemente datos digitales desde el microcontrolador al DAC y luego convertir estos datos en una señal analógica. Esta placa AWG tiene el potencial para algunas funciones interesantes, pero el paso más importante es establecer una interfaz confiable, extensible y de alta precisión entre la MCU y el DAC. Verificaremos esta interfaz generando una forma de onda de rampa y realizando un análisis de osciloscopio.

Los requisitos

Sincronización de alta precisión

Muchas aplicaciones de microcontroladores tienen poca o ninguna necesidad de una sincronización de alta precisión. Es por eso que a menudo podemos crear dispositivos exitosos en los que la única fuente de reloj es el oscilador interno de baja precisión de la MCU. Pero el AWG es diferente. Queremos generar señales que sean lo más consistentes posible con las formas de onda matemáticas idealizadas que sirven como material de origen, y esto significa que necesitamos frecuencias de señal predecibles y una frecuencia de muestreo DAC constante.

Uso eficiente del procesador

Aunque este PCB en particular está casi completamente dedicado a generar formas de onda, debemos asegurarnos de que este marco de firmware más hardware se pueda incorporar fácilmente a otras aplicaciones. En consecuencia, queremos que nuestro firmware pueda generar formas de onda estables y de alta precisión, pero sin que el procesador no esté completamente disponible para otras tareas.

Velocidad máxima

Vivimos en un mundo de alta frecuencia, y este AWG será de poca utilidad si alcanza un máximo de 1 kHz. Para ser justos, este es un diseño sencillo y de bajo costo, y no podemos esperar que cree formas de onda DQPSK de 915 MHz listas para la transmisión de banda ISM. Pero queremos obtener la mayor cantidad de ancho de banda posible de este dispositivo, y esto es aún más desafiante cuando recordamos que la frecuencia de muestreo es significativamente más alta que la frecuencia de la señal real. A pesar del teorema de Nyquist-Shannon, quiero al menos cinco muestras por ciclo, y diez es mi preferencia. Entonces, incluso si logramos aumentar la frecuencia de muestreo hasta 10 MHz, nuestras formas de onda estarán en el rango de 1 a 2 MHz.

El diseño de hardware ya refleja la importancia de optimizar la velocidad:elegí un microcontrolador que opera a frecuencias centrales de hasta 100 MHz e implementé un bus paralelo que minimiza la sobrecarga requerida para mover datos desde la memoria del MCU a los pines de entrada DAC.

Frecuencia de muestreo

La placa AWG tiene una fuente de reloj de alto rendimiento (un oscilador MEMS con una estabilidad de frecuencia general de ± 50 ppm). El firmware necesita usar esta base de tiempo para crear una señal de reloj estable que impulse los circuitos de actualización del DAC. Cuando quiero señales de sincronización de alta calidad, siempre recurro al hardware y, en este caso, estoy usando la matriz de contador programable (PCA) para generar un reloj de 500 kHz a partir del oscilador externo de 10 MHz.

Usé el programa Silicon Labs Config2 para mi configuración de hardware, porque el C8051F360 no es compatible con la herramienta de configuración que está incorporada en Simplicity Studio. Aquí está la configuración general del módulo PCA:

El PCA está habilitado y la base de tiempo es el reloj del sistema. En este punto, la frecuencia del reloj del sistema es la misma que la frecuencia del oscilador externo (10 MHz), pero luego usaremos el bucle de bloqueo de fase del microcontrolador para obtener una frecuencia central más alta. La señal de reloj del DAC es generada por el módulo PCA 0 configurado para el modo de "salida de frecuencia":

Echemos un vistazo al reloj de frecuencia de muestreo. Mi osciloscopio MDO3104 de Tektronix tiene algunas capacidades de medición bastante avanzadas que nos ayudarán a evaluar su calidad.

Como lo confirman las mediciones que se muestran en la parte inferior de la captura del osciloscopio, la frecuencia es exactamente la esperada (500 kHz), y también tenemos un ciclo de trabajo perfecto del 50%; además, las estadísticas "Mín." y "Máx." indican que la frecuencia y el ciclo de trabajo son estables en el tiempo.

Una adición particularmente útil a esta funcionalidad de medición es la desviación estándar ("Std Dev"). La desviación estándar indica cuánto tienden a desviarse los valores de la media y, en esta situación, es una forma rápida y fácil de evaluar las imperfecciones en la frecuencia y el ciclo de trabajo de la señal del reloj. Ambas desviaciones estándar son muy bajas:13,54 Hz es 0,0027% de la frecuencia nominal y 2,117 × 10 –3 es solo el 0,0042% del ciclo de trabajo típico.

Podemos llevar este análisis un paso más allá mirando el histograma de uno de los bordes del reloj. Si configuramos el osciloscopio para que se dispare en el borde descendente y luego hacemos zoom en el borde ascendente, la posición del borde ascendente cambiará de acuerdo con la fluctuación de la señal. Luego podemos agregar un histograma de forma de onda horizontal para rastrear este jitter y revelar su distribución. En este caso, sin embargo, no hay mucho que ver, porque el jitter es muy bajo.

La interrupción externa

Ahora tenemos una onda cuadrada que controla los circuitos de salida del DAC; la siguiente tarea es sincronizar las actualizaciones de datos de la MCU con esta onda cuadrada. Haremos esto conectando una interrupción externa al pin PCA que emite la señal de reloj. El DAC bloquea los datos de entrada en el aumento borde del reloj, por lo que queremos actualizar las señales de datos en la caída borde. Esta técnica de borde opuesto es la forma fundamental de garantizar que los datos digitales se actualicen y estabilicen antes de que el dispositivo de entrada reciba el borde de reloj activo.

Entonces, habilité la interrupción externa 0 (indicada / INT0), la conecté al pin de salida de la señal de reloj (P0.7) y la hice sensible al borde descendente.

Probablemente esté acostumbrado a usar una interrupción externa para monitorear una entrada señal, pero en este caso puede sincronizar con la misma eficacia los eventos del firmware con una señal generada por el propio microcontrolador. En realidad, esta es una estrategia particularmente útil cuando se trata de una tarea de tiempo crítico, porque la interrupción externa 0 es la interrupción de mayor prioridad y porque su indicador de interrupción pendiente se borra automáticamente por hardware (lo que elimina el tiempo que se necesitaría para borrar la bandera usando una declaración de firmware).

El ISR

La acción principal tiene lugar en la rutina de servicio de interrupción / INT0. El siguiente byte de datos DAC se recupera de la memoria (o se genera directamente por el microcontrolador) y luego se conduce a P2; Usé una declaración #define para hacer que "DAC_WORD" sea una alternativa a "P2":

SI_INTERRUPT (INT0_ISR, INT0_IRQn)
{
DAC_WORD–;
}

La variable crítica en el esfuerzo por maximizar la tasa de actualización del DAC es la cantidad de tiempo requerido para ejecutar las instrucciones en el ISR. (En este ejemplo, solo tenemos una instrucción, pero ese no siempre será el caso). El ISR debe llamarse una vez por cada flanco activo del reloj DAC, y no podemos llamar al ISR antes de que termine de ejecutarse. Entonces, cuando intentemos llevar nuestro ancho de banda al máximo, tendremos que hacer todo lo posible para minimizar el tiempo de ejecución del ISR, y luego configuraremos nuestra frecuencia de reloj DAC en consecuencia.

La declaración única que se muestra arriba (DAC_WORD–) crea una forma de onda de rampa, porque el valor de DAC disminuye linealmente a cero y luego pasa a 255 y comienza a disminuir nuevamente. Aquí está el resultado del DAC:

Es posible que haya notado que las secciones de rampa analógica aumentan hacia el voltaje máximo, mientras que los valores DAC disminuyen hacia cero. Esto ocurre porque el amplificador de salida del DAC usa una configuración inversora.

Veamos una última captura de alcance antes de terminar.

Leer más información….

Cómo generar una forma de onda de alta precisión utilizando un DAC y una PCB personalizada


Proceso de manufactura

  1. Sensor de temperatura Python y Raspberry Pi
  2. Cómo comprobar y calibrar un sensor de humedad
  3. Cómo generar una forma de onda de alta precisión utilizando un DAC y una PCB personalizada
  4. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  5. Radio FM usando Arduino y RDA8057M
  6. Reloj preciso con solo usar un Arduino
  7. Cómo hacer una brújula usando Arduino y Processing IDE
  8. Cómo elegir una empresa de fabricación de prototipos de PCB
  9. ¿Cómo es tan precisa la fabricación de PCB?
  10. Errores comunes en la fabricación de PCB y cómo corregirlos
  11. ¿Placas de circuito impreso y cómo funcionan?