PSoC

Embed Size (px)

Citation preview

  • PWM CONTROLADO POR VOLTAJE CON PSoC Una aplicacin utilizada comnmente en electrnica son los PWM, para esta publicacin de

    PSoC en Espaol se va a presentar como configurar el modulo de usuario PWM de PSoC

    Designer y la manera de cambiar el ciclo til del mismo por medio de una entrada de voltaje

    anlogo.

    En primera instancia PSoC Designer dentro del catalogo de mdulos de usuario ofrece

    mdulos PWM de 8 y 16 bits, para este ejemplo se va a utilizar un modulo de 8 bits, sin

    embargo si quieren configurar un modulo de 16 bits no tienen de que preocuparse ya que

    los parmetros de configuracin son prcticamente los mismos. Para comenzar en s con el

    desarrollo de esta publicacin se tienen que mostrar cuales son los parmetros de

    configuracin de estos mdulos y de que consta cada uno.

    Clock:

    Este parmetro de configuracin se refiere al reloj con el cual se va a alimentar el modulo de

    usuario, la velocidad de este reloj es un factor determinante para determinar la frecuencia a

    la cual va a trabajar el PWM.

    El clock se puede escoger entre los diferentes relojes de los que dispone PSoC como por

    ejemplo Sysclk*2 (Ya que estos mdulos soportan reloj hasta de 48 MHz), VC2, VC2, VC3,

    adems de relojes externos que pueden ser conectados por medio de las entradas digitales

    del microcontrolador.

    Enable:

    Con este parmetro se escoge la forma con la cual se va a activar el PWM, se puede escoger

    entre 16 fuentes diferentes entre las que se encuentran, high, low, los comparadores y las

    entradas digitales del microcontrolador, en caso de escoger la opcin High significara que

    el modulo PWM permanecer activo de manera permanente.

    CompareOut:

    Este parmetro es la salida del modulo, por lo tanto es de donde se obtiene el PWM que

    puede ser conectado a uno de los buses para que pueda estar a disposicin de otros

    mdulos de usuario o para su conexin a alguno de los pines de salida del

    microcontrolador.

    TerminalCountOut:

  • Es una salida auxiliar a la CompareOut, con esta se puede conectar la respuesta del PWM

    a otro bus para futuras conexiones, en caso de no ser necesario se puede dejar

    deshabilitada.

    Period:

    Este parmetro permite configurar el periodo de la seal del PWM, los valores que puede

    tomar son de (0 - 255) para el caso de los PWM de 8 bits y de (0 - 65535) para el caso de los

    PWM de 16 bits.

    PulseWidth:

    A partir de este parmetro se puede configurar el ciclo til del PWM, puede tomar al igual

    que para el parmetro Period puede tomar valores entre (0 -255 o 0-65535) dependiendo

    del tipo de modulo con el cual se est trabajando, el ciclo til se puede calcular a partir de

    las siguientes ecuaciones:

    Con CompareType = Less Than

    Con CompareType = Less Than Or Equal

    Lo anterior aplica solamente cuando el valor de PulseWidth es menos al valor del

    parmetro Periodo, en caso de ser mayor o igual el ciclo til del PWM es de 100%.

    InterruptType:

    Este parmetro permite configurar el tipo de interrupciones con las cuales se va a manejar

    el modulo.

    CompareType:

    Este tipo establece el tipo de comparacin que se va a realizar y es el que se mencionaba en

    el parmetro PulseWidth como parte del clculo del ciclo til.

    ClockSync:

    Indica la fuente de reloj con la cual se debe sincronizar el modulo.

    InvertEnable:

  • Invierta la seal de entrada que se haba configurado previamente como seal de

    habilitacin del modulo.

    As como estos parmetros pueden ser configurados de manera grafica sencillamente,

    tambin pueden ser configurados por medio de cdigo ya sea en Assembler o en C

    mediante comandos que permiten activar o desactivar el modulo, modificar el periodo, el

    ancho del pulso, entre otras caractersticas, ejemplos de esto son los siguientes comandos:

    PWM8_Start(); //Inicializa el modulo PWM

    PWM8_WritePeriod(Valor del periodo); //Configura el periodo del PWM

    PWM8_WritePulseWidth(Valor del ancho de pulso);// Configura el ancho de pulso del PWM

    PWM8_bReadPulseWidth();// Lee el valor del ancho de pulso del PWM

    PWM8_Stop(); //Detiene el modulo PWM8

    DESARROLLO PRCTICA DE PWM CONTROLADO POR VOLTAJE:

    El objetivo principal de esta publicacin es desarrollar un circuito PWM cuyo ciclo til sea

    modificado por medio del valor de una seal de voltaje anlogo, para tal fin se va a utilizar el

    IDE de desarrollo de PSoC (PSoC Designer), los mdulos de usuario ADCINC y PWM8. El

    procedimiento para desarrollar esta aplicacin fue el siguiente:

    1. Ingresar la seal de voltaje anlogo al microcontrolador PSoC y convertirla a un valor digital.

    Para tal fin se utiliza con un convertidor anlogo a digital (modulo ADCINC), personalmente

    antes del modulo convertidor, prefiero utilizar un modulo PGA para ingresar la seal

    anloga y de esta manera hacer una especie de acople o adaptacin de la seal, luego de

    este modulo PGA si procedo a ingresar la seal anloga al convertidor ADC.

    2. Configurar el modulo PWM segn los criterios que se mostraron anteriormente y las

    necesidades de frecuencia que tenga cada uno.

    3. Utilizando el valor digital entregado por el convertidor ADC y el comando

    PWM8_WritePulseWidth(); del modulo PWM, se re-escribe el valor del ancho de pulso y

    por lo tanto el del ciclo til del PWM, esta cambio de ciclo til es proporcional al cambio de

    voltaje que se presente en la seal anloga de la entrada del circuito.

    Como se puede apreciar por el procedimiento descrito, la prctica es bastante sencilla y as

    mismo el cdigo tambin lo es, tal como se puede apreciar a continuacin.

    //----------------------------------------------------------------------------

    // C main line

    //----------------------------------------------------------------------------

    #include

    #include "PSoCAPI.h"

    void main(void)

  • {

    BYTE resultado;// Variable para alojar el resultado del ADC

    M8C_EnableGInt;// Interrupciones M8C Habilitadas

    Acople_Start(3);// Inicializacin del Modulo PGA (Acople)

    PWM8_Start();//Inicializacin del Modulo PWM

    Convertidor_Start(3);//Inicializacin del Modulo ADCINC (Convertidor)

    Convertidor_GetSamples(0);//Se inicia la toma de muestras del ADC

    while(1)

    {

    if(Convertidor_fIsDataAvailable()!=0)//se revisa que el DAC tenga una conversin disponible

    {

    resultado=Convertidor_bGetData();//se guarda el valor de la conversin en la variable

    resultado

    }

    PWM8_WritePulseWidth(resultado);//Se escribe el ancho de pulso con el valor de la variable

    resultado

    }

    }

  • VOLTAJES DE REFERENCIA EN PSOC

    Teniendo en cuenta que cuando se trabaja con microcontroladores

    PSoC es posible implementar fases anlogas, en algunos momentos

    puede llegar a ser necesario utilizar niveles de voltaje duales, al

    hablar de este tipo de voltajes me refiero a tener un nivel de voltaje

    positivo y un nivel negativo, ambos respecto a un punto de

    referencia (-5V , 0V, +5V).

    PSoC nos ofrece la posibilidad de trabajar con diferentes niveles de

    voltaje dependiendo de las referencias que sean seleccionadas para

    dicho trabajo, en un principio se tienen tres niveles de referencia

    estables con los cuales es posible trabajar, estos valores son

    denominados AGND, REFHI, REFLO.

    AGND: esta es una referencia de tierra anloga, es utilizada cuando

    se requieren valores de voltaje tanto positivos como negativos, los

    cuales van referenciados ante este punto de tierra anloga AGND.

    REFLO: es el parmetro que simboliza el voltaje negativo.

    REFHI: es el parmetro que simboliza el voltaje positivo.

    Los valores de voltaje de REFLO y REFHI pueden cambiar

    dependiendo de la configuracin que sea escogida para el RefMux

    en los parmetros globales del sistema (Figura 1), este parmetro

    tiene una gran variedad de posibles configuraciones con las cuales

    se obtienes diferentes valores como se observa en la siguiente

    tabla:

  • (Tabla 1. Valores de voltajes segn el Ref Mux)

    (Imagen 1. Posibles Valores de configuracin del Ref Mux)

    CONVERTIDOR ANLOGO A DIGITAL CON MODULO ADCINC

    En la publicacin anterior se realizo una pequea revisin del

    modulo DAC8 de PSoC con el cual se pueden hacer conversiones

    de datos digitales a anlogos, en esta ocasin se va a llevar a cabo

  • el proceso contrario con el modulo ADCINC, el cual es tan solo uno

    de los tantos mdulos que ofrece PSoC Designer para realizar

    conversiones anlogas a digitales, adems tambin se llevara a

    cabo una prctica sencilla en la cual se pretende convertir una seal

    anloga a digital y luego retornarla de nuevo de manera anloga, de

    esta manera se integraran los temas vistos en esta publicacin y la

    anterior.

    Los mdulos que ofrece PSoC Designer para hacer conversiones

    anlogo a digital son los siguientes:

    ADCINC

    ADCINCVR

    DelSig

    DualADC

    DualADC8

    SAR6

    TriADC

    TriADC8

    El modulo que se va a referenciar es el ADCINC, este es un

    convertidor anlogo a digital que cuenta con una resolucin de 6 a

    14 bits y provee una velocidad de muestreo de 15,6 Ksps (para 6

    bits de resolucin), el formato de la salida digital se puede entregar

    con signo o sin signo, la frecuencia mxima a la que se puede

    alimentar el bloque (DataClock) es de 8 MHz, sin embargo es

    recomendable que se utilice una frecuencia de 2 MHz con la cual se

    provee una linealidad en la conversin.

    Este ADCINC es posible implementarlo de primer o segundo orden,

    si se implementa una de primer orden son utilizados un bloque

    digital y un bloque anlogo, por su parte al implementar un ADC de

    segundo orden se utilizaran un bloque digital y dos anlogos, la

    configuracin de estos ADC se pueden observar en las figuras 1 y 2

    mostradas a continuacin, estos esquemas fueron tomados de la

    hoja de datos del modulo ADCINC.

  • (Figura 1. ADCINC de primer Orden)

    (Figura 2. ADCINC de segundo Orden)

    Configuracin modulo ADCINC:

    Al igual que se hizo con el modulo DAC8 los aspectos que se van a

    tener en cuenta en esta publicacin, son solo aspectos mnimos

    para la puesta en funcionamiento del modulo, para una mayor

    profundidad sobre el funcionamiento del mismo y mayores

    caractersticas, se recomienda leer la hoja de datos del modulo.

    Los parmetros a configurar para este modulo se pueden apreciar

    en la figura 3.

  • (Figura 3. Parmetros de configuracin del modulo)

    DataFormat: Es el formato del valor binario al que ser convertido el

    valor anlogo ingresado al sistema, permite dos posibilidades

    unsigned y signed, en caso de seleccionar unsigned el dato binario

    se ofrece sin signo, si se escoge signe se utiliza un bit para

    determinar el signo del valor digital.

    Resolution: Es el numero de bits utilizado para realizar la

    conversin, entre mayor sea el numero de bits, mejor va a ser la

    resolucin del convertidor.

    Data Clock: Velocidad del reloj a la cual se alimentan los bloques del

    modulo, la velocidad mxima es de 8 MHz, esta velocidad determina

    la velocidad de muestreo del convertidor anlogo a digital.

    Pos Input: Entrada principal del convertidor.

    Los parmetros anteriores son los mnimos a configurar para poner

    en funcionamiento el modulo ADCINC, los valores Neg Input y Neg

    Input Gain, se pueden dejar desconectados y deshabilitados

    respectivamente.

  • Para el funcionamiento del ADC es necesario habilitar las

    interrupciones, adems se recomienda utilizar un modulo PGA de

    ganancia 1 antes de la entrada del convertidor ADC, a continuacin

    se presenta un cdigo en C en que se muestra como poner en

    funcionamiento el convertidor, con este cdigo se espera despejar

    un poco las dudas sobre este modulo.

    //----------------------------------------------------------------------------

    // C main line

    //----------------------------------------------------------------------------

    #include

    #include "PSoCAPI.h"

    void main(void)

    {

    PGA_1_Start(3); //se activa el modulo PGA

    ADCINC_1_Start(3); //se activa el modulo ADCINC

    ADCINC_1_GetSamples(0); // # de muestras a tomar, en este caso muestreo constante

    M8C_EnableGInt; //se habilitan las interrupciones

    while(1)

    {

    if(ADCINC_1_fIsDataAvailable()!=0) // si el DAC tiene un dato valido entonces

    {

    PRT1DR=ADCINC_1_bGetData();//coloca el dato digital por el puerto 1.

    }

    }

    }

  • COMUNICACIN UART CON PSoC

    En esta ocasin he propuesto realizar una prctica de comunicacin UART con PSoC, la idea principal es mostrar el funcionamiento del modulo de usuario UART, esto se llevara a cabo mediante un sencillo ejercicio en el cual se debe tomar el voltaje de un potencimetro configurado como divisor de tensin, luego este valor de voltaje se debe convertir de anlogo a digital mediante un modulo de usuario ADCINC para posteriormente enviarlo en formato hexadecimal a un Hyper Terminal.

    En primera instancia se van a revisar los aspectos bsicos de configuracin para poder utilizar el modulo de usuario UART. Este modulo de usuario es un transmisor y receptor universal asncrono (UART) compatible con el protocolo de comunicacin RS232 en modo full duplex, est compuesto por dos bloques digitales los cuales son utilizados uno para transmisin (Tx) y el otro para recepcin (Rx) que funcionan independientemente.

    Reloj del modulo UART y velocidad de transmisin: El reloj con el cual se alimenta el modulo de usuario es el mismo para ambos bloques y la frecuencia de este debe ser 8 veces mayor a la velocidad de transmisin deseada, por ejemplo si se quiere transmitir a una velocidad de 9600 baudios es necesario que el reloj del modulo de usuario UART

  • este configurado a 76.8 KHz, la tolerancia del reloj para un correcto funcionamiento es +/- 2%.

    Rx input: Este parmetro se debe conectar a alguna de las filas de entrada de los bloques digitales y luego a alguno de los pines externos desde donde se va a tomar los datos que son enviados desde el computador.

    Tx Output: Este parmetro se conecta a alguna de las filas de salida de los bloques digitales y luego al pin externo encargado de enviar la informacin al computador.

    Tx Interrupt Mod: Este parmetro determina el momento en el que se genera la interrupcin por medio del bloque Tx, se pueden escoger dos tipos de interrupciones TxRegEmpty y TxComplete, la segunda opcin es la ms utilizada para casos en los que es necesario garantizar que el dato transmitido ha sido enviado por completo.

    ClockSync: Permite establecer la fuente de reloj con la que se debe sincronizar el modulo de usuario.

    Rx Output: este parmetro permite tomar el valor de entrada a uno de los buses del microcontrolador, esto puede ser til para realizar funciones de verificaciones de datos.

  • Rx Clock Out y Tx Clock Out: Permite utilizar el reloj del bloque en otros procesos, hay que recordar que este reloj equivale al del modulo divido en 8.

    RxCmdBuffer: Habilita o deshabilita el buffer para la recepcin de comandos.

    RxBufferSize: Determina el tamao del buffer de recepcin, este parmetro solo es valido cuando estn habilitados el RxCmdBuffer y las interrupciones.

    CommandTerminator: Determina el carcter o valor que al ser recibido seala el final de un comando.

    Param_Delimiter: Determina el carcter utilizado para delimitar un parmetro por ejemplo con el valor 32 se termina que el delimitador es un espacio.

    Aunque los parmetros mostrados anteriormente son los bsicos para poner en funcionamiento el modulo UART, tambin son necesarios algunos comandos para la programacin del mismo, estos comandos son utilizados para la inicializacin del modulo, seleccionar el tipo de paridad, tomar y enviar diferentes tipos de datos, algunos de estos comandos se muestran a continuacin, sin embargo es recomendable consultar la hoja de datos del modulo para profundizar el estudio de estos mtodos.

  • UART_Start(0): Este comando inicializa el modulo de usuario, el valor indicado dentro del parntesis indica el tipo de paridad. UART_CPutString("PSoC En Espaol \n\r"): Este comando enva una cadena de caracteres. UART_PutSHexByte(Valor): Enva en formato Hexadecimal el valor indicado.

    De ahora en adelante se muestra el proceso de desarrollo de la prctica mencionada anteriormente.

    El primer paso es tomar la muestra del potencimetro, para esto se utilizaron un modulo PGA con ganancia unitaria y un modulo ADCINC con una frecuencia de muestreo de 1562 muestras por segundo la cual puede ser baja para ejercicios con seales con altas frecuencias pero para la prctica que se est realizando en este momento es ms que suficiente, luego de tener los dispositivos para convertir el valor anlogo a un valor digital se procede a utilizar el modulo UART y a configurarlo como se puede apreciar en las figuras 1 y 2.

  • (Figura 1. Configuracin de los parmetros del modulo)

    (Figura 2. Interconexin del modulo con los pines externos)

    Como se pudo observar en la figura 1, el reloj utilizado para alimentar el modulo UART es VC3 el cual est tomando el reloj del sistema (SysClk) y lo divide en 156 por lo tanto la frecuencia que proporciona VC3 es de 153,8 KHz y como ya se haba mencionado la velocidad de transmisin es igual a la velocidad del reloj divido en 8 por lo

  • tanto la velocidad a la que se va a transmitir en este ejercicio es de 19200 baudios.

    Como existe una tolerancia de +/- 2% en la velocidad de transmisin no hay ningn inconveniente con la diferencia que se presenta entre los 19200 y los 19230.

    El siguiente paso es escribir el programa para nuestra aplicacin, en este cdigo se deben inicializar los mdulos de usuario, tomar las muestras con el convertidor anlogo a digital y por ultimo enviar estos datos por medio del modulo UART. A continuacin se presenta el cdigo desarrollado para esta aplicacin.

    //-----------------------------------------------------------------------

    // C main line

    // Programa de muestra del modulo UART de PSoC

    // Desarrollado para PSoC En Espaol, www.psocenespanol.blogspot.com

    // Desarrollado por Ivn Cuadros Acosta

    //-----------------------------------------------------------------------

  • #include

    #include "PSoCAPI.h"

    #include

    void main(void)

    {

    PGA_1_Start(3); //inicializacin modulo PGA

    ADCINC_1_Start(3); //inicializacin modulo ADCINC

    ADCINC_1_GetSamples(0); // se toman muestras constantemente

    M8C_EnableGInt ; //se habilitan las interrupciones

    UART_1_Start(0);//inicializacin modulo UART, sin paridad

    //Se imprimen encabezados que aparecen inicialmente en el hyper Terminal

    UART_1_CPutString("PRACTICA DE MUESTRA MODULO UART DE PSoC \n\r");

    UART_1_CPutString("PSoC En Espaol \n\r");

    UART_1_CPutString("www.psocenespanol.blogspot.com \n\r");

    while(1)

    {

    if(ADCINC_1_fIsDataAvailable()!=0)//se conprueba si hay un valos disponible en el

    convertidor

    {

    UART_1_PutSHexByte(ADCINC_1_wGetData());//Se envia el valor del ADCINC

    en formato Hexa

    UART_1_CPutString("\n\r");}//Se imprime un salto de linea

    Delay10msTimes(50);//Retardo de 500 milisegundos

    }

    }