Generando una onda sinusoidal en un rango de frecuencia grande

2

Quiero construir un circuito que pueda generar ondas sinusoidales en frecuencias controladas por una computadora o un microcontrolador. Me gustaría ir tan bajo como 0.01 Hz (probablemente sería aceptable hasta 0.05 Hz) y tan alto como 100 kHz; Necesito al menos 10 frecuencias por década, que es una resolución de aproximadamente 12 mHz en la parte inferior de la escala (o 60 mHz si la parte inferior es de 0,05 Hz). El voltaje de salida no necesita ser alto, de todos modos lo voy a ejecutar a través de algunos amplificadores operacionales.

¿Cuál es la forma estándar de hacer esto? ¿Es DDS el camino a seguir (utilizando una tabla de búsqueda sinusoidal en una unidad de control o un IC como el AD9850)? ¿Hay una solución analógica simple que me falta?

Me encantaría quedarme con las partes de los orificios pasantes si puedo.

    
pregunta Greg d'Eon

4 respuestas

4

Usted podría hacer fácilmente un DDS altamente flexible en una placa de descubrimiento STM32F4 por aproximadamente $ 15 usando un DAC interno, un DMA, un temporizador y una tabla de búsqueda de seno. La gente ha publicado ejemplos de cosas similares en el blog si los buscas.

Para obtener la frecuencia requerida (los DAC STM32F4xx solo pueden hacer 300 cps en el swing completo, lo que equivale a ~ 1V / \ $ \ mu \ $ s) tendrá que restringir el rango del DAC.

Para una sinusoide, la velocidad de giro máxima (en V / s) es \ $ 2 \ pi \ veces f \ veces A \ $. Insertar los valores de los requisitos del OP y suponiendo que Vref del DAC es 3.3V (que si recuerdo correctamente es el caso de un STM32F4Disco), una onda sinusoidal de 3.3Vpp a 100kHz, la velocidad de giro máxima es \ $ 2 \ pi \ veces 10 ^ 5 \ times 3.3 / 2 = 1036726 \ $ V / s, o \ $ \ approx1.04 \ $ V / \ $ \ mu \ $ s.

Para cumplir con esta restricción, la amplitud de la onda sinusoidal debe limitarse, de \ $ 3.3 \ $ V a \ $ 3.3 \ veces 1 / 1.04 = 3.18 \ $ V.

Esto trae ahora el problema aparente del límite de 300 cps en el DAC STM32F4. Ese límite es un furphy. No sé cuál es el límite superior físico real, pero sospecho que es la velocidad del bus APB1. Sé (porque lo he hecho) que puede escribir al menos 2Msps en el DAC y siempre que respete la velocidad de respuesta de 1V / us, se comportará de manera predecible. Por lo tanto, puede hacer 16 muestras por ciclo para una onda sinusoidal de 100 kHz, una velocidad de actualización de 1.6Msps, siempre y cuando limite la amplitud de la onda sinusoidal a 3.18 V en lugar de 3.3 V.

En algún momento, es probable que tenga que lidiar con potenciómetros digitales porque la realidad es que si desea una señal de salida continua y suave, especialmente a baja velocidad, tendrá que ejecutar su DDS a través de un filtro, y ese filtro tendrá que ser ajustable, no se puede simplemente colocar un LPF de 100 kHz y esperar que sea útil en las frecuencias de menos de 1 Hz.

    
respondido por el markt
2

Aquí está mi (resumen) resumen aproximado de la solución DDS, que fue inicialmente sugerido por Nick Alexeev. Estoy marcando esto como wiki de la comunidad, así que siéntete libre de mejorar con detalles, etc.

Utilizando calculadora de AD , para obtener el equilibrio deseado entre la resolución de frecuencia de 12 mHz (que solo redondeando a 10mHz) y una curva razonablemente suave a 100KHz de salida, necesita alrededor de 10 a 40Mhz DDS clock, con 20Mhz que parece un buen punto medio. A una velocidad inferior a 10Mhz, la salida del DDS a 100KHz comienza a parecer bastante ruidosa. A más de 40Mhz relojes, la resolución se vuelve demasiado áspera; a 40Mhz, obtienes un cambio de poco menos de 0.01Hz por cada bit de afinación, en el rango bajo por supuesto; siendo la palabra de sintonización un divisor de reloj, produce una curva de frecuencia no lineal.

En cuanto a las soluciones prácticas, uno puede encontrar chips DDS ya montados en escudos compatibles con Arduino (por alrededor de $ 5 al parecer); Sin embargo, el problema es que pueden venir con un reloj fijo (y posiblemente inadecuado), pero se puede mejorar con un poco de trabajo de la placa.

También vale la pena mencionar que si uno está usando un microcontrolador (uC) que tiene un DAC integrado y lo suficientemente rápido, luego se agrega un DDS (que es básicamente un ASIC que barre una tabla de búsqueda de seno y envía ese valor indexado a un DAC) es bastante inútil ya que la búsqueda sinusoidal se puede implementar en el software de uC. Para obtener más detalles sobre este enfoque de DAC integrado, consulte la respuesta de markt.

    
respondido por el Respawned Fluff
2

He usado un diseño para un oscilador no digital que produce senos decentes hasta por debajo de 0.1Hz y por encima de 100kHz. Teóricamente era un circuito sintonizado paralelo LC en la ruta de realimentación de un amplificador. La L y la C eran en realidad circuitos giratorios de precisión (por lo que pudieron sintonizar frecuencias de resonancia ridículamente bajas). Nunca construirías uno con inductores reales y, si lo hicieras, sería no ajustable.

Tanto "C" como "L" se mantuvieron rastreando usando un potenciómetro de doble cuadrilla de precisión y, si recuerdo correctamente, se podía obtener un rango de frecuencia de más de 50: 1 del potenciómetro antes de cambiar los condensadores fijos en los giros. .

Las ollas, por supuesto, estarían mejor servidas por digipots en estos días, ya que pueden "rastrearse" mucho mejor que las ollas normales. Estoy seguro que con cuidado, podría funcionar hasta 0.01Hz.

Girador del inductor: -

Haygiradoresdemayorcalidad(mejorrespuestadefrecuencia)y aquí otro enlace a un documento sobre un diferente tipo de girador. La belleza del op-amp gyrator en esta aplicación es que la red CR (como normalmente se pretende que sea parásita) se puede usar de manera efectiva como sección de ajuste que hace que L y C se desarrollen en paralelo a través de resistencias de pequeñas series.

    
respondido por el Andy aka
0

Un enfoque sería registrar un sumador / acumulador de 28 bits con un reloj de 4 Mhz. Un uController que maneja los 20 bits de orden bajo con una palabra digital y los ocho bits más altos alimenta las direcciones a un eprom para una tabla de consulta de seno de 256 entradas. Los bits de datos del eprom sumados en una escalera R2R se acoplarían capacitivamente a su etapa de ganancia del amplificador operacional. Impulse un valor alto desde el micro al sumador y los bits de orden superior se desplazan más rápido, para una onda sinusoidal de mayor frecuencia. Un valor bajo requiere mucho más ciclo de reloj a paso para que se produzca un recuento en los ocho bits superiores que conducen el eprom. Con un poco de trabajo extra en el micro software; puede hacer que la tabla eprom sea más pequeña simplemente almacenando ángulos desde 0 ° hasta 90. Solo lea la tabla hacia adelante para los primeros 90 grados (cuadrante 1) y luego hacia atrás para el cuadrante 2 adelante nuevamente para el cuadrante 3, etc.

    
respondido por el steverino

Lea otras preguntas en las etiquetas