viernes, 20 de noviembre de 2015

Practica: Tema Musical


Fig. 1.- WaveDAC8
        En esta práctica fue necesaria la utilización de un convertidor de datos, el DAC (Digital to Analogue Converter) que es un dispositivo para convertir señales digitales con datos binarios en señales de corriente o de tensión analógica. 

Generalidades

 Resolución=n
 Código=2^n
 Voltaje de referencia
 LSB= Vref/2^n
 Escala de voltaje completa= Vref -1LSB
 Función de transferencia= Vref * (Código/2^n)



        Utilizando el componente WaveDAC8(Fig. 1) del PSoc 5LP y con ayuda del software PSoC Creator 3.2, este componente proporciona una solución rápida y fácil para generar señales periódicas como son la señal senoidal, cuadrada, triangular y diente de sierra. Cabe mencionar que este componente cuenta con dos formas de onda arbitrarias, una que es una onda que se carga desde un archivo y la otra es una onda que se puede ajustar (dibujar) en el componente.

Diseños

        A continuación se muestra el diseño de la práctica pero utilizando el PWM (Pulse-Width Modulation) en este caso se tuvo que modificar el periodo del PWM, con ayuda de un temporizador o reloj, para poder obtener las notas que se deseaban (Fig. 2). Para obtener el periodo fue necesario hacer el siguiente cálculo:
 Periodo=(1000000*)/(Frecuencia de la nota)
*Hace referencia al valor del reloj (Clock) del PWM, en este caso 1MHz.

       En el siguiente enlace encontrarán el ejemplo para generar tonos en una octava especifica en el cual nos basamos para realizar este diseño:

Fig. 2.- Diseño de Tema Musical con PWM


        En el diseño con el WaveDAC8 fue necesaria la modificación de la cantidad de muestras por segundo para obtener una frecuencia cercana a la de las notas que se necesitaban.
Fig. 3.- Diseño de Tema Musical con WaveDAC8

Código WaveDAC8

