Вы находитесь на странице: 1из 99

REPUBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIN SUPERIOR INSTITUTO UNIVERSITARIO DE TECNOLOGA DR.

FEDERICO RIVERO PALACIO

SISTEMA DESARROLLADO EN LENGUAJE DE PROGRAMACIN JAVA, CCS C E ISIS PROTEUS VSM PARA SIMULAR EL FUNCIONAMIENTO DEL CONTACTOR APLICANDO LA LEY DE AMPERE.

Autores: Freites Jhoan Marin Wilber Saab Rimn Velsquez Vicente Seccin II.

CARACAS, JULIO DE 2011

INTRODUCCION

Las

ecuaciones

de

Maxwell

estn

involucradas

en

todos

los

fenmenos

electromagnticos, uno de ellos es protagonista de muchas innovaciones a nivel elctrico y electrnico como es el caso de la Ley de Ampere que refleja el funcionamiento de un importante nmero de dispositivos como es el caso del contactor. Para el entendimiento de esta ley, se propone el diseo de una aplicacin basada en Java, CCS C e ISIS PROTEUS VSM para realizar una especie de laboratorio virtual que nos permita simular el fenmeno fsico que se manifiesta en el contactor a causa de la Ley de Ampere con el fin de despertar inters en el estudio de la programacin a nivel ingenieril ya que, hoy en da con los avances de la informtica, se pueden realizar un astronmico nmero de proyectos en cualquier mbito. En tal sentido, el presente informe presenta un resumen en cuanto a la teora del contactor, su funcionamiento y sus componentes, con el fin de familiarizarnos con este importante elemento que nos permitir la realizacin de muchos montajes cada vez ms complejos y tiles en la vida practica de la ingeniera y de la industria. A su vez, se realiza una explicacin breve de la Ley de Ampere, se hace referencia al lenguaje de programacin orientados a objetos Java, al gestor de bases de datos MySQL, al compilador CCS C el cual se emplea para la realizacin de programas para microcontroladores PIC y al simulador de circuitos analgicos y digitales ISIS PROTEUS VSM.

NDICE GENERAL

pp.

Portada ndice General INTRODUCCIN CAPTULO I. EL CONTACTOR Definicin y Generalidades Partes del Contactor Funcionamiento del Contactor Clasificacin de los Contactores Categora de empleo Criterios para la seleccin de un Contactor Ventajas del uso de los Contactores Causas del deterioro de los Contactores Captulo II. SEGUNDA LEY DE MAXWELL LEY DE AMPERE Captulo III. LENGUAJE DE PROGRAMACIN JAVA Captulo IV. ISIS PROTEUS Captulo V. Compilador CCS C Captulo VI. GESTOR DE BASE DE DATOS MYSQL Captulo VII. MICROCONTROLADOR Partes del Microcontrolador Memoria de Programa Memoria de Datos Captulo VIII. SIMULINK Captulo IX DESARROLLO DE APLICACIN PARA SIMULAR EL

i ii 1 2 2 3 10 10 11 12 13 13 15 19 22 24 26 28 29 30 31 36 39

ii

FUNCIONAMIENTO DEL CONTACTOR APLICANDO LA LEY DE AMPERE Clase para acceder a la Aplicacin Clase para cambiar la contrasea de acceso a la Aplicacin Clase para acceder a la Base de Datos My SQL Clase empleada para simular el funcionamiento del Contactor aplicando la Ley de Ampere CONCLUSIONES Y RECOMENDACIONES. REFERENCIAS. ANEXOS. ANEXO A Cdigo fuente desarrollado en lenguaje de programacin Java ANEXO B Cdigo fuente desarrollado en CCS C

39 39 41 41 43 58 60

iii

CAPITULO I

EL CONTACTOR Definicin y generalidades: Podemos definir un contactor como un aparato mecnico de conexin y desconexin elctrica, accionado por cualquier forma de energa, menos manual, capaz de establecer, soportar e interrumpir corrientes en condiciones normales del circuito, incluso las de sobrecarga. Las energas utilizadas para accionar un contactor pueden ser muy diversas: mecnicas, magnticas, neumticas, fludricas, etc. Los contactores corrientemente utilizados en la industria son accionados mediante la energa magntica proporcionada por una bobina. Un contactor accionado por energa magntica, consta de un ncleo magntico y de una bobina capaz de generar un campo magntico suficientemente grande como para vencer la fuerza de los muelles antagonistas que mantienen separada del ncleo una pieza, tambin magntica, solidaria al dispositivo encargado de accionar los contactos elctricos. As pues, caracterstica importante de un contactor ser la tensin a aplicar a la bobina de accionamiento, as como su intensidad potencia. Segn sea el fabricante, dispondremos de una extensa gama de tensiones de accionamiento, tanto en continua como

en alterna siendo las ms comnmente utilizadas, 24, 48, 220, y 380. La intensidad y potencia de la bobina, naturalmente dependen del tamao del contador. El tamao de un contactor, depende de la intensidad que es capaz de establecer, soportar e interrumpir, as como del nmero de contactos de que dispone (normalmente cuatro). El tamao del contactor tambin depende de la tensin mxima de trabajo que puede soportar, pero esta suele ser de 660 V. para los contactores de normal utilizacin en la industria. Referente a la intensidad nominal de un contactor, sobre catlogo y segn el fabricante, podremos observar contactores dentro de una extensa gama, generalmente comprendida entre 5 A y varios cientos de amperios. Esto equivale a decir que los contactores son capaces de controlar potencias dentro de un amplio margen; as, por ejemplo, un contactor para 25 A. conectado en una red bifsica de 380 V. es capaz de controlar receptores de hasta 380 25=9.500 VA. Y si es trifsica 3 220 25=16.454 VA. Naturalmente nos referimos a receptores cuya carga sea puramente resistiva (cos = 1), ya que de lo contrario, las condiciones de trabajo de los contactos quedan notablemente modificadas. Partes del contactor:

Figura 1 Partes del contactor.

Carcaza: La carcaza es el elemento en el cual se fijan todos los componentes conductores del contactor, para lo cual es fabricada en un material no conductor con propiedades como la resistencia al calor, y un alto grado de rigidez. Uno de los ms utilizados materiales es la fibra de vidrio pero tiene un inconveniente y es que este material es quebradizo y por lo tanto su manipulacin es muy delicada. En caso de quebrarse alguno de los componentes no es recomendable el uso de pegantes.

Electroimn:

Tambin es denominado circuito electromagntico, y es el elemento motor del contactor. Esta compuesto por una serie de elementos cuya finalidad es transformar la energa elctrica en un campo magntico muy intenso mediante el cual se produce un movimiento mecnico aprovechando las propiedades electromagnticas de ciertos materiales.

Bobina:

Consiste en un arrollamiento de alambre de cobre con unas caractersticas muy especiales con un gran nmero de espiras y de seccin muy delgada para producir un campo magntico. El flujo magntico produce un par magntico que vence los pares resistentes de los muelles de manera que la armadura se puede juntar con el ncleo estrechamente.

Bobina energizada con CA:

Para el caso cuando una bobina se energiza con corriente alterna, se produce una corriente de magnitud muy alta puesto que solo se cuenta con la resistencia del conductor, ya que la reactancia inductiva de la bobina es muy baja debido al gran entrehierro que

existe entre la armadura y el ncleo, esta corriente tiene factor de potencia por consiguiente alto, del orden de 0.8 a 0.9 y es llamada corriente de llamada. Esta corriente elevada produce un campo magntico muy grande capaz de vencer el par ejercido por los muelles o resorte que los mantiene separados y de esta manera se cierra el circuito magntico unindose la armadura con el ncleo trayendo como consecuencia el aumento de la reactancia inductiva y as la disminucin de hasta aproximadamente diez veces la corriente producindose entonces una corriente llamada corriente de mantenimiento con un factor de potencia ms bajo pero capaz de mantener el circuito magntico cerrado. Para que todo este procedimiento tenga xito las bobinas deben ser dimensionadas para trabajar con las corrientes bajas de mantenimiento pues si no se acciona el mecanismo de cierre del circuito magntico la corriente de llamada circular un tiempo ms grande del previsto pudiendo as deteriorar la bobina.

Bobina energizada con CC:

En este caso no se presenta el fenmeno anterior puesto que las corrientes de llamada y de mantenimiento son iguales. La nica resistencia presente es la resistencia de la bobina misma por lo cual las caractersticas y la construccin de estas bobinas son muy especiales. La bobina puede ser energizada por la fuente de alimentacin o por una fuente independiente.

El ncleo:

Su funcin es concentrar y aumentar el flujo magntico con el fin de atraer la armadura eficientemente. Est construido de lminas de acero al silicio superpuestas y unidas firmemente unas con otras con el fin de evitar las corrientes parsitas. El pequeo entrehierro entre la armadura y el ncleo se crea con el fin de eliminar los magnetismos remanentes.

Cuando circula una corriente alterna por la bobina es de suponerse que cuando la corriente pasa por el valor cero, el ncleo se separa de la armadura puesto que el flujo tambin es cero pero como esto sucede 120 veces en un segundo (si la frecuencia es de 60Hz) por lo cual en realidad no hay una verdadera separacin pero esto sin embargo genera vibraciones y un zumbido adems del aumento de la corriente de mantenimiento; por esto las bobinas que operan con corriente alterna poseen unos dispositivos llamados espiras de sombra las cuales producen un flujo magntico desfasado con el principal de manera que se obtiene un flujo continuo similar al producido por una corriente continua.

Armadura:

Es un elemento mvil muy parecido al ncleo pero no posee espiras de sombra, su funcin es la de cerrar el circuito magntico ya que en estado de reposo se encuentra separada del ncleo. Este espacio de separacin se denomina entrehierro o cota de llamada. Tanto el cierre como la apertura del circuito magntico suceden en un espacio de tiempo muy corto (10 milisegundos aproximadamente), todo debido a las caractersticas del muelle, por esto se pueden presentar dos situaciones. Cuando el par resistente es mayor que el par electromagntico, no se logra atraer la armadura. Si el par resistente es dbil no se lograra la separacin rpida de la armadura. Cada una de las acciones de energizar o desenergizar la bobina y por consiguiente la atraccin o separacin de la armadura, es utilizada para accionar los contactos que obran como interruptores, permitiendo o interrumpiendo el paso de la corriente. Estos contactos estn unidos mecnicamente (son solidarios) pero son separados elctricamente.

Contactos:

El objeto de estos elementos es permitir o interrumpir el paso de la corriente, son elementos conductores, los cuales se accionan tan pronto se energiza o se desenergiza la

bobina por lo que se les denomina contactos instantneos. Esta funcin la cumplen tanto en el circuito de potencia como en el circuito de mando. Los contactos estn compuestos por tres partes dos de las cuales son fijas y se encuentran ubicadas en la carcaza y una parte mvil que une estas dos y posee un resorte para garantizar el contacto Las partes que entran en contacto deben tener unas caractersticas especiales puesto que al ser accionados bajo carga, se presenta un arco elctrico el cual es proporcional a la corriente que demanda la carga, estos arcos producen sustancias que deterioran los contactos pues traen como consecuencia la corrosin, tambin las caractersticas mecnicas de estos elementos son muy importantes.

Figura 2 Contactos Contactos principales: Son los encargados de permitir o interrumpir el paso de la corriente en el circuito principal, es decir que acta sobre la corriente que fluye de la fuente hacia la carga. Es recomendable estar verificando la separacin de estos que permiten que las partes fijas y mviles se junten antes de que el circuito magntico se cierre completamente, esta distancia se le denomina cota de presin. Esta no debe superar el 50%. En caso de cambio de los contactos se tienen las siguientes recomendaciones: (a) Cambiar todos los contactos y no solamente el daado. (b) Alinear los contactos respetando la cota inicial de presin.

(c) Verificar la presin de cada contacto con el contactor en funcionamiento. (d) Verificar que todos los tornillos y tuercas se encuentren bien apretados. Debido a que operan bajo carga, es determinant4e poder extinguir el arco que se produce puesto que esto deteriora el dispositivo ya que produce temperaturas extremadamente altas, para esto, los contactos se encuentran instalados dentro de la llamada cmara apaga chispas, este objetivo se logra mediante diferentes mecanismos. (a) Soplado por auto-ventilacin: Este dispositivo consiste en dos aberturas, una grande y una pequea, al calentarse el aire, este sale por la abertura pequea entrando aire fresco por la abertura grande y este movimiento de aire hace que se extinga la chispa. (b) Cmaras des-ionizadoras: Estas cmaras consisten en un recubrimiento metlico que acta como un disipador de calor y por esto el aire no alcanza la temperatura de ionizacin. Este mtodo suele acompaarse por el soplado por auto-ventilacin. (c) Transferencia y fraccionamiento del arco: Consiste en dividir la chispa que se produce de manera que es mas fcil extinguir chispas ms pequeas. Esto se realiza mediante guas en los contactos fijos. (d) Soplo magntico: Este mtodo emplea un campo magntico que atrae la chispa hacia arriba de la cmara aumentando de esta manera la resistencia. Este mtodo suele ir acompaado del soplado por auto-ventilacin y debe realizarse en un tiempo no muy largo pero tampoco extremadamente corto.

