Download - Tarea N_2 de micro
Tarea N°2 Taller de Microcontroladores
Resumen
En el presente documento se hará un análisis de los registros utilizados, bits de cada registro y también sobre el funcionamiento del circuito programado en el laboratorio N°2. Por último se modificará el programa para invertir el giro del motor dc y agregándole un indicador led parpadeante.
1. Introducción.
Los microcontroladores y la formulación de algoritmos (programación) son dos herramientas fundamentales para la ingeniería en mecatrónica donde el concepto de control es esencial, ya que todo el funcionamiento y estructura del dispositivo depende en su gran parte del controlador que se encarga de optimizar el desarrollo de funciones para cada una de las necesidades que se requieran.
Principalmente para este informe y su trabajo respectivo, se utilizó un microcontrolador de la familia AVR, en específico el ATmega168, del fabricante norteamericano de semiconductores, microcontroladores y derivados ATMEL. La programación de este dispositivo se hizo mediante el software AVRstudio, un software con el cuál podemos programar fácilmente esta familia de microcontroladores RISC , y más específicamente en esta ocasión cumplirá la función de regular la velocidad de un motor DC, el interactivo uso de esta plataforma nos facilitará la programación correspondiente y el uso en sí del programa ( cada una de sus funciones ), por otra parte se utilizó el software de simulación Proteus, el cual es una plataforma donde se simula todo tipo de circuitos electrónicos, componentes y microcontroladores con su respectiva programación , siendo este una herramienta clave a la hora de ver si nuestro programa y circuito funcionan correctamente o si poseen alguna falla.
2. Resumen del Laboratorio N°2
Se realizó un circuito mediante el software Proteus para el control de la velocidad de un motor dc (motor de corriente continua).Esto se efectúa mediante una señal a la base de un transistor que en este caso es un TIP122. Dicha señal debe pasar proceso de PWM que significa modulación de ancho de pulso, el Atmega168 es capaz de generar una señal PWM como salida, por lo que fue posible controlar la velocidad del motor dc mediante este procedimiento.
Figura 1 Modulacion de ancho de Pulso.
Los materiales a utilizar en esta simulación fueron:
1. Software AVRstudio : Software para la programación en C de nuestro código, convierte el código en c a binario, también se puede utilizar en la simulación virtual de Proteus.
2. Software de simulación Proteus: Programa que da la facilidad de la simulación virtual de circuitos y componentes electrónicos.
3. Microcontrolador ATMEGA168: Microcontrolador utilizado en el desarrollo del informe, donde los registros y puertos están basados en su funcionalidad.
4. Transistor TIP122: Se utilizó como regulador de pulsos y como interruptor, esto le da la función de regular la velocidad de un motor DC.
5. Motor DC: Motor de uso común de corriente continua.
Circuito en Proteus.
Fig2 Circuito Funcionando en Proteus.
Fig3
Programacion respectiva del circuito en proteus.
#include <avr/io.h>#include <inttypes.h>#include <util/delay.h>
int main ( void) { unsigned char a;DDRD = 0b11111111;PORTD= 0X00;TCCR0A = 0b10100011;TCCR0B = 0b00000011;TCNTOA= 0;OCR0A = 0;a = 0;while (1)
{If (a<255){
OCR0A = a++; _delay_ms(10);
} }
}
3. Funciones de los registros utilizados en la simulación.
Para el funcionamiento de un microcontrolador éste debe estar conectado a algún periférico ya sea un led, sensor o un pulsador entre otros. Para la configuración y accionamiento de estos periféricos se debe realizar un análisis preliminar a los componentes, teniendo esto en cuenta es necesario examinar el datasheet del microcontrolador, el cual es una hoja técnica que tiene especificados los valores estándar que se pueden usar para trabajar con el microcontrolador. Entre estos podemos encontrar sus registros que pueden ser de entrada, salida, pines entre otros.
Cada tarea o necesidad requiere de un programa en especial, por lo tanto la configuración de los registros varían de una aplicación a otra, en el caso del laboratorio n°2 y la tarea N°2 se controla un motor DC, debido a esto los registros de los pines que se utilizan se establecen como una salida, además de definirlos en un estado bajo (0 lógico), por otro lado están el timer y el PWM que serán iniciados como variables en 0. En esta experiencia se utilizaron las siguientes líneas de código para establecer los registros anteriormente mencionados:
A. DDRD
Este registró está declarado en el programa como: DDRD = 0b11111111 o
DDRD =0xFF, este tipo de registro (DDR) se puede configurar como
entrada (0 lógico) o salida (1 lógico) de periféricos y la letra D indica el
nombre del puerto que se está configurando, comúnmente los
microcontroladores cuentan con cuatro puertos (A, B, C, D) y cada puerto
consta de ocho pines o bits (Px0, Px1…Px7), los cuales pueden ser
configurados de entrada o salida como se dijo anteriormente. En este caso
se usa el puerto D y se configuró como salida ya que todos sus pines o bits
se encuentran con un 1 lógico, esto es razonable ya que solo se necesita
enviar datos.
B. PORTD
Este registro está declarado en el programa como: PORTD =0b00000000 o
PORTD=0x00, este tipo de registro (PORT) se puede configurar en dos
tipos de estados, 0 para un estado bajo o de inactividad o 1 para un estado
alto o de actividad, al igual que el anterior la letra que acompaña a la
palabra PORT es el nombre del puerto que se está configurando,
comúnmente se pueden usar cuatro puertos (A, B, C, D) y cada uno de
estos puertos consta con ocho pines o bits. En este caso se puede apreciar
el uso del Puerto D que se configuró con un estado bajo (0x00) para evitar
enviar una señal no deseada al momento de activar el microcontrolador.
C. TCCR0A
Este registro está declarado en el programa como: 0b10100011, dicho
registro tiene que ver con el tipo de frecuencia que se generará (PWM, fast
PWM, etc.) y también tiene que ver con la determinación de ancho de pulso
que se genera e incidencias con otras frecuencias, este registro se usa en
conjunto con el TCCR0B para determinar el tipo de frecuencia y con TCNT0
para determinar incidencias.
D. TCCR0B
Este registro está declarado como: 0b00000011, dicho registro también
está implicado en la generación de frecuencia y al combinarlo con el
TCCR0A producen una señal fast PWM.
E. TCNT0
Este registro es un emisor de la frecuencia generada por los registros
TCCR0B y TCCR0A y en el programa está declarado como TCNTO=0, esto
quiere decir en un estado bajo o inactivo.
F. OCR0A
Este registro al igual que el TCNT0 envía una onda que es producida por
los registros TCCR0a y TCCR0B, además dicha onda puede tomar valores
entre 0 y 255 debido a que tiene 8 bits. Al igual que en el apartado interior
este registro se inicializó en 0.
4. Bits utilizados en la simulación.
Ahora corresponde explicar que función en especial cumple cada bit
utilizado.
El programa utilizo la siguiente configuración de registros.
• DDRD = 0xFF;
• PORTD = 0x00;
• TCCR0A = 0b10100011;
• TCCR0B = 0b00000011;
• TCNT0 = 0;
• OCR0A = 0;
A. DDRD.
Esta configuración deja todo el puerto D como bits de solo salida.
Como se muestra en la imagen N, se aprecia la descripción del registro ya
mencionado, esta configuración nos delimita a usar todos esos bits solo
como salida.
En el programa analizado solo se utilizada el bit PD6 o DDD6,
entonces también este correcto haber configuración el puerto D como:
• DDRD=0b01000000;
Fig4
B. PORTDEste registro configura a todo el puerto D como apagado, es decir todos lo
bits de este puerto se encuentran en un estado 0 lógico. El puerto utilizado PD6 en
su estado inicial se encuentra apagado o 0 lógico.
Fig 5. bloque de configuración registro PORT
C. TCCR0A Este registro al estar configurado de cierta manera dejará ciertas características al
microcontrolador. Primero se deberá revisar la descripción de este puerto en el
datasheet del ATmega168, y con este se podrá conocer cómo se trabaja el
problema propuesto.
TCCR0A = 0b10100011
Cada bit de este puerto se configuro de esta manera: COM0A1=0 COM0A0=1 COM0B1=1 COM0B0=0 WGM01=1 WGM00=1
Antes que todo para ver qué características tendrá el programa, se debe saber que se utilizara una señal fast PWM, debido a que el transistor funciona con una señal electrónica.
Ahora para saber que repercusión tendrá esta configuración se debe dar una vista a las tablas que se encuentran en el datasheet del microcontrolador.
1. COM0A1 y COM0A0:
Para estos bits se debe revisar la tabla 15-3. Con este se puede concluir
que la señal obtenida entre la comparación de la señal triangular y digital,
será de orden no-invertido, esto quiere decir que mientras estas señales no
tengan alguna coincidencia, la señal de salía analógica estará en estado
alto, y si ocurre alguna intersección entre estas dos pasará a ser un 0 lógico
hasta que esta otra vez tengan una interrupción. Este se puede apreciar en
las figura N en los puntos donde coinciden la señal triangular y la digital, y
la figura N la señal de salida entre esta interacción.
Fig 6. bloque de configuración registro TCCR0A
Fig 7. table 15-3 Compare output mode, fast PWM mode
2. COM0B1 y COM0B0: Como en el caso anterior, en este también se debe revisar la tabla 16-5 y se llega a el mismo resultado pero en este caso la señal de salida será por el puerto PD5 que contiene la función OC0B, sim embargo esta no se usara en ningún caso en el programa.
Fig 8. Compare output mode, fast PWM mode
3. WGM01 y WGM00: Estos dos bits como están configurados no se puede
llegar a alguna conclusión, por ello se debe tomar en cuenta el bit WGM02,
según el registros TCCR0B este bit está configurado a 0. Luego se revisa al
datasheet del ATmega168 tabla 15-8 y según estos parámetros se concluye
que: el programa está configurado para un modo FATS PWN y el TOP o
tope de conteo será 0xFF, y este valor en el sistema decimal corresponde a
255.
Fig 9. Waveform generation mode bit description.
A. TCCR0BAl igual que el registro TCCR0A este registro pertenece a un Timer/counter y está
configurado de esta manera:
FOC0A=0
FOC0B=0
WGM02=0
CS02=0
CS01=1
CS00=1
Fig 10. bloque de configuración registro TCCR0B
1. FOC0A y FOC0B: Estos bits se activan cuando los bits WGM se
configuran para una señal no-PWM.
2. CS02, CS01 y CS00: Estos bits corresponden al registro Clock
Select, el cual configura la frecuencia del reloj, para el Timer/counter.
Como fueron modificados estos bits son 0,1 y 1 respectivamente, y
según la tabla 15-9 del datasheet, y según esta misma tabla se
podrá conocer la frecuencia con que se transmitirá la señal de salida,
y esto se puede calcular con la fórmula de la figura N, donde Fclk es
la capacidad del CPU, N es un escalar corresponden a tabla de la
figura N y TOP es otro dato sacado como el anterior. Esta fórmula
dará como valor la frecuencia pero con este dato se calculó además
el periodo o T, este valor es tiempo de un ciclo.
Después de realzar varios cálculos el periodo tiene como valor 8
[μSeg].
Fig 11 . fórmula de cálculo frecuencia de salida.
Fig 12. Clock select bit description
B. TCNT0 y OCR0A
En primer lugar el registro TCNT0 en simple palabras es la señal triangular con
valor mínimo 0 y máximo (TOP) 255, y su relación con el registro OCR0A, es que
estas dos señales se comparan y esta comparación es transmitida por el bit OC0A
por medio del pin PD6.
5. Funcionamiento del Programa utilizado en la simulación.
Luego se declarar los registros y bits utilizados, queda explicar cómo se
relacionaran con el programa ya mencionado.
En primer lugar se declaran las bibliotecas a utilizar, luego en el cuerpo del
programa se declaran las variables y configuración de registros. Como ya se
mencionó el puerto D está declarado como salida y en su estado inicial apagado,
además el pin PD6 transmite una señal analógica, esta señal se produce por la
interacción de las señales TCNT0 y la señal modular OCR0A.
Después se muestra el ciclo infinito o loop, en el cual contiene una simple
condición que producto que la señal OCR0A sea modificada cada 10
milisegundos, hasta llegar a su tope del registro. Con esto se logra que la
velocidad del DC motor vaya aumentando.
Finalmente una vez que el registro OCR0A llegue a su valor máximo y en
ese momento el DC motor tendrá una velocidad máxima y constante.
6. Mejora del circuito implementando un Led parpadeante durante su
funcionamiento y agregando un motor que gire en sentido contrario.
Se pide que se implemente un motor extra que gire en sentido contrario,
además de un indicador led intermitente, para realizar esta acción se utilizò
una de las propiedades de los motores de corriente continua, ya que estos
giran en el sentido de la circulación de la corriente, por lo tanto en el circuito
solo necesitamos invertir la alimentación con la tierra para poder establecer
una dirección de corriente distinta y así invertir el sentido de giro, además
con este tipo de conexión aprovecha la intermitencia de voltaje que entrega
el atmega 168 y el tip 122, por lo que ambos motores giran en sentido
contrario entre sì y aumentando progresivamente su velocidad. En la figura
12 se observa la conexión pertinente.
Figura12
Para la parte del indicar led intermitente fue necesario introducirse en la
programación de avr, para esto se modificò el código de la experiencia del
laboratorio 2, quedando de la siguiente forma:
#include <avr/io.h>#include <inttypes.h>#include <util/delay.h>
int main ( void){
unsigned char a;DDRD = 0b11111111;DDRC = 0b11111111;PORTD = 0X00;PORTC = 0X00;TCCR0A = 0b10100011;TCCR0B = 0b00000011;TCNT0= 0;OCR0A = 0;a = 0;while (1){
PORTC = 0b00000001;_delay_ms(10);PORTC = 0b00000000;
if (a<255){
OCR0A = a++;_delay_ms(10);
}}
}Esta wea podrìay hacerla imagen pedro (fig13)
Notar que se utiliza el registro DDRC que fue explicado en la sección anterior, se
utilizò este por conveniencia de puerto, estableciéndolo como un puerto de
escritura, además se le da un estado inicial inactivo utilizando el registro
PORTC=0x00, luego se establece dentro del ciclo while la instrucción
PORTC=0b00000001, la cual da un estado inactivo desde el pin 1 al pin 7 del
puerto C, ya que el puerto 0 serà por donde salga el voltaje, por lo tanto este tiene
un estado activo (1), posteriormente con el fin de producir el parpadeo e le da un
tiempo de acción de 10 milisegundos y luego se vuelve a dejar en estado inactivo
al puerto completo con la instruciòn PORTC=0b00000000; y asì hasta que se
vuelva a ejecutar otra vez el argumento del ciclo while, en este caso es 1 por lo
tanto se ejecutarà indefinidamente. En la figura 14 se observa el funcionamiento
integrado de ambos motores con giro contrario entre sì y aumento progresivo de
velocidad, además del funcionamiento del indicador led parpadeante.
6. Conclusiónes
Para concluir se puede decir que para lograr resultados mas abundantes en cuanto a programacion y/o circuiteria el datasheet de cada componente es de vital importancia, en el caso de los microcontroladores esta es mayor, ya que es muy importante saber el funcionamiento que respecta a cada registro para que el microchip se aproveche en su totalidad. En la practica , en el programa habia que acceder a los registros del microcontrolador ATmega168 y realizar la programacion correspondiente con el fin de provocar una señal para controlar la velocidad de un motor dc, para esto fue necesario acceder al datasheet para la respectiva configuracion de los registros para lograr el objetivo.
Para finalizar se puede decir que el aprendizaje principal de este informe fueron los registros, ya que estos son fundamentales por la simple razon de que ellos son los que le dan la funcionalidad al microcontrolador. Tambien se rescato que cada registro depende bastante del uso que se le quiera dar, por lo tanto se puede afirmar que es muy probable que en cada proyecto nuevo se deba aprender a usar
otros registros y sus configuraciones pertinentes para poder resolver nuestros problemas los cuales se tengan que afrontar mediante programacion , circuitos electronicos y principalmente microcontroladores.
7. Referencias.
[1] datasheet ATmega168(PDF)[2] www.olimex.cl [3] www.mikroe.cl[4] www.avrmicrorobot.com.ar