#include <project.h>
int aumentar = 0;
CY_ISR(tempo)
{
    if (aumentar==1)//Mi3
    {
        /*PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,17);
    }
     if (aumentar==2)//La3
    {
        /*PWM_WritePeriod(4545);
        PWM_WriteCompare(2272);*/
        WaveDAC8_1_Wave1Setup(0,22);
    }
    if (aumentar==3)//Mi3
    {
       /* PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,17);
    }
    if (aumentar==4)//Re1 and Sol3
    {
       /* PWM_WritePeriod(27240);
        PWM_WriteCompare(13620);
        PWM_WritePeriod(5102);
        PWM_WriteCompare(2551);*/
        WaveDAC8_1_Wave1Setup(0,4);
        WaveDAC8_1_Wave1Setup(0,20);
    }
     if (aumentar==5)//Fa3
    {
       /* PWM_WritePeriod(5727);
        PWM_WriteCompare(2863);*/
        WaveDAC8_1_Wave1Setup(0,18);
    }
     if (aumentar==6)//Fa3
    {
        /*PWM_WritePeriod(5727);
        PWM_WriteCompare(2863);*/
        WaveDAC8_1_Wave1Setup(0,18);
    }
     if (aumentar==7)//Sol1
    {
        /*PWM_WritePeriod(20408);
        PWM_WriteCompare(10204);*/
        WaveDAC8_1_Wave1Setup(0,5);
    }
     if (aumentar==8)//Re3
    {
      /*  PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==9)//Sol3
    {
       /* PWM_WritePeriod(5102);
        PWM_WriteCompare(2551);*/
        WaveDAC8_1_Wave1Setup(0,20);
    }
    if (aumentar==10)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==11)//La1 and Mi3
    {
        /*PWM_WritePeriod(18181);
        PWM_WriteCompare(9090);
        PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,6);
        WaveDAC8_1_Wave1Setup(0,17);
    }
    if (aumentar==12)//Mi3
    {
       /* PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,17);
    }
     if (aumentar==13)//La3
    {
       /* PWM_WritePeriod(4545);
        PWM_WriteCompare(2272);*/
        WaveDAC8_1_Wave1Setup(0,22);
    }
    if (aumentar==14)//Mi3
    {
        /*PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,17);
    }
    if (aumentar==15)//Re1 and Sol3
    {
        /*PWM_WritePeriod(27240);
        PWM_WriteCompare(13620);
        PWM_WritePeriod(5102);
        PWM_WriteCompare(2551);*/
        WaveDAC8_1_Wave1Setup(0,4);
        WaveDAC8_1_Wave1Setup(0,20);
    }
     if (aumentar==16)//Fa3
    {
       /* PWM_WritePeriod(5727);
        PWM_WriteCompare(2863);*/
        WaveDAC8_1_Wave1Setup(0,18);
    }
     if (aumentar==17)//Fa3
    {
        /*PWM_WritePeriod(5727);
        PWM_WriteCompare(2863);*/
        WaveDAC8_1_Wave1Setup(0,18);
    }
     if (aumentar==18)//Sol1
    {
        /*PWM_WritePeriod(20408);
        PWM_WriteCompare(10204);*/
        WaveDAC8_1_Wave1Setup(0,5);
    }
     if (aumentar==19)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==20)//Sol3
    {
        /*PWM_WritePeriod(5102);
        PWM_WriteCompare(2551);*/
        WaveDAC8_1_Wave1Setup(0,20);
    }
    if (aumentar==21)//Re3
    {
       /* PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==22)//La1 and Mi3
    {
       /* PWM_WritePeriod(18181);
        PWM_WriteCompare(9090);
        PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,6);
        WaveDAC8_1_Wave1Setup(0,17);
    }
     if (aumentar==22)//Mi2
    {
        /*PWM_WritePeriod(12134);
        PWM_WriteCompare(6067);*/
        WaveDAC8_1_Wave1Setup(0,8);
    }
     if (aumentar==23)//La2
    {
        /*PWM_WritePeriod(9090);
        PWM_WriteCompare(4545);*/
        WaveDAC8_1_Wave1Setup(0,11);
    }
     if (aumentar==24)//Do3
    {
        /*PWM_WritePeriod(7644);
        PWM_WriteCompare(3822);*/
        WaveDAC8_1_Wave1Setup(0,13);
    }
     if (aumentar==25)//Re1 and Mi3
    {
       /* PWM_WritePeriod(27240);
        PWM_WriteCompare(13620);
        PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,4);
        WaveDAC8_1_Wave1Setup(0,17);
    }
     if (aumentar==26)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==27)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==28)//Sol1
    {
        /*PWM_WritePeriod(20408);
        PWM_WriteCompare(10204);*/
        WaveDAC8_1_Wave1Setup(0,5);
    }
     if (aumentar==27)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
    if (aumentar==28)//Sol3
    {
       /* PWM_WritePeriod(5102);
        PWM_WriteCompare(2551);*/
        WaveDAC8_1_Wave1Setup(0,20);        
    }
    if (aumentar==29)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
     if (aumentar==30)//La1 and Mi3
    {
       /* PWM_WritePeriod(18181);
        PWM_WriteCompare(9090);
        PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,6);
        WaveDAC8_1_Wave1Setup(0,17);
    }
     if (aumentar==31)//Mi3
    {
        /*PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,17);
    }
     if (aumentar==32)//La1 and La3
    {
        /*PWM_WritePeriod(18181);
        PWM_WriteCompare(9090);
        PWM_WritePeriod(4545);
        PWM_WriteCompare(2272);*/
        WaveDAC8_1_Wave1Setup(0,6);
        WaveDAC8_1_Wave1Setup(0,22);
    }
     if (aumentar==33)//Sol3
    {
        /*PWM_WritePeriod(5102);
        PWM_WriteCompare(2551);*/
        WaveDAC8_1_Wave1Setup(0,20);
    }
    if (aumentar==34)//Fa3
    {
        /*PWM_WritePeriod(5727);
        PWM_WriteCompare(2863);*/
        WaveDAC8_1_Wave1Setup(0,18);
    }
    if (aumentar==35)//Mi3
    {
       /* PWM_WritePeriod(6067);
        PWM_WriteCompare(3033);*/
        WaveDAC8_1_Wave1Setup(0,17);
    }
    if (aumentar==36)//Re3
    {
        /*PWM_WritePeriod(6809);
        PWM_WriteCompare(3404);*/
        WaveDAC8_1_Wave1Setup(0,15);
    }
    if (aumentar==37)//Do3
    {
        /*PWM_WritePeriod(7644);
        PWM_WriteCompare(3822);*/
        WaveDAC8_1_Wave1Setup(0,13);
    }
     if (aumentar==38)//Si2
    {
        /*PWM_WritePeriod(8099);
        PWM_WriteCompare(4049);*/
        WaveDAC8_1_Wave1Setup(0,12);
    }
    if (aumentar==39)//La2
    {
        /*PWM_WritePeriod(9090);
        PWM_WriteCompare(4545);*/
        WaveDAC8_1_Wave1Setup(0,11);
    }
    if (aumentar==40)//Sol#2
    {
       /* PWM_WritePeriod(9631);
        PWM_WriteCompare(4815);*/
        WaveDAC8_1_Wave1Setup(0,10);
    }
    if (aumentar==41)//Fa2
    {
       /* PWM_WritePeriod(11453);
        PWM_WriteCompare(5726);*/
        WaveDAC8_1_Wave1Setup(0,9);
    }
    if (aumentar==42)//Fa2
    {
        /*PWM_WritePeriod(11453);
        PWM_WriteCompare(5726);*/
        WaveDAC8_1_Wave1Setup(0,9);
    }
    if (aumentar==43)//Mi2
    {
        /*PWM_WritePeriod(12134);
        PWM_WriteCompare(6067);*/
        WaveDAC8_1_Wave1Setup(0,8);
    }
     if (aumentar==44)//La1 and Mi2
    {
       /* PWM_WritePeriod(18181);
        PWM_WriteCompare(9090);
        PWM_WritePeriod(12134);
        PWM_WriteCompare(6067);*/
        WaveDAC8_1_Wave1Setup(0,6);
        WaveDAC8_1_Wave1Setup(0,8);
        aumentar=0;
    }
    aumentar++;
}