Contactos secundarios:

Estos contactos secundarios se encuentran dimensionados para corrientes muy pequeas porque estos actan sobre la corriente que alimenta la bobina del contactor o sobre elementos de sealizacin. Dado que en ocasiones deben trabajar con los PLC estos contactos deben tener una confiabilidad muy alta.

Gran parte de la versatilidad de los contactores depende del correcto uso y funcionamiento de los contactos auxiliares. Normalmente los contactos auxiliares son: Instantneos: Actan tan pronto se energiza la bobina del contactor. De apertura lenta: La velocidad y el desplazamiento del contacto mvil es igual al de la armadura. De apertura positiva: Los contactos abiertos y cerrados no pueden coincidir cerrados en ningn momento. Sin embargo se encuentran contactores auxiliares con adelanto al cierre o a la apertura y con retraso al cierre o a la apertura. Estos contactos actan algunos milisegundos antes o despus que los contactos instantneos. Existen dos clases de contactos auxiliares:

(a) Contacto normalmente abierto: (NA o NO), llamado tambin contacto instantneo de cierre: contacto cuya funcin es cerrar un circuito, tan pronto se energice la bobina del contactor. En estado de reposo se encuentra abierto. (b) Contacto normalmente cerrado: (NC), llamado tambin contacto instantneo de apertura, contacto cuya funcin es abrir un circuito, tan pronto se energice la bobina del contactor. En estado de reposo se encuentra cerrado.

Funcionamiento del contactor:

Cuando la bobina se energiza genera un campo magntico intenso, de manera que el ncleo atrae a la armadura, con un movimiento muy rpido. Con este movimiento todos los contactos del contactor, principales y auxiliares, cambian inmediatamente y de forma solidaria de estado. Existen dos consideraciones que debemos tener en cuenta en cuanto a las caractersticas de los contactores:

(a) Poder de cierre: Valor de la corriente independientemente de la tensin, que un contactor puede establecer en forma satisfactoria y sin peligro que sus contactos se suelden. (b) Poder de corte: Valor de la corriente que el contactor puede cortar, sin riesgo de dao de los contactos y de los aislantes de la cmara apaga chispas. La corriente es ms dbil en cuanto ms grande es la tensin.

Para que los contactos vuelvan a su posicin anterior es necesario desenergizar la bobina. Durante esta desenergizacin o desconexin de la bobina (carga inductiva) se producen sobre-tensiones de alta frecuencia, que pueden producir interferencias en los aparatos electrnicos. Desde el punto de vista del funcionamiento del contactor las bobinas tienen la mayor importancia y en cuanto a las aplicaciones los contactos tienen la mayor importancia.

Clasificacin de los contactores: Los contactores se pueden clasificar de acuerdo con: (a) Por su construccin (b) Contactores electromecnicos: Son aquellos ya descritos que funcionan de acuerdo a principios elctricos, mecnicos y magnticos. (c) Contactores estticos o de estado slido: Estos contactores se construyen a base de tiristores. Estos presentan algunos inconvenientes como: (d) Su dimensionamiento debe ser muy superior a lo necesario. (e) La potencia disipada es muy grande (30 veces superior). (f) Son muy sensibles a los parsitos internos y tiene una corriente de fuga importante. (g) Su costo es muy superior al de un contactor electromecnico equivalente. (h) Por el tipo de corriente elctrica que alimenta la bobina. (i) Contactores para AC. (j) Contactores para DC. (k) Por los contactos que tiene. (l) Contactores principales.

10

(m) Contactores auxiliares. (n) Por la carga que pueden maniobrar (categora de empleo). Tiene que ver con la corriente que debe maniobrar el contactor bajo carga.

Categora de empleo:

Para establecer la categora de empleo se tiene en cuenta el tipo de carga controlada y las condiciones en las cuales se efectan los cortes. Las categoras ms usadas en AC son: (a) AC1: Cargas no inductivas (resistencias, distribucin) o dbilmente inductivas, cuyo factor de potencia sea por lo menos 0.95. (b) AC2: Se refiere al arranque, al frenado en contracorriente y a la marcha por impulso permanente de los motores de anillos.Al cierre el contactor establece el paso de corrientes de arranque equivalentes a ms o menos 2.5 la corriente nominal del motor. A la apertura el contactor debe cortar la intensidad de arranque, con una tensin inferior o igual a la tensin de la red. (c) AC3: Para el control de motores jaula de ardilla (motores de rotor en cortocircuito) que se apagan a plena marcha. Al cierre se produce el paso de corrientes de arranque, con intensidades equivalentes a 5 o ms veces la corriente nominal del motor. A la apertura corta el paso de corrientes equivalentes a la corriente nominal absorbida por el motor. Es un corte relativamente fcil. (d) AC4: Se refiere al arranque, al frenado en contracorriente y a la marcha por impulso permanente de los motores de jaula. Al cierre se produce el paso de la corriente de arranque, con intensidades equivalentes a 5 o ms veces la corriente nominal del motor. Su apertura provoca el corte de la corriente nominal a una tensin, tanto mayor como tanto mayor es la velocidad del motor. Esta tensin puede ser igual a la tensin de la red. El corte es severo. En corriente continua se encuentran cinco categoras de empleo: DC1, DC2, DC3, DC4 y DC5.

11

Un mismo contactor dependiendo de la categora de empleo, puede usarse con diferentes corrientes.

Criterios para la seleccin de un contactor:

Para elegir el contactor que ms se ajusta a nuestras necesidades, se debe tener en cuenta los siguientes criterios: (a) Tipo de corriente, tensin de alimentacin de la bobina y la frecuencia. (b) Potencia nominal de la carga. (c) Condiciones de servicio ya sea ligera, normal, dura, extrema. Existen maniobras que modifican la corriente de arranque y de corte. (d) Si es para el circuito de potencia o de mando y el nmero de contactos auxiliares que necesita. (e) Para trabajos silenciosos o con frecuencias de maniobra muy altas es recomendable el uso de contactores estticos o de estado slido. (f) Por la categora de empleo.

Ventajas del uso de los contactores:

Los contactores presentan ventajas en cuanto a los siguientes aspectos y por los cuales es recomendable su utilizacin. (a) Automatizacin en el arranque y paro de motores. (b) Posibilidad de controlar completamente una mquina, desde barios puntos de maniobra o estaciones. (c) Se pueden maniobrar circuitos sometidos a corrientes muy altas, mediante corrientes muy pequeas. (d) Seguridad del personal, dado que las maniobras se realizan desde lugares alejados del motor u otro tipo de carga, y las corrientes y tensiones que se manipulan con los aparatos de mando son o pueden ser pequeos.

12

(e) Control y automatizacin de equipos y mquinas con procesos complejos, mediante la ayuda de los aparatos auxiliares de mando, como interruptores de posicin, detectores inductivos, presstatos, temporizadores, etc. (f) Ahorro de tiempo al realizar maniobras prolongadas.

Causas del deterioro de los contactores:

Cuando un contactor no funciona o lo hace en forma deficiente, lo primero que debe hacerse es revisar el circuito de mando y de potencia (esquemas y montaje), verificando el estado de los conductores y de las conexiones, porque se pueden presentar falsos contactos, tornillos flojos etc. Adems de lo anterior es conveniente tener en cuenta los siguientes aspectos en cada una de las partes que componen el contactor: (a) Deterioro en la bobina: La tensin permanente de alimentacin debe ser la especificada por el fabricante con un 10% de tolerancia.El cierre del contactor se puede producir con el 85% de variacin de la tensin nominal y la apertura con el 65%. Cuando se producen cadas de tensin frecuentes y de corta duracin, se pueden emplear retardadores de apertura capacitivos. Si el ncleo y la armadura no se cierran por completo, la bobina se recalentar hasta deteriorarse por completo, por el aumento de la corriente de mantenimiento. (b) Deterior en el nucleo y armadura: Cuando el ncleo y la armadura no se juntan bien y/o se separan, produciendo un campo electromagntico ruidoso, es necesario revisar la tensin de alimentacin de la bobina, los muelles y la presencia de cuerpos extraos en las superficies rectificadas del ncleo y/o armadura. (c) Deterioro en los contactos:Cuando se presenta un deterioro prematuro es necesario revisar Si el contactor corresponde a la potencia nominal del motor, y al nmero y frecuencia de maniobras requerido. Cuando la eleccin ha sido la adecuada y la intensidad de bloqueo del motor es inferior al poder de cierre del contactor, el dao

13

puede tener origen en el circuito de mando, que no permite un correcto funcionamiento del circuito electromagntico. Cadas de tensin en la red, provocadas por la sobre-intensidad producida en el arranque del motor, que origina prdida de energa en el circuito magntico, de tal manera que los contactos, al no cerrarse completamente y carecer de la presin necesaria, acaban por soldarse. Cortes de tensin en la red: al reponerse la tensin, si todos los motores arrancan simultneamente, la intensidad puede ser muy alta, provocando una cada de tensin, por lo cual es conveniente colocar un dispositivo, para espaciar los arranques por orden de prioridad. Micro-cortes en la red: cuando un contactor se cierra nuevamente despus de un micro-corte (algunos milisegundos), la fuerza contra-electromotriz produce un aumento de la corriente pico, que puede alcanzar hasta el doble de lo normal, provocando la soldadura de algunos contactos y un arco elctrico, entre otros problemas. Este inconveniente puede eliminarse usando un contacto temporizado, que retarde dos o tres segundos el nuevo cierre. Vibracin de los contactos de enclavamiento, que repercute en el electroimn del contactor de potencia, provocando cierres incompletos y soldadura de los contactos.

14

CAPITULO II

SEGUNDA LEY DE MAXWELL LEY DE AMPERE

El campo magntico: son los mecanismos fundamentales por medio de los cuales la energa se convierte de una forma a otra, en motores, generadores y transformadores. La ley bsica que rige la produccin de un campo magntico por medio de una corriente es la ley de Ampere:
H.dI I net

En donde H es la intensidad de campo magntico producido por la corriente Inet. En las unidades del SI, I se mide en amperios y H en amperios-vueltas por metro. Para entender el significado de esta ecuacin se explica en la siguiente figura:

15

Figura 3. Ncleo magntico

Se muestra un ncleo rectangular con un embobinado de alambre N vueltas, en torno a una columna del ncleo. Si el ncleo es material ferromagntico, todo el campo magntico producido por la corriente permanecer dentro del ncleo, de tal modo que el recorrido de integracin en la ley de Ampere es la longitud media del recorrido del ncleo Ic. La corriente que pasa dentro del recorrido de integracin Inet es entonces N.i puesto que la bobina abraza el recorrido de integracin N veces, mientras conduce la corriente i, La ley de ampere se vuelve
H .I c N .i

H es la magnitud de la intensidad del campo magntico H. Por consiguiente, la magnitud de la intensidad de campo magntico en el ncleo debido a la corriente aplicada es:
H N .i Ic

La intensidad de H del campo magntico es en cierto sentido, una medida del esfuerzo que la corriente realiza para establecer un campo magntico. La relacin entre la intensidad H del campo magntico y la densidad B del flujo magntico resultante producido dentro del material se da por
B .H

16

En donde: (a) H = Intensidad del campo magntico (b) = Permeabilidad magntica del material. (c) B = Densidad resultante del flujo magntico producido. La densidad del flujo magntico producido en un trozo de material est dada por el producto de 2 trminos: H: Representa el esfuerzo que ejerce la corriente para establecer un campo magntico. : Representa el esfuerzo que realiza la corriente para establecer un campo magntico en un material dado. Las unidades de intensidad de un campo son amperios-vueltas por metro, las unidades de permeabilidad son henrios por metro y las unidades de la densidad de flujo resultante son webers por metro cuadrados conocidas como teslas. La permeabilidad de espacio libre se llama 0 y su valor es:

4. .10 7 H

La permeabilidad de cualquier otro material comparado con la permeabilidad del espacio libre se denomina permeabilidad relativa:

