Sunteți pe pagina 1din 16

ESCUELA SUPERIOR POLITCNICA DEL

LITORAL

FIEC


Laboratorio de Microcontroladores

Prctica #9

PWM Y ADC

Alumnos:

Jonathan Arias
Wilson Pereira Espinoza


Paralelo: # 11

Grupo: # 3


Fecha de presentacin:
13-Agosto-2012


2012 I TRMINO

1.- Enunciado del Proyecto
En la parte a del proyecto usamos PWM que significa Pulse Width Modulation, se trata
que a travs de una botonera aumentar y a travs de otra disminuir el ancho de un tren de
pulsos y el resultado se ver a travs de un osciloscopio situado en el PORTC de nuestro
osciloscopio
En la parte b hacemos uso del ADC que significa Analogic Digital Converter, se trata de
convertir una seal analgica de voltaje producida por un potencimetro a una seal
digital de ocho bits, tambin hacemos variar el valor de la resistencia para que se note la
conversin el cual estar dado por la frmula de conversin

2.- Diagrama de bloques
EJERCICIO 1: PWM








Ejercicio 2: ADC








PIC 16F887
ENTRADAS
BOTONERAS
S
OSCILOSCOPIO
PIC 16F887
ENTRADAS
SALIDAS DISPLAY
7 SEGMENTOS
3.- Diagramas de flujo
Ejercicio 1























EJERCICIO 2

























Configuracin de Parmetros
Temp_res ADC_Read(2)
PORTA 0xFF
PORTB 0x00
PORTC 0X00
PORTD temp_res
Start
Inicializacin de variables
Configuracin de Puertos
PORTC temp_res >>8
5.- Descripcin del algoritmo o estrategia utilizada
EJERCICIO 1
1. Inicio del programa
2. Se definen las variables current_duty, old_duty, current_duty1, old_duty1.
3. Se configuran los pines para que funcionen de manera digital.
4. Se deshabilitan los comparadores.
5. Se configura el PORTA como entrada, PORTB y PORTC como salida.
6. Se inicializan los mdulos PWM1 y PWM2 a 5000Hz.
7. Se inicializan las variables current_duty y current_duty1 con su valor inicial de 16.
8. Arrancamos PWM1 y PWM2 y los seteamos con sus valores iniciales de current
duty.
9. Mientras RA0 est en alto ocurra un delay de 40 milisegundos y current_duty se
incrementar una unidad a la vez y dicho valor se cargar en PWM1.
10. Mientras RA1 est en alto ocurra un delay de 40 milisegundos y current_duty se
decrementar una unidad a la vez y dicho valor se cargar en PWM1.
11. Mientras RA2 est en alto ocurra un delay de 40 milisegundos y current_duty1 se
incrementar una unidad a la vez y dicho valor se cargar en PWM2.
12. Mientras RA3 est en alto ocurra un delay de 40 milisegundos y current_duty1 se
decrementar una unidad a la vez y dicho valor se cargar en PWM2.
13. Ocuure un delay de 5 milisegundos.
EJERCICIO 2
1. Inicio del programa
2. Se define la variable temp_res.
3. Se configura AN2 como analgico y los dems como digitales.
4. Se desactivan los comparadores
5. Se configura el PORTA como entrada, PORTC y PORTD como salidas.
6. Se guarda en temp_res el valor de la conversin cuyo resultado es de 10 bits.
7. En PORTD se guardan los 8 bits menos significativos de temp_res
8. En PORTC se guardan los 2 bits ms significativos de temp_res.
6.- Listado del programa fuente en lenguaje ensamblador con comentarios en las
lneas de cdigo que considere fundamentales.
EJERCICIO 1
MANEJO DEL PWM
* Nombre del Proyecto:
P9a_pwm.c
* Nombre del Autor:
(c) Mikroelektronika, 2009.
* Description:
(Explicacin del ejercicio)
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
unsigned short current_duty, old_duty, current_duty1, old_duty1;

