Reporte #9.docx
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