X

Generador de señal senoidal con arduino ( V 2)

Objetivo:

Generar una señal senoidal digital con arduino de 60 Hz con una frecuencia de muestreo de 10 khz.

Desarrollo:

La forma matemámtica de una señal seno discreta es

 

y(n)=A*sin(2*pi*n*fd)

donde n es el número de muestra, A la amplitud, fd es la frecuencia digital

 

La frecuencia digital se define como

fd=f/fs

donde fs es la frecuencia de muestro.

Si fs=10kHz el periodo de muestreo es de 100 us (microsegundos)

 

Código en arduino

#include <TimerOne.h>
#include <SPI.h>         // Remember this line!
#include <DAC_MCP49xx.h>
#define SS_PIN 10
 
DAC_MCP49xx dac(DAC_MCP49xx::MCP4921,SS_PIN);
 
 
int y;  // salida
int muestra=0;  // numero de muestra
float frecuencia=60;  // frecuencia de senal a generar
float frecuenciadigital;  // frecuencia digital
float frecuenciamuestreo=10000;// 1 K Hz
 
void ISR_timer(){
 
y=floor((1*sin(2*3.1416*muestra*frecuenciadigital))*2048 + 2048);  // calculo seno digital de 12 bits  // calculo sino digital de 12 bits;  // calculo sino digital de 12 bits

 muestra++;  // aumenta la muestra  

 dac.output(y); // manda la salida al DAC
 
  
}
 
void setup(){
  
  Serial.begin(9600);    // incializa comunicacions serial
  Timer1.initialize(100); //  Periodo de muestreo   // Dispara cada .1 ms =1000s  
  Timer1.attachInterrupt(ISR_timer);// Activa la interrupcion y la asocia a ISR_timer
 
 
  dac.setSPIDivider(SPI_CLOCK_DIV16);
  
  // Use "port writes", see the manual page. In short, if you use pin 10 for
  // SS (and pin 7 for LDAC, if used), this is much faster.
  // Also not strictly required (no setup() code is needed at all).
  dac.setPortWrite(true);
  
}
 
void loop(){
  
  frecuenciadigital=frecuencia/frecuenciamuestreo;
  
    
}

 

Disponible también en Github

https://github.com/tecsolucion/proyectosPDS/blob/master/senoDAC/senoDAC.ino

 

 

 

 

Christian:

View Comments (2)

  • necesito diseñar un programa que me entregue una onda senoidal en donde pueda jugar con el tiempo y con la amplitud, utilizando arduino due, si ya contiene los puertos dac, podria utilizarlos como salida de manera directa al osciloscopio?

    • Si se podría, conectar directamente al osciloscipio, pero tu señal solo estaría en un rango de 0 - 5V .

      Con el tiempo te refieres a cambiar la frecuencia

      Si se puede hacer el programa. En próximo lunes subo un articulo de eso.

Related Post