void InitMain() {
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;

PORTA = 255;
TRISA = 255; // configure PORTA pins as input
PORTB = 0; // set PORTB to 0
TRISB = 0; // designate PORTB pins as output
PORTC = 0; // set PORTC to 0
TRISC = 0; // designate PORTC pins as output
PWM1_Init(5000); // Initialize PWM1 module at 5KHz
PWM2_Init(5000); } // Initialize PWM2 module at 5KHz

void main() {
InitMain();
current_duty = 16; // initial value for current_duty
current_duty1 = 16; // initial value for current_duty1

PWM1_Start(); // start PWM1
PWM2_Start(); // start PWM2
PWM1_Set_Duty(current_duty); // Set current duty for PWM1
PWM2_Set_Duty(current_duty1); // Set current duty for PWM2

while (1) { // endless loop
if (RA0_bit) { // button on RA0 pressed
Delay_ms(40);
current_duty++; // increment current_duty
PWM1_Set_Duty(current_duty);
}

if (RA1_bit) { // button on RA1 pressed
Delay_ms(40);
current_duty--; // decrement current_duty
PWM1_Set_Duty(current_duty);
}

if (RA2_bit) { // button on RA2 pressed
Delay_ms(40);
current_duty1++; // increment current_duty1
PWM2_Set_Duty(current_duty1);
}

if (RA3_bit) { // button on RA3 pressed
Delay_ms(40);
current_duty1--; // decrement current_duty1
PWM2_Set_Duty(current_duty1);
}

Delay_ms(5); // slow down change pace a little
}}

Ejercicio 2
MANEJO DEL ADC
* Nombre del Proyecto:
P9b_adc.c
* Nombre del Autor:
(c) Mikroelektronika, 2009.
* Description:
(Explicacin del ejercicio)
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
unsigned int temp_res;

void main() {
ANSEL = 0x04; // Configure AN2 pin as analog
ANSELH = 0; // Configure other AN pins as digital I/O
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;

TRISA = 0xFF; // PORTA is input
TRISC = 0; // PORTC is output
TRISD = 0; // PORTD is output

do {
temp_res = ADC_Read(2); // Get 10-bit results of AD conversion
PORTD = temp_res; // Send lower 8 bits to PORTD
PORTC = temp_res >> 8; // Send 2 most significant bits to RC1, RC0
} while(1);
}
7.- Copia impresa del circuito armado en PROTEUS para la simulacin en el
momento de su ejecucin.
Ejercicio 1.1












Ejercicio 1.2
























Ejercicio 2










8.- Conclusiones
Mediante los comandos de PWM1_Init() y PWM1_Start() nosotros podemos
configurar el mdulo PWM (pulse wave module) con la frecuencia que
nosotros escojamos y teniendo tambin la opcin de modificar dicha
frecuencia para modificar el perodo del pulso, adems todos estos cambios
los podemos observar en un osciloscopio gracias a la eficiente herramienta
de simulacin proteus.

El uso principal del mdulo ADC (convertidor analgico digital) es en el uso
de escalas de mediciones ya que todo lo que existe en la prctica es
analgico y necesitamos convertirlo a digital para poderlo controlar y
modificarlo por ejemplo al memento de medir la temperatura en algn lugar
o para medir el ngulo de giro de ciertos motores tanto DC como AC.

Uno de los usos principales del mdulo PWM de los micro controladores es
el control de motores DC claro que primero debemos aislar estos motores
con un optoaclopador para poder separar la parte de control con la parte de
fuerza ya que esto genera algunos problemas, adems nosotros podemos
hacer que el motor aumente o disminuya la velocidad que se genera.


9.- Recomendaciones
Tenemos que conocer el uso de un osciloscopio para poder observar de
manera correcta las ondas que deseamos, ya que el osciloscopio nos
permite visualizar todo tipo de ondas desde el ruido hasta otras ms
complejas, en la parte a es de completa importancia el uso del osciloscopio
para poder medir y reconocer eficientemente el ancho de banda y
frecuencia de nuestro PWM

