Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Anúncio
Labview & pic
Labview & pic
Labview & pic
Labview & pic
Próximos SlideShares
Tutorial micro MSP430Tutorial micro MSP430
Carregando em ... 3
1 de 43
Anúncio

Mais conteúdo relacionado

Anúncio

Labview & pic

  1. Realizado por: George.manson.69 http://ucursos.webs.com
  2. LEER PARA APRENDER / Por: Jorge Rdz, Editor Pasó casi un año desde que ya no había realizado ninguna práctica utilizando Microcontroladores PIC16, del cual me ha fascinado bastante ya que un día me pregunte, Es necesario aprender Microcontroladores? Donde lo puedo aplicar? Estas dos cuestiones me las hacía muy seguido, entonces un día, en mi trabajo encontré en una maquina avanzada que había tenido una falla, ya que mi trabajo se trata de reparar fallas en equipos, pues tuve que ir a ver que era esa tal falla, pues no era más que una tarjeta de control que se había quemado unos diodos, no fue muy difícil saber que era la falla, y después como tenía tiempo necesario para hacer otras cosas me la pase revisando que mas tenia o de que estaba compuesto la tarjeta y vi que había un Microcontrolador y una calcomanía tapando de qué tipo de Micro usaba, no espere mucho tiempo para saber cual era, y valla sorpresa era un MicroPIC 16C57 cuando lo vi me recordó todas las practicas que había hecho con anterioridad, desde ese momento supe que las horas perdidas pasándola programando y realizado proyectos con esos PIC ahora sé a dónde van los conocimientos adquiridos de tantas horas programando Microcontroladores PIC y sé que vale la pena seguir programando!.
  3. Introducción Este Manual concerniente a las prácticas sobre la utilización de comunicación serial utilizando como hardware el Microcontrolador PIC16F886 y Labview para la interface Hombre-Máquina fueron realizados para abrirnos paso a realizar nuevas maneras de programar en Labview, y usando el compilador MPLAB X IDE para la programación en C para Microcontroladores PIC16. A lo largo de este manual usted entenderá como hacer correctamente un enlace Serial hacia Labview y PIC16.
  4. 1. MPLAB X Recientemente Microchip ha lanzado un proyecto para mejorar el aspecto de su IDE en este caso de MPLAB. En su reciente actualización 8.80 ha mejorado en sus aspectos con unos pocos detalles del cual no son muy impactantes como son la competencia casi directa con AVR son su AVRStudio 5, del cual es casi como programar en C#. Era tiempo de que Microchip se pusiera las pilas y que lanzara su nuevo IDE basado en JAVA, hablamos de MPLAB X.
  5. 1.1 PROTEUS Una de las maneras de realizar un proyecto siempre es simularlo antes de empezar hacerlo físicamente ya que nos ahorra tiempo en construcción y sacar fallas antes de proceder, para nuestro caso usaremos una herramienta sumamente importante para la simulaciones de circuitos lógicos y programables entre varios más, estamos hablando de PROTEUS, simulador muy conocido entre toda la comunidad de electrónica y de control.
  6. 1.2 LABVIEW Para la interfaz del usuario usaremos el software Labview 2010 donde aprenderemos a desarrollar comunicación seriales a su máxima capacidad, entre otras herramientas necesarias para desarrollar sistemas muy estables para las comunicaciones.
  7. 1.3 INICIANDO EN MPLAB X En esta parte nos enfocaremos en la programación en C usando el compilador HI TECH FOR PIC16 del cual nos proporcionara la habilidad para programar los PIC de una manera muy sencilla ahorrando memoria al máximo. 1.3.1 Entorno de MPLAB X En nuestra primera impresión de usar MPLAB X es como si fuera una sombra de JAVA, pero es muy distinto ya que es para Microcontroladores PIC. 1. Exploramos librerías del proyecto tanto los archivos principales. 2. Observamos el contenido de los archivos tanto las librerías y el programa principal. 3. Aquí podemos ver la información concerniente al Microcontrolador. 4. Salida donde podemos observar errores al compilarse el archivo también podemos debuggear el programa. 1 2 3 4
  8. 1.3.2 Crear Nuevo proyecto Para crear nuestro primer proyecto debemos de dar click en donde dice <Create New Project> o podemos ir a <File><Creare New Project> Como haremos nuestro proyecto desde cero daremos click en <Standalone Project> daremos <Next> y elegiremos el Microcontrolador a usar en este caso para todos los proyectos usaremos el PIC16F886.
  9. Si tenemos un debugeador en nuestras manos podemos seleccionar uno de ellos como puede ser el PICKit 2, 3 etc. Como vamos a usar un emulador simplemente seleccionamos: En la siguiente ventana encontraremos que compilador vamos a usar, normalmente por default encontremos los disponibles en nuestra computadora.
  10. Usaremos el compilador Hi tech Compiler for PIC16 , después buscaremos un lugar para guardar nuestro proyecto y aceptamos. Como en MPLAB 8.8 al tener el proyecto listo debemos de hacer una extensión “.c” para ellos vamos a <New File> y en ventana de categorías buscaremos en <Micochip embedded> y elegimos la carpeta donde está el compilador hi tech y en <File Type>en la primera opción es que estamos buscando para el compilador hi tech for PIC16. En la siguiente ventana nos pedirá el Nombre del archivo y la extensión después la ubicación del archivo del cual debe ser la misma donde creamos el proyecto. Al agregar el archivo con la extensión “.c” aparecerá en el explorador en <Important Files> del cual solo debemos de pasarlo nuevamente a la carpeta <Source File> para que este bien ubicado a la hora de compilar.
  11. 1.4 Crear enlaces Como hemos realizado nuestro primer proyecto en MPLAB X no tiene mucha ciencia la programación en C, ya que si hemos programado en Hi tech compiler es prácticamente igual. La idea de nuestro primer programa en C es hacer una comunicación serial que prenda un puerto completo del cual podemos usar interrupciones por Recepción de datos o simple recepción de datos. 1.4.1 Enlace PIC En la segunda opción podemos hacer un programa que nos quede de la siguiente manera: /* * File: Main.c * Author: george * * Created on November 13, 2011, 6:34 PM */ #include "pic.h" __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF); /* * FOSC_HS 20Mhz External Crystal * WDTE_OFF Watch dog disable * PWERTE_ON Power System Enable * MCLRE_ON Master Clear Enable */ #define _XTAL_FREQ 20000000 // #include "libUSART/usartdr.h"//Libreria para usar el serial /* * VARIABLES GLOBALES DEL PROGRAMA */ unsigned char data; //ISR Interrupt static void interrupt isr(void){} //Programa Principal void main(void) { TRISC=0x80;//RX COMO ENTRADA Y TX COMO SALIDA TRISB=0X00;//PUERTO COMPLETO COMO SALIDA /* * CONFIGURAMOS SERIAL * VALUE=(FOSC/(BAUD*16))-1 * SIN INTERRUPCIONES * A 19200 */
  12. OpenUSART(64,OFF,ON);//64=19200 GIE=0; //DESACTIVA INTERRUPCIONES GLOBALES PEIE=0; //DESACTIVA INTERRUPCIONES POR PERIFERICOS PORTB=0X00; //INICIALIZA PUERTO B COMO APAGADO while(1){ //CICLO PERPETUO data=getch(); //ESPERA A RECIBIR 1 BYTE DEL SERIAL PORTB=data; //PROYECTA EL BYTE EN EL PUERTO B } } 1.4.1 Crear enlace en Labview Lo que primero se debe de realizar en Labview es crear un <New VI> después al abrirse las dos ventas de Block diagram y Front Panel , nos pasaremos a la ventana de Block Diagram del cual buscaremos la opción de SERIAL, que está ubicado en <Functions> <Instrument I/O> <Serial> y seleccionamos la opción de VISA Configure Serial Port que nos servirá para configurar los baudios, bits de paridad entre varias opciones más. Al agregar el control de configuración de puerto agregaremos dos controles que harán la función de buscar el puerto que es VISA resource name que cada vez que exista un puerto disponible, este lo visualizara. En baud rate por defecto esta a 9600 que podemos cambiar fácilmente escribiendo sobre la velocidad de transmisión. Después de configurar correctamente el puerto, ahora podemos hacer un ciclo perpetuo hasta que salgamos con un stop. Para ello buscaremos la opción de While Loop , después buscaremos la opción de escribir en el puerto, que consta de solo enviar una cadena de caracteres pero en este caso solo enviaremos un byte, pero para enviar este dato debe de transformarse de un arreglo booleano a numero y de este a un arreglo de caracteres. En la siguiente imagen tenemos la programación completa como debe de quedar nuestro proyecto en Labview, recuerde siempre cerrar el puerto al terminar la conexión para que este pueda cerrarse correctamente y que pueda seguir funcionando bien el puerto seleccionado.
  13. Si nos pasamos al lado de Front Panel nos quedara de la siguiente manera: Recuerde que usaremos una velocidad de transmisión de 19200 baud por defecto siempre aparecerá en 9200 baud. Se debe de conectar primero el hardware que en este caso es el PIC16 ya que estará esperando el dato de un byte, al este estar conectado daremos play en Labview para correr el programa y rápidamente este enviara el primer dato, y ya podremos enviar los estados de los switches. Recuerde siempre usar el MAX 232 para las conversiones de niveles RS232.
  14. 1.4.2 Esquema del Proyecto Hemos usado un regulador de voltaje 7805 para proporcionarle al Microcontrolador exactamente 5 Volts. En el Puerto B está conectado en cada pin un led con su respectiva resistencia para poder visualizar el interruptor presionado en Labview. Aunque el esquema es demasiado sencillo, hemos empezado con algo así, para calentar motores, ay que su usted se ha dado cuenta en la programación hemos usado una buena lógica para algo tan simple, entonces a lo largo de este curso usted aprenderá a realizar cosas muy complejas con Labview y los Microcontroladores en general, ay que este misma función que hemos creado en Labview se puede usar para distintos Microcontroladores existentes en el mercado.
  15. Siempre recuerde usar el circuito MAX232 para las conversiones del protocolo RS232, ya que este protocolo aunque no sea mucha corriente a usar convierte de 5 volts a 12 volts aproximadamente. 1.5 Recibir datos del Pic Hacia Labview Al recibir datos del Microcontrolador hacia Labview es un procedimiento demasiado parecido a la práctica anterior, del cual el pic debe de capturar los datos y después enviarlos. Para ello se debe de configurar correctamente el periférico de serial del pic a una velocidad de 19200 baud, al guardar el dato leído del puerto B se debe llamar la función que realiza el envío de datos hacia Labview. Al recibir los datos Labview este debe de leer los datos existentes en ese momento para saber cuántos bytes necesita leer y después capturar todos los datos que están guardados en su buffer, y procesarlos hacer acciones.
  16. 1.5.1 Configuración de PIC16F886 La diferencia del proyecto anterior es que ahora es hacer que el puerto B sea Entrada digital, y usar interruptores para que tomar los datos y guárdalos en una variable, del cual se enviara a Labview, para ello se agrega la librería USART como se realizo en la práctica anterior, al tomar solo los 4 bits de menor peso del puerto B este solo se envía para después esperar 100mS que servirán para sincronización. /* * File: Main.c * Author: george * * Created on November 15, 2011, 8:22 PM */ #include "pic.h" __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF); /* * FOSC_HS 20Mhz External Crystal * WDTE_OFF Watch dog disable * PWERTE_ON Power System Enable * MCLRE_ON Master Clear Enable */ #define _XTAL_FREQ 20000000 // #include "libUSART/usartdr.h"//Libreria para usar el serial /* * VARIBALES GLOBALES */ unsigned char dato; //Funcion de Tiempo void dly(unsigned int t){ while(--t)__delay_ms(1); } //ISR Interrupt static void interrupt isr(void){} //Programa Principal void main(void) { TRISC=0x80;//RX COMO ENTRADA Y TX COMO SALIDA TRISB=0X0F;//NIBBLE BAJO COMO ENTRADA RESTO SALIDA ADCON0=0x00;//DESACTIVA ENTRADAS ANALOGAS ANSELH=0x00;//ENTRADAS ANALOGAS EN PUERTO B APAGADO /* * CONFIGURAMOS SERIAL * VALUE=(FOSC/(BAUD*16))-1 * SIN INTERRUPCIONES * A 19200 */ OpenUSART(64,OFF,OFF);//64=19200 GIE=0; //DESACTIVA INTERRUPCIONES GLOBALES
  17. PEIE=0; //DESACTIVA INTERRUPCIONES POR PERIFERICOS while(1){ dato=PORTB&0x0F; //TOMA SOLO NIBBLE BAJO putch(dato); //CARGA DATO EN EL SERIAL PARA ENVIARLO dly(100); //ESPERA 100mS } } 1.5.3 Configuración de enlace en Labview Como hemos realizado en el proyecto anterior se debe de crear un Nuevo IV, después en la ventana Font Panel agregaremos unos cuantos arreglos para que nos quede de la siguiente forma, note que esto puede ser a su gusto ya que lo más importante esta en Block Diagram : Visa resource name es donde podemos agregar el COM disponible del cual se puede obtener al agregar las configuración del puerto. Set up 19200 esto nos proporciona la velocidad a que debe de trabajar la comunicación en Labview, como al agregarlo por default aparecerá con una velocidad de 9 600 baud solo se debe de escribir la velocidad deseada que en este caso es de 19200 baud como se ha configurado el Microcontrolador. Mientras por ultimo podemos observar un arreglo boleando compuesto por solo 4 bits, que nos proporcionara la visualización de 4 interruptores que estarán conectado al nibble de menor peso del puerto B del Microcontrolador. Ahora entrando a lo más complicado que es la programación de este mismo, se debe siempre de configurar primero que nada el serial, esto se hace buscando el IV <VISA Configure Serial Port> del cual solo debemos de sacar dos parámetros que son el COM y los BAUD.
  18. Como ya hemos agregado la configuración del puerto, ahora se debe de crear un evento, esto quiere decir que configuraremos un evento del cual al recibir un carácter o un byte este rápidamente entrara, para ellos se debe de agregar el siguiente VI <Visa Enable Event> nos pedirá un parámetro en particular que es la configuración del evento o la selección del evento, tendremos varios de estos pero el más importante será al recibir un carácter <Serial Character> después se debe de estar seguro de que este correctamente sin evento en ese momento del cual se agrega <Visa Discard Event> y nos quedar de la siguiente manera: Ahora como puede o no fallar la conexión en un momento inesperado, se debe de checar siempre el estado de este, se agrega la función <unbundle by name> Para obtener los status de errores, solo debemos de seleccionar el ‘status’ para luego usar el bit que nos arroja que es un ‘F’ cuando no hay errores de conexión o un ‘T’ cuando existen algún tipo de falla. Para cuando la opción en Verdadera (T) solo se agrega un <case structure> que hara la función de un if-else como en la programación en C. En la ventana de Verdadero solo se directo las señales fuera del ciclo while-loop, como se va en imagen siguiente:
  19. Como vemos al salir del case structure se usa la misma señal de status para salir del ciclo while-loop. En la opción de False entra a esperar evento del cual hemos seleccionado Serial Character la espera de timeout será de 10,000 mS del cual si en este tempo no se recibe ninguna señal de recepción de al menos un byte este rápidamente enviara una señal de error y se saldrá del ciclo o marcara error. Al recibir una señal este rápidamente pasa al cuantos byte se recibieron del cual es property node en la forma de <Bytes at port> (bytes en el puerto) este leerá todos los bytes recibidos para después usarlos para usar el IV para leer los datos, y arrojarlos como una cadena de caracteres (string) Como hemos visto al recibir los datos en forma de cadenas de caracteres del cual solo es un byte, solo se debe de transformar en un arreglo de bytes y después buscar en el arreglo de bytes el primer byte para después transformar de número a un arreglo binario que este ya visualizara el estado de los interruptores. Y después solo cerraremos el puerto pero antes se debe de borrar cualquier evento antes abierto.
  20. 1.5.3 Esquema del Diagrama Electrónico 2. Graficando señales análogas con DAC Las mayorías de las veces necesitamos adquirir datos continuos, por ejemplo de temperatura, Luz, y entre varios sensores que varíen con respecto a circunstancias físicas. Después de tomar este dato análogo, se envía a una PC para procesar con respecto a un algoritmo incluido en un tipo de software donde hace el proceso de arrojar en la salida un dato digital o variable. En esta práctica vas a proponer graficar datos continuos esto quiere decir que cada vez que el Microcontrolador en s entrada análoga consiga leer el estado del sensor rápidamente lo envié para apreciarlo en una grafica realizada en Labview con respecto al tiempo. 1.2.1 Realización del Hardware y Software para el Microcontrolador El primer paso es configurar puertos y entradas digitales o análogas, de esto solo se debe de incluir la librería para el uso del convertidor análogo a digital, y después usar solo una entrada análoga en este caso el AN0, estos datos se enviaran casi
  21. instantáneo ya que usaremos nada mas un retardo de 1mS del cual nos servirá también para adquirir correctamente la conversión de la variable análoga, y al tener cargado esta variable se enviara por serial para que laview procese este dato y lo pase a graficar. Todo lo anterior se resume al programa siguiente: /* * File: main.c * Author: george * * Created on November 17, 2011, 6:34 PM */ #include "pic.h" __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF); /* * FOSC_HS 20Mhz External Crystal * WDTE_OFF Watch dog disable * PWERTE_ON Power System Enable * MCLRE_ON Master Clear Enable */ #define _XTAL_FREQ 20000000 // #include "libADC/adcdr.h" #include "libUSART/usartdr.h" /* * VARIABLES GLOBALES DEL PROGRAMA */ unsigned int value_adc; unsigned char data[2]; /* * SE OBTIENE EL DATO ANALOGO * EN ESTE CASO AL LEER EL EL DATO SERA DE 1024 BITS * DEL CUAL ES 2 BYTES */ unsigned int take_data_analog(){ __delay_ms(1); startADC(); while(GO_DONE!=0); return readADC(); } /* * SE DESPEJA EL DATO ANALOGO Y SEPARA LOS 2 BYTES * PARQ QUE SE GUARDEN EN UN ARREGLO POR SEPARADO * PARA PREPARARLO PARA EL ENVIO */ void convert_two_byte(unsigned int analog){
  22. data[0]=(analog>>8)&0x03; //TOMA BYTE DE MAYOR PESO data[1]=analog&0xFF; //TOMA BYTE DE MENOR PESO } /* * ENVIA LOS DOS BYTES POR EL PUESRTO SERIAL * ENVIA PRIMERO EL BYTE DE MAYOR PESO Y DEPSUES EL DE MENOR PESO */ void send_data_rs232(void){ putch(data[0]); putch(data[1]); } //ISR Interrupt static void interrupt isr(void){} /* * FUNCION PRINCIPAL */ void main(void){ TRISA=0X01; //RA0 COMO ENTRADA ANALOGA TRISC=0X80; //SE CONFIGURAMOS TX Y RX /* * CONFIGURAMOS SERIAL * VALUE=(FOSC/(BAUD*16))-1 * SIN INTERRUPCIONES * A 19200 */ OpenUSART(64,OFF,OFF);//64=19200 /* * CONFIGURAMOS ADC * PUERTOB DESACTIVADO PARA ENTRADAS ANALOGAS * SOLO SE ACTIVA EL RA0 COMO ENTRADA ANALOGA */ OpenADC(FOSC_32,AN0,OFF); GIE=0;//INTERRUPCIONES GLOBALES ACTIVADAS PEIE=0;//ACTIVA INTERURPCIONES POR PERIFERICOS /* * EMPIEZA EL PROGRAMA PRINCIPAL */ while(1){ value_adc=take_data_analog();//TOMA DATO ANALOGO convert_two_byte(value_adc); //CONVIERTE A DOS BYTES send_data_rs232(); //ENVIA DATOS } } 1.2.2 Graficado en Labview Como hemos estado viendo en los proyectos anteriores siempre se debe de configurar el puerto y los baudios que es lo más básico para empezar, ya si el usuario quiere cambiar más opciones lo puede hacer. Por ahora como vamos a recibir datos debemos de crear un evento, que es esperar por 10s un carácter del rs232, al recibir estos datos
  23. rápidamente debe leerlos y mandarlos a procesar que no es más que juntar los dos bytes y enviarlo a graficar. Siempre una buena presentación del programa puede ayudar mucho a la hora de comercializar un software, por eso nunca deje la presentación su proyecto a un lado.
  24. 1.2.3 Diagrama Electrónico
  25. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 poder controlar corriente alterna se debe de usar un TRIAC de potencia como se muestra en parte de una hoja de datos de un TRIAC. Como sabemos un triac es un switch de par de tir dispositivo puede abrir corriente puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 poder controlar corriente alterna se debe de usar un TRIAC de potencia como se muestra en parte de una hoja de datos de un TRIAC. Como sabemos un triac es un switch de par de tir dispositivo puede abrir corriente en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 poder controlar corriente alterna se debe de usar un TRIAC de potencia como se muestra en parte de una hoja de datos de un TRIAC. Como sabemos un triac es un switch de par de tir dispositivo puede abrir en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 3. Control de Intensidad de lámpara Esta práctica conlleva a la manipulación de una lámpara de 12 poder controlar corriente alterna se debe de usar un TRIAC de potencia como se muestra en parte de una hoja de datos de un TRIAC. Como sabemos un triac es un switch de par de tir en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. Esta práctica conlleva a la manipulación de una lámpara de 12 poder controlar corriente alterna se debe de usar un TRIAC de potencia como se muestra en parte de una hoja de datos de un TRIAC. Como sabemos un triac es un switch de par de tir en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. Esta práctica conlleva a la manipulación de una lámpara de 12 poder controlar corriente alterna se debe de usar un TRIAC de potencia como se muestra en parte de una hoja de datos de un TRIAC. Como sabemos un triac es un switch de par de tiristores invertidos en paralelo, en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. Esta práctica conlleva a la manipulación de una lámpara de 127VCA poder controlar corriente alterna se debe de usar un TRIAC de potencia como se istores invertidos en paralelo, en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. 7VCA del cual para poder controlar corriente alterna se debe de usar un TRIAC de potencia como se istores invertidos en paralelo, en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. fig 3.0 del cual para poder controlar corriente alterna se debe de usar un TRIAC de potencia como se istores invertidos en paralelo,este en cualquier dirección la corriente aplicando una pequeña en la puerta. Es usado en aplicaciones donde involucre corriente alterna como puede ser en control de intensidad de una lámpara, o control de velocidad de un motor. fig 3.0 en la puerta. Es usado en aplicaciones donde involucre corriente alterna como
  26. Un triac es un interruptor de estado sólido, una pequeña corriente en la terminal de la puerta puede conducir una gran corriente, pensando que un triac como dos SCR puesto en paralelo invertido cada uno de ellos, donde el cátodo de uno de los SCR está conectado hacia el ánodo del otro y viceversa. La puertas están conectadas juntas, porque tenemos dos tipos configuración de SCR’s esto permite activar amos a medios ciclos. En el ejemplo anterior el interruptor realice la función de cortar la corriente cuando sea necesario, la idea es usar una pequeña corriente para controlar dispositivos de alto voltaje como son motores y calentadores. Lo peligroso de aquí es el alto voltaje que esta prendido en sí mismo. Esto puede ser un gran problema para los controles de estado lógico al menos que usen un pequeño relay como lo hacen los microondas.
  27. Para controlar con un Microcontrolador sin dañarlo por una sobre carga en la etapa de potencia, se debe de usar un opto acoplador del cual se encarga de separar la etapa de control que en este caso puede ser un microprocesador con la de potencia. En la figura se puede observar un simple ejemplo de un control de una carga resistiva esto puede ser una resistencia para generar calor, o una lámpara entre varios, mientras en la Figura 8, es para cargas inductivas como puede ser motores con cruce por cero, este último se refiere a que no hará caso a la onda negativa que genera la onda sinodal. Y cuando se desee usar las dos partes de la onda se recomiendo un opto con cruce por cero.
  28. 3.1 Control de Lámpara Para empezar a entender el funcionamiento de encender lámparas con TRIAC y PIC, necesitamos hacer una pequeña practica para calentar motores, primero que nada la idea es encender una lámpara con Labview, del cual solo es ponerlo en encendido y apagado. 3.1.1 Software para PIC El programa consta de solo recibir un dato de Labview y reaccionar con forme a ello, el dato será solo de un 1 byte y que solo responda con un comando cuando hay que encenderlo o apagarlo, para ello se usara la interrupción por recepción de datos. /* * File: MAIN.c * Author: george * * Created on November 24, 2011, 8:53 PM */ #include "pic.h" __CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF); /* * FOSC_HS 20Mhz External Crystal * WDTE_OFF Watch dog disable * PWERTE_ON Power System Enable * MCLRE_ON Master Clear Enable */ #define _XTAL_FREQ 20000000 // #include "libUSART/usartdr.h" //definiciones de variables globales unsigned char DATA; //definiciones de trabajo #define LAMPARA_ON RB7=1 #define LAMPARA_OFF RB7=0 //ISR Interrupt static void interrupt isr(void){ if(RCIF){ //HEMOS RECIBIDO UN DATO? RCIF=0; //RESET A FLAG DE INTERRUPCION DE DATO DATA=getch();//TOMAMOS DATO if(DATA==0xFF){//ES PARA ENCENDER? LAMPARA_ON; } if(DATA==0x77){//ES PARA APAGAR LAMPARA_OFF; } } }
  29. /* * FUNCION PRINCIPAL */ void main(void) { TRISB=0; //PUERTO B COMO SALIDA TRISC=0X80; //SE CONFIGURAMOS TX Y RX PORTB=0; /* * CONFIGURAMOS SERIAL * VALUE=(FOSC/(BAUD*16))-1 * SIN INTERRUPCIONES * A 19200 */ OpenUSART(64,OFF,ON);//64=19200 GIE=1;//ACTIVAMOS INTERRUPCIONES GENERALES PEIE=1;//ACTIVAMOS INTERRUPCIONES POR PERIFERICOS while(1); } 3.1.2 Software para Labview La estrategia a seguir que al usar un interruptor virtual que solo mande verdadero o falso, con este dato booleano entrara a un case structure del cual este elegirá que dato debe de enviar, en este caso como hemos programado en el Microcontrolador que al recibir el dato 0xFF mande a prender la lámpara sino el dato 0x77 para apagar la lámpara. En Labview la programación es muy sencilla como podemos verla en el block diagram:
  30. Simple no? Solo enviamos el dato 255 que corresponde en hexadecimal 0xFF, y el dato 119 que corresponde a 0x77, después es subministrada para convertirse a arreglo y después convertir de arreglo a string. En la parte de front panel podemos hacer unos cuantos arreglos para que nuestro programa quede bien hecho. 3.1.3 Diagramas El diagrama que a continuación se da es solo la etapa de potencia del cual consta de un moc3011 que es un optoacoplador a salida a triac esto quiere decir que podemos usarlo para conectarlo directamente a gate del TRIAC que estará conectado a la carga. En el Microcontrolador es igual del cual hemos estado trabajando conectado al max232, nada mas que en el pin RB7 vamos a conectar el led del optoacoplador para encender la lámpara cuando mandemos el dato de Labview al Micro.
  31. 3.1.4 Fotos del Proyecto 3.1.5 Tomando Señal Ahora antes de desarrollar la practica deseada, debemos de entender cómo debemos de tomar la referencia de la onda senoidal , esto quiere decir que al tomar la onda positiva debemos de obtener la señal convertida a un nivel legible por el Microcontrolador esto quiere decir que debemos de rectificar la entrada usando un diodo antes de rectificador de onda completa, para después activar un transistor que está alimentado con tan solo 5 volt esto hará una onda cuadra a nivel TTL, para después entre el Microcontrolador para saber cuando está en la onda positiva y cuando está en la onda negativa, o en pocas palabras cuando cruza por cero.
  32. Representación de la Idea: Al realizar el siguiente circuito en la salida del transistor debemos de tener una onda cuadra de 0 a 5v, del cual este entrara al Microcontrolador para decir cuando esta el ciclo positivo y cuando está en el ciclo negativo. La señal generada antes y después del diodo es el siguiente: Escala 2 volts. Salida después del transistor Entrada a la base del transistor Con esta señal cuadrada que genera es de 0 a 5 v, del cual ya podemos trabajar con ella. Es muy fácil ahora que tenemos esta señal TTL, ya que podemos usarla como una entrada para el Microcontrolador, en este caso para el pic16f886, tiene un PIC muy especial del cual es la entrada para usar el Timer0 como contador de pulsos externos. Entrada para el PIC
  33. En la programación del Microcontrolador se debe de hacer un ciclo perpetuo del cual este integrado por un tiempo de retraso de envio que es de 1 segundo. Después de este lapso de tiempo será tomado el valor actual del contador (Timer0) para enviarlo a Labview. El software es el siguiente: /* * File: main.c * Author: george * * Created on November 29, 2011, 8:14 PM */ #include "pic.h" __CONFIG(FOSC_HS& WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF); /* * FOSC_HS 20Mhz External Crystal * WDTE_OFF Watch dog disable * PWERTE_ON Power System Enable * MCLRE_ON Master Clear Enable */ #define _XTAL_FREQ 20000000 // #include "libUSART/usartdr.h" /* * VARIABLES GLOBALES DE TRABAJO */ unsigned char senal; /* * FUNCION DE TIEMPO */ void dly(unsigned int t){ while(--t)__delay_ms(1); } ///////////////////////////////////////////////// //Funcion de interrupcion //Si no se usa simplemente no hacemos nada... //Esto sirve para direccionar lo los datos //en un lugar muy cercano al Inicio de la memoria //de datos //////////////////////////////////////////////// static void interrupt isr(void){} /* * PROGRAMA PRINCIPAL */ void main(void) { /* * Inicliazamos Puertos */
  34. ANSELH=0X00;//Analogo desactivado TRISA=0x10; //RA4 como entrada resto salida TRISC=0x80;// ADCON0=0x00;// /* * Inicializamos TIMER0 * Entrada de senal extarna,Prescalar 1:2 */ OPTION_REG=0b10100000; /* * CONFIGURAMOS SERIAL * VALUE=(FOSC/(BAUD*16))-1 * SIN INTERRUPCIONES * A 19200 */ OpenUSART(64,OFF,OFF);//64=19200 TMR0; GIE=0; PEIE=0; while(1){ TMR0=0; //Reseteamos Contador dly(1000); //Esperamos 1 Segundo senal=TMR0;//Leemos El contador putch(senal);//Enviamos dato } } El programa en Labview es demasiado sencillo, del cual solo debe de recibir un dato (1 byte) este dato debemos de convertirlo a string, ya que hemos referenciado que el dato recibido es un dato de Hz, del cual se debe juntar dos string por esta razón se usa la función, “concaténate” para unir el ‘dato’ + “Hz”
  35. En front Panel podemos ver cómo queda nuestro programa, lo que debemos hacer primer es Iniciar Labview y después conectar rápidamente el hardware que es el Microcontrolador. Este marcara la frecuencia que tiene la conexión VCA. El diagrama a Manejar es el siguiente: P. 1 P.2
  36. Algunas fotos del Proyecto: P.3
  37. 3.1.6 Manipulando la Intensidad de lámpara Como hemos realizado en las dos prácticas anteriores, al controlar el encendido de la lámpara y tomando la señal, al combinar las dos podemos crear un controlador de intensidad de una lámpara, esto va a controlar la onda senoidal de voltaje de entrada que son 127 VCA. Para controlar la onda senoidal se debe de rectorar ambas ondas positiva y negativa para hacer eso se debe de generar un PWM de la misma frecuencia pero cuadrada, del cual esta señal PWM debe de recortar la onda exactamente cuándo cruce por cero. He recortado la onda de inicio tanto para la positiva y negativa porque ya que la onda está decayendo el resultado es menor potencia del cual se reflejara en intensidad, y podemos ver mucho mejor el descenso de la iluminación de la lámpara. Ya que si fuera al contrario no veremos mucho el cambio que realiza de intensidad ya que como la onda empieza a subir tiene mayor potencia y aunque variemos el PWM al principio de la onda este no reflejara mucho el cambio de intensidad de la lámpara. Como hemos realizado en la segunda práctica de este proyecto al obtener los ciclos o los hertz de la corriente alterna, al usar ese método podemos sincronizar la frecuencia PWM con la onda senoidal, ya que al cruzar por cero podemos apagar el optoacoplador exactamente e iniciar el pulso PWM donde deseamos y cuando vuelva a cruzar por cero apagamos y esperamos a iniciar el pulso para que de la lámpara encienda, y obtendremos un ancho de pulso proporcional a la frecuencia de VCA.
  38. El firmware del Microcontrolador es muy sencillo usando l interrupción por recepción de datos (Rs232) y la interrupción por desbordamiento por timer0, podemos hacer esta práctica: /* * File: main.c * Author: george * * Created on December 3, 2011, 1:45 PM */ #include "pic.h" __CONFIG(FOSC_HS& WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF & BOR4V_BOR40V & WRT_OFF); /* * FOSC_HS 20Mhz External Crystal * WDTE_OFF Watch dog disable * PWERTE_ON Power System Enable * MCLRE_ON Master Clear Enable */ #define _XTAL_FREQ 20000000 // #include "libTIMER0/OpenTIMER0.h" #include "libUSART/usartdr.h" /* * DEFINICIONES GLOBALES */ #define PIN_INTENSIDAD RC0 /* * VARIABLES GLOBALES */ unsigned char BUFFER=127; ///////////////////////////////////////////////// //Funcion de interrupcion //Si no se usa simplemente no hacemos nada... //Esto sirve para direccionar lo los datos //en un lugar muy cercano al Inicio de la memoria //de datos //////////////////////////////////////////////// static void interrupt isr(void){ if(T0IF){ T0IF=0; PIN_INTENSIDAD=1; T0IE=0; }else if(RCIF){ RCIF=0; BUFFER=getch(); } } /* * PROGRAMA PRINCIPAL */
  39. void main(void) { /* * CONFIGURAMOS PUERTOS */ TRISA=0X10; //RA4 COMO ENTRADA RESTO SALIDA TRISC=0X80; //RC7 COMO ENTRADA Y RC6 COMO SALIDA ANSELH=0X00; //PORTB DIGITAL ADCON0=0X00; //APAGAMOS CONVERTIDOR ANALOGO CM1CON0=0x00; CM2CON0=0x00; /* * Configuramos Timer 0 * FORMULA: * TMR0=256-{TIEMPO_DESEADO/[(1/(_XTAL_FREQ/4)*PRESCLAR]} * Tiempo Requerido T=0.004 s * Valor del timer 0 a cargar = 50 */ OpenTIMER0(prescalar_256,OFF); /* * CONFIGURAMOS SERIAL * VALUE=(FOSC/(BAUD*16))-1 * SIN INTERRUPCIONES * A 19200 */ OpenUSART(64,OFF,ON);//64=19200 GIE=1; //TODAS LAS INTERRUPCIONES APAGADAS PEIE=1; //TODAS LAS INTERRUPCIONES POR PERIFERICOS APAGADAS while(1){ if(RA4==1){ TMR0=BUFFER; T0IE=1; PIN_INTENSIDAD=0; while(RA4==1); TMR0=BUFFER; T0IE=1; PIN_INTENSIDAD=0; while(RA4==0); } } } El software en Labview muestra una sencillez ya que solo enviaremos un dato al Microcontrolador y este al recibirlo solo cargara la variable BUFFER con el dato enviado desde Labview que es el dato que corresponde a la intensidad de la lámpara. Hemos configurado el timer0 con un prescalar de 256 y a una frecuencia de trabajo de 20Mhz esto ayuda a que genere exactamente 8mS de desbordamiento como máximo. Al enviar un dato de 0 a 255 este valor al ser cargado a la variable BUFFER carga automáticamente al registro TMR0 del timer0 del cual indica cuando hay que interrumpir para prender el led del optoacoplador, esto realizándose a 60Hz del cual el PWM será del mismo valor de la frecuencia de VCA.
  40. Foto del Proyecto
  41. Diagrama: RETOS: Esta sección usted deberá de realizar las siguientes practicas que involucren un enlace con Labview, estará a prueba para conocer si usted allá entendido correctamente las practicas anteriores: 1.- Visualice y un dato análogo que usted desee, como puede ser un sensor de temperatura, sensor de proximidad o lo que usted desee, solo que al leer un dato que este fuera del rango señale cuando este en bajo nivel o alto. Minvalor< DATO < Maxvalor 2.- Manipule dos lámpara de 127 VCA del cual pueda ajustar la intensidad de cada uno de ellos por separado. Nota: Cuando trabaje con 127 VCA tenga mucho cuidado a la hora de conectar o tener un corto circuito, ya que habla con una de las corrientes más peligrosas.
  42. Realizado por George arth Pagina http://ucursos.webs.com http://ucursos.blogspot.com “Aprende para que después compartas conocimientos”
Anúncio