r 0

En un ncleo como en la figura anterior la magnitud de la densidad del flujo se determina por
B .H .N .i Ic

17

El flujo total en una rea se determina por

B.dA
A

En donde dA, es la unidad diferencial de rea. Si el vector de la densidad de flujo es perpendicular a un plano de rea A y si la densidad de flujo es constante en toda el rea entonces esta ecuacin se reduce a:

B. A
Entonces el flujo total en el ncleo en la figura anterior debido a la corriente i del embobinado es:
B. A NiA Ic

Donde A es el corte transversal del ncleo.

18

CAPITULO III

LENGUAJE DE PROGRAMACIN JAVA

Es un lenguaje de programacin Java es un lenguaje moderno, presentado por primera vez por Sun Microsystems en el segundo semestre de 1995. Desde el principio gan adeptos por diversas razones, una de las ms importantes es su neutralidad respecto de la plataforma de ejecucin lo que permite, entre otras cosas, aadir programas a una pgina Web. Pero quiz lo que ms guste de este lenguaje de programacin son un par de aspectos que lo hacen muy cmodo y agradable de usar para programar: (a) La sencillez y elegancia con que se escriben los programas en Java. En el proceso de compilacin se realizan multitud de comprobaciones que permiten eliminar muchos posibles errores posteriores. (b) Las bibliotecas ya definidas que proporciona el lenguaje y que el programador puede utilizar sin tener que hacerlas de nuevo. Java no es solo un lenguaje de programacin, es una plataforma de desarrollo de programas que consta de: (a) Un lenguaje de programacin: el lenguaje Java, del mismo nombre que la plataforma.

19

(b) Un conjunto de bibliotecas estndar que se incluyen con la plataforma y que deben existir en cualquier entorno de Java. Tambien se denomina Java Core. Estas bibliotecas comprenden: strings, procesos, entrada y salida, propiedades del sistema, fecha y hora, Applets, API de red, internacionalizacin, seguridad, componentes, sealizacin, acceso a base de datos, interaccin con dispositivos, etc. (c) Un conjunto de herramientas para el desarrollo de programas. Entre ellas cabe citar el compilador de Java a cdigo de bytes, el generador de documentacin, el depurador de programas en Java, etc. (d) Un entorno de ejecucin cuyo principal componente es una mquina virtual para poder ejecutar los programas en cdigos bytes. La plataforma Java se puede usar desde distintos sistemas operativos, ejecutndose cada uno de ellos en el hardware correspondiente. El desarrollo de programas en Java, al igual que ocurre normalmente con otros lenguajes de programacin, sigue un proceso como el siguiente: (a) Edicin del programa fuente: Se denomina programa fuente al programa que se escribe utilizando un entorno de programacin como los descritos, o cualquier editor, en un lenguaje de programacin. En Java los archivos fuentes tienen un nombre como prueba.java, en donde el nombre ha de ser el mismo que el empleado como nombre de la clase y la extensin ha de ser .java. (b) Compilacin: Tras escribir el programa hay que compilarlo utilizando un compilador. Los entornos de desarrollo facilitan esa tarea, hacindola casi invisible en alguno de ellos. Tambin se puede compilar utilizando la lnea de comandos con la herramienta javac, de la siguiente forma: javac prueba.java. En el proceso de compilacin se comprueba que lo que se haya escrito es correcto en Java y se traduce a otro lenguaje, denominado cdigo de bytes (bytecodes). Si durante la compilacin se detectan errores, el entorno avisar de los problemas detectados y dnde se han encontrados para corregirlos. Si en la compilacin no se detectan errores se genera un archivo como prueba.class.

20

(c) Ejecucin: Una vez compilado se ejecuta el programa y se comprueba si hace lo que se haba previsto. Si el programa no hace lo previsto se vuelve a editar, modificando los aspectos que no funcionan adecuadamente.

21

CAPITULO IV

ISIS DE PROTEUS VSM

El entorno de diseo electrnico POTEUS VSM de LABCENTER ELECTRONICS, ofrece la posibilidad de simular cdigo microcontrolador de alto y bajo nivel y, simultneamente, con la simulacin en modo mixto de SPICE. Esto permite el diseo tanto a nivel de hardware como software y realizar la simulacin en un mismo y nico entorno. Para ello, se suministran tres potentes subentornos como son el ISIS para el diseo grfico, VSM (Virtual System Modelling) para la simulacin y el ARES para el diseo de placas. ISIS es un potente programa de diseo electrnico que permite realizar esquemas que pueden ser simulados en el entorno VSM o pasados a un circuito impreso ya en el entorno ARES. Posee una muy buena coleccin de libreras de modelos tanto para dibujar, simular o para las placas. Adems, permite la creacin de nuevos componentes, su modelizacin para la simulacin e, incluso, la posibilidad de solicitar al fabricante que cree un nuevo modelo. En la siguiente imagen, sin entrar muy profundamente se muestra el entorno de trabajo de PROTEUS:

22

Figura 4. Entorno de desarrollos de ISIS PROTEUS VSM

23

CAPITULO V

COMPILADOR CCS C

El compilador CCS C ha sido desarrollado especficamente para PIC MCU, obteniendo la mxima optimizacin del compilador con estos dispositivos. Dospone de una amplia librera de funciones predefenidas, comandos de procesado y ejemplos. Adems, suministra los controladores (drivers) para diversos dispositivos como LCD, convertidores AD, relojes en tiempo real, EEPROM, comunicacin serial, comunicacin USB, etc. Las caractersticas generales de este compilador y ms informacin se pueden encontrar en la direccin http://www.ccsinfo.com. Un compilador convierte el lenguaje de alto nivel a instrucciones en cdigo mquina; un cross compiler es un compilador que funciona en un procesador (normalmente en un PC) diferente al procesador objeto. El compilador CCS C es un cross compile. Los programas son editados y compilados a instrucciones mquina en el entorno de trabajo del PC, el cdigo mquina puede ser cargado del PC al sistema PIC mediante el ICD2 (o mediante cualquier otro programador) y puede ser depurado (paso a paso) desde el entorno de trabajo del PC. El CCS C es C estndar y, adems de las directivas estndar (#include, etc.), suministra unas directivas especificas para PIC (#device, etc.); adems incluye funciones especficas (bit_set(), etc). Se suministra con un editor que permite controlar la sintaxis del programa.

24

Para escribir un programa en C con CCS C se deben tener en cuenta una serie de elementos bsicos de su estructura: (a) Directivas de procesado: controlan la conversin del programa a cdigo mquina por parte del compilador. (b) Programas o funciones: conjunto de instrucciones. Puede haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusin de la llamada main(). (c) Instrucciones: indican cmo debe comportar el PIC en todo momento. (d) Comentarios: permiten describir lo que significa cada lnea del programa. A continuacin se ilustra el entorno de desarrollo del compilador CCS C:

Figura 5. Entorno de desarrollo de CCS C

25

CAPITULO VI

GESTOR DE BASE DE DATOS MYSQL

MySQL es un gestor de base de datos registrado por MySQL AB, el cual funciona bajo comandos SQL. Para acceder a bases de datos es mucho ms til usar un motor o servidor que hace las funciones de intrprete entre las aplicaciones y usuarios con las bases de datos. Esta utilidad se traduce en ventajas, entre las que podemos mencionar las siguientes: (a) Acceso a las bases de datos de forma simultnea por varios usuarios y/o aplicaciones. (b) Seguridad, en forma de permisos y privilegios, determinados usuarios tendrn permiso para consulta o modificacin de determinadas tablas. Esto permite compartir datos sin que peligre la integridad de la base de datos o protegiendo determinados contenidos. (c) Potencia, SQL es un lenguaje muy potente para consulta de bases de datos, usar un motor nos ahorra una enorme cantidad de trabajo. (d) Portabilidad, SQL es tambin un lenguaje estandarizado, de modo que las consultas hechas usando SQL son fcilmente portables a otros sistemas y plataformas. Esto, unido al uso de C/C++ proporciona una portabilidad enorme.

26

En concreto, usar MySQL tiene ventajas adicionales: (a) Escalabilidad, es posible manipular bases de datos enormes, del orden de seis mil tablas y alrededor de cincuenta millones de registros, y hasta 32 ndices por tabla. MySQL est escrito en C y C++ y probado con multitud de compiladores y dispone de APIs para muchas plataformas diferentes. (b) Conectividad, es decir, permite conexiones entre diferentes mquinas con distintos sistemas operativos. Es corriente que servidores Linux o Unix, usando MySQL, sirvan datos para ordenadores con Windows, Linux, Solaris, etc. Para ello se usa TCP/IP, tuberas, o sockets Unix. (c) Es multihilo, con lo que puede beneficiarse de sistemas multiprocesador. (d) Permite manejar multitud de tipos para columnas. (e) Permite manejar registros de longitud fija o variable.

27

CAPITULO VII

MICROCONTROLADOR

Hace unos aos, los sistemas de control se implementaban usando exclusivamente lgica de componentes, lo que haca que fuesen dispositivos de gran tamao y muy pesados. Para facilitar una velocidad ms alta y mejorar la eficiencia de estos dispositivos de control, se trat de reducir su tamao, apareciendo as los microprocesadores. Siguiendo con el proceso de miniaturizacin, el siguiente paso consisti en la fabricacin de un controlador que integrase todos sus componentes en un slo chip. A esto es a lo que se le conoce con el nombre de microcontrolador, un computador dentro de un slo chip. Los microcontroladores se programan en Assembler y cada microcontrolador vara su conjunto de instrucciones de acuerdo a su fabricante y modelo. De acuerdo al nmero de instrucciones que el microcontrolador maneja se le denomina de arquitectura RISC (reducido) o CISC (complejo). Los microcontroladores poseen principalmente una ALU (Unidad Lgico Aritmtica), memoria del programa, memoria de registros, y pines I/O (entrada y/0 salida). La ALU es la encargada de procesar los datos dependiendo de las instrucciones que se ejecuten (ADD, OR, AND), mientras que los pines son los que se encargan de comunicar al microcontrolador con el medio externo; la funcin de los pines puede ser de transmisin de datos, alimentacin de corriente para el funcionamiento de este o pines de control especifico. Las principales caractersticas que diferencian a un microcontrolador de un microprocesador son:

28

(a) Son sistemas cerrados, ya que contiene todos los elementos de un computador en un solo chip, frente a los microprocesadores que son sistemas abiertos, ya que sacan las lneas de los buses de datos, direcciones y control al exterior, para la conexin de memorias, interfaces de E/S, etc. (b) Son de propsito especfico, es decir, son programados para realizar una nica tarea, mientras que los microprocesadores son de propsito general. Un microcontrolador, tpicamente consta de: (a) CPU o procesador: Es el cerebro del sistema que procesa todos los datos que viajan a lo largo del bus. (b) Memorias: Se encuentra un grupo de memorias no voltiles como la ROM, EEPROM, y FLASH, donde se almacenan los programas y una voltil (RAM) donde se almacenan los datos, las cuales se definen ms adelante. (c) Reloj principal: Normalmente todos los microcontroladores tienen incorporados circuitos osciladores para el funcionamiento de stos. (d) Puertos E/S (Entrada/Salida): Soportan las lneas que comunican al microcontrolador con los perifricos externos. (e) Perro guardin o Watchdog: Contador que resetea al microcontrolador cada vez que rebosa. Sirve para evitar fallos de funcionamiento, por lo que hay que inicializarlo peridicamente antes de que rebose. (f) Proteccin ante fallo de alimentacin o Browout: Circuito que resetea al microcontrolador cuando la tensin de alimentacin baja de un cierto lmite. (g) Temporizadores: Para controlar periodos de tiempo.
29

(h) Convertidores A/D y D/A: Analgico/Digital y Digital/Analgico. (i) Comparadores analgicos. (j) Moduladores de anchura de impulsos. (k) Puertos de comunicacin.- Tanto serie como paralelo. (l) Control de interrupciones. Memoria de Programa: El microcontrolador est diseado para que en su memoria de programa se almacenen todas las instrucciones del programa de control. No hay posibilidad de utilizar memorias externas de ampliacin. Como el programa a ejecutar siempre es el mismo, debe estar grabado de forma permanente. Los tipos de memoria adecuados para soportar esta funcin admiten cinco versiones diferentes: (a) ROM con Mscara: En este tipo de memoria el programa se graba en el chip durante el proceso de su fabricacin mediante el uso de mscaras. Solo se aconseja el uso de este tipo de memoria cuando se precisan series muy grandes. (b) EPROM: La grabacin de esta memoria se realiza mediante un dispositivo fsico gobernado desde una PC, que recibe el nombre de grabador. Su borrado es por medio de la aplicacin de rayos ultravioletas y pueden ser empleadas nuevamente. Su costo es elevado. (c) OTP: Su grabado es igual al de la memoria EPROM pero con la diferencia de que puede ser grabado una sola vez.

