Reporte #9.docx

December 7, 2017 | Author: wildpere | Category: Electromagnetism, Computer Programming, Telecommunications Engineering, Technology, Computing
Share Embed Donate


Short Description

Download Reporte #9.docx...

Description

ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FIEC Laboratorio de Microcontroladores Práctica #9 PWM Y ADC Alumnos: Jonathan Arias Wilson Pereira Espinoza Paralelo: # 11 Grupo: # 3 Fecha de presentación: 13-Agosto-2012 2012 – I TÉRMINO

1.- Enunciado del Proyecto En la parte a del proyecto usamos PWM que significa Pulse Width Modulation, se trata que a través de una botonera aumentar y a través de otra disminuir el ancho de un tren de pulsos y el resultado se verá a través 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 señal analógica de voltaje producida por un potenciómetro a una señal digital de ocho bits, también hacemos variar el valor de la resistencia para que se note la conversión el cual estará dado por la fórmula de conversión

2.- Diagrama de bloques EJERCICIO 1: PWM

ENTRADAS BOTONERAS S

PIC 16F887

OSCILOSCOPIO

Ejercicio 2: ADC

ENTRADAS

PIC 16F887

SALIDAS DISPLAY 7 SEGMENTOS

3.- Diagramas de flujo Ejercicio 1

EJERCICIO 2

Start Configuración de Parámetros

Configuración de Puertos

Inicialización de variables PORTA  0xFF PORTB  0x00 PORTC  0X00 Temp_res ADC_Read(2) PORTD  temp_res PORTC  temp_res >>8

5.- Descripción 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 módulos 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 analógico y los demás 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 conversión 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 más significativos de temp_res.

6.- Listado del programa fuente en lenguaje ensamblador con comentarios en las líneas de código que considere fundamentales.

EJERCICIO 1 MANEJO DEL PWM * Nombre del Proyecto: P9a_pwm.c * Nombre del Autor: (c) Mikroelektronika, 2009. * Description: (Explicación 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; PORTC = 0; TRISC = 0; PWM1_Init(5000);

// designate PORTB pins as output // set PORTC to 0 // designate PORTC pins as output // 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) { if (RA0_bit) {

// endless loop // 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: (Explicación 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; PORTC = temp_res >> 8;

// Send lower 8 bits to PORTD // Send 2 most significant bits to RC1, RC0

} while(1); }

7.- Copia impresa del circuito armado en PROTEUS para la simulación en el momento de su ejecución. Ejercicio 1.1

Ejercicio 1.2

Ejercicio 2

8.- Conclusiones  Mediante los comandos de PWM1_Init() y PWM1_Start() nosotros podemos configurar el módulo PWM (pulse wave module) con la frecuencia que nosotros escojamos y teniendo también la opción de modificar dicha frecuencia para modificar el período del pulso, además todos estos cambios los podemos observar en un osciloscopio gracias a la eficiente herramienta de simulación proteus.

 El uso principal del módulo ADC (convertidor analógico digital) es en el uso de escalas de mediciones ya que todo lo que existe en la práctica es analógico y necesitamos convertirlo a digital para poderlo controlar y modificarlo por ejemplo al memento de medir la temperatura en algún lugar o para medir el ángulo de giro de ciertos motores tanto DC como AC.  Uno de los usos principales del módulo 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, además 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 más 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 técnica de multiplexación para ahorrar recursos, ya que al momento de la implementación va a ser mucho más fácil debido a que reduciremos significativamente la líneas de conexión, tal como se experimentó en la parte 2 de nuestra práctica, mediante el mismo puerto se puede mostrar el valor de un número de dos dígitos utilizando adicionalmente una línea de selección  Siempre revisar el circuito y todas las conexiones que tengamos para que después se produzca la simulación de manera correcta muchas veces, las simulaciones producen errores es por mala conexión de circuito, además 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 práctica #7 Parte 1 RESPONDER: 1)

Luego de analizar el programa coloque en la cabecera la descripción correspondiente.

 Iniciamos configurando el PORTA como entrada y PORTB y PORTC como salida en nuestro programa, inmediatamente configuramos el PWM a 5KHz  A continuación 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 continuación 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 continuación comenzamos a decrementar la corriente en uno para reducir la velocidad del motor 2)

Genere un solo PWM inicializando el módulo 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 través de un opto-acoplador y mida las señales como se indica.

Nombre del Proyecto: P9a_pwm.c * Nombre del Autor: (c) Mikroelektronika, 2009. * Description: (Explicación 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; PORTC = 0; TRISC = 0; PWM1_Init(1000); PWM2_Init(1000); }

// designate PORTB pins as output // set PORTC to 0 // designate PORTC pins as output // Initialize PWM1 module at 5KHz // 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); PWM2_Set_Duty(current_duty);

// Set current duty for PWM1

while (1) { if (RA0_bit) {

// endless loop // 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 descripción correspondiente.

 Comenzamos configurando el pin A2 como una entrada analógica, para posteriormente también configurarla como una entrada digital  Después 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 conversión 2)

Muestre el resultado de la conversión en dos displays de 7 segmentos multiplexados presentando 00 para el mínimo valor del potenciómetro y 80 para el máximo.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF