Una aplicación utilizada comúnmente en
electrónica son los PWM, para esta publicación de PSoC en Español 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 análogo.
En primera instancia PSoC Designer dentro
del catalogo de módulos de usuario ofrece módulos 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 parámetros de
configuración son prácticamente los mismos. Para comenzar en sí con el
desarrollo de esta publicación se tienen que mostrar cuales son los parámetros
de configuración de estos módulos y de que consta cada uno.
Clock:
Este parámetro de configuración 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 módulos soportan reloj hasta de 48 MHz), VC2, VC2, VC3, además de relojes
externos que pueden ser conectados por medio de las entradas digitales del
microcontrolador.
Enable:
Con este parámetro 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 opción “High”
significara que el modulo PWM permanecerá activo de manera permanente.
CompareOut:
Este parámetro 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 disposición de otros módulos de usuario
o para su conexión 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 parámetro permite configurar el
periodo de la señal 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 parámetro se puede
configurar el ciclo útil del PWM, puede tomar al igual que para el parámetro
“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 menor al valor del parámetro “Periodo”, en caso de ser
mayor o igual el ciclo útil del PWM es de 100%.
InterruptType:
Este parámetro permite configurar el
tipo de interrupciones con las cuales se va a manejar el modulo.
CompareType:
Este tipo establece el tipo de
comparación que se va a realizar y es el que se mencionaba en el parámetro
“PulseWidth” como parte del cálculo del ciclo útil.
ClockSync:
Indica la fuente de reloj con la cual
se debe sincronizar el modulo.
InvertEnable:
Invierta la señal de entrada que se
había configurado previamente como señal de habilitación del modulo.
Así como estos parámetros pueden ser configurados de manera grafica sencillamente, también pueden ser configurados por medio de código 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 características, 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 PRÁCTICA DE PWM CONTROLADO
POR VOLTAJE:
El objetivo principal de esta
publicación es desarrollar un circuito PWM cuyo ciclo útil sea modificado por
medio del valor de una señal de voltaje análogo, para tal fin se va a utilizar
el IDE de desarrollo de PSoC (PSoC Designer), los módulos de usuario ADCINC y
PWM8. El procedimiento para desarrollar esta aplicación fue el siguiente:
1. Ingresar la señal
de voltaje análogo al microcontrolador PSoC y convertirla a un valor digital.
Para tal fin se utiliza con un convertidor análogo a digital (modulo ADCINC),
personalmente antes del modulo convertidor, prefiero utilizar un modulo PGA
para ingresar la señal análoga y de esta manera hacer una especie de acople o
adaptación de la señal, luego de este modulo PGA si procedo a ingresar la señal
análoga al convertidor ADC.
2. Configurar el
modulo PWM según 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 señal análoga de la
entrada del circuito.
Como se puede apreciar por el
procedimiento descrito, la práctica es bastante sencilla y así mismo el código
también lo es, tal como se puede apreciar a continuación.
//----------------------------------------------------------------------------
// 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);// Inicialización
del Modulo PGA (Acople)
PWM8_Start();//Inicialización
del Modulo PWM
Convertidor_Start(3);//Inicialización
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 conversión disponible
{
resultado=Convertidor_bGetData();//se guarda el
valor de la conversión en la variable resultado
}
PWM8_WritePulseWidth(resultado);//Se escribe el
ancho de pulso con el valor de la variable resultado
}
}
Por último pueden observar el
siguiente vídeo en el cual se muestra el resultado obtenido por esta práctica.