Procesamiento Digital de Señales

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

 

 

 

 

2 Comments

  1. 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?

    1. 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *