X
    Categories: Sensores

Control amplitud y frecuencia de una señal seno generada con Arduino

Objetivos: Generar una señal seno con arduino y controlar por medio de dos potenciometros su amplitud y su frecuencia

 

Diagrama Proteus

 

#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

int frecuencia_ld;

float frecuencia=1;  // frecuencia de senal a generar
float frecuenciadigital;  // frecuencia digital
float frecuenciamuestreo=10000;// 10 K Hz

int amplitud_dig;

float amplitud;
 
void ISR_timer(){
 
y=floor((amplitud*sin(2*3.1416*muestra*frecuenciadigital)) + 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;


  amplitud_dig=analogRead(A0);  /// conversión analogica digital

  amplitud=amplitud_dig*2;

  frecuencia_ld=analogRead(A1);

  frecuencia=map(frecuencia_ld,0,1024,1,1000);
  


  
  
    
}

 

Christian:
Related Post