Upload
independent
View
0
Download
0
Embed Size (px)
Citation preview
Electrónica de Potencia Profesor M.C. Bernardo Haro Martínez
Proyecto de Riego y Ventilación Automatizado
21 DE AGOSTO DE 2015
JAVIER FERNANDO MÁRQUEZ FRANCO VÍCTOR HUGO MEDINA JIMÉNEZ
JUAN JOSÉ GARCÍA TREJO
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
Introducción
La agricultura es una actividad primordial de la sociedad humana, y la
automatización puede ser una herramienta muy útil para su desempeño eficiente,
es por esto que el propósito de nuestro proyecto es utilizar un micro‐controlador
para medir parámetros tales como humedad y temperatura, y de esta manera saber
que estos se encuentren dentro de los limites adecuados para la mejor utilización de
los recursos y al recibir esta información el programa del micro, si fuera necesario
activara dispositivos periféricos para modificar estos parámetros.
Mediante un sensor de humedad en el suelo y uno de temperatura,
programamos un firmware para nuestro micro, para que una vez que estos detecten
ciertos valores establecidos, los cuales pueden ser modificados según las
necesidades específicas, se activen nuestro módulos de potencia, los cuales al recibir
la señal del micro, activaran un ventilador para reducir la temperatura y una bomba
de agua para regar la tierra y aumentar la humedad en el suelo.
Lo más importante de este proyecto es el conocimiento alcanzado en la
cuestión de la tecnología de los sistemas embebidos, tema extenso y nada fácil,
sumado a el conocimiento adquirido en lenguaje de programación en C++, todo esto
nace de la inquietud despertada en la materia de Electrónica de Potencia y las clases
tan interesantes impartidas por el Profesor Bernardo Haro.
Aunado a esto integramos un circuito de alimentación de energía solar,
mediante la instalación de un mini panel FV, el cual regulamos a un voltaje adecuado
para alimentar nuestro micro‐controlador, esto como parte de la integración de lo
que realmente es nuestro fin, la energía renovable y su utilización de manera
práctica.
A continuación se definen las partes que componen este proyecto así como
su programación C++ en el programa ATMEL Studio 6.2
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
MICROCONTROLADOR ATMEL ATmega328P
1. Configuración de Pin
1.1 Descripción de Pin
1.1.1 VCC
Alimentación de voltaje.
1.1.2 GND
Tierra.
1.1.3 Puerto B (PB7:0) XTAL1/XTAL2/TOSC1/TOSC2
El Puerto B es un puerto de Entradas y Salidas (I/O) bidireccional de 8 bits con
resistores internos tipo pull‐up (de levantamiento; seleccionados para cada bit). Los buffers
(reguladores) de salida del Puerto B tienen características de control simétricas, tanto con
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
alto sink (drenaje; en este tipo, el negativo de la fuente se usa como común para todas las
entradas y el positivo se envía a los elementos de campo) como con capacidad de source
(fuente; en este tipo, el positivo se usa como común para todas las entradas y el negativo
se envía a los elementos de campo). Como entradas, los pin del Puerto B que son atraídos
a nivel bajo tendrán corriente de la fuente si los resistores pull‐up son activados. Los pin del
Puerto B son tri‐estado (permite a los puertos de salida tener valores de 0, 1 o Hi‐Z) cuando
en una condición de reset (reinicio) se activan, incluso si el temporizador no está
funcionando.
Hi‐Z o alta impedancia, es el estado lógico, en el que el pin no tiene relevancia en el
circuito con el fin de permitir a varios circuitos compartir el mismo bus o línea de salida, o
permitir monitorear señales sin afectarlas, tal es el caso en un convertidor de señal
analógica a señal digital.
Dependiendo de la selección en la configuración de fusibles del reloj, PB6 puede ser
utilizado como entrada al amplificador de oscilación invertida y de entrada al circuito
operativo del reloj interno.
Dependiendo de la selección en la configuración de fusibles del reloj, PB7 puede ser
utilizado como salida desde el amplificador de oscilación invertida. Si el oscilador RC interno
y calibrado es usado como fuente de reloj para el chip, PB7…6 es usado como entrada
TOSC2…1 para el Contador Temporal Asíncrono 2 si el bit AS2 se establece en ASSR.
1.1.4 Puerto C (PC5:0)
El Puerto C es un puerto bidireccional de I/O de 7 bit con resistores internos tipo
pull‐up (seleccionados para cada bit). Los bufers de salida de PC5…0 tienen características
de control simétrico tanto con alto sink (drenaje; en este tipo, el negativo de la fuente se
usa como común para todas las entradas y el positivo se envía a los elementos de campo)
como con capacidad de source (fuente; en este tipo, el positivo se usa como común para
todas las entradas y el negativo se envía a los elementos de campo). Como entradas, los pin
del Puerto C que son externamente atraídos a nivel bajo tendrán corriente de la fuente si
los resistores pull‐up son activados. Los pin del Puerto C son tri‐estado (permite a los
puertos de salida tener valores de 0, 1 o Hi‐Z) cuando en una condición de reset (reinicio)
se activan, incluso si el temporizador no está funcionando.
Hi‐Z o alta impedancia, es el estado lógico, en el que el pin no tiene relevancia en el
circuito con el fin de permitir a varios circuitos compartir el mismo bus o línea de salida, o
permitir monitorear señales sin afectarlas, tal es el caso en un convertidor de señal
analógica a señal digital.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
1.1.5 PC6 / RESET
Si el fusible RSTDISBL está programado, PC6 es utilizado como pin de I/O. Note que
las características eléctricas de PC6 difiere del resto de los pin del Puerto C. Si el fusible
RSTDISBL está desprogramado, PC6 es utilizado como una entrada de Reset (Reinicio). Un
nivel bajo para este pin tan largo como la longitud del pulso mínimo generara un Reset,
incluso si el reloj no está corriendo.
La longitud del pulso mínimo esta dado en la siguiente tabla. Pulsos más cortos no
garantizan que se genere un Reset.
Nota:
1. Los valores mostrados en la tabla anterior son solo una guía.
2. El Reset del Encendido no trabajará a menos que el voltaje de suministro este por
debajo de VPOT (falling).
1.1.6 Puerto D (PD7:0)
El Puerto D es un puerto bidireccional de I/O de 8 bit con resistores internos tipo
pull‐up (seleccionados para cada bit). Los bufers de salida del Puerto D tienen características
de control simétrico tanto con alto sink (drenaje; en este tipo, el negativo de la fuente se
usa como común para todas las entradas y el positivo se envía a los elementos de campo)
como con capacidad de source (fuente; en este tipo, el positivo se usa como común para
todas las entradas y el negativo se envía a los elementos de campo). Como entradas, los pin
del Puerto D que son externamente atraídos a nivel bajo tendrán corriente de la fuente si
los resistores pull‐up son activados.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
Los pin del Puerto D son tri‐estado (permite a los puertos de salida tener valores de
0, 1 o Hi‐Z) cuando en una condición de reset (reinicio) se activan, incluso si el temporizador
no está funcionando.
Hi‐Z o alta impedancia, es el estado lógico, en el que el pin no tiene relevancia en el
circuito con el fin de permitir a varios circuitos compartir el mismo bus o línea de salida, o
permitir monitorear señales sin afectarlas, tal es el caso en un convertidor de señal
analógica a señal digital.
1.1.7 AVCC
AVCC es el pin de voltaje de suministro para el Conversor A/D, PC3:0, y ADC7:6. Debe
ser conectado externamente a VCC, incluso si el ADC no está en uso. Si el ADC esta siendo
utilizado, debe de ser conectado a VCC a través de un filtro pasa bajos. Note que PC6…4
utilizan un suministro de voltaje digital, VCC.
1.1.8 AREF
AREF es el pin de referencia analógica para el Conversos A/D.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
2. USART0
2.1 Generalidades El Transmisor‐Receptor Serial Síncrono‐Asíncrono Universal (USART ‐ Universal
Synchronous and Asynchronous Serial Receiver and Transmitter) es un dispositivo de
comunicación serial altamente flexible. A continuación se presenta un diagrama a bloques
simplificado del Transmisor USART. Los registros de I/O y pin de I/O accesibles al CPU se
muestran en letra bold.
2.1.2 Diagrama de Bloques
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
2.2 Descripción de Registros
2.2.1 UDR0 – Registro de Datos de I/O de USART
El registro del buffer de transmisión de datos USART y el registro del buffer de
recepción de datos USART comparten la misma dirección de I/O denominado como Registro
de Datos USART o UDRn. El registro del buffer de transmisión (TXB) será el destino de los
datos escritos en la ubicación del registro UDRn. Al leer la ubicación del registro UDRn
regresará el contenido del registro del buffer de datos recibidos (RXB).
2.2.2 UCSRnA – Registro A de Control y Estado de USART
Bit 7 – RXCn: Recepción Completa de USART
Este bit de bandera se activa cuando hay datos ilegibles en el buffer receptor y se
limpia cuando el buffer receptor esta vacío. Si el receptor esta deshabilitado, el
buffer receptor será eliminado y consecuentemente el bit RXCn se convertirá en
cero. La bandera RXCn puede ser utilizado para generar una interrupción completa
de recepción.
Bit 6 – TXCn: Transmisión completa de USART
Este bit de bandera se activa cuando el marco completo del registro de intercambio
del transmisor ha sido desplazado fuera y no se tienen nuevos datos presentes en el
buffer de transmisión (UDRn). El bit de bandera TXCn se limpia automáticamente
cuando una interrupción completa de transmisión es ejecutada, o puede ser
liberada por escribir un uno a su bit de dirección. La bandera TXCn puede generar
una interrupción completa de transmisión.
Bit 5 – UDREn: Registro de Datos Vacío de USART
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
La bandera UDREn indica si la memoria intermedia de transmisión (UDRn) está
preparado para recibir nuevos datos. Si UDREn es Uno, la memoria intermedia está
vacía, y por lo tanto lista para escribir en ella. La bandera UDREn puede generar una
interrupción de registro de datos vacío. UDREn se establece después de un reset
para indicar que el transmisor está listo.
Bit 1 – U2Xn: Doblar la velocidad de Transmisión del USART
Este bit solo tiene efecto para la operación asíncrona. Escribir Cero en este bit
cuando se utilicen operaciones síncronas. Escribir Uno en este bit reducirá la
velocidad de baudios en una división efectiva de 16 a 8, doblando la velocidad de
transmisión para la comunicación asíncrona.
Bit 0 – MPCMn: Modo de comunicación multiproceso
Este bit habilita el modo de comunicación multiproceso. Cuando al bit MPCMn se le
escribe Uno, todos los marcos entrantes que son recibidos por el Receptor USART
que no contienen información direccionada serán ignorados.
2.2.3 UCSRnB ‐ Registro B de Control y Estado de USART
Bit 7 – RXCIEn: Habilitación de interrupción de RX completada.
Escribiendo un Uno en este bit permitirá interrumpir en la bandera RXCn. Una
interrupción completa de recepción USART se genera sólo si al bit RXCIEn se le
escribe un Uno, el indicador global de interrupción en SREG se escribirá en Uno y el
bit RXCn se establecerá en UCSRnA.
Bit 6 – TXCIEn: Habilitación de interrupción de TX completada.
Escribiendo un Uno en este bit permitirá interrumpir en la bandera TXCn. Una
interrupción completa de transmisión USART se genera sólo si al bit TXCIEn se le
escribe un Uno, el indicador global de interrupción en SREG se escribirá en Uno y el
bit TXCn se establecerá en UCSRnA.
Bit 5 – UDRIEn: Habilitación de interrupción del registro de datos vacío de USART.
Escribiendo un Uno en este bit permitirá interrumpir en la bandera UDREn. Un
registro de datos de interrupción vacío se genera sólo si al bit UDRIEn se escribe un
Uno, al indicador global de interrupción en SREG se le escribe un Uno y el bit UDREn
se fijará en UCSRnA.
Bit 4 – RXENn: Habilitación de Receptor.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
Escribiendo un Uno en este bit habilitará el Receptor USART. El Receptor anulará la
operación normal del puerto para el pin RxDn cuando está activado. La desactivación
del Receptor vaciará el búfer de recepción invalidando las Banderas FEn, DORn, y
UPEn.
Bit 3 – TXENn: Habilitación de Transmisor.
Escribiendo un Uno en este bit habilita el Transmisor USART. El Transmisor anulará
la operación normal del puerto para el pin TxDn cuando está activado. La
desactivación del Transmisor (escrito TXENn a Cero) no será efectiva hasta que se
completen las transmisiones en curso y pendientes, es decir, cuando la transmisión
de registro en y el Registro del Buffer de Transmisión no contengan datos a
transmitir. Cuando está desactivado, el Transmisor ya no anulará el puerto TxDn.
Bit 2 – UCSZn2: Tamaño de Palabra.
El bit UCSZn2 combinado con los bits UCSZn1:0 en UCSRnC fijaran el número de bits
de datos (Tamaño de Palabra) en un marco utilizado por el Receptor y el Transmisor.
Bit 0 – TXB8n: Transmisor de datos Bit 8 (Noveno Bit).
TXB8n es el noveno bit de datos en los caracteres a ser transmitidos cuando se opera
con marcos seriales con nueve bits de datos. Debe ser escrito antes de disminuir los
bits escritos en UDRn.
2.2.4 UCSRnC ‐ Registro C de Control y Estado de USART
Bit 7:6 – UMSELn1:0 _ Modo de selección de USART.
Estos bits seleccionan el modo de operación del USART tal y como se muestra a
continuación:
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
Bit 5:4 – UPMn1:0 _ Modo de Paridad de Datos.
Estos bits habilitan y fijan el tipo de generación y revisión de paridad. Si se habilita,
el Transmisor automáticamente generará y fijará la paridad de los bits de datos
transmitidos junto con cada marco. El Receptor generará un valor de paridad para
los datos entrantes y los comparará con la configuración UPMn. Si se detecta un
desajuste, la bandera UPEn se fijará en UCSRnA.
Bit 3 – USBSn _ Selección de Bit de Paro (Stop).
Este bit selecciona el número de bits de paro a ser insertados por el Transmisor. El
Receptor ignora esta configuración.
Bit 2:1 – UCSZn1:0 _ Tamaño de palabra.
Los bits UCSZn1:0 combinados con el bit UCSRnB fijan el número de bits de datos
(Tamaño de Palabra) en un marco que utiliza en Receptor y Transmisor.
Bit 0 – UCPOLn _ Polaridad del reloj.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
Este bit se utiliza solamente para el modo sincronizado. Escribir Cero en este bit
cuando se utilice el modo asíncrono. El bit UCPOLn fija la relación entre el cambio
de datos de salida y el muestreo de datos de entrada, así como el reloj síncrono
(XCKn).
2.2.5 UBRRnL and UBRRnH ‐ Registro de Velocidad en Baudios de USART
Bit 11:0 – UBRR [11:0] Registro de Velocidad en Baudios de USART.
Este es un registro de 12 bits los cuales contienen el USART de velocidad en baudios.
El UBRRnH contiene los cuatro bits más significativos, y el UBRRnL contiene los ocho
bits restantes del USART de velocidad en baudios. Transmisiones salientes por el
Transmisor y Receptor estarán corruptas si la velocidad de baudios es cambiada.
Escribir en UBRRnL disparará una actualización inmediata en la pre escala de la
velocidad en baudios.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
3. Convertidor Analógico a Digital (ADC)
3.1 Generalidades El ATmega328P cuenta con un ADC de aproximación sucesiva de 10 bits. El ADC está
conectado a un multiplexor analógico de 8 canales que permite ocho entradas de un solo
extremo de voltaje construidas a partir de los pin del puerto A. Las entradas de un solo
extremo de voltaje se refieren a 0V (GND). El ADC contiene un circuito de muestreo y
retención que asegura que el voltaje de entrada al ADC se mantenga a un nivel constante
durante la conversión.
El ADC convierte un voltaje de entrada analógica a un valor digital de 10 bits a través
de la aproximación sucesiva. El valor mínimo representa GND y el valor máximo representa
el voltaje en el pin AREF menos 1 LSB. Opcionalmente, AVCC o un voltaje interno de
referencia de 1.1V se pueden conectar al pin AREF escribiendo a los bits REFSn en el Registro
ADMUX. La referencia de voltaje interno puede por lo tanto ser desacoplado por un
condensador externo en el pin AREF para mejorar la inmunidad al ruido.
3.2 Diagrama Esquemático de Operación El canal de entrada analógica se selecciona por escrito a los bits MUX en ADMUX.
Cualquiera de los pines de entrada ADC, así como GND y una referencia de voltaje fija de la
banda prohibida, se pueden seleccionar como entradas asimétricas al ADC. El ADC se
habilita activando el bit ADC Enable, ADEN en ADCSRA. Selecciones de referencia de voltaje
y los canales de entrada no entrarán en vigor hasta que ADEN esté activo. El ADC no
consume energía cuando ADEN se borra, por lo que se recomienda apagar el ADC antes de
entrar en los modos de suspensión de ahorro de energía.
El ADC genera un resultado de 10 bits que se presenta en los registros de datos del
ADC, ADCH y ADCL. Por defecto, el resultado se presenta ajustado a la derecha, pero
opcionalmente se puede presentar ajustado a la izquierda activando el bit ADLAR en
ADMUX.
Si el resultado se deja ajustado a la izquierda y no se requiere precisión de más de 8
bits, es más que suficiente para leer ADCH. De lo contrario, ADCL debe leerse primero, a
después ADCH, para asegurar que el contenido de los registros de datos pertenece a la
misma conversión. Una vez sea leído ADCL, se bloquea el acceso a los registros de datos
ADC. Esto significa que si ADCL ha sido leído, y una conversión se completa antes de leer
ADCH, el registro no se actualiza y el resultado de la conversión se pierde. Cuando se lee
ADCH, el acceso ADC a los registros ADCH y ADCL se vuelve a habilitar.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
El ADC tiene su propia interrupción que puede ser activada cuando una conversión
se completa. Cuando se prohíbe el acceso ADC para los registros de datos entre la lectura
de ADCH y ADCL, la interrupción se disparará incluso si el resultado se pierde.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
3.3 Descripción de los Registros del ADC
3.3.1 ADMUX – Registro Multiplexor de Selección del ADC
Bit 7:6 – REFS [1:0] _ Bits de Selección de Referencias.
Estos bits seleccionan el voltaje de referencia para el ADC, como se muestra en la
Tabla siguiente. Si se cambian estos bits durante una conversión, el cambio no va a
surtir efecto hasta que la conversión sea completa (ADIF en ADCSRA está fijo). Las
opciones de referencia de voltaje interno no pueden ser utilizadas si se aplica un
voltaje de referencia externa al pin AREF.
Bit 5 – ADLAR _ Ajuste del Resultado del ADC a la Izquierda.
El bit ADLAR afecta a la presentación del resultado de la conversión ADC en el
registro de datos ADC. Escribir un Uno en bit ADLAR ajusta el resultado a la izquierda.
De lo contrario, el resultado se ajusta a la derecha. Al cambiar el bit ADLAR se
afectará el registro de datos ADC de inmediato, independientemente de las
conversiones en curso.
Bits 3:0 – MUX [3:0] _ Bits de Selección de Canal Analógico.
El valor de estos bits selecciona qué entradas analógicas están conectadas al ADC.
Ver Tabla siguiente para obtener más información. Si se cambian estos bits durante
una conversión, el cambio no va a surtir efecto hasta que la conversión sea completa
(ADIF en ADCSRA está fijo).
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
Nota: 1. Para sensor de temperatura.
3.3.2 ADCSRA – Registro A de Control y Estado de ADC
Bit 7 – ADEN _ Habilitación de ADC.
Escribiendo un Uno en este bit habilitará al ADC. Al escribir un Cero, el ADC está
desactivado. Desactivando el ADC mientras una conversión está en curso, terminará
esta conversión.
Bit 6 – ADSC _ Inicio de Conversión de ADC.
En el modo de conversión individual, escribir un Uno en este bit comenzará cada
conversión. En el modo de funcionamiento libre, escribir un Uno en este bit iniciará
la primera conversión. La primera conversión una vez que se ha escrito en ADSC
después de que el ADC ha sido activado, o si el ADSC es escrito en el mismo tiempo
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
que el ADC se activa, tomará 25 ciclos de reloj del ADC en lugar del tiempo normal
que es de 13. Esta primera conversión realiza la inicialización de la ADC.
Bit 5 – ADATE _ Habilitación de Auto Disparo de ADC.
Cuando se escribe un Uno a este bit, el Auto Disparo del ADC se habilita. El ADC
iniciará una conversión en un flanco positivo de la señal de disparo seleccionada. La
fuente de disparo se selecciona ajustando los bits ADC Selección de Disparo, ADTS
en ADCSRB.
Bit 4 – ADIF _ Bandera de Interrupción de ADC.
Este bit se fija cuando una conversión ADC es completada y los registros de datos se
actualizan. La Interrupción de Conversión Completada del ADC se ejecuta si el bit
ADIE y el I‐bit en SREG se fijan. ADIF se borra por el hardware al ejecutar el vector
de manejo de interrupciones correspondiente. Alternativamente, ADIF se borra
escribiendo un Uno lógica en la bandera. Ten en cuenta que si hace un Leer‐
Modificar‐Escribir en ADCSRA, una interrupción pendiente se puede desactivar. Esto
también se aplica si se utilizan las instrucciones SBI y la CBI.
Bit 3 – ADIE _ Habilitación de Interrupción de ADC.
Cuando se escribe un Uno en este bit y el I‐bit en SREG se fija, la interrupción de
Conversión Completada del ADC se activa.
Bits 2:0 – ADPS [2:0] _ Bits de Selección Pre escalar de ADC.
Estos bits determinan el factor de división entre la frecuencia del reloj del sistema y
la entrada del reloj al ADC.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
3.3.3 ADCSRB – Registro B de Control y Estado de ADC
Bit 6 – ACME _ Habilitación del Multiplexor para Comparación Analógica.
Cuando a este bit se le escribe un Uno lógico y el ADC está apagado (ADEN en
ADCSRA es Cero), el multiplexor ADC selecciona la entrada negativa hacia el
comparador analógico. Cuando a este bit se le escribe un Cero lógico, AIN1 se aplica
a la entrada negativa del comparador analógico.
Bit 2:0 – ADTS [2:0] _ Fuente de Auto Disparo de ADC.
Si ADATE en ADCSRA se le escribe Uno, el valor de estos bits selecciona qué fuente
disparará una conversión en el ADC. Si ADATE se borra, los ajustes en ADTS [2: 0] no
tendrán ningún efecto. Una conversión será accionada por el flanco ascendente de
la bandera de interrupción seleccionada. Note que el cambio de una fuente de
disparo que se ha borrado a una fuente de disparo que está establecida, generará
un flanco positivo en la señal de disparo. Si ADEN en ADCSRA se establece, esto
comenzará una conversión. Cambiar al modo de funcionamiento libre (ADTS [2: 0] =
0) no causará un evento de disparo, incluso si la interrupción de la bandera de ADC
se establece.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
3.3.4 DIDR0 – Registro 0 de Entrada Digital Deshabilitada
Bit 5:0 – ADC5D…ADC0D: ADC5…0 Deshabilitación de Entrada Digital.
Cuando a este bit se le escribe un Uno lógico, la memoria intermedia de entrada
digital en el pin ADC correspondiente se desactiva. El bit del Registro PIN
correspondiente siempre se leerá como Cero cuando se establece este bit. Cuando
se aplica una señal analógica al pin ADC5...0 y la entrada digital de este pin no se
necesita, este bit debe ser escrito en Uno lógico para reducir el consumo de energía
en el buffer de entrada digital. Note que los pins ADC7 y ADC6 del ADC no tienen
buffers de entrada digital, y por ello no requieren de bits de Deshabilitación de
Entrada Digital.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
SENSOR DE HUMEDAD DEL SUELO
1. Diagrama Esquemático
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
2. Código de Programación en Lenguaje C++ (ATMEL Studio)
2.1 Monitoreo por Comunicación Serial a Puerto USB de Computadora
/* * Humedad.c * * Created: 19/08/2015 13:26:55 p.m. * Author: Electrónica de Potencia * Márquez Franco, Javier Fernando * Medina Jiménez, Víctor Hugo * García Trejo, Juan José */ /* ===================== Declaración de velocidad de CPU ===================== */ #define F_CPU 14745600 /*Orden que define la velocidad del reloj del procesador*/ /* ===================== Declaración de Librerias ===================== */ #include <avr/io.h> /*libreria que hace referencia a todas las palabras reservadas para el control de los puertos de entrada y salida*/ #include <string.h> /*libreria que contiene la definición de macros, constantes, funciones y tipos y algunas operaciones de manipulación de memoria*/ #include <stdio.h> /*"standar input‐ouput header", es la libreria que contiene las declaraciones de funciones de la biblioteca estándar del lenguaje C para hacer operaciones de entrada y de salida así como la definición de tipos, necesarias para dichas operacones*/ #include <stdlib.h> /*"standard library", es la libreria que contiene los prototipos de funciones C para la gestión de memoria dinámica, control de procesos*/ #include <avr/interrupt.h> /*libreria que hace referencia a la manipulación global de las banderas de interrupción*/ #include <util/delay.h> /*libreria que hace referencia a funciones de bucles de retardo/espera*/ /* ===================== Declaración de Variables ===================== */ unsigned int adc_valor=0; /*"unsigned integers", variables similares a los ints en la forma de que almacenan un valor de 2 byte, sin embargo no almacenan números negativos, solamente positivos y cuenta con un rango de uso desde Cero hasta 65,535*/ /*int: variables enteras que almacenan números enteros (tanto positivos como negativos) dentro de los límites de cada uno de sus tamaños, toma valores desde ‐2,147,483,648 hasta 2,147,483,647*/ char printbuff[100]; /*char: Tipo de datos que ocupa 1 byte de memoria que almacena un valor de carácter, números muy pequeños y juego de caracteres ASCII*/
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
/*printbuff: Variable en stream que muestra 'x'número de líneas en un búfer. Cada línea rota integra 2 grupos de caracteres hexadecimales(HEX) seguidos por 2 grupos de caracteres ASCII*/ /* ===================== Declaración de Funciones ===================== */ void ports_setup(); void USART_setup(); void ADC_setup(); /*void: palabra clave que especifica que la función no devuelve ningún valor. Cuando se utiliza para la lista de parámetros de una función, void especifica que la función no toma ningún parámetro. Cuando se utiliza en la declaración de un puntero, void especifica que el puntero es "universal"; en este caso, void especifíca tres punteros de forma universal*/ int printCHAR(char character, FILE *stream); FILE uart_str = FDEV_SETUP_STREAM(printCHAR, NULL, _FDEV_SETUP_RW); /*la función print envía el formato de salida especificado a la salida estándar, en este caso ejerce la función para impresión de datos en puerto serial, se da de alta aquí para poder hacer uso de ella en cualquier otra parte de este programa*/ /* ===================== Subrutinas de Funciones ===================== */ void ports_setup() //Definición de puertos a utilizar { DDRC = 0x00; //Habilitación de ADC de Puerto C como entrada, con Ceros DDRD = 0x02; /*Habilitación de Comunicación Serial en Puerto D como Salida (RX‐entrada y TX‐salida)*/ DDRB = 0x3F; PORTB = 0x00; } void USART_setup() //Configuración de Registros de Comunicación Serial { UCSR0A = (0<<TXC0)|(0<<U2X0)|(0<<MPCM0); /*Registro UCSR0A: TXC0 ‐ Bit de transmisión completa; U2X0 ‐ Doblar la velocidad de transmisión; MPCM0 ‐ Modo de Comunicación Multiproceso*/ UCSR0B = (0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(1<<RXEN0)|(1<<TXEN0)| (0<<UCSZ02)|(0<<TXB80); /*Registro UCSR0B: RCCIE0 ‐ Habilitación de interrupción de RX completada; TXCIE0 ‐ Habilitación de interrupción de TX completada; UDRIE0 ‐ Habilitación de interrupción del registro de datos vacíos de USART; RXEN0 ‐ Habilitación de Receptor; TXEN0 ‐ Habilitación de Transmisor; UCSZ02 ‐ Tamaño de Palabra, combinado con UCSZ01 y UCSZ00; TXB80 ‐ Transmisor de datos Bit 8 (noveno bit)*/ UCSR0C = (0<<UMSEL01)|(0<<UMSEL00)|(0<<UPM01)|(0<<UPM00)|(0<<USBS0)| (1<<UCSZ01)|(1<<UCSZ00)|(0<<UCPOL0); /*Registro UCSR0C: UMSEL0[1:0] ‐ Modo de selección síncrona o asíncrona;
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
UPM0[1:0] ‐ Modo de selección de paridad de datos; USBS0 ‐ Selección de bit de paro (stop); UCSZ0[1:0] ‐ Tamaño de palabra, combinado con UCSZ02; UCPOL0 ‐ Polaridad del reloj*/ UBRR0 = 95; /*UBRR0 ‐ Registro USART de Velocidad en Baudios, se elige a 9600 baudios por segundo con el código 0d71[0x47] de acuerdo a la velocidad del reloj dado de alta al inicio de la compilación*/ } void ADC_setup() //Configuración de Convertidor Analógico a Digital { ADMUX = (0<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)| (1<<MUX0); /*Registro AMUX: REFS[1:0] ‐ Bits de Selección de Referencias; ADLAR ‐ Ajuste del Resultado del ADC, Uno ajusta a la Izquierda, Cero a la derecha; MUX[3:0] ‐ Bits de Selección de Canal Analógico*/ ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(0<<ADIF)|(1<<ADIE)|(1<<ADPS2)| (1<<ADPS1)|(0<<ADPS0); /*Registro ADCSRA: ADEN ‐ Habilitación de ADC; ADSC ‐ Inicio de la Conversión del ADC; ADATE ‐ Habilitación de Auto Disparo de ADC; ADIF ‐ Bandera de Interrupción de ADC; ADIE ‐ Habilitación de Interrupción de ADC; ADPS[2:0] ‐ Bits de Selección Pre escalar de ADC*/ ADCSRB = (0<<ACME)|(0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0); /*Registro ADCSRB: ACME ‐ Habilitación del Multiplexor para Comparación Analógica; ADTS[2:0] ‐ Fuente de Auto Disparo de ADC*/ DIDR0 = (0<<ADC5D)|(0<<ADC4D)|(0<<ADC3D)|(0<<ADC2D)|(0<<ADC1D)|(0<<ADC0D) /*Registro DICR0: ADC5D...ADC0D ‐ Deshabilitación de Entrada Digital para ahorro de energía*/ } ISR(ADC_vect,ISR_NAKED) /*Interrupt Service Routines, habilita las interrupciones y permitir la generación de interrupción para periféricos seleccionados, en este caso es una interrupción para el ADC, que es donde se toa la medida del sensor y se imprime la medida del mismo*/ { adc_valor = ADC; //Variable 'x' a la cual se le asigna el valor del ADC dtostrf(adc_valor, 5, 0, printbuff); /*Comando dtostrf convierte un dato entero en stream para poder imprimirlo. Formato: (Entero a convertir, número de dígitos antes del punto, número de dígitos después del punto, variable en stream que representa la salida)*/ fprintf( &uart_str, "Sensor de Humedad:"); //Valor a imprimir
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
fprintf( &uart_str, printbuff); f (adc_valor > 1020) /*Bucle de comparaciones y valoración a imprimir de acuerdo a medida*/ { fprintf( &uart_str, " Se necesita muestra de tierra"); PORTB=0x00; } else if ((adc_valor > 700) & (adc_valor < 999)) { fprintf( &uart_str, " Tierra Seca, si regar"); PORTB=0x01; } else if ((adc_valor > 350) & (adc_valor < 700)) { fprintf( &uart_str," Tierra Humeda, no regar"); PORTB=0x00; } else if (adc_valor <= 350) { fprintf( &uart_str," Demasiada agua"); PORTB=0x00; } fprintf( &uart_str, "\r\n" ); //Imprsión de línea y avance de renglón _delay_ms(1000); // Retraso de 1.5 segundos para su lectura reti(); /*Retorno desde una rutina de interrupción, habilitando interrupciones globales; este debe ser el útimo comando ejecutado antes de salir de una ISR definida con el atributo ISR_NAKED. Esta macro se compila en una sola línea de ensamble, así que no hay sobrecarga en su llamado*/ } int printCHAR(char character, FILE *stream) /*Función para impresión de datos en puerto serial*/ { while ((UCSR0A & (1 << UDRE0)) == 0) {}; /*UDREn: Registro de Datos Vacío de USART //UCSR0A: Registro A de Control y Estado de USART*/ UDR0 = character; //UDR0 – Registro de Datos de I/O de USART return 0; } /* ===================== Rutina de Principal ===================== */
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
int main(void) /*Rutina principal en la cual se llaman a todas las subrutinas de las funciones*/ { ports_setup(); ADC_setup(); USART_setup(); sei(); /*Habilita interrupciones estableciendo una máscara de interrupción global. Esta macro se compila en una sola línea de ensamble, así que no hay sobrecarga en su llamado. Sin embargo, la macro implica también una barrera de memoria que puede causar una pérdida de optimización*/ while(1) { } }
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
2.2 Monitoreo por Pantalla LCD de 16x2 Segmentos
/* * Humedad_Suelo_Pot_LCD.c * * Created: 20/08/2015 01:38:12 p. m. * Author: Electrónica de Potencia * Márquez Franco, Javier Fernando * Medina Jiménez, Víctor Hugo * García Trejo, Juan José */ /* ===================== Declaración de velocidad de CPU ===================== */ #define F_CPU 14745600 /*Orden que define la velocidad del reloj del procesador*/ /* ===================== Declaración de Librerias ===================== */ #include <avr/io.h> /*libreria que hace referencia a todas las palabras reservadas para el control de los puertos de entrada y salida*/ #include <string.h> /*libreria que contiene la definición de macros, constantes, funciones y tipos y algunas operaciones de manipulación de memoria*/ #include <stdio.h> /*"standar input‐ouput header", es la libreria que contiene las declaraciones de funciones de la biblioteca estándar del lenguaje C para hacer operaciones de entrada y de salida así como la definición de tipos, necesarias para dichas operacones*/ #include <stdlib.h> /*"standard library", es la libreria que contiene los prototipos de funciones C para la gestión de memoria dinámica, control de procesos*/ #include <avr/interrupt.h> /*libreria que hace referencia a la manipulación global de las banderas de interrupción*/ #include <util/delay.h> /*libreria que hace referencia a funciones de bucles de retardo/espera*/ #include "HD44780.h" /*libreria que define la programación de la pantalla LCD de 16x2 segmentos*/ /* ===================== Declaración de Variables ===================== */ unsigned int adc_valor=0; /*"unsigned integers", variables similares a los ints en la forma de que almacenan un valor de 2 byte, sin embargo no almacenan números negativos, solamente positivos y cuenta con un rango de uso desde Cero hasta 65,535*/ /*int: variables enteras que almacenan números enteros (tanto positivos como negativos) dentro de los límites de cada uno de sus tamaños, toma valores desde ‐2,147,483,648 hasta 2,147,483,647*/ /* ===================== Declaración de Funciones ===================== */
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
void ports_setup(); void ADC_setup(); /*void: palabra clave que especifica que la función no devuelve ningún valor. Cuando se utiliza para la lista de parámetros de una función, void especifica que la función no toma ningún parámetro. Cuando se utiliza en la declaración de un puntero, void especifica que el puntero es "universal"; en este caso, void especifíca tres punteros de forma universal*/ /* ===================== Subrutinas de Funciones ===================== */ void ports_setup() //Definición de puertos a utilizar { DDRC = 0x00; //Habilitación de ADC de Puerto C como entrada, con Cero DDRD = 0x3F; /*Habilitación de Puerto D como salida, con Unos, para pantalla LCD de 16x2 segmentos*/ DDRB = 0x01; /*Habilitación de Puerto B como salida para control de potencia*/ PORTB = 0x00;//Limpieza a Ceros de Puerto B para evitar ruido } void ADC_setup() //Configuración de Convertidor Analógico a Digital { ADMUX = (0<<REFS1)|(1<<REFS0)|(0<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)| (1<<MUX0); /*Registro AMUX: REFS[1:0] ‐ Bits de Selección de Referencias; ADLAR ‐ Ajuste del Resultado del ADC, Uno ajusta a la Izquierda, Cero a la derecha; MUX[3:0] ‐ Bits de Selección de Canal Analógico*/ ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(0<<ADIF)|(1<<ADIE)|(1<<ADPS2)| (1<<ADPS1)|(0<<ADPS0); /*Registro ADCSRA: ADEN ‐ Habilitación de ADC; ADSC ‐ Inicio de la Conversión del ADC; ADATE ‐ Habilitación de Auto Disparo de ADC; ADIF ‐ Bandera de Interrupción de ADC; ADIE ‐ Habilitación de Interrupción de ADC; ADPS[2:0] ‐ Bits de Selección Pre escalar de ADC*/ ADCSRB = (0<<ACME)|(0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0); /*Registro ADCSRB: ACME ‐ Habilitación del Multiplexor para Comparación Analógica; ADTS[2:0] ‐ Fuente de Auto Disparo de ADC*/ DIDR0 = (0<<ADC5D)|(0<<ADC4D)|(0<<ADC3D)|(0<<ADC2D)|(0<<ADC1D)|(0<<ADC0D) /*Registro DICR0: ADC5D...ADC0D ‐ Deshabilitación de Entrada Digital para ahorro de energía*/ } ISR(ADC_vect,ISR_NAKED) /*Interrupt Service Routines, habilita las interrupciones y permitir la generación de interrupción para periféricos seleccionados, en este caso es una interrupción para el ADC, que es donde se toa la medida del sensor y se imprime la medida del mismo*/ {
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
adc_valor = ADC; //Variable 'x' a la cual se le asigna el valor del ADC if (adc_valor > 1020) /*Bucle de comparaciones y valoración a mostrar en LCD de acuerdo a medida sensada*/ { LCD_Clear(); //Limpieza de caracteres de LCD LCD_Goto(0,0); //Cambio a línea 1 de LCD LCD_Message("Poner muestra"); //Impresión de mensaje LCD_Goto(0,1); //Cambio a línea 2 de LCD LCD_Message(" de tierra"); //Impresión de mensaje PORTB=0x00; /*Envio de Cero a Puerto B, no activando etapa de potencia*/ } else if ((adc_valor > 700) & (adc_valor < 999)) { LCD_Clear(); LCD_Goto(0,0); LCD_Message(" Tierra Seca "); LCD_Goto(0,1); LCD_Message(" == REGAR == "); PORTB=0x01; } else if ((adc_valor > 350) & (adc_valor < 700)) { LCD_Clear(); LCD_Goto(0,0); LCD_Message(" Tierra Humeda "); LCD_Goto(0,1); LCD_Message(" == NO REGAR == "); PORTB=0x00; } else if (adc_valor <= 350) { LCD_Clear(); LCD_Goto(0,0); LCD_Message(" Demasiada Agua"); LCD_Goto(0,1); LCD_Message(" ** WARNING ** "); PORTB=0x00; } _delay_ms(1000); //Retardo de 1 segundo reti(); /*Retorno desde una rutina de interrupción, habilitando interrupciones globales; este debe ser el útimo comando ejecutado antes de salir de una ISR definida con el atributo ISR_NAKED. Esta macro se compila en una sola línea de ensamble, así que no hay sobrecarga en su llamado*/ } /* ===================== Rutina de Principal ===================== */ int main(void) /*Rutina principal en la cual se llaman a todas las subrutinas de las funciones*/ {
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
ports_setup(); //Llamado de función ADC_setup(); //Llamado de función LCD_Init(); //Llamado a inicio de Pantana LCD LCD_Message("ELECTRONICA"); LCD_Goto(0,1); LCD_Message(" DE POTENCIA"); msDelay(4000); LCD_Clear(); LCD_Goto(0,0); LCD_Message("SENSOR"); LCD_Goto(0,1); LCD_Message(" DE HUMEDAD"); msDelay(4000); LCD_Clear(); sei(); /*Habilita interrupciones estableciendo una máscara de interrupción global. Esta macro se compila en una sola línea de ensamble, así que no hay sobrecarga en su llamado. Sin embargo, la macro implica también una barrera de memoria que puede causar una pérdida de optimización*/ while(1) { //Empty } }
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
SENSOR DE TEMPERATURA Y HUMEDAD RELATIVA
1. Diagrama Esquemático
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
2. Código de Programación en Lenguaje C++ (ATMEL Studio)
2.1 Monitoreo por Comunicación Serial a Puerto USB de Computadora
/* * Sensor de Temperatura y Humedad Relativa.c * * Created: 21/08/2015 12:39:23 p.m. * Author: Electrónica de Potencia * Marquéz Franco, Javier Fernando * Medina Jiménez, Víctor Hugo * García Trejo, Juan José */ #define F_CPU 14745600 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "dht11.c" void ports_setup(); void USART_setup(); void ports_setup() { DDRD = 0x02; DDRB = 0x3F; PORTB = 0x00; } void USART_setup() { UCSR0A = (0<<TXC0)|(0<<U2X0)|(0<<MPCM0); UCSR0B = (0<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(1<<RXEN0)|(1<<TXEN0)|(0<<UCSZ02)|(0<<TXB80); UCSR0C = (0<<UMSEL01)|(0<<UMSEL00)|(0<<UPM01)|(0<<UPM00)|(0<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00)|(0<<UCPOL0); UBRR0 = 0x5F; } int printCHAR(char character, FILE *stream) { while ((UCSR0A & (1 << UDRE0)) == 0) {}; UDR0 = character; return 0; }
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
FILE uart_str = FDEV_SETUP_STREAM(printCHAR, NULL, _FDEV_SETUP_RW); int main(void) { char printbuff[100]; ports_setup(); USART_setup(); sei(); int8_t temperature = 0; int8_t humidity = 0; for (;;) { humidity = dht11_gethumidity(); temperature = dht11_gettemperature(); itoa(temperature, printbuff, 10); fprintf( &uart_str, "Temperatura: "); fprintf( &uart_str, printbuff);fprintf( &uart_str, " \370C"); fprintf( &uart_str, "\r\n"); itoa(humidity, printbuff, 10); fprintf( &uart_str, "Humedad: "); fprintf( &uart_str, printbuff); fprintf( &uart_str, " %%RH"); fprintf( &uart_str, "\r\n"); fprintf( &uart_str, "\r\n"); if (temperature > 30) { PORTB = 0x01; } else if (temperature <= 28) { PORTB = 0x00; } _delay_ms(1500); } return 0; }
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
FUENTE DE ALIMENTACIÓN EXTERNA (POR PANEL
FOTOVOLTAICO DE 12V Y/O BATERÍA DC 12V)
1. Diagrama Esquemático
2. Objetivo de fuente externa
Mediante este circuito en el cual estamos utilizando un LM317T, regulamos el
voltaje entregado por el panel, el cual a su máxima capacidad nos envía 12 V DC, con un
potenciómetro podemos regular el voltaje de salida, alimentando de esta manera nuestro
circuito eléctrico que requiere de 5 V en DC para su correcto funcionamiento.
También es posible alimentarlo directamente desde el puerto USB de una
computadora y así tener comunicación serial con ella y monitoreo de valores de la
Temperatura y Humedad Relativa.
ELCTRÓNICA DE POTENCIA MAESTRÍA EN ENERGÍAS RENOVABLES
EVIDENCIA FOTOGRÁFICA DE CIRCUITOS Y SENSORES
1. Fotografías de sistema