Se recomienda utilizar la tcnica de multiplexacin para ahorrar recursos,
ya que al momento de la implementacin va a ser mucho ms fcil debido a
que reduciremos significativamente la lneas de conexin, tal como se
experiment en la parte 2 de nuestra prctica, mediante el mismo puerto se
puede mostrar el valor de un nmero de dos dgitos utilizando
adicionalmente una lnea de seleccin

Siempre revisar el circuito y todas las conexiones que tengamos para que
despus se produzca la simulacin de manera correcta muchas veces, las
simulaciones producen errores es por mala conexin de circuito, adems
tenemos que siempre tener presente que puede variar ciertos datos o
frecuencias al momento de implementar nuestro circuito en la parte real.



















Anexo de la prctica #7
Parte 1
RESPONDER:
1) Luego de analizar el programa coloque en la cabecera la descripcin
correspondiente.
Iniciamos configurando el PORTA como entrada y PORTB y PORTC como salida
en nuestro programa, inmediatamente configuramos el PWM a 5KHz
A continuacin iniciamos el PWM dentro de nuestro programa principal antes de
ingresar a nuestro bucle infinito
Esperamos a que el usuario presione RA0 para posteriormente ponerle un retardo
de 40 msg y a continuacin comenzamos a incrementar la corriente en uno para
aumentar la velocidad del motor
Esperamos a que el usuario presione RA1 para posteriormente ponerle un retardo
de 40 msg y a continuacin comenzamos a decrementar la corriente en uno para
reducir la velocidad del motor
2) Genere un solo PWM inicializando el mdulo PWM a 1Khz, haga
current_duty = 128; y cambie todos los delay a Delay_ms(5);. Utilice el
siguiente cuadro para conectar un motor DC de 12voltios a travs de un
opto-acoplador y mida las seales como se indica.
Nombre del Proyecto:
P9a_pwm.c
* Nombre del Autor:
(c) Mikroelektronika, 2009.
* Description:
(Explicacin del ejercicio)
* Test configuration:
MCU: PIC16F887
Oscillator: HS, 08.0000 MHz
SW: mikroC PRO for PIC
unsigned short current_duty,current_duty1, old_duty;

void InitMain() {
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;

PORTA = 255;
TRISA = 255; // configure PORTA pins as input
PORTB = 0; // set PORTB to 0
TRISB = 0; // designate PORTB pins as output
PORTC = 0; // set PORTC to 0
TRISC = 0; // designate PORTC pins as output
PWM1_Init(1000); // Initialize PWM1 module at 5KHz
PWM2_Init(1000); } // Initialize PWM1 module at 5KHz

void main() {
InitMain();
current_duty = 128; // initial value for current_duty
current_duty1 = 128;

PWM1_Start(); // start PWM1
PWM2_Start(); // start PWM2
PWM1_Set_Duty(current_duty); // Set current duty for PWM1
PWM2_Set_Duty(current_duty);
while (1) { // endless loop
if (RA0_bit) { // button on RA0 pressed
Delay_ms(5);
current_duty++; // increment current_duty
PWM1_Set_Duty(current_duty); }

if (RA1_bit) { // button on RA1 pressed
Delay_ms(5);
current_duty--; // decrement current_duty
PWM1_Set_Duty(current_duty);
}
if (RA2_bit) { // button on RA2 pressed
Delay_ms(5);
current_duty1++; // increment current_duty1
PWM2_Set_Duty(current_duty1); }

if (RA3_bit) { // button on RA3 pressed
Delay_ms(5);
current_duty1--; // decrement current_duty1
PWM2_Set_Duty(current_duty1); }

Delay_ms(5); // slow down change pace a little
}
}
Parte 2
RESPONDER:
1) Luego de analizar el programa coloque en la cabecera la descripcin
correspondiente.
Comenzamos configurando el pin A2 como una entrada analgica, para
posteriormente tambin configurarla como una entrada digital
Despus configuramos el PORTA como entrada y el PORTC y PORTD como
salida
Para finalizar entramos en un bucle donde obtenemos los 10 bits como resultado
de nuestra conversin
2) Muestre el resultado de la conversin en dos displays de 7 segmentos
multiplexados presentando 00 para el mnimo valor del potencimetro y 80
para el mximo.

S-ar putea să vă placă și