Loading [MathJax]/extensions/TeX/mathchoice.js

4 votos

Generador de funciones simple utilizando un microcontrolador

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

Estoy pensando que para generar ondas cuadradas puede ser suficiente hacer que un pin emita alto y bajo en los intervalos de tiempo deseados. Pero ¿qué pasa con una onda senoidal? ¿Quizás es posible con la misma idea pero poniendo un inductor o algo en la salida?

Si en general crees que esto puede funcionar ¡quiero empezar a hacerlo!

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

Tengo bastante experiencia con PIC18F4550 ya que hice muchos proyectos caseros pequeños con este chip. Por lo tanto, sería mi elección principal. Aquí tienes un enlace a su hoja de datos

Mis puntos principales ahora son los siguientes: 1- El mejor camino y enfoque matemático para ondas cuadradas 2- lo mismo para ondas senoidales 3- Control de amplitud y frecuencia

5voto

lillq Puntos 4161

Jesper desarrolló un generador de funciones DDS (Síntesis Digital Directa) alrededor de un AVR, controlable a través de EIA-232 y PC.
Esquemático y código de ensamblaje son sencillos y están disponibles en su sitio web, por lo que deberías poder adaptarlos para el PIC. O simplemente puedes usar la versión AVR.

5voto

Lehane Puntos 6776

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

Estoy pensando que para generar ondas cuadradas podría ser suficiente hacer que un pin emita alto y bajo en los marcos de tiempo deseados.

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

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

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

insertar descripción de la imagen aquí

Puedes ver que cada pocos ciclos tienen longitudes diferentes. Las transiciones solo pueden ocurrir en los límites de muestra, pero una onda cuadrada real transicionaría en un momento intermedio. Prácticamente, esto resulta en muchos armónicos aliasados por debajo de la frecuencia de la onda cuadrada, lo cual probablemente no quieres, dependiendo de tu aplicación. En aplicaciones de audio, esto suena terrible.

Puedes evitar esto generando una onda cuadrada de banda limitada correcta en software, o utilizando una frecuencia de muestreo mucho más alta de la necesaria para tu señal.

Aquí tienes una comparación de los dos métodos en una onda cuadrada de 5 kHz:

Simplista:

insertar descripción de la imagen aquí

Matemáticamente correcta (generada con síntesis aditiva):

insertar descripción de la imagen aquí

3voto

RelaXNow Puntos 1164

Sí, un PIC se puede utilizar para hacer un generador de funciones, especialmente porque no especificaste una precisión o frecuencia.

Si deseas un patrón digital arbitrario, puedes poner los datos en serie en una tabla y utilizar un puerto SPI para actualizar el pin de salida un bit a la vez desde el hardware. El firmware solo necesita volver a cargar el hardware cada byte. Para algo un poco más lento, esto se puede hacer en una interrupción periódica sin el hardware SPI.

Para crear señales analógicas, lo más fácil es filtrar con un paso bajo una salida PWM. Una vez más, existe un compromiso entre velocidad y resolución. Con el PIC 18 funcionando a 10 MHz de reloj de instrucción, se puede obtener una resolución de 8 bits a 39 kHz. Incluso con solo una serie de resistencias y condensadores pasivos, se puede lograr una calidad de audio de voz razonable.

Para un compromiso entre resolución y frecuencia más alto, se puede utilizar un convertidor D/A externo.

A menos que este generador de funciones sea para una aplicación específica y el PIC 18 sea suficiente para eso, yo utilizaría un PIC 24H en su lugar. Estos pueden manejar 16 bits a la vez y funcionar a 40 MHz de velocidad de instrucción. Eso te da un compromiso 4 veces mejor entre resolución y frecuencia de PWM. Algunos de los dsPIC también tienen uno de los dos módulos especiales PWM de alta frecuencia. Estos funcionan con un reloj interno 16 veces más rápido para lograr una resolución de ancho de pulso de casi 1 ns. Sin embargo, hay que tener cuidado con el jitter y las restricciones en el ciclo de trabajo.

2voto

user4245 Puntos 324

Para una onda sinusoidal, la mejor manera es utilizar lo que se conoce como una Tabla de Ondas. Básicamente, es una lista de valores discretos que se pasan a un DAC para generar una forma de onda.

Utiliza más memoria de almacenamiento que generar matemáticamente un seno, pero es mucho más simple y eficiente desde un punto de vista de procesamiento. Además, tiene la ventaja de que la forma de onda generada puede cambiarse modificando los datos de la tabla de ondas.

Hay muchas maneras de interconectar un PIC a un DAC, y muchas maneras de hacer tu propio DAC. Todo depende de la resolución que necesites para la forma de onda final, y los rangos de frecuencia que estés buscando generar, y qué tan precisa quieres que sea la salida.

2voto

Jacob Griffin Puntos 126

Para comenzar a obtener otras formas de onda, primero debes descubrir cómo lograr más de los dos niveles de salida que proporcionan las salidas digitales. Existe un tipo de circuito integrado llamado conversor digital a analógico que está diseñado específicamente para esta tarea. Una forma recomendada de usar un DAC sería conectarse a través de un enlace serial como I2C o SPI, lo que minimiza el número de pines necesarios en el microcontrolador en comparación con un DAC de entrada paralela. Una vez que hayas logrado que funcione, puedes enviar la forma de onda senoidal u cualquier otra forma de onda utilizando números que calculates sobre la marcha con una fórmula de onda sinusoidal o desde una tabla de búsqueda. Ten en cuenta que la tabla de búsqueda para la onda sinusoidal solo tiene que 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 tu elección dependerá de la frecuencia de salida deseada. Sin embargo, para formas de onda de triángulo y diente de sierra, la fórmula es tan simple que no vale la pena usar una tabla de búsqueda.

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

Aunque un filtro es parte de la solución, no sería suficiente simplemente agregar un inductor en el pin de salida, y no se recomendaría en un pin de E/S digital porque crea un voltaje de retroceso cuando se apaga que dañará los transistores de salida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X