¿Velocidad de muestreo máxima de Arduino Duemilanove?

10

¡Día a día!

Tengo un Arduino Duemilanove dando vueltas de repuesto en este momento y pensé que podría intentar algunos proyectos de interfaz de audio. Solo me pregunto qué tipo de frecuencia de muestreo puedo lograr utilizando una sola entrada analógica y aplicando algunos algoritmos simples en el chip, y luego informando utilizando algunas salidas digitales vinculadas a los LED.

Me gustaría muestrear a ~ 44.1 kHz si es posible.

Como referencia, lo primero que quiero probar es un afinador de guitarra simple.

    
pregunta Sketchy Fletchy

8 respuestas

15

No creo que puedas muestrear tan rápido en resolución completa. El ATMega168 solo puede muestrear a 15 ksps en su resolución completa.

Habiendo dicho eso, deberías poder obtener una frecuencia de muestreo adecuada para obtener un afinador de guitarra que funcione. Lo más probable es que 44.1 kHz sea bastante más rápido de lo que necesita, dado que la base de la alta E y la guitarra es de alrededor de 330 Hz.

    
respondido por el Clint Lawrence
8
  

Se necesitan unos 100 us (0.0001 s) para   leer una entrada analógica, por lo que el máximo   tasa de lectura es de aproximadamente 10.000 veces a   segundo.

enlace

Rob.

    
respondido por el robzy
4

Google para 'AVR guitar tuner', hay un par de proyectos que ya lo hacen, y parecen ser capaces de hacerlo sin demasiados problemas con la velocidad del AVR.

    
respondido por el davr
3

Si usa un comparador analógico (ya sea el interno en el AVR o el externo) que convierte la entrada analógica en una onda cuadrada, puede muestrear oscilaciones a velocidades mucho más altas. Si bien esto no es una muestra de audio real, para la construcción de un afinador de guitarra es a menudo todo lo que necesita, ya que todo el código que estaría haciendo de todos modos sería contar cero cruces por unidad de tiempo.

    
respondido por el todbot
3

Hay una serie de ADC disponibles que son seriales, I2S es el estándar de NXP basado en I2C. Te permiten tirar de forma bastante analógica incluso a velocidades mucho más altas. Este enlace debería llevarlo a una parte de NXP diseñada para audio: UDA1361TS

Las muestras gratis son tus amigas :)

    
respondido por el wackyvorlon
1

Primero, para su aplicación en particular, realmente solo necesita 1 kHz o más, la frecuencia de muestreo, asumiendo que está sintonizando la frecuencia fundamental y no uno de los parciales inarmónicos ...

De todos modos, en cuanto al índice de muestreo máximo posible, el manual de Arduino dice:

  

La lectura de una entrada analógica tarda unos 100 microsegundos (0,0001 s), por lo que la velocidad de lectura máxima es de aproximadamente 10,000 veces por segundo.

Esto implicaría que la frecuencia de muestreo de 10 kHz es la máxima. Sin embargo. Puede obtener mayores tasas de muestreo al accediendo directamente a los registros ADC . La página Arduino Realtime Audio Processing utiliza dos canales a 15 kHz, por ejemplo. Por lo tanto, el máximo de 10 kHz es solo mientras se usa la función AnalogRead () incorporada, porque tiene muchos gastos generales.

El ADC está optimizado para una mejor operación con una velocidad de reloj de entre 50 kHz y 200 kHz:

  

De forma predeterminada, los circuitos de aproximación sucesiva requieren una frecuencia de reloj de entrada [reloj ADC] entre 50 kHz y 200 kHz para obtener la máxima resolución.

Dado que una conversión de ADC toma 13 ciclos de reloj, esta sería una frecuencia de muestreo de 4 kHz a 15 kHz. Según AVR120: Caracterización y calibración del ADC en un AVR :

  

Para un rendimiento óptimo, el reloj ADC no debe exceder los 200 kHz. Sin embargo, las frecuencias de hasta 1 MHz no reducen significativamente la resolución de ADC.

     

El funcionamiento del ADC con frecuencias superiores a 1 MHz no está caracterizado.

Frecuencia de reloj de 1 MHz = 77 kHz de frecuencia de muestreo, así que esa es la máxima realista.

El hilo del foro ¿Lectura analógica más rápida? tiene más información sobre esto .

    
respondido por el endolith
0

El convertidor en chip funcionará para esta aplicación, como han señalado otros, pero realmente debería considerar el uso de un ADC externo. Esto le ahorrará muchos problemas y liberará a su micro para muestrear a través de SPI o I2C a velocidades de datos mucho más altas, con menos ruido del reloj del micro y con mayor precisión que utilizando el ADC interno. Si desea más resolución y / o una velocidad de datos más alta, entonces use algo como el LTC1867, que le permitirá muestrear a hasta 175 kHz (aunque puede cronometrarlo como lo desee rápidamente) y luego leer los datos de 24 bits. hasta 20MHz sobre SPI. ¿Ves lo que puede hacer un verdadero ADC? :) Con ese tipo de potencia (y un DSP de 24 o 32 bits), puede comprimir y almacenar su audio, filtrarlo, modularlo, reproducirlo ... las posibilidades son infinitas.

    
respondido por el Kevin Vermeer
0

¿Está interesado en una tasa de muestreo de 64K? Echa un vistazo a aquí

¡Ahora elevado a 150 kHz, 10 bits, sin componentes adicionales!

Echa un vistazo a allí

    
respondido por el user3057

Lea otras preguntas en las etiquetas