30

(d) EEPROM: La grabacin es similar a de las memorias OTP y EPROM, solo que el procedimiento de grabado y borrado es ms sencillo ya que es elctricamente. El empleo de este tipo de memorias garantizan hasta 1.000.000 de ciclos de escritura y borrado, pero, su desventaja radica en su alto consumo de energa y por el tiempo que demora el proceso de escritura. (e) Flash: Es una memoria no voltil, de bajo consumo, se puede escribir y borrar elctricamente al igual que las EEPROM y suelen disponer de mayor capacidad que las EEPROM. Son recomendables en aplicaciones en donde se requiere modificar constantemente el programa del microcontrolador. Memoria de Datos: Los datos que manejan los programas varan continuamente, por lo tanto la memoria debe ser de lectura y escritura. Es pro ello que se emplea la memoria RAM esttica an siendo voltil. Debido a que los microcontroladores slo incluyen las caractersticas especficas para una tarea, su coste es relativamente bajo. Un microcontrolador tpico realiza funciones de manipulacin de instrucciones, posee E/S de accesos fciles y directos, y un proceso de interrupciones rpido y eficiente. Adems tambin reducen de manera notable los costes de diseo. Hay gran variedad de microcontroladores. Dependiendo de la potencia y de las caractersticas que se necesiten, se pueden elegir microcontroladores de 4, 8, 16 32 bits. Los microcontroladores PIC fueron los primeros microcontroladores RISC, es decir, microcontroladores con un juego de instrucciones reducido (35 instrucciones). El hecho de ser procesadores de tipo RISC generalmente implica simplicidad en los diseos, permitiendo ms caractersticas a bajo coste.

31

Los beneficios de esta simplicidad en el diseo son que los microcontroladores se implementan en chip muy pequeos, con pocos pines, y tienen un consumo de potencia muy bajo. Las principales caractersticas de los PIC son: (a) Arquitectura: Los PICs utilizan la arquitectura Harvard, frente a la Von Neumann que es la habitual. La arquitectura Harvard tiene la memoria de programa y la memoria de datos separadas y se accede a ellas mediante buses distintos. Esto mejora el ancho de banda sobre la tradicional arquitectura secuencial, en la cual los programas y datos son buscados en la misma memoria, utilizando el mismo bus (Ver Figura 6).

Figura 6 Arquitectura Von Neumann

En la arquitectura Harvard mientras se accede a la memoria de programa, sobre la memoria de datos se puede estar leyendo o escribiendo, lo que permite ejecutar una instruccin a la vez que se busca la siguiente (Ver Figura 7).

Figura 7 Arquitectura Harvard

32

(b) Segmentacin de instrucciones: Consiste en dividir la ejecucin de las instrucciones en varias fases, en el caso concreto de los PICs dos fases, de manera que se realizan simultneamente distintas fases de distintas instrucciones. As cada instruccin se ejecuta en un ciclo de instruccin (4 ciclos de reloj), excepto las de salto que ocupan tantos ciclos de instruccin como necesite para calcular la direccin de salto. (c) Formato de instrucciones de longitud constante: Permite optimizar la memoria de instrucciones y el diseo de ensambladores y compiladores. (d)RISC: Computador de reducido juego de instrucciones, 35 instrucciones. (e) Instrucciones ortogonales: Todas las instrucciones pueden manejar cualquier elemento de la arquitectura como fuente o destino. (f) Arquitectura basada en un banco de registros: Todos los objetos del sistema se encuentran implementados fsicamente como registros. (g) Gran variedad de microcontroladores y muchas herramientas de soporte. Los PICs se clasifican en distintas gamas atendiendo a los recursos disponibles en cada uno de ellos. Las gamas son: (a) Gama Enana (PIC12Fxxx): La principal caracterstica es que son muy pequeos, con encapsulados de 8 pines, y un juego de 33 instrucciones de 12 bits.

33

(b) Gama Baja (PIC16F5xx): Los encapsulados son de 18, 20 28 pines. Al igual que en los anteriores el nmero de instrucciones es de 33 con un ancho de 12 bits. La memoria de programa es de 512 palabras, 1K 2K, y la de datos est comprendida entre 25 y 73 bytes. No permite interrupciones. (c) Gama Media (PIC16Fxxx): Es la gama ms variada y completa de los PIC, con encapsulados desde 18 a 68 pines. Tiene un conjunto de 35 instrucciones de 14 bits de ancho. Permite adems caractersticas importantes que no soportaban los anteriores como son: Interrupciones, pila de 8 niveles que permite anidamiento de subrutinas, entre otras. Esta familia a su vez se puede dividir en subfamilias en funcin de los recursos de que se dispongan. (d) Gama Alta (PIC17Fxxx): Tienen unas caractersticas muy diferentes a las anteriores, ya que son

microcontroladores de arquitectura abierta, es decir, que sacan sus buses al exterior. El nmero de instrucciones es de 58 con una anchura de 16 bits. Tienen instrucciones vectorizadas. (e) Gama Mejorada (PIC18Fxxx): Es la ltima gama que ha salido. Tiene memoria de programa de hasta 1M palabras. La mayora de las instrucciones son de 16 bits, aunque las hay tambin de 32 bits. El nmero total de instrucciones es de 76. Esta gama est diseada para aplicaciones de control. Todos ellos tienen convertidores A/D y, por ejemplo, estn en fase de desarrollo algunos modelos que tienen interfase para el bus CAN.

34

CAPITULO VIII

SIMULINK

Simulink es una aplicacin que permite construir y simular modelos de sistemas fsicos y sistemas de control mediante diagramas de bloques. El comportamiento de dichos sistemas se define mediante funciones de transferencia, operaciones matemticas, elementos de Matlab y seales predefinidas de todo tipo. Simulink dispone de una serie de utilidades que facilitan la visualizacin, anlisis y guardado de los resultados de simulacin. Simulink se emplea profusamente en ingeniera. Al ejecutar Simulink, aparece la ventana que se muestra a continuacin la cual no est destinada a crear modelos de simulacin, su funcin principal consiste en navegar por la enorme librera de bloques disponibles para el modelado. En ella distinguimos dos partes, la izquierda contiene una visin en forma de rbol de todas las cajas de herramientas instaladas que contienen bloques Simulink. La amplitud de este rbol depender de las operaciones que hayamos activado al seleccionar Matlab. La parte derecha de la ventana de la figura muestra los bloques Simulink contenidos en la caja de herramienta o nodo de la parte izquierda de la ventana. Estos bloques se deben arrastrar sobre el espacio de trabajo de Simulink para la creacin de modelos a simular. Por ultimo cabe indica que en la parte superior de la ventana de inicio de Simulink hay varias herramientas como la bsqueda de un bloque determinado a partir de su nombre, que nos puede resultar bastante tiles.

35

Figura 8 Simulink Si pulsamos en el icono superior izquierdo de la ventana de la figura anterior, se abre una ventana blanca sobre la que iniciaremos la creacin de un modelo de simulacin. Dicha ventana se muestra en la siguiente figura:

Figura 9 rea de trabajo de Simulink

36

En dicha rea de trabajo se procede a colocar los bloques que se requieren para realizar el modelado deseado, por ejemplo si se necesita modelar la funcin de transferencia de un sistema en particular, basta con insertar bloques de tipo funcin de transferencias y no ejecutar el comando tf desde Matlab.

37

CAPITULO IX

DESARROLLO DE APLICACIN PARA SIMULAR EL FUNCIONAMIENTO DEL CONTACTOR APLICANDO LA LEY DE AMPERE

Aplicacin Desarrollada en el Lenguaje de Programacin Java

La aplicacin desarrollada en Java 2.0 fue con el fin de simular el funcionamiento del contactor aplicando la segunda ley de Maxwell conocida como la ley de Ampere. Para este caso, se tomo referencia un ncleo ferromagntico de tipo E, cuya seccin central lleva el devanado de excitacin siendo el rea de la seccin transversal iguales para todos los lados. Esta aplicacin se encuentra conformada por 4 clases las cuales tienen la siguiente funcin: (a) Clase para acceder a la aplicacin: Esta clase se ejecuta con el fin de imprimirle seguridad a la aplicacin donde el administrador del sistema es el nico que puede manipularlo. Mediante una lista desplegable, se seleccionar el usuario Administrador y se ingresa la contrasea que por defecto es 1234. Esta clase se conecta a otra clase llamada base de datos con el fin de conectarse a la base de datos creada en MySQL y as, el programa realizar las validaciones de acceso.

38

Figura 10 Ventana de acceso al sistema

Figura 11 Ventana de bienvenida al sistema

39

(b) Clase para cambiar la contrasea de acceso a la aplicacin: Como se muestra en las dos imgenes anteriores, se cuenta con un botn que ejecuta una accin la cual consiste en generar otro frame que contiene campos para la actualizacin de la contrasea del sistema tal y como se muestra en la siguiente imagen:

Figura 12 Ventana para cambiar contrasea Esta clase al igual que la clase anterior se conecta a la clase llamada base de datos con la finalidad de permitir al usuario actualizar la tabla de acceso en la base de datos realizada en MySQL con una previa validacin de la contrasea actual. (c) Clase para conectarse a la base de datos MySQL: Por medio de JDBC permite la conexin de la aplicacin desarrollada en Java con la base de datos creada en MySQL que contiene una tabla con dos campos, una que almacena el usuario el cual es fijo y el otro campo tiene registrado la contrasea la cual puede ser editable por medidas de seguridad. Dicha clase enva los comandos SQL requeridos para tal finalidad gracias a los drivers que deben instalar

40

en el PC antes de desarrollar la aplicacin. Las siguientes imgenes muestran la consola de la base de datos con la tabla acceso:

Figura 13 Consola de MySQL

Figura 14 Base de datos para acceder al sistema

41

Como ya se comento, para lograr que Java se conecte a la base de datos creada en MySQL es necesario descargar desde la pgina de MySQL el driver llamado mysql-connector-java-5.1.7-bin y copiarlo en la siguiente ruta: C:\Archivos de programa\Java\jdk1.6.0_01\jre\lib\ext (d) Clase empleada para simular el funcionamiento del contactor aplicando la Ley de Ampere: En esta clase se diseo la interfaz del usuario que permite simular como la ley de ampere influye en el funcionamiento del contactor. Esta clase genera un frame que contiene dos pestaas, una que contiene un panel donde se seleccionan los datos deseados (para evitar errores al ingresar valores) y que a su vez arroja los resultados obtenidos de una funcin dedicada a ejecutar la ley de ampere, la pestaa interfaz grfica1 muestra las grficas de las variables intensidad de campo magntico, densidad de flujo magntico y flujo magntico, y la pestaa interfaz grfica2 muestra nicamente la grfica de la intensidad de campo magntico pero en una mejor resolucin para su mejor apreciacin. La interfaz tiene la siguiente forma:

Figura 15 Pestaa interfaz contactor

42

Figura 16 Pestaa interfaz grfica1

Figura 17 Pestaa interfaz grfica2

43

La interfaz contactor permite variar la corriente de excitacin en alterna, y a su vez, permite seleccionar otros parmetros como lo son: nmero de espiras, longitud del entrehierro, rea de la seccin transversal del ncleo. Al variar la corriente, automticamente la aplicacin realiza los clculos pertinentes de intensidad de campo magntico, densidad de flujo magntico, flujo magntico y la fuerza ejercida la cual consiste en la fuerza que se requiere para cerrar los contactos mviles del contactor. Para que la aplicacin simule el funcionamiento del contactor se colocaron dos cajas de texto no editables, uno tiene un valor fijo que indica la fuerza en newton necesaria para que se cierren los contactos mviles y el otro es el valor obtenido de los clculos que realiza la funcin llamada ley de ampere(), cuando ambos valores son iguales o el obtenido desde la funcin es mayor al valor requerido se manda una seal va puerto USB virtual al simulador PROTEUS el cual simula un sistema de control de arranque de motor inteligente empleando un microcontrolador PIC. Esta comunicacin entre Java y PROTEUS se logra gracias a la librera mchpusb de microchip y a la librera jpicusb creada para comunicacin va USB nicamente con dispositivos de la familia microchip. En la siguiente imagen se muestra la simulacin realizada en ISIS PROTEUS:

