Generador de señal: PWM o R2R?

Quiero construir un generador de señales usando un ATmega 328P en un Arduino. De qué manera sería mejor. ¿Usar uno de los temporizadores (8 bits o 16 bits) incorporados para generar un PWM y luego filtrarlo por paso bajo, o usar un sistema de escalera R2R?

Me importan más los armónicos que la frecuencia, pero espero unos 10 kHz o más.

Gracias por su consejo.

Si le importa la claridad de la señal, elija un DAC, no PWM.
Y use el software DDS si desea alta resolución.

Respuestas (2)

Si le preocupan los armónicos, definitivamente debe evitar PWM. Las ondas rectangulares están repletas de armónicos que se extienden hasta donde lo permiten las velocidades de giro de los pines. Aunque el filtrado de paso bajo eliminará fácilmente las cosas de orden superior, las cosas de orden inferior serán más difíciles de eliminar sin un filtrado serio. No especifica con cuánta distorsión armónica podría vivir o qué rango de frecuencia y formas de onda está tratando de generar (10kHz me hace pensar que está tratando de hacer un generador de forma de onda de audio), pero está librando una batalla perdida que va a terminar con la necesidad de componentes activos externos de todos modos, entonces, ¿por qué no agregar un DAC?

También voy a suponer que no desea escribir ningún código, por lo que un rápido Google muestra que Adafruit ofrece una placa de conexión MCP4725 con una biblioteca y un tutorial preescritos. El MCP4725 es un DAC de 12 bits. A pesar de que su INL deja algo que desear, estará mucho mejor que incluso sus mejores esfuerzos con el PWM integrado.

Como dice Leon Heller, si realmente desea generar señales de alta calidad (y en un rango de frecuencia mucho más amplio), puede optar por una solución DDS. Los dispositivos analógicos hacen algunos buenos con SRAM integrado para el almacenamiento de forma de onda arbitraria, por lo que simplemente configura el chip, le dice que funcione y listo, sin necesidad de un flujo de datos constante. Sin embargo, esto probablemente esté más allá de sus requisitos en esta etapa. También hay un montón de placas chinas baratas basadas en el AD9850 en todo eBay que podrían ser de interés.

Gracias por responder. Debería haber dado más información. Estoy buscando un generador de señal de propósito general. También estoy tratando de aprender todo lo que pueda para que escribir código no sea un problema en absoluto. Esto también significa que me dirigiría a una solución más casera que una placa de conexión, pero no está descartada. Mi punto principal fue que no pude encontrar información clara sobre cuál es mejor PWM vs R2R. No tengo años de experiencia con la electrónica, por lo que los 10 kHz se sacaron del aire. Parecía ser algo que el ATmega328 debería poder manejar sin mucha distorsión. Aunque las frecuencias más altas pueden ser útiles.
Si está buscando aprender, probaría tanto la técnica PWM (ya que es rápida de hacer y pronto verá por qué su rendimiento es deficiente) como la técnica DAC. Tendrá mucho control sobre lo que está sucediendo, y estará haciendo más síntesis de señal de lo que estaría controlando un chip DDS externo. A partir de ahí, puede pasar a salidas más sofisticadas si así lo desea. Esto muestra a alguien intentando más o menos lo mismo que tú: vale la pena mirarlo.

Es difícil decir definitivamente cuál es mejor, ya que depende de cómo implementes cada técnica. En general, diría que PWM es el camino a seguir, ya que R2R requiere muchos pines, resistencias bien adaptadas, rara vez se usa para mucho más de 8 bits y aún necesita filtrado.

Como se mencionó, optaría por un DAC dedicado si desea buenos resultados, pero si es para fines de aprendizaje, seguir la ruta del módulo de temporizador/PWM con un filtro decente más opamp debería dar resultados medio decentes y obtendrá algunas cosas en el proceso. Hay muchos tutoriales sobre generadores de señales PWM para ayudarlo a comenzar.