Generador de Senales Con Arduino
Generador de Senales Con Arduino
Generador de Senales Con Arduino
PROYECTO FINAL
OBJETIVO:
Asignatura:
Estudiante:
PROFESOR:
Se realizara un generador de seales con arduino el cual nos mostrara las seales
sinusoidal, triangular y cuadrada, a lo cual en estas seales se podr modificar
manualmente su frecuencia y su amplitud.
Esto se lograra usando un arduino (UNO) con el cual se programara para obtener
dichas seales.
INTRODUCCIN:
Debido a que existen diversas libreras, Arduino puede personalizarse con nuevas
funcionalidades, por lo que esta plataforma facilita el desarrollo de aplicaciones en
distintas reas de la electrnica, tales como: Procesamiento de seales,
electrnica de potencia, automatizacin y control, etc. Actualmente Arduino, ha
comenzado a tomar relevancia a nivel mundial, no solo por ser una plataforma
abierta, si no porque tambin est orientado a usuarios no programadores, ya que
utiliza el lenguaje Processing (el cual ha sido creado para la enseanza de la
programacin en un contexto visual) en conjunto con Wiring (plataforma de
Hardware multipropsito con un ambiente para no programadores).
El arduino Uno es una placa electrnica basada en el ATmega328P. Cuenta con
14 pines digitales de entrada / salida (de los cuales 6 se podrn utilizar como
salidas PWM), 6 entradas analgicas, un cristal de cuarzo de 16 MHz, una
conexin USB, un conector de alimentacin, una jefe de ICSP y un botn de
reinicio. Contiene todo lo necesario para apoyar el microcontrolador; basta con
conectarlo a un ordenador con un cable USB o la corriente con un adaptador de
CA a CC o una batera para empezar. Puede jugar con el UNO sin preocuparse
demasiado por hacer algo mal, peor de los casos puede sustituir el saltar por unos
pocos dlares y empezar de nuevo.
Microcontrolador ATmega328P
Tensin de funcionamiento 5V
Voltaje de entrada (recomendado) 7-12V
Voltaje de entrada (lmite) 6-20V
E / S digitales prendedores 14 (de los cuales 6 proporcionan salida
PWM)
PWM digital pines I / O 6
Pines de entrada analgica 6
Corriente continua para Pin I / O 20 mA
Corriente CC para Pin 3.3V 50 mA
Memoria flash 32 KB (ATmega328P) de los cuales 0,5
KB utilizado por cargador de arranque
SRAM 2 KB (ATmega328P)
EEPROM 1 KB (ATmega328P)
Velocidad de reloj 16 MHz
Longitud 68,6 mm
Anchura 53,4 mm
Peso 25 g
Cada uno de los 14 pines digitales en el Uno se puede utilizar como una entrada o
salida, utilizando pinMode () , digitalWrite () , y digitalRead () funciones. Operan a
5 voltios. Cada pin puede proporcionar o recibir 20 mA como condicin de
funcionamiento recomendada y tiene una resistencia de pull-up (desconectada por
defecto) de 20-50k ohmios. Un mximo de 40 mA es el valor que no debe
superarse en cualquier pin de E / S para evitar daos permanentes en el
microcontrolador.
De Serie: 0 (RX) y 1 (TX). Se utiliza para recibir (RX) y transmitir datos en serie
(TX) TTL. Estos pines estn conectados a los pines correspondientes del chip de
serie ATmega8U2 de USB a TTL.
PWM: 3, 5, 6, 9, 10, y 11. Proporciona una salida de PWM de 8 bits con la funcin
analogWrite ().
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan la
comunicacin SPI utilizando la librera SPI.
LED: 13. Hay un LED incorporado impulsado por pin digital 13. Cuando el
pasador es ALTO, el LED est encendido, cuando el pasador es bajo, es apagado.
Convertidor DAC
Arduino Uno tiene una resolucin de 10 bits, es decir, unos valores entre 0 y 1023.
Arduino Due tiene una resolucin de 12 bits, es decir, unos valores entre 0 y 4095.
Un microcontrolador solo entiende seales digitales (1s y 0s), por lo tanto para
poder leer seales analgicas necesitamos los convertidores Analgico a Digital
(ADC).
Como funciona un conversor analgico a digital:
Por lo tanto, son aquellos que manejan seales discretas, a diferencia de los
sistemas de tiempo continuo (STC) en los cuales sus variables son conocidas en
todo momento.
El hecho de que algunas funciones del tiempo propias del STD varen en forma
discreta, puede provenir de una caracterstica inherente al sistema, como en el
caso de aquellos que trabajan con algn tipo de barrido, por ejemplo: un sistema
de radar.
X (t) X* (kT)
MUESTREADOR
X(t)
t
p(t)
X*(kT)
kT
0 1 2 3
La seal muestreada puede considerarse como el producto del tren de pulsos por la
seal analgica, como en toda modulacin de amplitud, y para mayor comodidad se
supone que los pulsos tienen amplitud unitaria, por lo tanto no se necesita ningn
factor de escala:
p (t)
x(t) x* (t)
MODULADOR
El tren de pulsos evidentemente es una funcin peridica del tiempo, por lo
tanto admite un desarrollo en serie de Fourier:
p(t) = cn jnst
n= -
p(t)
t
0 p T T+p
Esta expresin conviene llevarla a la forma (sen )/ o sea la funcin sinc , para
ello se supone que:
1 = -jnsp/2 jnsp/2
Resultar:
x* (t) = x(t) cn jnst = x(t) cn jnst
n=- n=-
por lo tanto cn es tambin el coeficiente de Fourier de la seal discreta, que tiene
el desarrollo en serie con el mismo periodo T.
|cn|
Por otra parte, la seal analgica o de tiempo continuo, tendr a su vez su propio
espectro de frecuencias, dado por su respectiva transformada de Fourier X(j),
que ir desde = 0 hasta una frecuencia mxima = c que llamaremos
mxima frecuencia de la seal continua o analgica
|X(j)|
-c 0 c
x* (t) = cn x(t) jnst
n=-
la transformada como:
- c c s-c s s+c
Las ordenadas dibujadas representan los distintos coeficientes c n y todos los valores son positivos porque se ha tomado el
mdulo de la Transformada de Fourier de la seal discreta.
DESARROLLO
Una vez visto las caractersticas del ARDUINO y el funcionamiento del circuito
MCP4021, as como la forma en que se tiene que hacer la conversin de una
seal analgica a digital para poder trabajar con el arduino, se comenz a
programar para principalmente obtener las seales sinusoidal, triangular y
cuadrada.
ESQUEMA:
MATERIALES
ARDUINO UNO
3 RESITENCIAS 330
1 DIP SWITCH
DAC MCP492
1 OSCILOSCOPIO
F= +
F= +
F = 98 + 10 Hz
A= +
.
A= + .
A = 0.18 + 0.1
CDIGO
#include <TimerOne.h>
#include <SPI.h>
#include <DAC_MCP49xx.h>
#define SS_PIN 10
int bandera;
int x;
int yf;
int muestra=0; // numero de muestra
float frecuencia; // frecuencia de senal a generar
float frecuenciadigital; // frecuencia digital
float frecuenciamuestreo=1000; // 4 K Hz
float amplitud;
float amplitudx;
float xanterior=0; // declaramos bandera
float yanterior=0; // declaramos bandera
void ISR_timer(){
bandera=1;
}
void setup(){
void loop(){
//Sin Signal
if (digitalRead(msen) == true ){
if (bandera== 1 ){
Serial.println(amplitud);
xanterior=x;
yanterior=yf;
dac.output(yf2);
// Square signal
frecuencia =floor(98.0*((analogRead(1)*5.0)/(1024.0))+10.0);
amplitud = 0;
dac.output(amplitud);
amplitudx=0.18*((analogRead(0)*5.0)/(1024.0))+0.1;
amplitud = amplitudx*4095;
dac.output(amplitud);
// Triangle wave
/*amplitudx=0.18*((analogRead(0)*5.0)/(1024.0))+0.1;
amplitud = amplitudx*4095;
frecuencia =floor(98.0*((analogRead(1)*5.0)/(1024.0))+10.0);
amplitud = 0;
*/
// triangle wave
for (int i=0; i<25; i++)
{
dac.output(i*100);
}
for (int i=24; i>=0; i--)
{
dac.output(i*100);
}
}
}
FOTOS DEL PROCESO DE MONTAJE
fsico.
El segundo objetivo, entender mejor los conceptos vistos en clase con la prctica.
Esto es una importante ventaja de este diseo. Y aunque con este prototipo no se
algunas limitaciones del uso de DAC mcp492 y Arduino Uno para la transmisin y
el tratamiento de datos.
BIBLIOGRAFA:
[1] Procesamiento Digital de Seales EL-5805 Dr. Jos Pablo Alvarado Moya
http://ingeniatic.net/index.php/tecnologias/item/465-generador-de-funciones
https://www.arduino.cc/en/Reference/AnalogWriteResolution
https://aprendiendoarduino.wordpress.com/2015/03/30/entradas-y-salidas-analogicas-
pwm/