int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    WaveDAC8_1_Start();
    timer_clock_Start();
    Timer_1_Start(); 
   Tempo_StartEx(tempo);

    for(;;)
    {
        /* Place your application code here. */
    }

/* [] END OF FILE */

>>En el código se comentan los cambios en el periodo del PWM.

Conclusiones

El diseño con WaveDAC8 necesitó una etapa de amplificación, ya que al final la señal obtenida era demasiado aguda para poder escucharla fácilmente, en comparación con la señal obtenida del diseño PWM.

viernes, 6 de noviembre de 2015

Review Max11253

En  esta nueva entrada se hará un pequeño review del ADC (delta sigma ) Max 11253 de la marca Maxim Integrated.
Como una descripción general, el MAX1135 es un ADC dela-sigma de 16 bits y de 6 canales que logra un rendimiento muy bueno utilizando muy poca energía. Su rango de muestreo superior a los 64ksps le da precisión a las mediciones de DC. El MAX1135 utiliza una interface serial SPI para comunicarse  y está disponible en un pequeño (5mm x 5 mm) empaquetado TQFN. El MAX1153 ofrece un amplificador de ganancia variable (PGA) para el ruido de $$6.2nV/\sqrt{Hz}$$  con ajustes de ganancia de 1x hasta 128x.
El PGA integrado provee de isolación en la señal de entrada y también capacita al Max11253 para una interfaz directa con fuentes de alta impedancia sin comprometer la disponibilidad del rango dinámico.
El MAX11253 opera desde un abastecimiento análogo simple de 2.7V to 3.6V o dividida de + 1.8 y -1-8, el rango de abastecimiento digital es 1.7V a 2.0V o 2.V a 3.6V.
Algunos beneficios que ofrece  el MAX 11253 son:
·         Alta resolución para aplicaciones industriales que requieran un rango dinámico ancho.
·         98dB SNR a 1000sps
·         Larga vida en la batería para aplicaciones portables
·         2.2 mA en corriente de modo operacional
·  1 uA   en corriente de descanso
·         Abastecimientos análogos simples o divididos que proveen un rango en voltaje de entrada flexible.
·         2.7V a 3.6V (simple) o 1.8  (dividido)
·         Sistema integrado de activación
·         PGA de bajo ruido de $$6.2nV/\sqrt{Hz}$$   con ganancias de 1,2,4,8,16,32,64,128.
·         6 canales, todos con entrada diferencial.
·         Desempeño robusto en un empaque pequeño
·    -40°C      hasta 125°C  en el rango de temperaturas de operación
·         empaquetado TQFN de 5mm x 5mm


jueves, 5 de noviembre de 2015

Examen Práctico Electrónica 2- Desarrollo Parte 2

El objetivo de la práctica como se mencionó anteriormente es desarrollar con la tarjeta CY8CKIT-059,  un filtro de rechazo de banda.

Establecimos frecuencias de corte para esta practica en la entrada anterior de este blog, pero, se obtuvieron algunos problemas al trabajar con rangos de frecuencias un poco altas ,así que replanteamos el sistema, y lo rediseñamos para que nuestro filtro trabajara con dos frecuencias de corte mas bajas.
El filtro de rechazo de banda se implementa al unir en configuración de paralelo un filtro de pasa alta y un filtro de pasa baja, teniendo dos  frecuencias de corte, fc1 y fc2, como observación fc2 tiene que ser mayor a fc1.  Los valores anteriores de frecuencia eran:
fc1= 1.59kHz y fc2= 15.915kHz.

Replanteando las nuevas frecuencias quedaron de la siguiente manera fc1= 160Hz y fc2= 1.5kHz.
Así que los nuevos valores de componentes son:

 Para el filtro Pasa Bajas 
3 resistencias de 10k
1 resistencias de 15
2 capacitores de 0.1 uF

 Para el filtro Pasa Altas 
4 resistencias de 1k
2 capacitores de 0.1 uF

El diagrama quedo de la siguiente manera:








El código a utilizar en el PsoC fue simple como se muestra a continuación:





Se asignaron  las salidas del Opam a utilizar :




Así como su configuración para este ejemplo:



En el desarrollo de la práctica físicamente no arrojaba los resultados esperados,así que optamos por probar cada parte de nuestro filtro por separado; ambos filtros tanto el pasa bajas como el pasa altas funcionaron de manera correcta, pero, al conectarlos en paralelo se generaba demasiado ruido en nuestras señales por lo que era poco visible el efecto de filtrado que esperábamos ver.
Los resultados se muestran en el siguiente video , en el se puede apreciar el pasa bajas el pasa altas por separado.





Esperamos sea de su ayuda este blog.