Practica 3
Practica 3
Practica 3
Acapulco
Introducción. ............................................................................................................ 3
Bibliografía. ........................................................................................................... 35
La modulación de ancho de pulso (PWM, por sus siglas en inglés) de una señal es
una técnica que logra producir el efecto de una señal analógica sobre una carga, a
partir de la variación de la frecuencia y ciclo de trabajo de una señal digital. El ciclo
de trabajo describe la cantidad de tiempo que la señal está en un estado lógico
alto, como un porcentaje del tiempo total que esta toma para completar un ciclo
completo. La frecuencia determina que tan rápido se completa un ciclo (por
ejemplo: 1000 Hz corresponde a 1000 ciclos en un segundo), y por consiguiente
que tan rápido se cambia entre los estados lógicos alto y bajo. Al cambiar una
señal del estado alto a bajo a una tasa lo suficientemente rápida y con un cierto
ciclo de trabajo, la salida parecerá comportarse como una señal analógica
constante cuanto esta está siendo aplicada a algún dispositivo.
La modulación por ancho de pulso (también conocida como PWM, por sus siglas
en inglés Pulse Width Modulation) de una señal o fuente de energía es una técnica
en la cual se modifica el ciclo de trabajo de una señal periódica (típicamente se
emplea sobre señales sinusoidales o cuadradas), ya sea para transmitir
información a través de un canal de comunicaciones o para controlar la cantidad
de energía que se envía a una determinada carga.
El ciclo de trabajo de una señal periódica D se define a través del cociente entre el
ancho relativo de su parte positiva W y el período de la señal T, tal como se
muestra en la ecuación 1:
Ecuación 1.
Donde:
T: Es el período de la señal.
Figura 3. PWM aplicado a una señal Sinusoidal ( Scientia et Technica Año XVII,
No 47, Abril de 2011. Universidad Tecnológica de Pereira).
Aplicaciones.
Otros sistemas para regular la velocidad modifican la tensión eléctrica, con lo que
disminuye el par motor; o interponen una resistencia eléctrica, con lo que se pierde
energía en forma de calor en esta resistencia.
Otra forma de regular el giro del motor es variando el tiempo entre pulsos de
duración constante, lo que se llama modulación por frecuencia de pulsos.
Para un sistema digital, es relativamente fácil medir cuánto dura una onda
cuadrada. Sin embargo, si no se tiene un conversor analógico digital no se puede
obtener información de un valor analógico, ya que sólo se puede detectar si hay
una determinada tensión, 0 o 5 voltios por ejemplo (valores digitales de 0 y 1), con
una cierta tolerancia, pero no puede medirse un valor analógico. Sin embargo, el
PWM en conjunción con un oscilador digital, un contador y una puerta AND como
puerta de paso, podrían fácilmente implementar un ADC (Wikipedia).
Microcontrolador PICF18F450.
Microcontrolador con módulo USB 2.0. Soporta Low speed 1.5Mb/s y full
speed 12Mb/s.
1kB de memoria de doble acceso vía USB
35 pines I/O disponibles
Memoria de programa flash de 32 kB
RAM de 2048 Bytes
EEPROM de datos de 256 Bytes
Velocidad de la CPU 12 MIPS
Oscilador externo de dos modos hasta 48 MHz
Oscilador interno selecionable entre 8 frecuencias desde 31kHz hasta
8MHz
Oscilador secundario con Timer 1 de hasta 32kHz
Opciones de oscilador dual permiten que la velocidad de la CPU y del
módulo USB sean diferentes
ADC de 10 bits y 13 canales
Tecnología nanoWatt que brinda características y funciones de bajo
consumo y ahorro de energía
Voltaje de operación 4.2V a 5.5V
4 Timer(desde Timer0 a Timer3). Uno de 8 bits y 3 de 16 bits
2 módulos de captura/comparación/PWM
EUSART, SPP, SPI, I²C.
20 fuentes de interrupciones (3 externas)
Resistencias de pull-ups en el puerto B programables
Función del pin MCLR opcional
Brown-out Reset de valor programable
Power-on Reset
Power-up Timer y Oscillator Start-up Timer
Soporta 100,000 ciclos de borrado/escritura en memoria flash
Soporta 1,000,000 ciclos de borrado/escritura en memoria EEPROM
Retención de datos mayor a 40 años
Protección de código y datos programable
Encapsulado DIP de 40 pines
Tabla comparativa de características principales del PiC18F4550.
La memoria del Pic se divide en: Memoria RAM de datos, memoria de programa,
memoria EEprom de datos, la pila y memoria de configuración.
Memoria de datos.
Cuenta con una memoria de RAM de datos de 2048 bytes, (8 de los bancos de
256 bytes). También cuenta con 160 bytes dedicados a los SFR's(Registros de
función especial) los cuales se encuentran en la parte alta del banco 15. Como se
puede ver en la imagen la memoria RAM de datos se compone por GPR's o
registros de propósito general y SFR's o registros de función especial. Es la
encargada de almacenar datos de forma temporal durante la ejecución del
programa.
Memoria de datos del PiC18F4550.
Memoria de programa.
El Pic 18F4550 cuenta con una memoria de programa de 32K (32768 bytes). Es
una memoria tipo Flash. Esta memoria es la que se encarga de almacenar las
instrucciones, constantes y datos. La podemos escribir o leer con un programador
externo o en ejecución.
Memoria de configuración.
El ciclo de instrucción.
Un ciclo de instrucción comprende cuatro ciclos Q(desde Q1 hasta Q4), tal y como
se puede apreciar en la imagen.
1. Software MikroC.
2. Software PICKIt2.
3. Tarjeta de desarrollo Miuva.
4. Software Proteus 8.
Ejercicio No.1: Se trata de conectar un diodo led que recibe una señal modulada
por ancho de pulso.
Para realizar dicho ejercicio, Se simulará en el software Proteus 8 profesional. Le
damos clic y ejecutamos como administrador.
Ahora para que nuestra simulación funcione, nos dirigimos a mikroC e ingresamos
la solución para conectar un diodo led que recibe una señal modulada por ancho
de pulso.
Para conectar un led que recibe una señal modulada por ancho de pulso se
procede a asignar un contador, se define la variable donde se va a guardar
el máximo de la señal. Se definen los puertos digitales que se utilizaran,
posiciones de salidas del puerto B, Se fija la frecuencia de PWM, al
inicializar el objeto de tipo señal y comienza la señal. Para repetir la
transición de la señal se ocupa un ciclo while que es encargado de
incrementar el contador, se comprueba si se llegó al máximo la señal, si es
el caso se reinicia y se define el valor de la señal.
Solución del ejercicio 1.
Para conectar un led que recibe una señal modulada por ancho de pulso
que alterne entre aumentar de 0 a 255 y disminuir de 255. Se procede a
asignar un contador, se define la variable donde se va a guardar el máximo
de la señal. Se define una variable para guardar la dirección. Se definen los
puertos digitales que se utilizaran, posiciones de salidas del puerto B, Se
fija la frecuencia de PWM, al inicializar el objeto de tipo señal y comienza la
señal. Para repetir la transición de la señal se ocupa un ciclo while en
donde se define 2 condiciones en donde la frecuencia sube de 0 a 255 sino
baja 255 a 0.
Ejercicio No.3: Generar una señal pwm que, dependiendo del valor recibido en un
pin, a través de un switch, genere las siguientes salidas:
Ahora para que nuestra simulación funcione, nos dirigimos a mikroC e ingresamos
la solución para generar una señal modulada que, dependiendo del valor recibido
en un pin, a través de un switch.
Para conectar un led que recibe una señal modulada por ancho de pulso
dependiendo del valor del switch, aumente de 0 a 255 y luego vaya a cero y
repita el proceso infinitivamente, a menos que cambie de valor en el switch.
O disminuya de 255 a 0 y luego vuelva a 255 y vuelva a disminuir a cero y
repita el proceso infinitivamente, a menos que cambie el valor del switch.
Se procede a asignar un contador, se define la variable donde se va a
guardar el máximo de la señal. Se definen los puertos digitales que se
utilizaran, posiciones de salidas del puerto B, Se fija la frecuencia de PWM,
al inicializar el objeto de tipo señal y comienza la señal. Para repetir la
transición de la señal se ocupa un ciclo while en donde se definen
condiciones en donde si está leyendo un valor positivo en el pin se
incrementa, se comprueba si llego al tamaño máximo, si es así se reinicia el
contador hasta llegar a 0. Si llega al mínimo, si es así se reinicia el contador
hasta llegar a 255.
Solución del ejercicio 3.
Resultados, Graficas, Cálculos, Dibujos, Diagramas.
Led que recibe una señal modulada por ancho de pulso (PWM).
Ejercicio No.2: Generar una señal pwm que alterne entre aumentar de 0 a 255 y
disminuir de 255.
Led que recibe una señal modulada por ancho de pulso que alterne entre
aumentar de 0 a 255 y disminuir de 255.
Solución del ejercicio 2.
Ejercicio No.3: Generar una señal pwm que, dependiendo del valor recibido en un
pin, a través de un switch, genere las siguientes salidas:
Fue sin dudas muy compleja de entender esta práctica, ya que, aun teniendo los
códigos y el diseño para realizar los 3 ejercicios, me era difícil comprender a que
se refería con las señales moduladas. Con exactitud cuándo se finalizaron los
ejercicios no lograba entender cuál era el resultado deseado, revisando tras varios
intentos pude entender cuáles eran los resultados que se esperaban, esto se logró
a demás por ver tutoriales en los que no empleaban el miuva, pero no se limitaba
a usar solo un led, sino, también un pequeño motor, los resultados fueron que el
led aumentaba la intensidad de su brillo a medida que se presionaba un botón de
pulsación y el motor aumentaba la velocidad de sus giros.
PIC 18F4550.
PICkit 2.
PICkit 2.
Tarjeta Miuva.
Ejercicio 1.
int duty=0;
int maximo=255;
void main() {
ADCON1 =0x0f;
CMCON=0x07;
TRISB=0x00;
LATB=0x00;
PWM1_Init(500);
PWM1_Start();
while(1){
duty++;
if(duty>=maximo)duty=0;
PWM1_Set_Duty(duty);
Delay_ms(15); }}
Ejercicio 2.
int duty=0;
int maximo=255;
int piv=0;
void main() {
ADCON1 =0x0f;
CMCON=0x07;
TRISB=0x00;
LATB=0x00;
PWM1_Init(500);
PWM1_Start();
while(1){
if(piv==0)
duty++;
else duty--;
if(duty>=maximo)piv=1;
if(duty<=0)piv=0;
PWM1_Set_Duty(duty);
Delay_ms(15);
Ejercicio 3
int duty=0;
int maximo=255;
void main() {
ADCON1 =0x0f;
CMCON=0x07;
TRISB=0x00;
LATB=0x00;
Trisa.f0=1;
PWM1_Init(500);
PWM1_Start();
while(1){
if(Button(&PORTA,0,20,1)){
duty++;
if(duty>=maximo)duty=0;
}else{
duty--;
if(duty<=0)duty=maximo;
PWM1_Set_Duty(duty);
Delay_ms(15);