Generador de función simple usando microcontrolador

4

¿Es posible hacer un generador de funciones con un microcontrolador (PIC18F4550 O PICAXE20X2)?

Estoy pensando que para generar ondas cuadradas puede ser suficiente para hacer que un pin salga alto y bajo en los marcos de tiempo deseados. Pero ¿qué tal una onda sinusoidal? Tal vez sea posible con la misma idea pero poniendo un inductor o algo en la salida?

Si generalmente piensas que esto puede funcionar, ¡quiero comenzar a hacerlo!

ACTUALIZACIÓN En primer lugar, tengo que agradecer todas las respuestas, realmente me dio algunos buenos puntos de inicio.

Tengo una experiencia bastante buena con PIC18F4550, ya que hice muchos proyectos de casas pequeñas alrededor de este chip. Así que sería mi principal elección. Aquí hay un enlace a su hoja de datos

Mis puntos principales son ahora como sigue: 1- Mejor manera y enfoque matemático para las ondas cuadradas. 2- Lo mismo para las ondas sinusoidales. 3- Control de amplitud y frecuencia

    
pregunta Sean87

5 respuestas

5

No es una respuesta completa, pero para abordar uno de sus puntos:

  

Estoy pensando que para generar ondas cuadradas puede ser suficiente para hacer que un pin salga alto y bajo en los marcos de tiempo deseados.

Eso depende de tu aplicación. Esto se considera una síntesis de onda cuadrada "ingenua", y no produce una onda cuadrada matemáticamente correcta. (Es equivalente a muestrear una función matemática ideal sin pasarla primero a través de un filtro anti-aliasing).

Esto también se aplica a las ondas triangulares, ondas de diente de sierra y cualquier otra cosa con armónicos por encima de la frecuencia Nyquist .

A menudo será "suficientemente bueno" si tiene muchas muestras (o marcos de tiempo) por ciclo, pero no de otra manera. Por ejemplo, si genera una onda cuadrada de 10 kHz con una frecuencia de muestreo de 44.1 kHz, se verá así:

Puedesverquecadapocosciclossondediferenteslongitudes.Lastransicionessolopuedenocurrirenloslímitesdelamuestra,perounaondacuadradarealharíaunatransiciónenunmomentoentreellos.Enlapráctica,estosetraduceenunagrancantidaddearmónicosconaliasacontinuacióndelafrecuenciadeondacuadrada,queprobablementenodesee,dependiendodesuaplicación.Enaplicacionesdeaudio,estosuenahorrible.

Puedeevitaresto generando una onda cuadrada de banda correcta correcta en el software , o utilizando una muestra Frecuencia muy superior a la necesaria para su señal.

Aquí hay una comparación de los dos métodos en un cuadrado de 5 kHz:

Simplista:

Matemáticamentecorrecto( generado con síntesis aditiva ):

    
respondido por el endolith
5

Jesper desarrolló un generador de funciones DDS (Direct Digital Synthesis) alrededor de un AVR, controlable mediante EIA. 232 y PC.
Schematic y código de ensamblaje son simples y están disponibles en su sitio web, por lo que debería poder adaptarlos para el PIC. O simplemente puede utilizar la versión AVR.

    
respondido por el stevenvh
3

Sí, se puede usar un PIC para crear un generador de funciones, especialmente porque no especificó una precisión o frecuencia.

Si desea un patrón digital arbitrario, puede colocar los datos en serie en una tabla y usar un puerto SPI para actualizar el pin de salida un bit a la vez desde el hardware. El firmware solo necesita recargar el hardware cada byte. Por un poco más lento, esto se puede hacer en una interrupción periódica sin el hardware SPI.

Para generar señales analógicas, lo más fácil es filtrar con paso bajo una salida PWM. Una vez más, hay una compensación entre la velocidad y la resolución. Con el PIC 18 funcionando a un reloj de instrucciones de 10 MHz, puede obtener una resolución de 8 bits a 39 kHz. Incluso con solo un grupo de resistencias pasivas y condensadores, esto puede producir un audio de voz de calidad razonable.

Para una compensación de frecuencia * de resolución más alta, puede usar un convertidor D / A externo.

A menos que este generador de funciones sea para una aplicación específica y el PIC 18 sea lo suficientemente bueno para eso, usaría un PIC 24H en su lugar. Esos pueden manejar 16 bits a la vez y ejecutarse a una velocidad de instrucción de 40 MHz. Eso le da una resolución 4 veces mejor de PWM * de intercambio de frecuencia. Algunos de los dsPIC también tienen uno de los dos módulos PWM de alta frecuencia especiales. Este tipo de funcionamiento se ejecuta en un reloj interno 16x más alto para obtener una resolución de ancho de pulso de casi 1 ns. Sin embargo, tenga cuidado con las fluctuaciones y las restricciones en el ciclo de trabajo.

    
respondido por el Olin Lathrop
2

Para una onda sinusoidal, la mejor manera es usar lo que se conoce como Wave Table . Básicamente, esta es una lista de valores discretos para pasar a un DAC para generar una forma de onda.

Utiliza más memoria de almacenamiento que la generación de un seno matemáticamente, pero es mucho más simple y más eficiente desde el punto de vista del procesamiento. Además, tiene la ventaja de que la forma de onda generada se puede cambiar cambiando los datos de la tabla de ondas.

Hay muchas formas de interconectar un PIC con un DAC, y hay muchas formas de hacer un DAC por sí mismo. Todo depende de la resolución que necesite para la forma de onda final y los rangos de frecuencia que desea generar, y de la precisión con la que desea obtener la salida.

    
respondido por el Majenko
2

Para comenzar a obtener otras formas de onda, primero debe averiguar cómo lograr más que los dos niveles fuera del pin de lo que ofrecen las salidas digitales. Hay un tipo de circuito integrado llamado convertidor de digital a analógico que está diseñado específicamente para esta tarea. Una forma recomendada de utilizar un DAC sería conectarlo a través de un enlace en serie como I2C o SPI, lo que minimiza la cantidad de pines que necesita en el micro en comparación con un DAC de entrada paralelo. Una vez que haya funcionado, puede enviar la onda sinusoidal o cualquier otra forma de onda utilizando cualquiera de los números que calcule sobre la marcha utilizando una fórmula de onda sinusoidal o desde una tabla de consulta. Tenga en cuenta que la tabla de búsqueda de la onda sinusoidal solo debe contener un cuarto de ciclo de datos, las otras partes de las formas de onda son repeticiones o inversiones. Un cálculo de fórmula será más lento que una tabla de búsqueda, por lo que su elección aquí depende de la frecuencia de salida deseada. Sin embargo, para las formas de onda de triángulo y diente de sierra, la fórmula es tan simple que no vale la pena molestarse con una tabla de búsqueda.

Otro enfoque es utilizar un enfoque DAC de 1 bit, como se describe en teoría aquí , y en un ejemplo interesante que es específico de PIC aquí que está diseñado para simular el habla, por lo que solo sería utilizable para bajas frecuencias de audio.

Si bien un filtro es parte de la solución, no sería suficiente simplemente agregar un inductor en el pin de salida, y eso no se recomendaría en un pin IO digital porque crea un voltaje de retorno cuando se apaga, lo cual dañará los transistores de salida.

    
respondido por el Martin

Lea otras preguntas en las etiquetas