Generador funcional con ciclos de CPU cero

Nadie está sentado en su taller tratando de idear el próximo gran osciloscopio o multímetro, pero los generadores funcionales siguen siendo uno de los equipos de prueba que cualquiera, incluso alguien con un arrancador Arduino, puede construir en casa. La mayoría de estos generadores de funciones no son muy buenos; tiene suerte si puede obtener una sonda sinusal sobre el espectro auditivo. [Bruce Land] Tuve la idea de jugar con canales DMA en PIC32 y terminé con un generador funcional que usa cero ciclos de CPU. Es perfecto para construir un generador de cerveza casera, o incluso un sintetizador de sonido genial.

Los principales obstáculos para generar una buena onda sinusoidal a altas frecuencias son una muestra alta y un DAC preciso. Para los generadores de funciones de elaboración casera, generalmente la muestra es terrible; es difícil sacar piezas tan rápido. Usando el canal DMA en PIC32, [Bruce] puede empujar formas de onda arbitrarias fuera del chip sin usar ningún ciclo de CPU. Al escribir una onda sinusoidal, o cualquier otra onda, en la memoria, el PIC32 simplemente las escupirá y dejará que la CPU haga un trabajo más importante.

[Bruce] fue capaz de generar una onda sinusoidal de buen aspecto hasta 200 kHz, y la amplitud más alta de los armónicos fue de aproximadamente 40 db por debajo de la fundamental hasta 100 kHz. Es decir espectacular seno, y la base perfecta para construir un generador de funciones de bricolaje.

  • Mate dice:

    Los ciclos de CPU cero asumen que la frecuencia de onda sinusoidal que desea es un número entero de períodos de muestra largos, por lo que causará problemas si desea una salida de frecuencia arbitraria.

    • Trui dice:

      Puede preparar una muestra que consta de varios períodos para aumentar la resolución.

      • Mate dice:

        De hecho, quizás debería haber sido más específico. La condición de requerir una señal repetitiva en un número entero de muestras todavía limitará la resolución de su frecuencia, especialmente en las frecuencias de salida que se acercan a su muestra. Eso sí, si quisiera crear un generador de señal con PIC32, creo que podría generar una onda sinusoidal durante el vuelo a 200kSPS, donde DMA aún sería útil para transmitir una actualización del registro DAC e intervalos regulares.

        • Trui dice:

          200kSPS sería fácil, pero mirando rápidamente el código fuente, creo que la muestra de este proyecto es 1.28MSPS, lo que sería un desafío.

    • No Arduino dice:

      BS. Cambia la frecuencia del reloj de la CPU.

      • Trui dice:

        El sistema PLL solo puede funcionar en un número limitado de configuraciones, por lo que eso no ayudará mucho.

      • tekkieneet dice:

        Un PLL externo (por ejemplo, Si5351A mencionado en HaD anteriormente) * podría * usarse para cambiar la frecuencia de alimentación al PIC. Esto complicaría las cosas y podría estropear las cosas, por ejemplo. UART / USB / RTC / OS, que depende de una frecuencia específica.

        • Trui dice:

          Y si desea seguir ese camino, probablemente sea más inteligente usar un chip DDS externo en su lugar.

  • tekkieneet dice:

    > Tenga en cuenta que B.4 y B.5 tienen una declaración de configuración requerida para deshabilitar JTAG y la entrada de reloj y que B.6 no existe en este paquete.

    Mi queja principal es que algunos uC que no tienen bits adyacentes en los puertos (por byte) fueron una prioridad cuando proyectaron el pinout. (A menudo, cuando conectan un chip grande con múltiples E / S en un paquete de E / S más pequeño) Esto dificulta la expulsión de un bus paralelo de un microcontrolador sin recurrir a los ciclos adicionales necesarios para realizar cambios adicionales y / o operaciones lógicas.

  • Darren dice:

    Los módulos AD9850-DDS de eBay también son una buena opción para generar ondas sinusoidales y cuadradas.

    • Ren dice:

      Compré generadores de funciones usados ​​por tan solo un dólar en una subasta universitaria.

      • señal7 dice:

        El único barato es el arduino que ya tienes. Puedo convertir piezas en un puerto con un período de aproximadamente 4uS si recuerdo correctamente (no puedo encontrar el boceto incorrecto que escribí para eso en este momento). Con algunas tapas de filtro, resistencias y posiblemente un transistor, debería poder producir un seno de 250 kHz. Creo que alguien realmente no necesita una velocidad de muestreo, que es 100 veces la frecuencia de interés, si puede filtrar las armonías con algunos componentes analógicos. Probablemente sea mejor si se limita también al espectro auditivo. Una vez más, nada de lo que hago necesita una onda sinusoidal perfecta.

  • Eduardo dice:

    Cero ciclos de CPU, pero utiliza ciclos X-DMA.

    Y mientras DMA tiene el bus, la CPU está apagada.

    DMA es más eficiente porque tiene una función, transmitir bytes hacia / desde la memoria.

    • Trui dice:

      Si el dispositivo tiene un caché, la CPU aún puede funcionar.

      • Eduardo dice:

        Vale la pena mencionarlo para otros, porque simplemente se agota la memoria caché de la CPU, los buses de datos / dirección del sistema no se utilizan y están disponibles para el procesador DMA.

    • Chris C. dice:

      El dsPIC33 con el que trabajo ahora tiene parte de su RAM que tiene doble habilitación, lo que permite un acceso simultáneo ininterrumpido de CPU y DMA. Entonces, al menos en eso, DMA realmente no tiene ningún efecto de CPU. No sé si alguno de los productos PIC32, como el que se usa en este proyecto, tiene una función similar.

  • Ross Reed dice:

    Esto me hizo pensar en el generador de funciones que creé en Minecraft recientemente. http://img.photobucket.com/albums/v191/legofreak1988/minecraft/WAVEGEN6_zpsa4706f4a.png~original

  • Ren dice:

    Ingenioso.

  • 666blah666 dice:

    -40dB no es exactamente espectacular. Un generador de canciones analógico HP204C, que puede obtener por $ 20, es mejor que -60dB.

    • tekkieneet dice:

      -40dB es ~ 1% THD - (bueno, no exactamente porque es una suma de cuadrados) esto se puede hacer con un generador de señales desagradable que simula una onda sinusoidal. (por ejemplo, chips antiguos Max038, ICL8038).

  • hli dice:

    Hice algo como esto hace unos años con Cypress PSoC5. La gran diferencia es que allí puede implementar un NCO numérico adecuado, por lo que el control de frecuencia es mucho más granular en los rangos más altos. Y el DAC puede hacer hasta 8 MSps.

    • Eduardo dice:

      ¿DAC realiza muestras por segundo?

      Pensé solo en ADC.

      • Sylph-DS dice:

        Definitivamente. DAC genera ahora al menos 44.000 muestras por segundo en la tarjeta de sonido de su computadora. Probablemente también en tu teléfono.

      • Darren dice:

        También muestras de DAC. DAC prueba las líneas digitales de cada reloj para convertir un valor binario en un voltaje o corriente analógica.

    • Kris dice:

      Me encantaría ver ese proyecto. ¿Lo publicaste en alguna parte?

  • RP dice:

    Pensando en los circuitos de radio de onda corta, me pregunto si podría usar circuitos LC como duplicadores de frecuencia para aumentar y atenuar la onda sinusoidal.

    • DainBramage 1991 dice:

      En la misma línea, ¿por qué una conversión D / A general? Disponemos de equipos analógicos sencillos desde hace más de medio siglo que pueden producir ondas sinusoidales perfectas en la parte UHF del espectro (cientos de MHz). Si todo lo que busca es un seno, construya un circuito oscilante similar al que se encuentra en casi todas las radios analógicas.

    • tekkieneet dice:

      No es un tipo de RF aquí. ¿No sería un paso de banda o un paso bajo lo que usaría para eliminar las armonías más altas y hacer que una onda sinusoidal sea más "limpia"?

      Si solo le importa el seno, no mucho causa D / A. Si desea generar formas de onda arbitrarias o hacer modulación de RF directamente en un dominio digital (SDR), entonces reproducir una muestra de forma de onda en D / A es el camino a seguir.

      • Robar dice:

        Sí, y puede apilar los filtros para obtener una Q más nítida (se vuelve inútil a medida que aumenta el número de filtros, pero apilar unos pocos con cuidado resolverá las cosas). Dependiendo de lo que haga y con qué frecuencia, encontrará problemas de fase, pero eso puede no importarle al usuario ocasional. La mejor manera de averiguarlo es construirlo (o simularlo primero si lo desea) ... ¡nunca sepa con qué terminará!

  • TM dice:

    Preferiría recomendar STM32F3 para un proyecto de este tipo. Vienen con un USB FS, un lanzador USB en ROM (sin costo de inicio) y más memoria por alrededor de $ 8. Demostración del osciloscopio USB + AWG ejecutándose simultáneamente en el mismo chip: https://www.youtube.com/watch? v = Nigr1C6fbgk

    • Sylph-DS dice:

      Pensé que mi placa STM32F4 Discovery también podría hacer esto.

  • Reg dice:

    La placa Discovery STM32F429 tiene 8 MB de SRAM y DAC a 1 MS / s. Puede calcular una onda sinusoidal o reproducir una forma de onda arbitraria conservada. Para ondas cuadradas, los temporizadores sirven y con un integrador puedes obtener ondas triangulares. La mayoría de los desarrolladores son candidatos para tal cosa.

    Tengo un proyecto en la-tecnologia.io que incluye este y muchos otros. Actualmente estoy construyendo un probador de cristal para automatizar el trabajo pesado en la construcción de filtros de cristal. Aún no escrito. El oscilador básico (del manual ARRL de 2013) está funcionando y ahora tiene que ser controlado por un varactor para tirar del xtal con el DAC. No es tan ambicioso como las otras funciones, pero es un buen comienzo, ya que requiere usar los temporizadores para medir la frecuencia, el DAC para controlar el varactor, el ADC para medir el nivel de la señal y el GPIO para acortar el xtal para medir la ESR. periféricos.

    El progreso es lento porque puede hacer muchas cosas con muy poco hardware adicional. Es fácil distraerse.

  • uno dice:

    Solo tengo que decir que Bruce Land es mi maestro favorito que he tenido. Ojalá publique nuevo material en youtube, ya he visto todos sus cursos, aunque los FPGA están por encima de mi cabeza.

    También estoy realmente sorprendido por la calidad superior a la habitual de los comentarios en este hilo, además de los comentarios sarcásticos.
    Estoy seguro de que puede DDS con el FPGA más barato, que está muy por encima de todos los enumerados anteriormente. Incluso usando PWM + DMA (¿es eso posible?) En un ARM4 como Launchpad debería dar una forma de onda más rápida / limpia, pero creo que el artículo trata sobre hacer algo interesante sin cuestionar por qué,

  • charliex dice:

    Artículo interesante, muchas formas de despellejar a un gato, pero siempre es bueno ver una versión, mmm, que suena mal.

    sin embargo, quiero codificar golf, lo cual es bueno

Gloria Vega
Gloria Vega

Deja una respuesta

Tu dirección de correo electrónico no será publicada.