Figura 18 Diseo del circuito para arrancar un motor con ISIS PROTEUS VSM

44

En la siguiente figura se muestra la aplicacin realizada en Java interactuando con VSM PROTEUS para la ejecucin del arranque del motor, cabe destacar que la aplicacin realizada en Java representa el contactor como tal y el circuito que se mostr en la imagen anterior es la carga a manipular:

Figura 19 Vista de cmo Java interacta con ISIS PROTEUS VSM A continuacin se muestran las frmulas que se emplearon en el programa Java:

Donde, N: Nmero de vueltas.

45

i: Corriente de excitacin en alterna. FMM: Flujo Magnetomotriz. e: Longitud del entrehierro. A: rea de la seccin transversal de cada uno de los lados. : Flujo Magntico. B: Densidad de Flujo Magntico. H: Intensidad de Campo Magntico. : Permeabilidad del entrehierro. Fuerza: Representa la fuerza requerida para mover los contactos mviles. A continuacin se muestra el fragmento de cdigo que se encarga de aplicar la ley de ampere: public double leyAmpere(double i, double N, double E, double A){ this.i = i; this.N = N; this.E = E; this.A = A; FMM = N*i; Reluctancia = (E)/(miu*(Math.pow(A/100,2))); Flujo = FMM/Reluctancia; B = Flujo/A; H = miu*B; fuerza = (3/2)*(Math.pow(B,2)*A)/miu; String H1 = String.valueOf(H); intensidadMagnetica.setText(H1); String B1 = String.valueOf(B); densidadFlujoMagnetico.setText(B1); String Flujo1 = String.valueOf(Flujo); flujoMagnetico.setText(Flujo1); fuerzaRequerida.setText("0.2"); String fuerza1 = String.valueOf(fuerza);

46

fuerzaObtenida.setText(fuerza1); if (fuerza >= 0.2){ comando(Opcion01); JPanel panelInformacionStatusContactor1 = new JPanel(); JOptionPane.showMessageDialog(panelInformacionStatusContactor1, "Contactor Cerrado", "Informacin", JOptionPane.INFORMATION_MESSAGE); }else{ comando(Opcion02); } return H; } La interfaz grfica se encarga de reflejar el comportamiento de la intensidad de campo magntico, densidad de flujo magntico y el flujo magntico por medio de la librera jfreechart la cual fue desarrollada en Java y permite la realizacin de grficos de calidad profesional ya sea la aplicacin de tipo web o de escritorio. Dentro de las caractersticas principales de esta biblioteca tenemos: (e) Un API consistente y amplio para la realizacin de un gran nmero de tipos de grficos y, a su vez, bien documentado. Dentro de los tipos de grficos se encuentran: grficos lineales, de intervalos de tiempo, de barras, etc. (f) Es una librera flexible ya que, como se indico, puede ser manipulada en aplicaciones en tecnologa de servidores como de clientes. (g) Tiene soporte para varios tipos de salida como componentes Swing, archivos de imagen PNG, JPEG y otros formatos como PDF, EPS, SVG, HTML, etc. (h) JFreeChart es software libre (Open Source) bajo licencia LGPL que permite el uso en aplicaciones propietarias.

47

