Está en la página 1de 17

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 <m8c.h> #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 <m8c.h> #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. 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
Reloj del modulo UART y velocidad de transmisin:

este configurado a 76.8 KHz, la tolerancia del reloj para un correcto funcionamiento es +/- 2%. 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.
Rx input:

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 Output:

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.
Tx Interrupt Mod:

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

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 Output:

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

Habilita o deshabilita el buffer para la recepcin de comandos.


RxCmdBuffer:

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

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


CommandTerminator:

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

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.

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.
UART_Start(0):

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 <m8c.h> #include "PSoCAPI.h" #include <delay.h> 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 } }