A continuacin se muestra el fragmento de cdigo que se encarga de generar las grficas: public XYDataset createDataset() { try{ CM = Double.parseDouble(intensidadMagnetica.getText()); DF = Double.parseDouble(densidadFlujoMagnetico.getText()); FM = Double.parseDouble(flujoMagnetico.getText()); }catch(Exception e){ } XYSeries serie1 = new XYSeries("Campo Magntico"); XYSeries serie2 = new XYSeries("Densidad de Flujo"); XYSeries serie3 = new XYSeries("Flujo Magntico"); for (double t=0.0; t<=50.0; t+=0.2){ serie1.add(t, CM*Math.cos(2*3.14*60*t)); serie2.add(t, DF*Math.cos(2*3.14*60*t)); serie3.add(t, FM*Math.cos(2*3.14*60*t)); } XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(serie1); dataset.addSeries(serie2); dataset.addSeries(serie3); return dataset; } public JFreeChart createChart(XYDataset dataset) { JFreeChart chart = ChartFactory.createXYLineChart( "Grficas", // chart title "Tiempo", // x axis label "Amplitud", // y axis label dataset, // data PlotOrientation.VERTICAL,

48

true, // include legend true, // tooltips false // urls); return chart; }

49

Programa Desarrollado en Lenguaje C para Ejecutar la Accin de Control del Motor por Medio del Microcontrolador 18F2550

La tecnologa de microcontroladores PIC tiene una gran cantidad de funciones y un gran nmeros de dispositivos, pero no todos tienen la virtud de poseer puerto USB, por ello, se empleo el PIC 18F2550 el cual es uno de los ms simples dispositivos con puerto USB pero con una gran cantidad de funciones que permite el desarrollo de un importante nmero de proyectos electrnica de sobresaliente nivel. Para la realizacin de este programa se requirieron de dos libreras, una llamada LCD9.c la cual fue desarrollada con el fin de controlar una pantalla display de manera de que sea ms amigable la simulacin y una librera llamada usb.c destinada a interactuar con el puerto USB de la PC y as comunicarse con la aplicacin en Java. Los puertos empleados para conectar el PIC con la pantalla LCD son el puerto B y RC0:RC1 del puerto C nicamente ya que solo se realizaran escrituras de caracteres en dicho perifrico. Para la comunicacin USB con la PC se empleo los pines RC4:RC5. A continuacin se muestra el fragmento de cdigo en lenguaje C que se desarrollo para recibir la data enviada desde la aplicacin Java: while (TRUE){ if (usb_enumerated()){ if (usb_kbhit(1)){ //Ciclo infinito //Si el PicUSB se encuentra configurado //Si el endpoint de salida contiene datos del host

usb_get_packet(1, recbuf, Lenbuf); //Se almacenan los paquetes de datos if (recbuf[0] == 1){ output_high(PIN_C6); Set_pwm1_Duty(409);
50

//Si rebuf[0]=1, se almacena el comando M11

lcd_putc("\f"); lcd_putc(" Motor Activo"); } if (recbuf[0] == 0){ output_low(PIN_C6); lcd_putc("\f");

//Se limpia la pantalla LCD //Se enva mensaje a la pantalla LCD

//Si rebuf[0]=2, se almacena el comando M12

//Se limpia la pantalla LCD

lcd_putc(" Motor Desactivo"); //Se enva mensaje a la pantalla LCD } } } Como se puede observar, el cdigo enviado desde la aplicacin Java para indicarle al microcontrolador que el motor debe ser activo es M11, una vez recibido dicho dato el PIC genera una seal PWM con ciclo de trabajo igual al 50% para arrancar un motor DC de bajo consumo. En caso de que se enve el cdigo M12, el PIC no genera la seal PWM para arrancar el motor. Cabe destacar que al inicio de la programacin se debe llamar a los siguientes mtodos para inicializar tanto a la pantalla LCD como al puerto USB para su correcto funcionamiento: lcd_init(); usb_init(); usb_task(); usb_wait_for_enumeration(); //Inicializa la pantalla LCD //Inicializamos el puerto USB //Habilita el puerto USB y las interrupciones //El Host procede a configurar el PicUSB

51

Simulacin en Simulink del Contactor Aplicando la Ley de Ampere

En la siguiente imagen se muestra el modelo realizado en Simulink para simular el funcionamiento del contactor. Como se puede observar en el cuadro 1 de la siguiente figura, se consta de una potencimetro a la salida de la seal senoidal de corriente que permite variar la amplitud de la misma, tambin se consta de unos switch manuales para seleccionar el nmero de espiras que contiene el contactor, el producto de ambos genera la fuerza magnetomotriz.

Cuadro 1

Figura 20 Visualizacin de la obtencin de la fuerza magnetomotriz

En el cuadro 2 se muestra los switch manuales que permiten seleccionar la longitud del entrehierro y el rea de la seccin transversal del ncleo del contactor, tambin se observa un subsistema que genera la reluctancia del aire cuya inversa al ser multiplicada por la fuerza magnetomotriz da como resultado el flujo magntico.

52

Cuadro 2

Figura 21 Visualizacin de la obtencin del flujo magntico En el cuadro 3 se seala como se logra obtener la densidad de flujo magntico y la intensidad de campo magntico, en la salida del sistema hay dos osciloscopios, uno de ellos grfica nicamente la seal correspondiente a la intensidad de campo magntico para su mejora apreciacin y el otro grfica la intensidad de campo magntico conjuntamente con la densidad de flujo magntico y el flujo magntico pudindose as realizar comparaciones entre ellos.

53

Cuadro 3

Figura 22 Visualizacin de la obtencin de la densidad de flujo magntico y la intensidad de campo magntico

Figura 23 Visualizacin de la intensidad de campo magntico

54

Figura 24 Visualizacin de la intensidad de campo magntico, densidad de flujo magntico y el flujo magntico

55

CONCLUSIONES Y RECOMENDACIONES

CONCLUSIONES La simulacin implementada cumple las expectativas y los objetivos planteados en el proyecto mostrando, versatilidad, comodidad, fidelidad y amigabilidad en cuanto al manejo de la Ley de Ampere que es la base del funcionamiento del contactor alcanzndose as el objetivo principal. A medida que se fue desarrollando la investigacin se alcanzaron los objetivos especficos fijados al inicio de la investigacin tales como: (a) Estudiar el principio de funcionamiento de la Ley de Ampere. (b) Comprender el funcionamiento del contactor. (c) Desarrollo de la aplicacin en Java para realizar la simulacin del fenmeno fsico que rige el funcionamiento del contactor. (d) Realizacin del programa del microcontralador PIC para controlar un motor DC de bajo consumo. (e) Realizacin de un laboratorio virtual fusionando Java, con CCS C e ISIS PROTEUS VSM para simular el funcionamiento del contactor. La elaboracin del informe es aporte cuidadosamente escrito, que contempla informacin detallada y entendible para el manejo y comprensin del sistema de simulacin. Contiene informacin de los temas que abordaron la investigacin de este proyecto.

56

RECOMENDACIONES (a) Se recomienda no revelar la clave de acceso del modulo para evitar que extraos lo puedan activar. (b) Se sugiere recomienda usar equipos laptop o desktop con 1 GB de RAM mnimo. (c) Es conveniente instalar la ltima versin de JDK disponible desde la pgina del fabricante. (d) Se recomiendan los entornos de desarrollo jcreator, eclipse o netbeans. (e) Se sugiere no instalar un gestor de base de datos distinto a MySQL, en caso de que se desee emplear un gestor distinto como postgres, oracle, SQL Server, etc, se deben realizar las adecuaciones en la programacin de la clase base de datos e instalar los drivers en la misma ruta que se hizo para MySQL.

57

REFERENCIAS

Deitel, Harvey M. Deitel, Paul J. Java cmo programar. Introduccin al DOO con UML y los patrones de diseo JDBC, SERVELTS, JSP (5 ed). Mxico: Editorial Pearson/Prentice Hall.

Fraile Mora, Jess. (2008). Mquinas Elctricas (6 ed). Madrid: Editorial McGraw-Hill

Chapman, Stephen J. (1996). Mquinas Elctricas (2 ed). Mxico: Editorial McGraw-Hill

Angulo, J., Angulo I. (1999). Microcontroladores <PIC>. Diseo prctico de aplicaciones (2 ed). Madrid: Editorial McGraw-Hill/Interamericana.

De la Roca, Mila. (2001). Diseo de equipos electrnicos. Caracas: Editorial EJMIL.

(http://www.microchip.com)

58

REPBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIN SUPERIOR INSTITUTO UNIVERSITARIO DE TECNOLOGA DR. FEDERICO RIVERO PALACIO EDO. MIRANDA

ANEXOS

59

ANEXO A CONTENIDO PGINA

1. Cdigo fuente desarrollado en lenguaje de programacin Java

61

60

import javax.swing.*; import java.awt.*; import java.awt.event.*;

//Se importa el paquete javax.swing //Se importa el paquete java.awt //Se importa el paquete awt.event

import javax.swing.event.*; //Se importa el paquete java.sql import java.sql.*; import java.awt.Color; public class accesoContactor extends JFrame{ //-----Declaracin de paneles-----// private JPanel panelAutentificacion; private JPanel panelUsuario; private JPanel panelContrasea; private JPanel panelIngresar; //-------Declaracin de label-----// private JLabel login; private JLabel password; //-------Declaracin de JComboBox-----// private JComboBox usuario; //-----Declaracin de JPasswordField-----// private JPasswordField campoPassword; //----------Declaracin de botones-------// private JButton aceptar; private JButton cancelar; private JButton cambiarContrasea; //----Declaracin de variables----// String loginSeleccionado; String[] loginAplicacion = {"","Administrador"}; boolean accesoBD; //Se desarrolla el constructor de la clase public accesoContactor(){

61

super("Autentificacin"); frame

//Se coloca el titulo al

login = new JLabel("Usuario:");

//Se crea el objeto login

password = new JLabel("Contrasea:"); usuario = new JComboBox(loginAplicacion); campoPassword = new JPasswordField(5); campoPassword campoPassword.setEchoChar('*'); setEchoChar para enmascarar la contrasea ingresada aceptar = new JButton("Aceptar"); cancelar = new JButton("Cancelar");

//Se crea el objeto password //Se crea el objeto usuario //Se crea el objeto

//Se aplica la funcin

//Se crea el objeto aceptar //Se crea el objeto cancelar crea el objeto

cambiarContrasea = new JButton("Nueva Contrasea"); //Se cambiarContrasea panelAutentificacion = new JPanel(); panelUsuario = new JPanel(); panelContrasea = new JPanel(); panelContrasea panelIngresar = new JPanel();

//Se crea el objeto panelAutentifecacin //Se crea el objeto panelUsuario //Se crea el objeto

//Se crea el objeto panelIngresar

panelUsuario.add(login); panelUsuario panelUsuario.add(usuario); en panelUsuario

//Se adiciona el objeto login en

//Se adiciona el objeto usuario

panelContrasea.add(password); en panelContrasea panelContrasea.add(campoPassword); en panelContrasea

//Se adiciona el objeto password

//Se adiciona el objeto campoPassword

62

panelIngresar.add(aceptar); en panelIngresar panelIngresar.add(cancelar); panelIngresar panelIngresar.add(cambiarContrasea); cambiarContrasea en panelIngresar //Se

//Se adiciona el objeto aceptar

//Se adiciona el objeto cacncelar en

adiciona

el

objeto

panelAutentificacion.add(panelUsuario, BorderLayout.NORTH); //Se adiciona el objeto panelUsuario en panelAutentificacin ubicado en el Norte del panel panelAutentificacion.add(panelContrasea, BorderLayout.CENTER); //Se

adiciona el objeto panelContrasea en panelAutentificacin ubicado en el Centro del panel panelAutentificacion.add(panelIngresar, BorderLayout.SOUTH); //Se adiciona el objeto panelIngresar en panelAutentificacin ubicado en el Sur del panel add(panelAutentificacion); panelAutentificacin en el frame principal //Se adiciona el panel

usuario.addItemListener(new OyenteLogin()); //Se crea un objeto oyente y se adiciona al objeto usuario aceptar.addActionListener(new OyenteBotonAceptar()); //Se crea un objeto oyente y se adiciona al objeto aceptar cancelar.addActionListener(new OyenteBotonCancelar()); //Se crea un objeto oyente y se adiciona al objeto cancelar cambiarContrasea.addActionListener(new OyenteCambiarContrasea());

//Se crea un objeto oyente y se adiciona al objeto cambiarContrasea

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); EXIT_ON_CLOSE en el frame principal pack(); importa el paquete frame

//Se

habilita

//Se

63

setLocation(450,250); ventana en las coordenadas especificadas setVisible(true); visible setSize(320,150); tamao del frame setResizable(false);

//Se localiza la

//El

frame

es

//Se especifica el

public static void main(String[] args) { accesoContactor aContactor = new accesoContactor(); del tipo controlArranqueMotor } //Se crea un objeto CAM

class OyenteLogin implements ItemListener{ //Se ejecuto una accin sobre el objeto usuario public void itemStateChanged(ItemEvent evento){ if (evento.getStateChange() == ItemEvent.SELECTED){ //Al generarse un evento se carga el seleccionado loginSeleccionado = (String)evento.getItem(); se guarda en el String loginSeleccionado } } } //y

class OyenteBotonAceptar implements ActionListener{ ejecuto una accin sobre el objeto aceptar public void actionPerformed (ActionEvent e){

//Se

64

baseDatos bd = new baseDatos("proyectos","root","fedora"); generarse un evento se carga el nombre

//Al

//de la base de datos, el usuario y la contrasea

//de la base de datos String passBD = campoPassword.getText(); la contrasea ingresada en el campoPassword en passBD bd.autentificacion(passBD); //Se llama a la funcin autentificacin accesoBD = bd.accesoBD; //Se carga el valor retornado por la funcin autentificacin if (accesoBD == true){ //Se accesoBD es true se oculta el frame de autentificacin setVisible(false); //por medio de setVisible(false) JPanel panelAccesoPermitido = new JPanel(); //Se muestra un mensaje de bienvenida JOptionPane.showMessageDialog(panelAccesoPermitido, "Bienvenido al Sistema", "Acceso Permitido", JOptionPane.INFORMATION_MESSAGE); interfazContactor consola = new interfazContactor(); //Se permite el acceso a la aplicacin ya que los datos de autentificacin //Se carga

//son correctos }else{ //En caso de que no sean correctos

65

JPanel panelAccesoDenegado = new JPanel(); //Se arroja un mensaje de error y se cierra la aplicacin JOptionPane.showMessageDialog(panelAccesoDenegado, "Clave Invalida por favor intente ingresar nuevamente", "Acceso Denegado", JOptionPane.WARNING_MESSAGE); System.exit(0); //Se cierra la aplicacin } } }

class OyenteBotonCancelar implements ActionListener{ ejecuto una accin sobre el objeto cancelar public void actionPerformed (ActionEvent evento){ System.exit(0); //Se cierra la aplicacin } }

//Se

class OyenteCambiarContrasea implements ActionListener{ accin sobre el objeto cambiarContrasea public void actionPerformed (ActionEvent evento){

//Se ejecuto una

cambiarContrasea cContrasea = new cambiarContrasea(); un JPanel para ingresar la nueva contrasea setVisible(false); //Se oculta el frame de autentificacin } } }

//Se

crea

66

import java.sql.*;

//Se importa el paquete java.sql

import javax.swing.*; //Se importa el paquete javax.swing import java.awt.*; //Se importa el paquete java.awt

class baseDatos { //Se declaran los objetos a emplear private String bd; private String login; private String password; private String url; //Se declaran las variables a emplear String passBD1; String registroTelefono; String registroBaseDatos; boolean accesoBD; //Se desarrolla el constructor de la clase baseDatos(String bd, String login, String password){ this.bd = bd; la base de datos this.login = login; base de datos this.password = password; de datos url = "jdbc:mysql://localhost/"+bd; //Se carga la url de la base de datos } //Funcin de autentificacin de la base de datos boolean autentificacion(String passBD){ //Se carga el password de la base //Se carga el login de la //Se carga el nombre de

try {

67

Class.forName("com.mysql.jdbc.Driver"); //Se carga el controlador de MySQL Connection connection1 =

DriverManager.getConnection(url,login,password); //Se procede a conectarse a la base de datos if (connection1 != null){ la conexin es exitosa se procede a ejecutar Statement //instrucciones SQL de consulta int [] modificaciones=stmt1.executeBatch(); validar el nombre de usuario y la clave de acceso ResultSet res = stmt1.executeQuery("SELECT pass FROM acceso WHERE login = 'Administrador' "); //Se enva el comando de consulta while(res.next()){ passBD1 = res.getString("pass"); contrasea de la base de datos en passBD1 if (passBD.equals(passBD1)){ compara con el ingresado por el usuario accesoBD = true; son iguales accesoBD es true }else{ //De lo contrario accesoBD = false; //accesoBD es false } } res.close(); //Se cierra el objeto resulset stmt1.close(); //Se cierra el objeto statement //Si //Se //Se carga la //para stmt1 = connection1.createStatement(); //Si

68

connection1.close(); la conexin } } catch(SQLException e){ //En caso de alguna excepcin a nivel de base de datos JPanel panelSQLException = new JPanel(); //Se JPanel JOptionPane.showMessageDialog(panelSQLException, manipula un JOptionPane "Error con la Base de Datos", "Error", JOptionPane.ERROR_MESSAGE); } catch(ClassNotFoundException e){ alguna excepcin a nivel del driver SQL JPanel claseNoEncontrada = new JPanel(); //Se JPanel JOptionPane.showMessageDialog(claseNoEncontrada, manipula un JOptionPane "Error con Driver SQL", "Error", JOptionPane.ERROR_MESSAGE); } return accesoBD; //Se retorna el valor de accesoBD } //Funcin de actualizacin de contrasea de la base de datos void actualizarContrasea(String claveNueva){ crea //En crea

//Se cierra

un

objeto

//Se

caso

de

un

objeto

//Se

69

passBD1 = claveNueva; //Se carga en passBD1 el valor de la contrasea nueva try { Class.forName("com.mysql.jdbc.Driver"); //Se carga el controlador de MySQL Connection connection1 =

DriverManager.getConnection(url,login,password); //Se procede a conectarse a la base de datos if (connection1 != null){ //Si la conexin es exitosa se procede a ejecutar Statement stmt1 = connection1.createStatement(); //instrucciones SQL de actualizacin stmt1.executeUpdate("UPDATE acceso SET pass = '" + passBD1 + "' where login = 'Administrador'"); stmt1.close(); //Se cierra el objeto Statement connection1.close(); //Se cierra la conexin } } catch(SQLException e){ //En caso de alguna excepcin a nivel de base de datos JPanel panelSQLException = new JPanel(); //Se crea un objeto JPanel JOptionPane.showMessageDialog(panelSQLException, //Se manipula un JOptionPane "Error con la Base de Datos", "Error", JOptionPane.ERROR_MESSAGE); } //Se enva el comando de actualizacin

70

catch(ClassNotFoundException e){ //En caso de alguna excepcin a nivel del driver SQL JPanel claseNoEncontrada = new JPanel(); //Se crea un objeto JPanel JOptionPane.showMessageDialog(claseNoEncontrada, //Se manipula un JOptionPane "Error con Driver SQL", "Error", JOptionPane.ERROR_MESSAGE); } } } import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import jPicUsb.*; //Se importa el paquete javax.swing //Se importa el paquete java.awt //Se importa el paquete awt.event //Se importa el paquete swing.event //Se importa el paquete JPicUsb

class cambiarContrasea extends JFrame{ //-----Declaracin de paneles-----// private JPanel panelCambiarContrasea; private JPanel panelContraseaActual; private JPanel panelContraseaNueva; private JPanel panelContraseaNuevaRepetir; private JPanel panelActualizar; //-------Declaracin de label-----// private JLabel contraseaActual; private JLabel contraseaNueva; private JLabel contraseaNuevaRepetir; //-----Declaracin de JPasswordField-----//

71

private JPasswordField campoContraseaActual; private JPasswordField campoContraseaNueva; private JPasswordField campoContraseaNuevaRepetir; //----------Declaracin de botones-------// private JButton aceptar; private JButton cancelar; //---------Declaracin de variables------// boolean accesoBD; String claveNueva; String claveNuevaRepetir;

public cambiarContrasea(){ super ("Actualizar Contrasea"); //Se coloca el titulo al frame contraseaActual = new JLabel("Contrasea Actual:"); el objeto contraseaActual contraseaNueva = new JLabel("Contrasea Nueva:"); el objeto contraseaNueva contraseaNuevaRepetir = new JLabel("Repetir Contrasea:"); contraseaNuevaRepetir campoContraseaActual = new JPasswordField(4); el objeto campoContraseaActual campoContraseaActual.setEchoChar('*'); //Se aplica la funcin setEchoChar para enmascarar la contrasea ingresada campoContraseaNueva = new JPasswordField(4); el objeto campoContraseaNueva campoContraseaNueva.setEchoChar('*'); //Se aplica la funcin setEchoChar para enmascarar la contrasea ingresada campoContraseaNuevaRepetir = new JPasswordField(4); campoContraseaNuevaRepetir //Se crea el objeto //Se crea //Se crea //Se crea el objeto //Se crea //Se crea

72

campoContraseaNuevaRepetir.setEchoChar('*'); la funcin setEchoChar para enmascarar la contrasea ingresada aceptar = new JButton("Aceptar"); //Se crea el objeto aceptar cancelar = new JButton("Cancelar"); //Se crea el objeto cancelar panelCambiarContrasea = new JPanel(); //Se crea el objeto panelCambiarContrasea panelContraseaActual = new JPanel(); //Se crea el objeto panelCambiarContraseaActual panelContraseaNueva = new JPanel(); //Se crea el objeto panelCambiarContraseaNueva panelContraseaNuevaRepetir = new JPanel(); //Se crea el objeto panelCambiarContraseaNuevaRepetir panelActualizar = new JPanel(); //Se crea el objeto panelActualizar

//Se aplica

panelContraseaActual.add(contraseaActual); adiciona el objeto contraseaActual en panelContraseaActual panelContraseaActual.add(campoContraseaActual); adiciona el objeto campoContraseaActual en panelContraseaActual

//Se

//Se

panelContraseaNueva.add(contraseaNueva); //Se adiciona el objeto contraseaNueva en panelContraseaNueva panelContraseaNueva.add(campoContraseaNueva); adiciona el objeto campoContraseaNueva en panelContraseaNueva //Se

panelContraseaNuevaRepetir.add(contraseaNuevaRepetir); objeto contraseaNuevaRepetir en panelContraseaNuevaRepetir

//Se adiciona el

73

panelContraseaNuevaRepetir.add(campoContraseaNuevaRepetir);//Se adiciona el objeto campoContraseaNuevaRepetir en panelContraseaNuevaRepetir

panelActualizar.add(aceptar); //Se adiciona el objeto aceptar en panelActualizacin panelActualizar.add(cancelar); //Se adiciona el objeto cancelar en panelActualizacin

panelCambiarContrasea.add(panelContraseaActual,

BorderLayout.NORTH);

//Se adiciona el objeto panelContraseaActual en panelCambiarContrasea ubicado en el Norte del panel panelCambiarContrasea.add(panelContraseaNueva, BorderLayout.CENTER);

//Se adiciona el objeto panelContraseaNueva en panelCambiarContrasea ubicado en el Centro del panel panelCambiarContrasea.add(panelContraseaNuevaRepetir, BorderLayout.SOUTH); //Se adiciona el objeto panelContraseaNuevaRepetir en

panelCambiarContrasea ubicado en el Sur del panel panelCambiarContrasea.add(panelActualizar, BorderLayout.PAGE_END); //Se adiciona el objeto panelActualizar en panelCambiarContrasea ubicado al final del panel add(panelCambiarContrasea); //Se adiciona el panel panelAutentificacin en el frame principal

aceptar.addActionListener(new OyenteBotonAceptar2()); objeto oyente y se adiciona al objeto aceptar cancelar.addActionListener(new OyenteBotonCancelar2()); un objeto oyente y se adiciona al objeto cancelar

//Se

crea

un

//Se

crea

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Se habilita EXIT_ON_CLOSE en el frame principal

74

pack(); //Se importa el paquete frame setLocation(450,250); //Se localiza la ventana en las coordenadas especificadas setVisible(true); //El frame es visible setSize(330,180); //Se especifica el tamao del frame setResizable(false); }

class OyenteBotonAceptar2 implements ActionListener{ ejecuto una accin sobre el objeto usuario

//Se

public void actionPerformed (ActionEvent evento){

baseDatos bd = new baseDatos("proyectos","root","fedora"); generarse un evento se carga el nombre

//Al

//de la base de datos, el usuario y la contrasea

//de la base de datos String passBD = campoContraseaActual.getText(); la contrasea ingresada en el campoPassword en passBD bd.autentificacion(passBD); //Se llama a la funcin autentificacin accesoBD = bd.accesoBD; //Se carga el valor retornado por la funcin autentificacin if (accesoBD == true){ //Se accesoBD es true se oculta el frame de autentificacin //Se carga

75

setVisible(false); //por medio de setVisible(false) claveNueva = campoContraseaNueva.getText(); a la variable claveNueva la clave nueva ingresada por el usuario claveNuevaRepetir = campoContraseaNuevaRepetir.getText(); //Se asigna

//Se asigna a la variable claveNuevaRepetir la clave nueva ingresada por el usuario if (claveNueva.equals(claveNuevaRepetir)){ //Si

la clave nueva ingresada coincide con la que aparece en en campoClaveNuevaRepetir se actualiza la constrasea baseDatos bd2 = new baseDatos("proyectos","root","fedora"); //Al coincidir ambas claves ingresadas por el usuario se crea

//un nombre de la base de datos, el usuario y la contrasea

objeto

con

el

//de la misma bd2.actualizarContrasea(claveNueva); //Se llama a la funcin actualizacin para actualizar la contrasea JPanel panelCambioPermitido = new JPanel(); //Se muestra un mensaje indicando que la clave que la clave a sido actualizada

JOptionPane.showMessageDialog(panelCambioPermitido, "Su contrasea ha sido actualizada", "Acceso Permitido", JOptionPane.INFORMATION_MESSAGE); interfazContactor consola = new interfazContactor(); }else{ //En caso contrario JPanel panelErrorEnCambio = new JPanel(); //Se arroja un mensaje de error

76

JOptionPane.showMessageDialog(panelErrorEnCambio, "No coinciden los datos ingresados", "Cambio Denegado", JOptionPane.WARNING_MESSAGE); } }else{ //En caso de que accesoBD sea false JPanel panelCambioDenegado = new JPanel(); //Se arroja un mensaje de error JOptionPane.showMessageDialog(panelCambioDenegado, "Los datos ingresados son incorrectos", "Cambio Denegado", JOptionPane.WARNING_MESSAGE); } } }

class OyenteBotonCancelar2 implements ActionListener{ ejecuto una accin sobre el objeto cancelar public void actionPerformed (ActionEvent ev){ System.exit(0); //Se cierra la aplicacin } } } import javax.swing.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*;

//Se

//Se importa el paquete javax.swing //Se importa el paquete javax.swing.border //Se importa el paquete java.awt //Se importa el paquete awt.event

77

import javax.swing.event.*; import jPicUsb.*;

//Se importa el paquete swing.event //Se importa el paquete JPicUsb

import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities;

class interfazContactor extends JFrame{ private JTabbedPane panelAplicaciones; //-----Declaracin de paneles-----// private JPanel panelInterfaz; private JPanel panelInterfazDatosContactor; private JPanel panelInterfazLeyAmpere; private JPanel panelSalir; private JPanel panelGrafica; private JPanel panelFuerza; private JPanel panelGrafica2; //-Declaracin de JComboBox-// private JComboBox numeroEspiras; private JComboBox entreHierro; private JComboBox seccionTransversal; //-Declaracin de JSpinner-// private JSpinner intensidad; //-----Declaracin de Etiquetas-----// //Panel de datos del contactor

78

private JLabel numEsp; private JLabel eHierro; private JLabel sTrans; private JLabel iMagnetica; private JLabel dFlujoMagnetico; private JLabel fMagnetico; private JLabel inten; private JLabel grafico; private JLabel fObtenida; private JLabel fRequerida; //-----Declaracin de botones-----// private JButton procesar; private JButton salir; //--Declaracin de campo de texto--// private JTextField intensidadMagnetica; private JTextField densidadFlujoMagnetico; private JTextField flujoMagnetico; private JTextField fuerzaObtenida; private JTextField fuerzaRequerida; //----Declaracin de variables----// double H; Campo Magntico double B; Flujo Magntico double Flujo; double E = 0.5; 0,5 metros double miu = 0.000001256; ncleo //Permeabilidad del material del //Flujo Magntico //Entrehierro de //Densidad de //Intensidad

79

double A = 4; Seccin Transversal double i; circula por la bobina double i1; double in; double f = 60; double fuerza = 1; double N = 5000; bobina double FMM; Magnetomotriz (Ley de Ampere) double Reluctancia; entrehierro double CM=0.5; double DF; double FM; String[] numEspiras = {"5000", "5500", "6000"}; String[] numEntrehierro = {"0.5", "1", "1.5"}; String[] numArea = {"4", "5", "6"}; String intensidadSeleccionada; String numeroEspirasSeleccionadas; String numeroEntreHierroSeleccionado; String numeroAreaSeleccionado;

//Longitud del Lado de la

//Corriente

que

//Frecuencia de la red

//Nmero de espiras de la

//Fuerza

//Reluctancia

del

public byte Opcion01=1; OP01 public byte Opcion02=0;

//Variable de tipo byte comando

//Variable de tipo byte comando OP02

//Se desarrolla el constructor de la clase

80

interfazContactor(){

super("Consola de Control de Motor por Contactor"); coloca el titulo al frame "Consola de Control de Motor por Contactor" panelInterfaz = new JPanel(); //Se crea el objeto panel llamado panelInterfaz panelInterfazDatosContactor = new JPanel(); //Se crea el objeto panel llamado panelInterfazDatosContactor panelInterfazLeyAmpere = new JPanel(); //Se crea el objeto panel llamado panelInterfazVoltaje panelFuerza = new JPanel(); panelGrafica = new JPanel(); panelSalir = new JPanel(); panelGrafica2 = new JPanel(); panelAplicaciones = new JTabbedPane();

//Se

SpinnerNumberModel SpinnerNumberModel(0,0,200,1);

dataIntensidad

new

panelInterfazDatosContactor.add(inten = new JLabel("Intensidad (mA)")); panelInterfazDatosContactor.add(intensidad JSpinner(dataIntensidad)); = new

panelInterfazDatosContactor.add(numEsp = new JLabel("Numero Espiras (vueltas)")); panelInterfazDatosContactor.add(numeroEspiras JComboBox(numEspiras)); JComboBox al panelInterfazDatosContactor panelInterfazDatosContactor.add(eHierro (cm)")); = new JLabel("Entrehierro = new

//Se adiciona el objeto motor del tipo

81

panelInterfazDatosContactor.add(entreHierro JComboBox(numEntrehierro)); JComboBox al panelInterfazDatosContactor

new

//Se adiciona el objeto rpm del tipo

panelInterfazDatosContactor.add(sTrans = new JLabel("rea Secc. Transv. (cm2)")); panelInterfazDatosContactor.add(seccionTransversal JComboBox(numArea)); = new

//Se adiciona el objeto sentido del tipo

JComboBox al panelInterfazDatosContactor TitledBorder nombre1 = BorderFactory.createTitledBorder("Parmetros del Contactor:"); //Se aade ttulo al panel panelInterfazDatosContactor panelInterfazDatosContactor.setBorder(nombre1); panelInterfaz.add(panelInterfazDatosContactor, BorderLayout.NORTH); //Se adiciona el panelInterfazDatosContactor en el panelInterfaz y se fija en el Norte del panel

panelInterfazLeyAmpere.add(iMagnetica = new JLabel("In. Magntica (A.V/m)")); panelInterfazLeyAmpere.add(intensidadMagnetica = new JTextField(15)); //Se adiciona el objeto voltaje del tipo JTextField al panelInterfazRecepcinDatos intensidadMagnetica.setEditable(false); //Se declara que el objeto de tipo JTextField llamado voltaje no es editable panelInterfazLeyAmpere.add(dFlujoMagnetico = new JLabel("Dens. Flujo Magnetico (T)")); panelInterfazLeyAmpere.add(densidadFlujoMagnetico JTextField(13)); JTextField al panelInterfazRecepcinDatos densidadFlujoMagnetico.setEditable(false); = new

//Se adiciona el objeto voltaje del tipo

82

panelInterfazLeyAmpere.add(fMagnetico = new JLabel("Flujo Magnetico (W)")); panelInterfazLeyAmpere.add(flujoMagnetico = new JTextField(13)); //Se adiciona el objeto voltaje del tipo JTextField al panelInterfazRecepcinDatos flujoMagnetico.setEditable(false); //Se declara que el objeto de tipo JTextField llamado voltaje no es editable TitledBorder nombre2 = BorderFactory.createTitledBorder("Datos obtenidos por la Ley de Ampere:"); //Se aade ttulo al panel panelInterfazRecepcinDatos

panelInterfazLeyAmpere.setBorder(nombre2); panelInterfaz.add(panelInterfazLeyAmpere, BorderLayout.CENTER); //Se adiciona el panelInterfazRecepcinDatos en el panelInterfaz y se fija en el Centro del panel

panelFuerza.add(fRequerida = new JLabel("Fuerza Requerida (Newton)")); panelFuerza.add(fuerzaRequerida = new JTextField(13)); fuerzaRequerida.setEditable(false); panelFuerza.add(fObtenida = new JLabel("Fuerza Obtenida (Newton)")); panelFuerza.add(fuerzaObtenida = new JTextField(13)); fuerzaObtenida.setEditable(false); TitledBorder Ejercida:"); nombre3 = BorderFactory.createTitledBorder("Fuerza

//Se aade ttulo al panel panelInterfazEnviarDatos

panelFuerza.setBorder(nombre3); panelInterfaz.add(panelFuerza, BorderLayout.SOUTH); //Se adiciona el panelInterfazEnviarDatos en el panelInterfaz y se fija en el Sur del panel

panelSalir.add(salir = new JButton("Salir")); panelInterfaz.add(panelSalir, BorderLayout.AFTER_LINE_ENDS);

83

XYDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setVisible(false); panelGrafica.add(chartPanel);

panelAplicaciones.add("Interfaz Contactor",panelInterfaz); //Se adicional el panelInterfaz al frame panelAplicaciones.add("Interfaz Grfica 1",panelGrafica); panelAplicaciones.add("Interfaz Grafica 2", panelGrafica2);

add(panelAplicaciones);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Se habilita EXIT_ON_CLOSE en el frame principal pack(); //Se importa el paquete frame setLocation(100,250); //Se localiza la ventana en las coordenadas especificadas setVisible(true); //El frame es visible setSize(890,500); //Se especifica el tamao del frame setResizable(false);

intensidad.addChangeListener(new OyenteIntensidad());

84

numeroEspiras.addItemListener(new OyenteNumeroEspiras()); //Se crea un objeto oyente y se adiciona al objeto frecuenciaRedElectrica entreHierro.addItemListener(new OyenteEntreHierro()); //Se crea un objeto oyente y se adiciona al objeto numeroEspiras seccionTransversal.addItemListener(new OyenteSeccionTransversal()); //Se crea un objeto oyente y se adiciona al objeto sentido salir.addActionListener(new OyenteSalirDelSistema());

try{ iface.load(); //Carga la libreria dinmica jpicusb.dll

}catch(Exception e){ JPanel panelErrorJPICUSB = new JPanel(); //Se muestra un mensaje de error al cargar jpicusb.dll JOptionPane.showMessageDialog(panelErrorJPICUSB, "Error al cargar jpicusb.dll", "Por favor, revise los archivos dll", JOptionPane.INFORMATION_MESSAGE); } iface.set_instance(0); //Establece la instancia utilizada por defecto en toda llamada a un mtodo rpido iface.set_vidpid("vid_04d8&pid_000b");

class OyenteIntensidad implements ChangeListener{

85

public void stateChanged(ChangeEvent evento) { panelGrafica.removeAll();

intensidadSeleccionada = intensidad.getValue().toString(); i = Double.parseDouble(intensidadSeleccionada); CM = leyAmpere(i,N,E,A); XYDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setVisible(true); panelGrafica.add(chartPanel);

panelGrafica2.removeAll(); XYDataset dataset2 = createDataset2(); JFreeChart chart2 = createChart2(dataset2); ChartPanel chartPanel2 = new ChartPanel(chart2); chartPanel2.setVisible(true); panelGrafica2.add(chartPanel2); } }

class OyenteNumeroEspiras implements ItemListener{

public void itemStateChanged(ItemEvent evento) {

if (evento.getStateChange() == ItemEvent.SELECTED){ //Si se selecciono una opcin se procede numeroEspirasSeleccionadas = (String)evento.getItem(); N = Double.parseDouble(numeroEspirasSeleccionadas);

86

intensidad.setValue(0); intensidadMagnetica.setText(""); densidadFlujoMagnetico.setText(""); flujoMagnetico.setText(""); fuerzaObtenida.setText(""); } } }

class OyenteEntreHierro implements ItemListener{

public void itemStateChanged(ItemEvent evento) { if (evento.getStateChange() == ItemEvent.SELECTED){ //Si se selecciono una opcin se procede numeroEntreHierroSeleccionado = (String)evento.getItem(); E = Double.parseDouble(numeroEntreHierroSeleccionado); intensidad.setValue(0); intensidadMagnetica.setText(""); densidadFlujoMagnetico.setText(""); flujoMagnetico.setText(""); fuerzaObtenida.setText(""); } } }

class OyenteSeccionTransversal implements ItemListener{

public void itemStateChanged(ItemEvent evento) { if (evento.getStateChange() == ItemEvent.SELECTED){ //Si se selecciono una opcin se procede

87

numeroAreaSeleccionado = (String)evento.getItem(); A = Double.parseDouble(numeroAreaSeleccionado); intensidad.setValue(0); intensidadMagnetica.setText(""); densidadFlujoMagnetico.setText(""); flujoMagnetico.setText(""); fuerzaObtenida.setText(""); } } }

class OyenteSalirDelSistema implements ActionListener{ //Se ejecuto una accin sobre el objeto cancelar

public void actionPerformed (ActionEvent evento){ JPanel panelInformacionSalida = new JPanel(); //Se muestra un mensaje: Muchas Gracias JOptionPane.showMessageDialog(panelInformacionSalida, "Muchas gracias!", "Informacin", JOptionPane.INFORMATION_MESSAGE); comando(Opcion02); System.exit(0); //Se cierra la aplicacin } }

public double leyAmpere(double i, double N, double E, double A){ this.i = i; this.N = N;

88

this.E = E; this.A = A;

FMM = N*i; Reluctancia = (E)/(miu*(Math.pow(A/100,2))); Flujo = FMM/Reluctancia; B = Flujo/A; H = miu*B; fuerza = (3/2)*(Math.pow(B,2)*A)/miu;

String H1 = String.valueOf(H); intensidadMagnetica.setText(H1);

String B1 = String.valueOf(B); densidadFlujoMagnetico.setText(B1);

String Flujo1 = String.valueOf(Flujo); flujoMagnetico.setText(Flujo1);

fuerzaRequerida.setText("0.2"); String fuerza1 = String.valueOf(fuerza); fuerzaObtenida.setText(fuerza1);

if (fuerza >= 0.2){ comando(Opcion01); JPanel panelInformacionStatusContactor1 = new JPanel(); //Se muestra un mensaje: Contactor cerrado

JOptionPane.showMessageDialog(panelInformacionStatusContactor1, "Contactor Cerrado",

89

"Informacin", JOptionPane.INFORMATION_MESSAGE); }else{ comando(Opcion02); } return H; } public void comando(byte dato){ //Funcin de para enviar data va USB try{ byte[] out = {dato}; //El dato a trasmitir se carga en el arreglo de tipo byte llamado out iface.QWrite(out,1,1000); //Se procede a enviar el dato por el puerto USB }catch (Exception ex) { JPanel panelErrorTxUSB = new JPanel(); //Se muestra un mensaje de error de trasnmisin USB JOptionPane.showMessageDialog(panelErrorTxUSB, "Error en Transmisin USB", "Por favor, verifique la conexin", JOptionPane.INFORMATION_MESSAGE); } }

public XYDataset createDataset() { try{ CM = Double.parseDouble(intensidadMagnetica.getText()); DF = Double.parseDouble(densidadFlujoMagnetico.getText()); FM = Double.parseDouble(flujoMagnetico.getText());

90

}catch(Exception e){ }

XYSeries serie1 = new XYSeries("Campo Magntico"); XYSeries serie2 = new XYSeries("Densidad de Flujo"); XYSeries serie3 = new XYSeries("Flujo Magntico"); for (double t=0.0; t<=50.0; t+=0.2){ serie1.add(t, CM*Math.cos(2*3.14*60*t)); serie2.add(t, DF*Math.cos(2*3.14*60*t)); serie3.add(t, FM*Math.cos(2*3.14*60*t)); } XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(serie1); dataset.addSeries(serie2); dataset.addSeries(serie3); return dataset; }

public XYDataset createDataset2() { try{ CM = Double.parseDouble(intensidadMagnetica.getText()); }catch(Exception e){ } XYSeries serie1 = new XYSeries("Campo Magntico"); for (double t=0.0; t<=50.0; t+=0.2){ serie1.add(t, CM*Math.cos(2*3.14*60*t)); } XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(serie1); return dataset;

91

public JFreeChart createChart(XYDataset dataset) { JFreeChart chart = ChartFactory.createXYLineChart( "Grficas", // chart title "Tiempo", // x axis label "Amplitud", // y axis label dataset, // data PlotOrientation.VERTICAL, true, // include legend true, // tooltips false // urls ); return chart; }

public JFreeChart createChart2(XYDataset dataset2) { JFreeChart chart2 = ChartFactory.createXYLineChart( "Grfica Campo Magntico", // chart title "Tiempo", // x axis label "Amplitud", // y axis label dataset2, // data PlotOrientation.VERTICAL, true, // include legend true, // tooltips false // urls ); return chart2; }}

92

ANEXO B. CONTENIDO 1. Cdigo fuente desarrollado en CCS C PGINA 94

93

//***********************************************************************// //------------------------------------Programa de Control de Motores DC--------------------------// //***********************************************************************// #include <18F2550.h> #fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,HS,P UT,BROWNOUT,NOCPD,NOWRT #use delay(clock=20000000) #include <LCD9.c> #byte STATUS=0XFD8 #byte PORTA=0XF80 #byte PORTB=0XF81 #byte PORTC=0XF82 #define USB_HID_DEVICE FALSE HID #define USB_EP1_TX_ENABLE USB_ENABLE_BULK EP1(EndPoint1) for IN bulk/interrupt transfers #define USB_EP1_RX_ENABLE USB_ENABLE_BULK EP1(EndPoint1) for OUT bulk/interrupt transfers #define USB_EP1_TX_SIZE 32 buffer #define USB_EP1_RX_SIZE 32 buffer #define ALL_OUT 0X00 #define ALL_INPUT 0XFF #define buffer_full 89 setup_adc_ports(NO_ANALOG); (No Analgicos) #include <pic18_usb.h> #include "usb_desc_scope.h" //Se incluye la libreria PIC_18_USB //Se incluye la libreria USB_DESC_SCOPE //Se define el valor 0X00 como ALL_OUT //Se define el valor 0XFF como ALL_INPUT //Se define el valor 89 como buffer_full //Se configuran los puertos como digitales //size to allocate for the RX endpoint 1 //Size to allocate for the TX endpoint 1 //Turn on //Turn on //Cristal de 20 MHz //Libreria para enviar datos a pantalla LCD //Posicin del registro STATUS //Posicin del registro PORTA //Posicin del registro PORTB //Posicin del registro PORTC //Deshabilitamos el uso de las directivas

94

//#include "header.h" #include <usb.c> //Se incluye la libreria USB

//***********************************************************************// //------------------------------------Declaracin de Variables----------------------------------------// //***********************************************************************// const int8 Lenbuf = 32; int8 recbuf[lenbuf]; char mensaje [] = "Enviado"; char mensaje1 [] = "Recibido"; char comando[3]; //***********************************************************************// //---------------------------------------Programa Principal--------------------------------------------// //***********************************************************************// void main(){ set_tris_a(ALL_OUT); set_tris_b(ALL_OUT); set_tris_c(ALL_OUT); PORTA=0; PORTB=0; PORTC=0; setup_timer_2(T2_DIV_BY_16,255,1); //Se configura el TIMER 2 setup_ccp1(CCP_PWM); //Se configura el modulo PWM1 //Se configura el puerto A como salida //Se configura el puerto B como salida //Se configura el puerto C como salida

//***********************************************************************// //-----------------------------------------Inicio del Programa------------------------------------------// //***********************************************************************// lcd_init(); usb_init(); usb_task(); usb_wait_for_enumeration(); lcd_putc("\f"); //Inicializa la pantalla LCD //Inicializamos el puerto USB //Habilita el puerto USB y las interrupciones //El Host procede a configurar el PicUSB //Se limpia la pantalla LCD

95

lcd_putc("Sist de Arranque" ); lcd_putc("\n"); lcd_putc(" de Motores DC"); delay_ms(5000); while (TRUE){ if (usb_enumerated()){ if (usb_kbhit(1)){

//Se enva mensaje a la pantalla LCD //Salto de lnea //Se enva mensaje a la pantalla LCD //El mensaje anterior se muestra por un lapso de 5s //Ciclo infinito //Si el PicUSB se encuentra configurado //Si el endpoint de salida contiene datos del host //Se almacenan los paquetes de datos //Si rebuf[0]=1, se almacena el comando M11

usb_get_packet(1, recbuf, Lenbuf); if (recbuf[0] == 1){ output_high(PIN_C6); Set_pwm1_Duty(409); lcd_putc("\f"); lcd_putc(" Motor Activo"); } if (recbuf[0] == 0){ output_low(PIN_C6); lcd_putc("\f"); lcd_putc(" Motor Desactivo"); } } } } }

//Se limpia la pantalla LCD //Se enva mensaje a la pantalla LCD

//Si rebuf[0]=2, se almacena el comando M12

//Se limpia la pantalla LCD //Se enva mensaje a la pantalla LCD

96

Вам также может понравиться