Trabajo final de especialización en Sistemas...

79
Trabajo final de especialización en Sistemas Embebidos Instrumental de medición para cámara anecóica experimental Ing. Ramiro Alonso Director: Dr. Ing. Gustavo Walter Fano Jurados: Dr. Ing. Pablo Gómez Ing. Juan Manuel Cruz Ing. Edmundo Gatti Diciembre 2015

Transcript of Trabajo final de especialización en Sistemas...

Page 1: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Trabajo final de especialización en SistemasEmbebidos

Instrumental de medición para cámara anecóicaexperimental

Ing. Ramiro Alonso

Director: Dr. Ing. Gustavo Walter Fano

Jurados: Dr. Ing. Pablo Gómez Ing. Juan Manuel Cruz Ing. Edmundo Gatti

Diciembre 2015

Page 2: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Resumen

En este trabajo se presenta el desarrollo de un equipo para medir diagramas de radiación de antenas,desarrollado para el Laboratorio de Radiación Electromagnética. El equipo desarrollado es uncomplemento para un trípode que proporciona un movimiento de rotación controlado a un ejevertical que hará girar un dispositivo a caracterizar. El mismo se podrá utilizar para el estudio de las antenas construidas y para hacer estudios de pre-compatibilidad electromagnética de dispositivos electrónicos.

También servirá de base para hacer futuros desarrollos como plataformas móviles y equipos conmás de un eje. Y además será el puntapié inicial de un proyecto más ambicioso del laboratoriocomo lo es la construcción de una cámara anecóica experimental dentro de la Facultad.

Uno de los objetivos es reemplazar a otro equipo más rudimentario que se encuentra en usoactualmente. Mejorando los resultados y dando nuevas funcionalidades. Como novedad, el equipoposee una interfaz de comunicación que permite ser controlado remotamente desde unacomputadora, permitiendo al usuario desarrollar una medición automatizada. Con este fin, sedefinieron simples comandos de control que pueden ser incluidos en un programa hecho por elusuario.

Además para que sea aceptado por los usuarios, dada la inercia para adaptarse a las cosas nuevas,era necesario mantener las mismas funcionalidades del equipo anterior. Para ello, se agregaronbotones para ser controlado manualmente y tener la misma funcionalidad que un equipo similaractualmente en uso, con algunas ventajas.

Se obtuvo un equipo sencillo de utilizar, un producto final, donde el usuario sólo necesita conocerlos comandos de control y las funciones de los botones para poder hacer una medición.

2

Page 3: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Le dedico este trabajo a mi familia, mi novia Analía y mis amigos.

Agradecimientos

Al Laboratorio de Sistemas Embebidos y a la Facultad de Ingeniería, por haberme dado la beca quepermitió cursar esta especialización y permitirá continuar con la maestría el año próximo.

Al Laboratorio de Radiación, por ayudarme con este trabajo, a sus integrantes Gustavo, Tino,Marcela, Matias Pablo y en especial a Gonzalo Figueroa, por prestarme su antena para las primerasmediciones.

Al Departamento de Electrónica de la Facultad y los chicos del LABI (Laboratorio Abierto),quienes nunca se negaron a ofrecerme agua caliente para el mate.

3

Page 4: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Índice de contenidoCapitulo 1.............................................................................................................................................5

1.1 Introducción general .................................................................................................................51.2 Otras aplicaciones......................................................................................................................71.3 Obtención del diagrama de radiación........................................................................................81.4 Medición manual.......................................................................................................................91.5 Medición semi-automática.........................................................................................................91.6 Mejora propuesta.....................................................................................................................111.7 Equipos comerciales................................................................................................................121.8 Requerimientos........................................................................................................................141.9 Planificación............................................................................................................................151.10 Modificación del alcance.......................................................................................................15

Capitulo 2...........................................................................................................................................162.1 Mecánica..................................................................................................................................16

Capitulo 3...........................................................................................................................................233.1 Electrónica...............................................................................................................................233.2 Esquemáticos...........................................................................................................................293.3 Diseño del impreso..................................................................................................................323.4 PCB..........................................................................................................................................333.5 Pines del microcontrolador......................................................................................................343.6 Armado.....................................................................................................................................35

Capitulo 4...........................................................................................................................................374.1 Firmware..................................................................................................................................374.2 Botones....................................................................................................................................414.3 Comandos de control...............................................................................................................42

Capitulo 5...........................................................................................................................................445.1 Resultados................................................................................................................................445.2 Costo del equipo......................................................................................................................47

Capitulo 6...........................................................................................................................................486.1 Conclusiones............................................................................................................................486.2 Próximos pasos........................................................................................................................48

ANEXOS...........................................................................................................................................51A) Diagrama de Gantt....................................................................................................................51B) Código fuente del engranaje grande.........................................................................................52C) Código fuente del engranaje chico............................................................................................53D) Código fuente del Firmware.....................................................................................................54E) Extracto de la hoja de datos del motor 17HS8401....................................................................78F) Datos del rulemán 608ZZ..........................................................................................................79

4

Page 5: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Capitulo 1

1.1 Introducción general

Las antenas están definidas por la IEEE (Instituto de Ingenieros Eléctricos y Electrónicos) comodispositivos diseñados para emitir o recibir ondas de radio. [1] Una antena es una estructura detransición de ondas electromagnéticas entre una guía de ondas y ondas que se propagan librementeen el espacio, permitiendo transmitir información de forma inalámbrica. Estas constituyen una partefundamental en cualquier sistema de radio comunicaciones.

Muchas aplicaciones requieren diseños personalizados de antenas, donde se necesita una gananciadeterminada, una directividad particular, un determinado peso o resistencia a condicionesmeteorológicas extremas. En algunos casos será posible utilizar una antena comercial que cumplatodos los requisitos, en otros casos la única opción disponible será desarrollar una antena con undiseño especifico para la aplicación.

Por ejemplo, un satélite puede llegar a necesitar una antena que irradie todo un continente con señalde televisión, reduciendo la energía desperdiciada en irradiar zonas oceánicas sin población. En estecaso los requisitos que tiene que cumplir la antena son muy específicos y será necesario realizar undiseño personalizado.

Otro caso se da en comunicaciones de datos punto a punto, donde es necesario tener antenas muydireccionales para que el receptor reciba la mayor potencia posible del transmisor y así mejorar lacalidad del enlace. Esta es una situación bastante común donde se puede llegar a conseguir undiseño comercial que cumpla los requerimientos. Aún así, dependiendo del costo es posible que seaconveniente realizar un diseño propio.

En el Laboratorio de Radiación Electromagnética se realizan diseños de antenas, para aplicacionesespecíficas o con fines educativos dentro de la materia de grado Propagación y Sistemas Irradiantes.

El proceso de diseño es el siguiente. A partir de las características de la comunicación inalámbricaque se desea realizar y del equipamiento disponible, se definen los requerimientos de la antena,frecuencia, ancho de banda, potencia y directividad. Luego se define el tipo de antena que se va autilizar, dependiendo de los requisitos que haya que cumplir. Las antenas mas comunes son:monopolo, dipolo, yagui, parche, con reflector parabólico y conjuntos de antenas que usan lasanteriores como elemento.

Habiéndose definido el tipo de antena, se realizan los cálculos, diseño y simulación numérica conprogramas de simulación de electromagnetismo (FEKO, CST, WIPL, etc) para hacerla cumplir conlos requerimientos. Finalmente se construye y se mide, obteniendo el diagrama de radiación.

5

Page 6: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

El diagrama de radiación es la representación espacial en coordenadas esféricas de la distribuciónde la densidad de potencia radiada por una antena, como función de los ángulos cenital θ y azimutalφ. Éste puede ser absoluto, donde para cada ángulo se representa el valor absoluto de la densidad depotencia que produce el radiador, para una potencia radiada WT [2] . Y también puede ser relativo,en cuyo caso los valores de densidad de potencia se dividen por su valor máximo. En este caso elvalor máximo pasaría a ser unitario, y el diagrama será independiente del radio y de la potenciaradiada.

El diagrama se representa como un gráfico circular en 2 o 3 dimensiones, la potencia de gráficacomo una curva o una superficie que rodea al centro. Donde la distancia con centro para cadaángulo representa la amplitud. Los valores se representan en decibeles, porque de esta manera losvalores quedan expresados en densidad de potencia o en intensidad de campo.

La Imagen 1 muestra el diagrama de radiación de una antena tipo dipolo de un equipo deradiocontrol. Se ve sobre la foto y de color azul un diagrama en 3D y por detrás dos diagramas deradiación que muestran la potencia irradiada en diferentes ángulos para el plano azimuth y para elplano de elevación. Conociendo esto, sabríamos como debemos orientar la antena para recuperar elcontrol de un avión radiocontrolado. Se puede ver que apuntándole con la antena sería la peoropción.

6

Imagen 1: Diagrama de radiación para la antena de un equipo de radiocontrol

Page 7: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.2 Otras aplicaciones

En el campo de la iluminación, se utilizan diagramas similares, describiendo en el diagrama laintensidad lumínica rodeando a una fuente de luz. Se aplican mucho en los equipos de iluminacióncon LEDs debido a la alta direccionalidad de los mismos.

Diagramas similares también se utilizan en el campo del audio, para caracterizar micrófonos yparlantes. Estos diagramas describen la direccionalidad de un parlante, o el diagrama polar de unmicrófono que define su sensibilidad en función del ángulo de incidencia de las ondas acústicasImagen 3.

7

Imagen 2: Diagramas de radiación en la iluminación

Imagen 3: Direccionalidad de los micrófonos

Page 8: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.3 Obtención del diagrama de radiación

Para obtener el diagrama de radiación de una antena necesitamos producir un campoelectromagnético constante en una zona del espacio, con la frecuencia de interés. Esto se lograutilizando un generador de RF y una antena transmisora. Luego se coloca la antena a medir dentrodel campo electromagnético generado. La antena a medir, antena receptora, se conecta a un equipocapaz de medir la intensidad recibida, por ejemplo un analizador de espectro.

Este procedimiento se realiza idealmente en un recinto cerrado diseñado para este fin llamadocámara anecóica. Las paredes de estos recintos poseen un blindaje metálico tipo jaula de Faradaypara evitar el ingreso de ondas electromagnéticas del exterior que interfieran en la medición ytienen un recubrimiento en el lado interior compuesto por materiales absorbentes que evitan lasreflexiones de las ondas generadas en el interior. Se usa una cámara anecóica para que las ondaselectromagnéticas que recibe la antena receptora no se vean afectadas por las fuentes externas ni lasreflexiones en las paredes del recinto.

Contando con un generador cuya potencia de salida es conocida, una antena calibrada y conociendolas perdidas en los cables, se puede conocer la intensidad del campo electromagnético que irradia ala antena receptora. Si está todo calibrado se puede realizar el diagrama de radiación con valoresabsolutos. Desafortunadamente los instrumentos del laboratorio no están calibrados y tampoco secuenta con una antena calibrada, por esta razón no se conoce con exactitud la intensidad de campoque incide sobre la antena a medir y no es posible realizar mediciones de valores absolutos.

Los diagramas de radiación obtenidos en el Laboratorio son normalizados, donde la densidad depotencia en cada punto se divide por la intensidad máxima. El valor máximo para a ser unitario y elresto de los valores representan la intensidad relativa al máximo. Es habitual el uso de diagramasnormalizados en Ingenieria de Telecomunicaciones, porque un diagrama en dB tiene la mismaforma si se realiza la medición de Campo eléctrico o de Potencia.

8

Page 9: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.4 Medición manualEl primer método para obtener el diagrama de radiación y más sencillo de implementar es elmanual. Consiste en generar el campo electromagnético con una antena y un generador, como seexplicó anteriormente, y colocar la antena a medir en la zona donde el campo irradiado es conocido.Luego se modifica manualmente la orientación de la antena a medir anotando la intensidad captadaen cada posición, tomando suficiente cantidad de muestras como para poder realizar un gráfico.

Este método aunque efectivo es bastante tedioso, ya que requiere mucho trabajo manual y se correel riesgo de desplazar accidentalmente el eje del movimiento de la antena receptora teniendo quevolver a realizar la medición.

1.5 Medición semi-automática

Actualmente en el laboratorio se utiliza un método semi-automático. Que consiste en hacer girar laantena receptora en un eje, y usar una función del analizador de espectro que graba la amplitudrecibida durante una vuelta completa.

El equipo utilizado actualmente para hacer girar la antena, consiste de un motor sacado de unventilador, es un motor que gira a baja velocidad moviendo un direccionador del flujo de aire. Aeste motor se le acopló un eje de madera que funciona de mástil para la antena. Todo esto estásostenido por un gabinete de madera de forma piramidal como se muestra en la Imagen 4.

El proceso de medición consiste en ajustar la antena receptora al eje de madera. Con un interruptorse enciende el motor y se hace girar la antena. En simultáneo se activa la función de almacenado delanalizador de espectro, y se espera a que la antena gire una vuelta y un poco más. Mientras laantena realizó la vuelta, el analizador de espectro almacenó muestras periódicas de la amplitudrecibida.

La información se almacena en un pendrive para ser analizada posteriormente en una computadora.En la computadora se realiza un análisis manual del archivo con un editor de texto buscando dospuntos de máxima amplitud recibida. Luego se copian los datos entre los dos máximos a unprograma graficador, y se configura para realizar un gráfico circular obteniéndose el diagrama deradiación.

Esta medición se realiza dos veces, una con la antena en posición vertical y otra con la antenarotada 90 grados. Para poder visualizar el diagrama de radiación en el plano E (plano XZ) y H(plano XY).

9

Page 10: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

En este método de medición se toman muestras para los 360º, pero no se puede definir conprecisión el ángulo de cada muestra. Posiblemente la velocidad no sea constante y eso modifica ladirectividad percibida. El motor inicia su movimiento en cualquier sentido de manera aleatoria, porlo que hay que encenderlo y apagarlo un par de veces para que inicie en el sentido deseado. Ademástiene el inconveniente de tener que ajustar los resultados manualmente para realizar el gráfico.Generalmente es necesario repetir varias veces la medición para obtener resultados satisfactorios.

10

Imagen 4: Equipo actualmente en uso

Page 11: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.6 Mejora propuesta

Bancos de medición más completos permiten realizar mediciones completamente automatizadas,esto se logra controlando la posición de la antena en cada momento en simultáneo con la captura delos datos en el instrumental de RF. De esta forma se logra obtener el diagrama con menorintervención del usuario, y al juntar la información de la posición con la amplitud recibida en cadaposición se logran mediciones más precisas.

En el presente trabajo se utilizará para armar el banco de medición de la Imagen 5, permitiendoobtener la misma funcionalidad que los equipos comerciales.

Imagen 5: Esquema del banco de medición

11

Page 12: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.7 Equipos comerciales

La empresa ETS-Lindgren (http://www.ets-lindgren.com), con sede en Texas, Estados Unidos.Produce equipos para realizar estas mediciones (cámaras anecóicas, trípodes, antenas, etc). Lassiguientes imágenes sacadas de un catálogo muestran los equipos que se pretenden reemplazar connuestro trípode. Y consisten de una plataforma giratoria (Imagen 6), un soporte para antena(Imagen7) y un equipo para controlar los movimientos (Imagen 8).

12

Imagen 6: Plataforma giratoria

Imagen 7: Trípode de material dieléctrico, regulable en altura

Page 13: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

El valor del conjunto mencionado fue presupuestado en el orden de los 85000 dólares. A este valorhay que sumarle el IVA, el costo del transporte, tasas aduaneras, etc.

El precio del equipamiento es importante y se encuentra fuera del interés y de las posibilidad de laFIUBA. Y su funcionamiento es relativamente simple. Por esta razón es que se decide emprendereste desarrollo, con el objetivo de lograr resultados similares.

Hay que tener en cuenta que el equipo comercial posee tres movimientos automatizados. Rotaciónen el eje vertical gracias a la plataforma giratoria, rotación del eje en el que apunta la antena, yademás regulación de altura.

El siguiente link muestra un vídeo del equipo posicionador de la Imagen 7

http://www.ets-lindgren.com/Video-AntennaTower

13

Imagen 8: Equipo de control

Page 14: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.8 Requerimientos

1. Debe poder hacer girar una antena con un peso 1kg

2. La resolución angular tiene que ser menor o igual a 1º

3. Tiene que poder realizar un giro completo en menos de 12 segundos

4. El soporte de la antena tiene que ser de material dieléctrico

5. El protocolo de comunicación tiene que permitir controlar todos sus movimientos desde unacomputadora. Permitiendo que el software conozca la posición de la antena

6. Tiene que tener botones para control manual que permitan realizar un giro completo

7. Se alimentará de la tensión de red 220v

8. FINALIZACION ANTES DE DICIEMBRE DEL 2015, con la presentación del trabajo finalincluido

14

Page 15: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

1.9 Planificación

Se realizaron los estudios necesarios vistos en la materia “Gestión de proyectos”. Se listaron las tareas necesarias para la realización de nuestro proyecto, y se estimó su duración. Se realizó un diagrama de GANTT para representar los tiempos y estimar la fecha de finalización. Ver Imagen 33 en los Anexos. Se estimó la finalización para mediados de Noviembre del 2015.

1.10 Modificación del alcance

El proyecto sufrió modificaciones con respecto a su versión original durante la ejecución. La causade estas modificaciones fue mayormente por la falta de tiempo disponible, debido a la necesidad deconcluirlo y presentarlo el 14 de diciembre del 2015. Un error en la planificación fue que no setuvo en cuenta el tiempo de desarrollo de los trabajos prácticos de las materias de la especialización,ni el tiempo necesario para la realización del presente informe escrito.

Mucho del tiempo disponible se dedicó al estudio del kit SDR que permitiría reemplazar losequipos de RF y realizar una medición automatizada, este era uno de los objetivos del trabajo. Porfalta de tiempo y debido al escaso conocimiento del lenguaje de programación Python, no fueposible llegar a un software para realizar mediciones automatizadas. Aún así, se obtuvieron avancesen el tema y debido a su importancia se continuará estudiando en el futuro.

La siguiente tabla muestra los objetivos cumplidos y los que no pudieron terminarse.

Cumplidos No llegaron a cumplirse

1. Realización del mecanismo de rotación2. Realización del circuito de control3. Desarrollo del software4. Ensamblado final, resultando en un

equipo usable

1. Desarrollo del software para PC, capazde realizar una medición automatizadascontrolando los equipos del laboratorio

2. Eliminación de los equipos de RF,mediante la utilización de un kit desoftware defined radio (SDR)

15

Page 16: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Capitulo 2

2.1 Mecánica

El equipo debe ser capaz de rotar una antena sobre el eje Z, conociendo en cada instante suposición. Controlado remotamente. Se busca en cada etapa del desarrollo, utilizar recursosdisponibles para abaratar los costos y hacer factible el proyecto.

Los problemas a resolver son tres. Por un lado la parte mecánica, definir el mecanismo a utilizar ycomo se lo va a construir. Luego es necesario desarrollar la parte electrónica, que es necesaria paracontrolar el o los motores, recibir las señales de el o los actuadores y tiene que poseer la interfazpara comunicarse. Por último, dado que se va a utilizar un microcontrolador, el tercer problema aresolver es el firmware del microcontrolador, que va a comandar la electrónica.

Para definir la parte mecánica se tuvieron en cuenta cosas:

• Se tiene que adaptar al trípode disponible

• Se tiene que diseñar un eje con sus rodamientos que soporte el peso necesario que gire con

una fricción mínima, teniendo en cuenta que la parte superior tiene que ser de materialdieléctrico

• Es necesario usar un motor con suficiente torque para hacer rotar el eje

• Hay que definir la transmisión entre el motor y el eje

• Hay que definir el ensamble de todos los componentes

• El diseño tiene que permitir conocer la posición del eje en todo momento

16

Page 17: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Como base se utilizó un trípode existente que se muestra en la Imagen 9, originalmente concebidopara iluminación, que fue adquirido por el laboratorio con el propósito de medir antenas. El mismoes suficientemente robusto, y posee un tope con una chapa con agujeros (Imagen 10). Se aprovechóel tope disponible y sus agujeros como soporte para el motor y el gabinete con el circuito de control.

El equipo fue fabricado sin modificar el trípode original, por lo que es posible volver a su estadoanterior si es necesario.

Se utilizó el software libre de dibujo en 3D Blender para realizar el diseño, de esta forma se puedever como va a quedar el sistema completo antes de la fabricación. Además las piezas dibujadas sepueden exportar en formato STL para luego ser fabricadas con una impresora 3D.

Afortunadamente contamos con la ayuda de las impresoras 3D que nos permiten solucionar lamayoría de los problemas mecánicos con facilidad. Para fabricar las piezas se utilizó el plásticoABS como materia prima.

Primero se dibujó el trípode original con su tope que se usó de soporte. Luego de definido el motora utilizar, se eligió su ubicación y se diseñaron los engranajes.

La Imagen 11 muestra el diseño completo de la parte mecánica. Y la Imagen 12 muestra el desglosede las piezas que lo componen.

17

Imagen 9: Trípode original

Imagen 10: Detalle del tope

Page 18: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Para conocer la posición angular del la antena en cada momento, se tuvieron en cuenta dosopciones.

La primera consiste de un motor de corriente continua con un sensor de posición que puede estarconstituido por un encoder. De esta manera podríamos realimentar la posición al microcontroladormediante el encoder, y realizar correcciones de la posición en tiempo real. Dependiendo el tipo deencoder utilizado, es posible que se necesite también un fin de carrera para detectar una posicióninicial.

La segunda opción fue copiada de las impresoras 3D, y se basa en utilizar un motor paso a paso conun sensor de posición inicial. Dado que se conoce la cantidad de pasos que realiza el motor, porqueson órdenes generadas por el mismo microcontrolador, es posible conocer la posición en todomomento. Partiendo de una posición inicial a la que llamamos cero y contando los pasos que serealizan en uno u otro sentido. Este método no requiere el uso del encoder, y funciona siempre ycuando el motor no se trabe perdiendo pasos. Se eligió esta opción, por ser más sencilla deimplementar mecánicamente, y porque su funcionamiento está suficientemente probado en equiposcuyo funcionamiento depende de la posición, como por ejemplo una CNC. Para que este sistemafuncione, es necesario evitar que el motor pierda pasos. Esto se logra eligiendo un motor con eltorque suficiente, y logrando que el eje gire con la mayor suavidad posible.

18

Imagen 11: Diseño 3D

Page 19: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Se incorporó además una reducción mecánica formada por dos engranajes que permite incrementar el torque en el eje, a costa de perder velocidad de rotación. En nuestra aplicación la velocidad no es un problema siempre y cuando la velocidad máxima permita realizar una vuelta de la antena cada doce segundos.

Se eligió una varilla roscada M8 (8mm de diámetro) como eje porque permite agregar tuercas yarandelas para sostener las piezas. El tope del mástil tiene un agujero central (Imagen 10), pordonde se pasó el eje.

Es necesario lograr que el eje gire con total libertad independientemente del peso de la antena, paraevitar forzar el motor, minimizando el riesgo de perder pasos. Elegir los rodamientos no fue tareasencilla. Originalmente se buscó un rodamiento que permita sostener el eje desde abajo, unrodamiento cónico o axial capaz de resistir cargas radiales y axiales en simultáneo. Debido a suprecio, y a que el peso a soportar es de pocos kilos se nos aconsejó usar el modelo 608ZZ, estemodelo es muy común ya que se usa en los skates y por lo tanto económico. Está diseñado parasoportar cargas radiales, pero como el peso a manejar es de pocos kilogramos podrá soportar lascargas axiales. Aprovechando que estos rodamientos son económicos utilizamos cuatro.

Se diseñaron e imprimieron soportes para los rulemanes, que se colocaron dentro del caño deltrípode. El superior, el de la izquierda en la Imagen 13, solo tiene que resistir fuerzas lateralesmanteniendo el eje centrado, tiene una parte mas fina que entra dentro del caño y un bordeensanchado que permite que apoye sobre el borde superior del caño. Este es sostenido en su lugargracias al apoyo en el caño y el tope del trípode que se coloca luego. Los soportes fueron diseñadosde manera de no impedir la regulación en altura original que posee el trípode.

19

Imagen 12: Desglose de piezas

Page 20: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

El soporte inferior, el de la derecha en la Imagen 13, tiene que sostener verticalmente el peso de laantena y tiene que sostenerse a si mismo dentro del caño. Afortunadamente, el caño del trípode tieneagujeros, cada 10 centímetros aproximadamente. Se resolvió el anclaje del soporte inferior usandodos tornillos perpendiculares al eje, que hacen fuerza hacia afuera gracias a dos tuercas incrustadasen el interior del soporte. Estos tornillos poseen cabeza redondeada de diámetro mayor que losagujeros del caño.

Para el armado se introduce el soporte con los tornillos y los rulemanes en el caño. A la alturadeseada se hace coincidir los tornillos de ajuste con los agujeros en el caño y usando undestornillador phillips que pasa por el agujero se desenroscaron los tornillos de ambos lados, cómola cabeza es mayor que el agujero y de forma redondeada, producen una presión hacia afuerasosteniéndose del agujero del caño pero sin sobresalir hacia afuera del caño.

En la varilla roscada se colocaron 2 tuercas M8 que apoyan sobre los rulemanes del soporte inferior,siendo este el apoyo del peso de todo el conjunto móvil sobre el rodamiento.

El movimiento de rotación se realiza con un motor paso a paso de alto torque, en formato NEMA17similar a los utilizados en las impresoras 3D. Este motor posee una resolución de 200 pasos porvuelta. Se utiliza otra pieza impresa para sostener el motor al tope del mástil.

Para la transmisión entre el motor y el eje se eligieron engranajes de doble hélice, cuyos dientestienen forma de V porque permiten un movimiento más suave y silencioso que los dientesperpendiculares (estos engranajes son la fuente de inspiración del emblema de la marca Citröen), yno producen fuerzas laterales como los dientes oblicuos. No son sencillos de fabricar conherramientas convencionales, pero con las impresoras 3D este problema está resuelto.

20

Imagen 13: Soportes impresos, con sus rodamientos

Page 21: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

En el eje del motor se coloca un engranaje pequeño y en el eje del trípode se coloca otro muchomayor, logrando un incremento en el torque y en consecuencia una reducción en la velocidad. Estosengranajes fueron dibujados por el software OpenSource de diseño3D OpenSCAD. Este programapermite dibujar objetos a partir de un “código fuente”, esto permite desarrollar piezasparametrizables adaptables a cualquier aplicación. Se descargó de la WEB el código fuente parahacer los engranajes y luego se compiló produciendo los archivos con el dibujo en 3D de losmismos [3].

Fue necesario ajustar los parámetros de los engranajes para poder tener una buena relación en lareducción, y a su vez lograr que ambos engranajes tengan el mismo módulo para que “engranen”[4]. Una complicación extra fue tener fijada la distancia entre los ejes, debido a la forma del topedel trípode. El engranaje grande tiene 131 dientes y el chico tiene 15, por lo tanto, la reducciónresultante fue de 8,7333 a 1. Una modificación a realizar a corto plazo será reemplazar estosengranajes por un par con relación 9 a 1, para que la cantidad de pasos de motor para recorrer 360grados sea un número entero. Para lograr esto, se puede reemplazar el engranaje grande por uno de135 dientes.

El diseño de este engranaje grande viene con un hueco con forma de tuerca para poner en el eje. Sele incrustó una tuerca M8 al centro del engranaje para que quede solidario con la varilla roscada deleje.

21

Page 22: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Con la reducción implementada, una vuelta del eje principal se puede dividir en 1754 pasos demotor. O sea que cada paso de motor equivale a 0,2 grados de rotación. Esta es nuestraresolución angular.

Finalmente se diseño e imprimió una última pieza que se coloca sobre el engranaje grande aferradaa la varilla M8 del eje, y servirá para sostener un caño plástico que se sostendrá la antena.

En ensamble final se muestra en la Imagen 14, con el motor del lado izquierdo y un gabinete con laelectrónica de control a la derecha y el caño rojo que se colocó sobre el eje.

22

Imagen 14: Equipo armado

Page 23: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Capitulo 3

3.1 Electrónica

Se desarrolló la electrónica completa del equipo. Desde la fuente de alimentación con sutransformador hasta la circuitería de control. Se contaba con un gabinete de aluminio y untransformador de 9v+9v, que fueron aprovechados. El circuito impreso fue diseñado para adecuarsea las dimensiones del gabinete.

Para el control se eligió un microcontrolador AVR ATMEGA8, de 8 bits (Imagen 15). Estemicrocontrolador posee todo lo necesario para esta aplicación. Cuenta con un puerto serie para lacomunicación. Suficientes puertos de entrada/salida para controlar hasta 3 ejes. Oscilador integrado,aunque se utilizó un cristal externo de 8MHz para tener un menor error en la sincronización delpuerto serie. La memoria de programa es de 8k bytes, tiene 1k de RAM y 512bytes de EEPROM noutilizada en este proyecto, pero que puede ser de utilidad en el futuro.

Otra razón que influyó en el momento de elegir este microcontrolador fue que ya disponíamos delmismo y de un programador, por lo que se evitó un costo extra. Además viene en un encapsuladoDIP28 lo que facilita el soldado y la fabricación del impreso, necesario por tratarse de un prototipo.

El movimiento del eje lo realiza un motor paso a paso modelo 17HS8401 (Imagen 16) a través de lareducción de los engranajes. Este posee dos bobinados independientes que se alimentan con cuatrocables. Alternando la polarización de estos bobinados, siguiendo una secuencia lógica particular, selogra que el motor realice pequeños movimientos en su eje llamados pasos. Invirtiendo la secuenciase cambia el sentido de rotación. Según las especificaciones del fabricante del motor, la corriente

23

Imagen 15: ATMEGA8 16PU

Page 24: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

máxima permitida en sus bobinados es de 1.8A , el torque estático máximo especificado en su hojade datos es de 52Ncm

Es posible controlar el motor paso a paso generando la secuencia de los pasos con elmicrocontrolador, y utilizando un puente H que se encarga de suministrar la potencia. Tambiénexisten soluciones integradas que realizan la secuencia automáticamente e incluyen el puente H.

Se utilizó una simplificación extra, un circuito pre-fabricado que incluye todo lo necesario paracontrolar el motor, simplificando el diseño de nuestro circuito. El driver utilizado es de la empresaPololu [5], e incluye el integrado A4988 de Allegro (Imagen 18). Este integrado es capaz desoportar hasta 2A por bobinado, con corte por temperatura y limitador de corriente ajustable. Ytiene una funcionalidad extra configurable llamada microstepping que permite subdividir cada pasoreal del motor en 2,4,8 o 16 pasos virtuales (otro modelo mas caro permite dividir en 32 pasos),logrando movimientos más suaves. Sin microstepping la onda de salida tiene forma cuadrada, peroactivando el microstepping se regula la corriente en pasos intermedios llegando a tener una“apariencia senoidal” como lo muestra el gráfico de la Imagen 17. De esta forma, los movimientostoscos del motor paso a paso se vuelven suaves como si se tratase de un motor de continua,reduciendo vibraciones.

24

Imagen 16: Motor NEMA17 utilizado

Page 25: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

El driver viene soldado en un pequeño PCB como lo muestra la Imagen 18, con pines para incluirloen un proyecto más grande. Posee un trimmer para ajustar la corriente de máxima, protegiendonuestro motor. El límite de corriente se calcula con la siguiente fórmula, midiendo VREF sobre eltrimner. Con Vref = 1.92v logramos que la corriente máxima permitida sea 1,2A

I MAX=V REF

8×Rs

Rs=0,2Ω

25

Imagen 18: Driver del motor

Imagen 17: Diferentes niveles de microstepping

Page 26: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Se utilizó un sensor infrarrojo como fin de carrera, para definir el punto inicial, donde el contadorde pasos vale cero. Se colocó un tornillo en el engranaje del eje principal y se pegó el sensor a latapa del gabinete, de forma tal que en un punto de la vuelta el tornillo atraviesa la barrera activandoel sensor dando aviso de su posición al microcontrolador.

El circuito impreso se diseñó usando otra herramienta de software libre y gratuita llamada KICAD.Este software permite desarrollar circuitos de calidad profesional, con chequeos de reglas de diseñoeléctricas en el esquemático y de dimensiones en el diseño del PCB. Es sencillo de utilizar, y fácilde aprender. Permite generar los archivos estándares de fabricación necesarios para que elLaboratorio de Circuitos Impresos de la Facultad (LCI) lo fabrique. Tiene menos herramientas queun software pago, pero la cantidad de usuarios y desarrolladores que tiene hacen que estéconstantemente evolucionando implementando nuevas funcionalidades.

Para diseñar el impreso, primero se define el esquemático con los componentes a utilizar. Luego serealiza una asociación de los componentes del esquemático con sus footprints. Finalmente seprocede al dibujo del PCB, marcando los límites, colocando los componentes que tienen que teneruna ubicación específica, colocando el resto de los componentes y dibujando las pistas del circuito.

En el diseño del impreso, se tuvo en cuenta la posibilidad de agregar 3 drivers para motores, juntocon 3 sensores de fin de carrera, y así poder controlar hasta 3 ejes. Ya que equipos profesionalespermiten ajustar la altura y rotar el eje de la antena.

26

Imagen 19: Sensor Infrarrojo

Page 27: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

En el momento del diseño del impreso no estaba definida la interfaz de comunicación. Por lo que sehizo lo más genérico posible para poder ser modificado en el futuro. Para la comunicación del ladodel microcontrolador se utilizará su puerto serial, utilizando los pines RXD y TXD. A partir de estose define el enlace con la computadora mediante interfaces con el puerto serie del microcontrolador.

Los equipos comerciales usan fibra óptica para que las comunicaciones no interfieran con lasmediciones, posiblemente esta sería la solución ideal, pero por el momento se dejó de lado estaposibilidad porque le agregaría complejidad al proyecto y aumentaría su costo, se analizará en elfuturo. Como la idea era mantener el dispositivo simple, se descartó Ethernet. Se pensó también enusar una comunicación serial RS232 adaptando los niveles de señal con un integrado MAX232, quetambién descartamos porque muchas computadoras ya no incluyen esta interfaz.

Se consideró también la posibilidad de usar comunicación infrarroja, que es una opción válida paraevitar interferencias con las mediciones. Los equipos de Lindgren permiten ser controlados con uncontrol remoto universal infrarrojo. Por esta razón se incluyó un transistor para alimentar un led IRy el footprint para un receptor infrarrojo del tipo IRM8601. También se puede estudiar en el futuroel estándar IrDA, para comunicación infrarroja.

Finalmente se optó por darle conectividad USB mediante el integrado FT232 de FTDI. Esteintegrado hace un puente entre el USB y el puerto serie del micro. Las computadoras lo detectancomo un puerto serie, cosa que facilita mucho la programación para el usuario. Casi todos loslenguajes de programación permiten controlar el puerto serie. Esta interfaz además es útil paradebugear mediante mensajes. Por el momento la comunicación se realiza con un adaptador USB-SERIE provisorio.

También se usarán 3 botones (1,2 vueltas, parar y regresar a cero), para darle la posibilidad decontrolarlo manualmente y realizar las mediciones como las venían haciendo hasta ahora.

Con la intención de economizar recursos, se intentó lograr un equipo funcional con sólo unaiteración tanto de la parte mecánica como de la electrónica, sólo se va a fabricar un circuito y seespera que funcione correctamente. De dedicó un mayor esfuerzo al diseño para no equivocarse niolvidarse cosas. Por tal motivo, en el diseño del circuito se tuvieron en cuenta varias alternativas decomunicación, entradas/salidas para usar en el futuro y la posibilidad de usar 3 drivers, aunque porel momento sólo tenemos un eje. Los bloques del circuito se pueden desacoplar mediante puentes,permitiendo deshabilitarlos o modificar el puerto al que se conectan en el microcontrolador. Aúnasí, se previó utilizar un puente de diodos tipo mesa externo al PCB. Pero luego de fabricado elcircuito impreso se cambió por un puente de diodos thru-hole, y se tuvo que modificarartesanalmente.

27

Page 28: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Habiendo definido el hardware a fabricar, se realizó diagrama en bloques simplificado que semuestra en la Imagen 20 . A partir de esto se realizó el esquemático usando el Eeschema del paqueteKiCad.

28

Imagen 20: Diagrama en bloques del circuito

Page 29: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

3.2 EsquemáticosEl esquemático del circuito se separó en 3 hojas por comodidad. La primera que se muestra en laImagen 21, muestra la fuente de alimentación. Debajo del circuito de alimentación hay unrectángulo que representa al esquemático principal de la siguiente hoja, este se puede ver en laImagen 22. Dentro del esquemático principal, en una esquina está el enlace al último esquemáticode la Imagen 23 que posee la conectividad USB.

29

Imagen 21: Esquemático de la alimentación

Page 30: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

30

Imagen 22: Esquemático principal

Page 31: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

31

Imagen 23: Esquemático comunicación FT232

Page 32: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

3.3 Diseño del impreso

El circuito impreso se diseñó para ser fabricado en el Laboratorio de Circuitos impresos de laFacultad ( http://labi.fi.uba.ar/lci ). Ellos fabrican circuitos simple y doble faz sin PTH (Plated ThruHole). Para garantizar la fabricación del impreso el laboratorio define una serie de especificacionesque se tienen que cumplir, estas se enumeran a continuación.

Pistas (tamaños mínimos)

• 12 mils de ancho de pista.

• 12 mils de separación entre pistas.

• 12 mils de separación entre pads y pistas.

• Diámetro del pad o vía= Diámetro del agujero + 24 mils.

Agujeros (mechas con los que cuenta el laboratorio son)

• 0,7 mm

• 0.9 mm

• 1 mm

• 1,1 mm

• 1,2 mm

• 1.3 mm

• 3 mm (no disponible momentáneamente)

Estas especificaciones se cumplieron en todo el circuito esceptuando el footprint del FT232 dondelos pads son más angostos que 12 mils y además no se cumple la distancia mínima entre pistas. Estazona no está garantizada por la fabricación aunque se ofreció hacer el mejor esfuerzo para lograrlo.Desafortunadamente, esta zona del circuito quedó defectuosa (sus pistas estaban en cortocircuito) yno pudo ser utilizada, anulando la posibilidad de incorporar este integrado en esta placa. Pero comosólo fue una alternativa extra de comunicación de la que podemos prescindir, decidió utilizar laplaca deshabilitando la zona. Es posible utilizar una placa externa en el caso de necesitar usar unFT232, con la ventaja de poder colocar el conector donde se desee.

Se optó por usar un circuito doble faz, con un plano de tierra en la cara inferior y un plano de +5ven la cara superior (la de los componentes), como se recomendó en la materia diseño para lamanufactura. Debido a que no está implementado el proceso PTH, las vías para conectar losimpresos de ambas caras se soldaron manualmente.

32

Page 33: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

3.4 PCB

La Imagen 24 muestra el impreso fabricado del lado de los componentes, en el centro con el nombreIC1 se encuentra el microcontrolador. A la derecha se pueden ver los footprints para los tres driversde los motores, sólo se usará uno de ellos. Arriba a la izquierda con el nombre J1 está el footprintdel conector USB, que no se usará porque se anuló el footprint del FT232. En la Imagen 25 se ve laotra cara del impreso. El footprint conflictivo está marcado arriba a la derecha.

33

Imagen 24: PCB - Cara superior - Componentes

Imagen 25: PCB - Cara inferior

Page 34: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

3.5 Pines del microcontrolador

El siguiente marco, muestra la configuración de los puertos del microcontrolador luego de realizadoel esquemático. Esta lista es necesaria a la hora de hacer el software.

PIN 1 → RESET PIN 2 → RXD - PTO SERIE PIN 3 → TXD - PTO SERIE PIN 4 → PD2 - FIN_CARRERA_1 PIN 5 → PD3 - FIN_CARRERA_2 PIN 6 → PD4 - FIN_CARRERA_3 PIN 11 → PD5 - BOTON_1 PIN 12 → PD6 - BOTON_2 PIN 13 → PD7 - BOTON_3 PIN 14 → PB0 - SENTIDO_3 PIN 15 → PB1 - STEP_3 PIN 16 → PB2 - ENABLE_3 PIN 17 → MOSI - PROGRAMADOR PIN 18 → MISO - PROGRAMADOR PIN 19 → SCK - PROGRAMADOR

PIN 23 → PC0 - SENTIDO_2 PIN 24 → PC1 - STEP_2 PIN 25 → PC2 - ENABLE_2 PIN 26 → PC3 - SENTIDO_1 PIN 27 → PC4 - STEP_1 PIN 28 → PC5 - ENABLE_1

34

Page 35: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

3.6 Armado

El circuito se fabricó en el LCI, el resultado fue aceptable, salvo por el error en el footprint delFT232, que al tener los pads muy pegados (fuera de las especificaciones del laboratorio) quedóinutilizable.

Se utilizó un gabinete de aluminio, colocando el circuito impreso dentro del mismo, junto con unfusible para el transformador. La Imagen 26 muestra el circuito ensamblado dentro del gabinete.

A pesar de que el circuito impreso se diseñó para acomodarse en una posición dentro del gabinete,en el momento del armado se decidió rotarlo 90º. Dejando más espacio para los conectores en losfrentes del gabinete. Esto se pudo hacer, porque se eliminó el conector USB. El circuito se sujetócon separadores con adhesivo, pegados a la base del gabinete. Estos cumplen su funcióncorrectamente evitando realizar cuatro agujeros en el gabinete, mejorando un poco la estética. Elcambio de posición del impreso permitió ahorrar un disipador, el del regulador LM7805, que seatornilló a una chapita de aluminio estructural del gabinete, siendo este punto de unión el únicocontacto entre la masa del circuito electrónico y la carcasa del gabinete evitando loops que puedenproducir interferencias.

El gabinete posee dos caras removibles que se utilizan para fijar los conectores. En una de ellas, laque se ve a la derecha en la Imagen 26, se instalaron 2 conectores PLT uno de 4 polos para el motory otro con 3 polos para el fin de carrera. La otra cara del gabinete se dejó sin agujeros, porque aúnno se definieron los conectores que se usarán en la comunicación y no se desea arruinar el frentecon un conector provisorio, el agujero permanece abierto dejando pasar los cables del programadordel microcontrolador y el cable del adaptador USB-Serie provisorio.

Como la interfaz de comunicación no está definida, se optó por no romper el frente opuesto.Actualmente se dejó abierto, permitiendo la conexión del programador y de un adaptadorUSB_Serie para el control.

En la cara superior se colocaron los 3 botones y se hicieron agujeros para atornillar el gabinete altope del trípode. Y se diseño una etiqueta con sus funciones que se puede ver en la Imagen 28.

35

Page 36: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Del lado externo, en la cara inferior del gabinete no visible en la Imagen 26 (no visible porque estádebajo del gabinete) se instaló el transformador, de 9v+9v y 30VA. Esta imagen muestra también eldriver montado con su pequeño disipador y junto al mismo tres jumpers que permiten configurar lafunción del microstepping. Se ve un capacitor que quedó más grande de lo esperado porque semodificó la tensión del mismo, pasó de 16v a 25v. Y la modificación que permitió colocar un puentede diodos en el impreso, arriba a la izquierda.

36

Imagen 26: Circuito de control

Page 37: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Capitulo 4

4.1 Firmware

El firmware será programado en el microcontrolador ATMEGA8. Teniendo en cuenta que el equipose controlará de forma manual y remota, debe recibir órdenes de una computadora y de unabotonera. Este programa controlará los movimientos del motor y mantendrá un registro con laposición del eje en todo momento. Se tomará como referencia la posición inicial del eje, llamadaposición cero. Esta posición se obtiene mediante un fin de carrera, haciendo girar el eje en sentidoantihorario hasta su activación. A partir de este punto se almacenarán en una variable losmovimientos realizados para conocer la posición.

El firmware fue programado en C bare-metal (sin sistema operativo), siguiendo el modelo demáquina de estados [6]. Se utilizó el compilador avr-gcc y se programó usando el programador delclub de robótica basado en usbtiny compatible con el programa avrdude.

Las tareas a realizar se dividieron en funciones. Estas funciones se llaman secuencialmente y deforma ininterrumpida en un loop infinito, llamado Super Loop [7], dentro de la función main.

Las funciones principales son las siguientes.

• La lectura de los botones: Detección del botón pulsado, y modificación de variables globales

asociadas al comando del botón• La recepción de comandos: Recepción de los comandos enviados desde la PC, y

modificación de variables globales asociadas• El control del motor: A partir de las variables globales, realizar los movimientos del motor,

para cumplir con los comandos solicitados. Envío de respuesta Ok, al finalizar elmovimiento.

La estructura de la función principal “main” consiste de una secuencia de inicialización de puertos ytimer seguida del Super Loop formado por un while(1)

Las funciones que se ejecutan dentro del Super Loop se diseñaron para comportarse de formacooperativa. Esto significa que cada función devuelve el hilo de ejecución en cualquier situaciónque involucre una pausa, permitiendo que otras funciones puedan realizar su tarea. Como lasfunciones son llamadas periódicamente dentro del loop, es posible que en un llamado posterior sepueda resolver la situación que involucró la pausa permitiendo que la función continúe con su tarea.Así se evita frenar el procesamiento durante un delay, en el caso que una función deba esperar a quese libere un recurso o si está esperando que suceda un evento en particular.

37

Page 38: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Se utiliza el watchdog timer disponible en este microcontrolador. Este timer resetea elmicrocontrolador al desbordar su cuenta en el caso de ocurrir un bloqueo. Para evitar que se reinicieel microcontrolador, es necesario poner el contador en cero con regularidad antes de que desbordela cuenta. Es una manera de detectar que el programa está corriendo.

La Imagen 27 muestra el diagrama de la función principal “main”. Primero se hacen lasinicializaciones y luego se entre en el loop.

38

Imagen 27: Ciclo del programa principal

Page 39: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Como los movimientos del motor se definen en pasos, se optó por utilizar la magnitud pasos comounidad de medida para controlar los movimientos del motor y su posición dentro del programa.También los comandos se definen en pasos. Será tarea del usuario convertir los pasos a grados almomento de procesar la información.

Se calculó la cantidad de pasos necesarios para que el eje realice un giro completo de 360º Dado que se obtuvieron mejores resultados en el movimiento usando microstepping 1/16 , 16 pasosdel software corresponden con un paso del motor.

Pasos/ vuelta=(Pasos /VueltaMotor )×RelacionEngranajes×16

Pasos/ vuelta=200×8,7333×16

Pasos /vuelta=27946

Para hacer que el motor se mueva 1 paso, es necesario enviar un pulso a una entrada llamada STEPdel driver. Dependiendo de la configuración del microstepping, el motor va a girar un paso o unafracción del mismo.

Se debe controlar con precisión el periodo entre paso, para tener una velocidad constante, quedepende el tipo de medición puede ser necesaria o no.

Se utiliza la interrupción del Timer 0 para controlar el tiempo entre los pasos del motor, de estaforma logramos controlar el periodo de los pulsos y en consecuencia la velocidad del motor.

Para que la velocidad de rotación sea compatible con el método de medición actualmente utilizado,es necesario poder dar una vuelta en 10 segundos. Necesitamos realizar 27946 pasos en menos de10 segundos. Por lo tanto, cada paso tiene que durar menos que 358 uS. Para dar un paso hay quesubir y luego bajar la señal de step, esto implica 2 interrupciones del timer. Para poder cumplir conesta condición, se configuró la interrupción del Timer 0 para que se ejecute el handler cada 0,1mS .

39

Page 40: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

En el programa hay dos variables globales de 32 bits y una booleana que son la base de nuestrocontrol. Estas variables son accesibles por todas las funciones, y se utilizan para coordinar elcontrol del equipo.

int32_t i32Posicion_motorint32_t i32Pasos_a_realizarbool bIrACero

La primera, i32Posicion_motor mantendrá un registro permanente de la posición del motor. Aliniciar el sistema, se realiza una puesta a cero haciendo girar el motor en sentido antihorario hastaactivar un fin de carrera, también se pondrá a cero manualmente con un botón y al recibir uncomando desde la PC. En ese momento la variable se pone en cero, a partir de ahí cada paso que dael motor suma o resta unidades a esta variable almacenando su posición.

La función Control_motor(void) dentro del archivo control.c lee la variable i32Pasos_a_realizar.Dependiendo su signo modifica el pin de sentido del paso e inicia una secuencia de paso queconsiste en subir y bajar la señal STEP. Esta secuencia se realiza con ayuda del timer_0 paracontrolar con precisión la duración del paso (que es configurable para variar la velocidad delmotor). Al realizar un paso, se decrementa la variable i32Pasos_a_realizar (el módulo en realidad),y en simultáneo modifica (incrementa o decrementa) la variable i32Posicion_motor para manteneractualizado el registro de la posición del eje. Si la variable bIrACero vale 1, se realiza una puesta acero, el eje se mueve en sentido antihorario de forma ininterrumpida sin importar el conteo de lospasos hasta que se active el sensor de fin de carrera. Al activarse este sensor, se detiene el motor yse reinicia la variable i32Posicion_motor.

40

Page 41: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

4.2 Botones

El equipo posee 3 botones, que permiten su uso manual, sin disponer de una computadora.Obteniendo prestaciones similares al equipo actualmente disponible.

Una de las funciones del loop, void Botones(void) , se encarga que leer el estado de los botones conel infaltable debouncer para evitar que el ruido del botón produzca accionamientos múltiples oerróneos.

Al presionar el botón “1,2 VUELTA”, el motor debe girar una vuelta y un poco más, para podersuperponer los extremos en un gráfico circular. La función le asigna a la variablei32Pasos_a_realizar el valor 34000 definido como “PASOS_MEDICION_MANUAL” en main.hLuego la función que controla el motor se encargará de enviarle los pasos al motor.

Al presionar el botón “FRENAR”, el motor debe detenerse, para ello, esta función le asigna a lavariable i32Pasos_a_realizar el valor 0, y además detiene el motor en el caso que esté realizandouna puesta a cero.

Al presionar el botón “A CERO” el motor debe girar en sentido antihorario hasta llegar al puntoinicial, cuando se active el fin de carrera. Para ello setea la variable booleana bIrACero haciendoque la función de control realice una puesta a cero.

41

Imagen 28: Detalle de los botones

Page 42: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

4.3 Comandos de control

La comunicación con la PC se realizará por el puerto serie utilizando la siguiente configuración.Estos valores se podrán modificar en el caso de utilizar un interfaz que requiera una velocidaddiferente.

Bitrate: 115200 bps

Data bits: 8

Bit de paridad: NO

Bits de stop: 1

Si se recibe un comando, la función void Recepcion_comandos_serie(void) lo interpreta, y modificael valor de la variable “i32Pasos_a_realizar” para que la función que controla el motor realice elmovimiento.

Formato del comando

Se utilizan comandos similares a los comandos G-CODE que controlan las máquinas CNC y lasimpresoras3D. Los comando de nuestro equipo tienen el siguiente formato:

TRXX YYYYYY

Los comandos comienzan con las letras “TR”. Luego vienen dos números XX que identifican deque comando se trata. Finalmente, si el comando necesita un parámetro, el mismo se compone por 6números YYYYYY ó por un sólo dígito Y si el comando es de control de velocidad

42

Page 43: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

La siguiente tabla muestra la lista de comandos implementados.

Parámetro Nombre Descripción

TR01 Sin parámetro ir a posición cero Hace rotar al eje en sentidoantihorario hasta activar elfin de carrera, seteando elvalor cero.

TR02 YYYYYY → 6 dígitos girar pasos en sentidohorario

Hace girar en sentidohorario la cantidad de pasosdefinida por YYYYYY, esnecesario ingresar los 6dígitos

TR03 YYYYYY → 6 dígitos girar pasos en sentidoantihorario

Hace girar en sentidoantihorario la cantidad depasos definida porYYYYYY, es necesarioingresar los 6 dígitos

TR04 YYYYYY → 6 dígitos Ir a posición Hace rotar el eje en elsentido necesario para ir a laposición yyyyyy (no aceptanúmeros negativos)

TR10 Y → 1 dígitos, de 0 a 9 Ajuste velocidad Cambia la velocidad de losmovimientos, con 10valores posibles

Para los comandos de movimiento, al finalizar con el mismo, el trípode responde “Ok” avisandoque realizó el movimiento pedido. Esta respuesta permite que un programa de mediciónautomatizada en la PC conozca en que posición se encuentra la antena, es necesario que el softwarede la PC tenga un registro propio con el historial de los movimientos realizados.

43

Page 44: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Capitulo 5

5.1 Resultados

El equipo funciona. Y pudo ser usado en la medición de antenas, incluso antes de estar terminado.Se probó con pesos superiores a un kilogramo, y no se perdieron pasos en el motor.

A modo demostrativo, se subió un vídeo a la pagina youtube donde se muestra al equipo enfuncionamiento, haciendo rotar una antena. Este vídeo no es un caso real de medición, sólo muestrael desempeño del equipo.

https://youtu.be/jYhNuhzMAjg

Uno de los requerimientos era que el equipo tenía que poder girar sin problemas el peso de unaantena experimental de 1kg. Para validarlo cargamos el eje con 5kg de libros como lo muestra laImagen 29, y comprobamos su funcionamiento. Enviamos el comando para realizar 100000 pasosen sentido horario y luego 100000 pasos en sentido anti-horario. El movimiento se realizócorrectamente retornando exactamente al punto inicial luego de los dos comandos, demostrando queno se perdieron pasos. El ensayo se realizó a velocidad de medición manual (velocidad por defecto)y a la velocidad máxima.

Esto demuestra que cumple con el objetivo inicial de 1kg, y que se puede cargar mucho más. El único inconveniente fue que el caño se curvó porque el peso estaba totalmente desbalanceado. Enel caso de una medición con una antena muy pesada, va a ser necesario usar un contrapeso o colocarel centro de masa de la antena justo sobre el eje.

44

Imagen 30: QR, Link al vídeo

Imagen 29: Prueba con 5kg de carga

Page 45: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

El equipo fue estrenado en una medición real con antena experimental que se usará en un satélite.Se trata de una antena compuesta por múltiples parches, diseñada para funcionar a 8Ghz. Pararealizar la medición, se sujetó la antena mediante un codo de 90º enroscado en el extremo superiordel caño.

La medición se realizó con un analizador de redes vectorial de 18Ghz, conectando un puerto a unaantena fija y el otro a una antena móvil. En este caso, se utilizó el método manual de controlutilizando los botones. Los datos fueron transmitidos y almacenados en una PC utilizando un scriptde Python.

45

Imagen 31: Primera antena medida

Page 46: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

En la Imagen 32 se muestran los resultados de dos mediciones realizadas. Los diagramas de laizquierda corresponden a las mediciones y los diagramas de la derecha a las simulaciones. Se puedever la correspondencia entre las simulaciones y las mediciones. Los diagramas superiores,corresponden a la medición del plano X-Y y los inferiores al plano X-Z

46

Imagen 32: Resultados obtenidos

Page 47: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

5.2 Costo del equipo

Se calculó el costo de los materiales. No todos los componentes fueron comprados. El laboratorioya disponía de algunas partes, como el trípode. Los valores de estos componentes son aproximados.

El cálculo se muestra en la siguiente tabla.

El costo del plástico usado por la impresora es despreciable, y el tiempo aproximado de impresiónfue de 20 hs.

Se estima el tiempo dedicado al desarrollo-diseño de aproximadamente 100 horas. Y el tiempodedicado a su fabricación, unas 50 horas.

Dado que se contaba con algunos componentes, entre ellos el trípode, el gasto realizado fue deaproximadamente 1000 pesos.

47

Descripción PrecioMotor NEMA17 17sh8401 550Driver A4988 80Circuito impreso 123Trípode de hierro 1000Transformador 9+9v 30va 300Microcontrolador 100Conectores/Botones 100Resto de componentes 300Rulemanes 50Bulonería 80Gabinete 200

TOTAL 2883

Page 48: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Capitulo 6

6.1 Conclusiones

Se logró un equipo de medición necesario para la Facultad, económico y práctico. El equipodesarrollado posee características similares a las de un equipo comercial. Como se trata de undesarrollo propio, se cuenta con los archivos de diseño y el código fuente de su software. Lo quepermite que se pueda modificar de acuerdo a la necesidad y se pueda replicar fácilmente.

El conocimiento obtenido servirá para futuros desarrollos en este mismo campo o en otrosproyectos de similares características.

El equipo se utilizará regularmente en la materia Propagación y Sistemas Irradiantes, en proyectosde los tesistas e investigaciones del Laboratorio de Radiación Electromagnética. También se esperaque sea utilizado por otros laboratorios como el de Laboratorio de Acústica.

Se comprobó que el dispositivo permite el movimiento controlado de una antena cuyo peso seamenor a 5kg, sin perder pasos del motor. Esto abarca a la mayoría de las antenas que se diseñan enel laboratorio. Es importante notar que la resolución obtenida de 0,2 grados obtenida es comparablecon la de los equipos comerciales.

Las piezas desarrolladas en 3D, y luego impresas permitieron desarrollar el equipo en una solaiteración. Fue una gran ventaja poder contar con una vista previa del equipo antes de su fabricación.Estas piezas evitaron altos costos de mecanización. Se obtuvieron piezas sólidas y con diseñoscomplejos como los engranajes de doble hélice.

El diseño basado en trípodes comerciales de iluminación permitió ahorrar mucho tiempo y trabajopropio. Además se usan piezas bien probadas en la industria, como los rulemanes, varillas roscadas,motores paso a paso que se espera evitarán fallas.

6.2 Próximos pasos

Utilizando equipo disponible en la Facultad, como el analizador de redes Agilent, se automatizarácompletamente la toma de datos y generación del diagrama de radiación. El mismo posee unainterfaz ethernet y permite ser controlado por una PC mediante un programa en Python.

Se continuará con el desarrollo de un programa que permita realizar toda la medición utilizando unkit SDR, disponible en el laboratorio para independizarse del VNA que no está siempre disponible yde esta manera lograr un equipo autónomo siempre disponible en el laboratorio

48

Page 49: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Actualmente el equipo se controla mediante un conversor USB-Serie basado en FT232. Se pretendereemplazarlo por un enlace infrarrojo, posiblemente también usando el integrado FT232. Evitandolos cables con señales que pueden producir interferencias dentro de la cámara anecóica.

Se estudiará la posibilidad de construir una plataforma giratoria, que permitirá incorporar un mástilcon control de altura y rotación del eje transversal.

49

Page 50: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Bibliografía - Referencias1: Constantine A. Balanis, Anthena Theory, 19972: Valentino Trainotti, Walter Gustavo Fano, Ingeniería Electromagnética, 3: Engranaje parametrizable para imprimir http://www.thingiverse.com/thing:3317514: Engranajes para electrónicos, apunte club de robótica 5: Controlador para motor paso a paso https://www.pololu.com/product/11826: Ing. Eric Pernia. Presentación, Clase3. Diagramas de Estado. Programación Orientada a Eventos7: Michael J Pont, Patterns for Time-Triggered Embedded Systems,

50

Page 51: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

ANEXOS

A) Diagrama de Gantt

51

Imagen 33: Diagrama de Gantt del proyecto

Page 52: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

B) Código fuente del engranaje grande

/*---------------------------------------------------------\ | From: Ekobots Innovation Ltda - www.ekobots.com | | by: Juan Sirgado y Antico - www.jsya.com.br | |----------------------------------------------------------| | Program Camera Rotate & Tilt - 2014/04/10 | | All rights reserved 2014 | |---------------------------------------------------------*/ include <Gear_Double_Helical.scad>; include <Gear_Grub.scad>; gearwithholes(); //---------------------------------------------------------| module gearwithholes() // base gear { hole_size = 13; // Diameter for hole hole_angle = 45; // Angle between holes hole_distance = 45; // Distance from gear center

difference() { // Gear double helical gear_dh(number_of_teeth=131, //Aparentemente este valor me sirve circular_pitch=180, diametral_pitch=false, gear_height=10, angle_twist=12, central_hole=8);

// Gear side holes for (r = [0:hole_angle:360-hole_angle]) // From 0 to 360 angle between holes rotate(r,0,0) translate([0,hole_distance,0]) // Distance from gear center cylinder(10.2,hole_size,hole_size,center=true,$fn=60); // Diameter for hole

// Gear side groove // translate([0,0,5]) // Up Z (gear_height / 2) // difference() // { // cylinder(10,22,23,center=true,$fn=60); // cylinder(10,10,10,center=true,$fn=60); // } // Gear screw head translate([0,0,3]) // Up Z ((gear size - screw head height) / 2) cylinder(4.2,7,7,center=true,$fn=6); // FN = Faces of head screw } } //---------------------------------------------------------|

52

Page 53: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

C) Código fuente del engranaje chico

/*---------------------------------------------------------\ | From: Ekobots Innovation Ltda - www.ekobots.com | | by: Juan Sirgado y Antico - www.jsya.com.br | |----------------------------------------------------------| | Program Camera Rotate & Tilt - 2014/04/10 | | All rights reserved 2014 | |---------------------------------------------------------*/ include <Gear_Double_Helical.scad>; include <Gear_Grub.scad>; gearwithgrub(); //---------------------------------------------------------| module gearwithgrub() // motor gear { union() { // Translate gear_dh Z = (gear_height / 2) Up translate([0,0,6]) gear_dh(number_of_teeth=15, circular_pitch=180, diametral_pitch=false, gear_height=12, angle_twist=12, central_hole=5); // Translate gear_grub Z = (grub_height / 2)*(-1) Down translate([0,0,-5]) gear_grub(grub_height=10, grub_diameter=20, grub_hole=1, hole_diameter=5, no_of_nuts=1, nut_angle=120, nut_elevation=0, nut_shaft_distance=1, m3_diameter=3, m3_nut_hex=1, m3_nut_size=6, m3_nut_height=3); } } //---------------------------------------------------------|

53

Page 54: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

D) Código fuente del Firmwaremain.h

/* * main.h * * Author: Ramiro Alonso */

#ifndef MAIN_H_ #define MAIN_H_

#include <avr/io.h> #include <avr/wdt.h> #include <avr/interrupt.h> #include <avr/eeprom.h> #include <string.h>

// Comentar para deshabilitar los mensajes de DEBUG // #define USAR_DEBUG

/***************************************************************************** * Definiciones *****************************************************************************/

#define TIEMPO_STEP 5 //MILISEGUNDOS - valor por defecto #define PASOS_POR_VUELTA 27946 //PASOS DEL MOTOR PARA DAR UNA VUELTA #define PASOS_MEDICION_MANUAL 34000 //PASOS DEL MOTOR PARA DAR UNA VUELTA

extern int32_t i32Posicion_motor; extern int32_t i32Pasos_a_realizar;

#endif /* MAIN_H_ */

54

Page 55: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

main.c

/* * Control para tripode medidor de diagramas de radiación * Programa principal * * main.c * * Author: Ramiro Alonso */

#include "main.h" #include "inicio.h" #include "macros.h" #include "Botones.h" #include "USART.h" #include "control.h" #include "comandos.h"

/***************************************************************************** * Variables *****************************************************************************/

uint32_t ulTiempo = 0; int32_t i32Posicion_motor = 0; int32_t i32Pasos_a_realizar = 0;

extern unsigned char ucTiempoAntirrebote;

unsigned int uiTiempoStep; unsigned int uiConfTiempoStep; unsigned char step_up;

/***************************************************************************** * Main *****************************************************************************/ /** Función de entrada del programa */

int main (void) { wdt_disable(); /* deshabilito el watchdog timer para evitar problemas al inicio

del programa */ cli(); /* Deshabilito las interrupciones globales */

/* Rutinas de inicio */ Inicio_Puertos(); Inicio_Timer0(); Inicio_USART_0();

//Inicializo variables step_up = 0; uiConfTiempoStep = TIEMPO_STEP; ucEstadoBotones = Esperando; //Inicializo la variable de estado de los botones bIrACero = true; // Para setear el cero en el inicio SET_BIT(STEP_1_PORT, STEP_1); SET_BIT(SENTIDO_1_PORT, SENTIDO_1); CLEAR_BIT(ENABLE_1_PORT, ENABLE_1);

sei(); // habilito las interrupciones globales wdt_enable(WDTO_250MS); // prendo el watchdog timer en 250 mseg

wdt_reset(); // Reseteo el WACHDOG timer

55

Page 56: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

while (1) { Botones(); //Leo los botones Recepcion_comandos_serie(); Control_motor();

wdt_reset(); // Reseteo el WACHDOG timer } }

/***************************************************************************** * Interrupcion Timer 0 *****************************************************************************/

ISR (TIMER0_OVF_vect ) { // Handler de interrupción del Timer 0. Se activa cada 0.1mS

TCNT0 = 243; // Para ajustar la frecuencia

// Para el control del motor if (uiTiempoStep != 0) uiTiempoStep --;

// Para los botones if (ucTiempoAntirrebote > 0){ ucTiempoAntirrebote --; }

// Para los botones if (uContTimeoutUSART0 > 0){ uContTimeoutUSART0 --; }

}

/***************************************************************************** * Interrupcion por defecto *****************************************************************************/ ISR(__vector_default) { // Handle por defecto en caso de activación erronea }

56

Page 57: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

inicio.h

/* * inicio.h * * Author: Ramiro Alonso * * TRIPODE GIRATORIO - CONFIGURACION DE LOS PUERTOS (ATMEGA8) * PIN 1 → RESET * PIN 2 → RXD - PTO SERIE * PIN 3 → TXD - PTO SERIE * PIN 4 → PD2 - FIN_CARRERA_1 * PIN 5 → PD3 - FIN_CARRERA_2 * PIN 6 → PD4 - FIN_CARRERA_3 * PIN 11 → PD5 - BOTON_1 * PIN 12 → PD6 - BOTON_2 * PIN 13 → PD7 - BOTON_3 * PIN 14 → PB0 - SENTIDO_3 * PIN 15 → PB1 - STEP_3 * PIN 16 → PB2 - ENABLE_3 * * PIN 17 → MOSI - PROGRAMADOR * PIN 18 → MISO - PROGRAMADOR * PIN 19 → SCK - PROGRAMADOR * * PIN 23 → PC0 - SENTIDO_2 * PIN 24 → PC1 - STEP_2 * PIN 25 → PC2 - ENABLE_2 * PIN 26 → PC3 - SENTIDO_1 * PIN 27 → PC4 - STEP_1 * PIN 28 → PC5 - ENABLE_1 * */

#ifndef INICIO_H_ #define INICIO_H_

/***************************************************************************** * Prototipos *****************************************************************************/ void Inicio_Puertos (void); void Inicio_Timer0 (void);

/***************************************************************************** * Definicion de los nombres de los puertos *****************************************************************************/

#define SENTIDO_1 PC3 #define SENTIDO_1_PORT PORTC #define SENTIDO_1_PIN PINC #define SENTIDO_1_DDR DDRC

#define STEP_1 PC4 #define STEP_1_PORT PORTC #define STEP_1_PIN PINC #define STEP_1_DDR DDRC

#define ENABLE_1 PC5 #define ENABLE_1_PORT PORTC #define ENABLE_1_PIN PINC

57

Page 58: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

#define ENABLE_1_DDR DDRC

#define SENTIDO_2 PC0 #define SENTIDO_2_PORT PORTC #define SENTIDO_2_PIN PINC #define SENTIDO_2_DDR DDRC

#define STEP_2 PC1 #define STEP_2_PORT PORTC #define STEP_2_PIN PINC #define STEP_2_DDR DDRC

#define ENABLE_2 PC2 #define ENABLE_2_PORT PORTC #define ENABLE_2_PIN PINC #define ENABLE_2_DDR DDRC

#define SENTIDO_3 PB0 #define SENTIDO_3_PORT PORTB #define SENTIDO_3_PIN PINB #define SENTIDO_3_DDR DDRB

#define STEP_3 PB1 #define STEP_3_PORT PORTB #define STEP_3_PIN PINB #define STEP_3_DDR DDRB

#define ENABLE_3 PB2 #define ENABLE_3_PORT PORTB #define ENABLE_3_PIN PINB #define ENABLE_3_DDR DDRB

#define FIN_CARRERA_1 PD2 #define FIN_CARRERA_1_PORT PORTD #define FIN_CARRERA_1_PIN PIND #define FIN_CARRERA_1_DDR DDRD

#define FIN_CARRERA_2 PD3 #define FIN_CARRERA_2_PORT PORTD #define FIN_CARRERA_2_PIN PIND #define FIN_CARRERA_2_DDR DDRD

#define FIN_CARRERA_3 PD4 #define FIN_CARRERA_3_PORT PORTD #define FIN_CARRERA_3_PIN PIND #define FIN_CARRERA_3_DDR DDRD

#define BOTON_1 PD5 #define BOTON_1_PORT PORTD #define BOTON_1_PIN PIND #define BOTON_1_DDR DDRD

#define BOTON_2 PD6 #define BOTON_2_PORT PORTD #define BOTON_2_PIN PIND #define BOTON_2_DDR DDRD

#define BOTON_3 PD7 #define BOTON_3_PORT PORTD #define BOTON_3_PIN PIND

58

Page 59: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

#define BOTON_3_DDR DDRD

#define USART_PORT PORTD #define USART_DDR DDRD #define USART_RXD PD0 #define USART_TXD PD1

#define F_CPU 8000000

#endif /* INICIO_H_ */

inicio.c

/* * inicio.h * * Author: Ramiro Alonso * * TRIPODE GIRATORIO - CONFIGURACION DE LOS PUERTOS (ATMEGA8) * PIN 1 → RESET * PIN 2 → RXD - PTO SERIE * PIN 3 → TXD - PTO SERIE * PIN 4 → PD2 - FIN_CARRERA_1 * PIN 5 → PD3 - FIN_CARRERA_2 * PIN 6 → PD4 - FIN_CARRERA_3 * PIN 11 → PD5 - BOTON_1 * PIN 12 → PD6 - BOTON_2 * PIN 13 → PD7 - BOTON_3 * PIN 14 → PB0 - SENTIDO_3 * PIN 15 → PB1 - STEP_3 * PIN 16 → PB2 - ENABLE_3 * * PIN 17 → MOSI - PROGRAMADOR * PIN 18 → MISO - PROGRAMADOR * PIN 19 → SCK - PROGRAMADOR * * PIN 23 → PC0 - SENTIDO_2 * PIN 24 → PC1 - STEP_2 * PIN 25 → PC2 - ENABLE_2 * PIN 26 → PC3 - SENTIDO_1 * PIN 27 → PC4 - STEP_1 * PIN 28 → PC5 - ENABLE_1 * */

#ifndef INICIO_H_ #define INICIO_H_

/***************************************************************************** * Prototipos *****************************************************************************/ void Inicio_Puertos (void); void Inicio_Timer0 (void);

/***************************************************************************** * Definicion de los nombres de los puertos *****************************************************************************/

59

Page 60: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

#define SENTIDO_1 PC3 #define SENTIDO_1_PORT PORTC #define SENTIDO_1_PIN PINC #define SENTIDO_1_DDR DDRC

#define STEP_1 PC4 #define STEP_1_PORT PORTC #define STEP_1_PIN PINC #define STEP_1_DDR DDRC

#define ENABLE_1 PC5 #define ENABLE_1_PORT PORTC #define ENABLE_1_PIN PINC #define ENABLE_1_DDR DDRC

#define SENTIDO_2 PC0 #define SENTIDO_2_PORT PORTC #define SENTIDO_2_PIN PINC #define SENTIDO_2_DDR DDRC

#define STEP_2 PC1 #define STEP_2_PORT PORTC #define STEP_2_PIN PINC #define STEP_2_DDR DDRC

#define ENABLE_2 PC2 #define ENABLE_2_PORT PORTC #define ENABLE_2_PIN PINC #define ENABLE_2_DDR DDRC

#define SENTIDO_3 PB0 #define SENTIDO_3_PORT PORTB #define SENTIDO_3_PIN PINB #define SENTIDO_3_DDR DDRB

#define STEP_3 PB1 #define STEP_3_PORT PORTB #define STEP_3_PIN PINB #define STEP_3_DDR DDRB

#define ENABLE_3 PB2 #define ENABLE_3_PORT PORTB #define ENABLE_3_PIN PINB #define ENABLE_3_DDR DDRB

#define FIN_CARRERA_1 PD2 #define FIN_CARRERA_1_PORT PORTD #define FIN_CARRERA_1_PIN PIND #define FIN_CARRERA_1_DDR DDRD

#define FIN_CARRERA_2 PD3 #define FIN_CARRERA_2_PORT PORTD #define FIN_CARRERA_2_PIN PIND #define FIN_CARRERA_2_DDR DDRD

#define FIN_CARRERA_3 PD4 #define FIN_CARRERA_3_PORT PORTD #define FIN_CARRERA_3_PIN PIND #define FIN_CARRERA_3_DDR DDRD

60

Page 61: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

#define BOTON_1 PD5 #define BOTON_1_PORT PORTD #define BOTON_1_PIN PIND #define BOTON_1_DDR DDRD

#define BOTON_2 PD6 #define BOTON_2_PORT PORTD #define BOTON_2_PIN PIND #define BOTON_2_DDR DDRD

#define BOTON_3 PD7 #define BOTON_3_PORT PORTD #define BOTON_3_PIN PIND #define BOTON_3_DDR DDRD

#define USART_PORT PORTD #define USART_DDR DDRD #define USART_RXD PD0 #define USART_TXD PD1

#define F_CPU 8000000

#endif /* INICIO_H_ */

Botones.h

/* * Botones.h * * Author: Ramiro Alonso */

#ifndef BOTONES_H_ #define BOTONES_H_

/***************************************************************************** * Prototipos *****************************************************************************/ void Botones(void);

extern unsigned char ucEstadoBotones;

#define Esperando 0 #define Boton_apretado 1 #define Boton_soltando 2 #define Botones_sueltos 3 #define ANTIRREBOTE_MS 50

#endif /* BOTONES_H_ */

61

Page 62: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

Botones.c

/* * Botones.c * * Author: Ramiro Alonso */

#include <avr/io.h> #include <stdint.h>

#include "macros.h" #include "inicio.h" #include "USART.h" #include "Botones.h" #include "control.h" #include "main.h" #include "comandos.h"

/***************************************************************************** * Variables externas *****************************************************************************/

unsigned char ucTiempoAntirrebote; unsigned char ucEstadoBotones; unsigned char ucBoton_apretado;

void Botones(void) {

switch (ucEstadoBotones){

case Esperando: if (bit_is_clear(BOTON_1_PIN, BOTON_1) || bit_is_clear(BOTON_2_PIN, BOTON_2) ||

bit_is_clear(BOTON_3_PIN, BOTON_3)) { //Ejecuto si aprietan un boton ucEstadoBotones = Boton_apretado; ucTiempoAntirrebote = ANTIRREBOTE_MS; } break;

case Boton_apretado: if (ucTiempoAntirrebote == 0) { //Si pasó el tiempo del antirrebote if(bit_is_clear(BOTON_1_PIN, BOTON_1)){ //Si sigue estándo apretado el boton INICIO

i32Pasos_a_realizar = PASOS_MEDICION_MANUAL; // Da una vuelta y un poco más para realizar una medicion manual

} else if(bit_is_clear(BOTON_2_PIN, BOTON_2)){ //Si sigue estándo apretado el boton PARAR

i32Pasos_a_realizar = 0; bIrACero = false;

} else if(bit_is_clear(BOTON_3_PIN, BOTON_3)){ //Si sigue estándo apretado el boton PAUSA

bIrACero = true; i32Pasos_a_realizar = 0; // Para cancelar los movimientos

anteriores } else{

ucEstadoBotones = Esperando; //Vuelvo al estado de prueba } ucEstadoBotones = Boton_soltando; }

62

Page 63: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

break;

case Boton_soltando: if (bit_is_set(BOTON_1_PIN, BOTON_1) && bit_is_set(BOTON_2_PIN, BOTON_2) &&

bit_is_set(BOTON_3_PIN, BOTON_3)) { ucEstadoBotones = Botones_sueltos; ucTiempoAntirrebote = ANTIRREBOTE_MS; } break;

case Botones_sueltos: if (ucTiempoAntirrebote == 0) { if (bit_is_set(BOTON_1_PIN, BOTON_1) && bit_is_set(BOTON_2_PIN, BOTON_2) &&

bit_is_set(BOTON_3_PIN, BOTON_3)) { ucEstadoBotones = Esperando;

} } break;

default: ucEstadoBotones = Esperando; break; }

}

comandos.h

/* * Botones.c * * Author: Ramiro Alonso */

#include <avr/io.h>#include <stdint.h>

#include "macros.h"#include "inicio.h"#include "USART.h"#include "Botones.h"#include "control.h"#include "main.h"#include "comandos.h"

/****************************************************************************** Variables externas*****************************************************************************/

unsigned char ucTiempoAntirrebote;unsigned char ucEstadoBotones;unsigned char ucBoton_apretado;

void Botones(void) {

switch (ucEstadoBotones){

case Esperando:

63

Page 64: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

if (bit_is_clear(BOTON_1_PIN, BOTON_1) || bit_is_clear(BOTON_2_PIN, BOTON_2) || bit_is_clear(BOTON_3_PIN, BOTON_3)) {

//Ejecuto si aprietan un boton ucEstadoBotones = Boton_apretado; ucTiempoAntirrebote = ANTIRREBOTE_MS; } break;

case Boton_apretado: if (ucTiempoAntirrebote == 0) { //Si pasó el tiempo del antirrebote if(bit_is_clear(BOTON_1_PIN, BOTON_1)){ //Si sigue estándo apretado el boton INICIO

i32Pasos_a_realizar = PASOS_MEDICION_MANUAL; // Da una vuelta y un poco más para realizar una medicion manual

} else if(bit_is_clear(BOTON_2_PIN, BOTON_2)){ //Si sigue estándo apretado el boton PARAR

i32Pasos_a_realizar = 0;bIrACero = false;

} else if(bit_is_clear(BOTON_3_PIN, BOTON_3)){ //Si sigue estándo apretado el boton PAUSA

bIrACero = true;i32Pasos_a_realizar = 0; // Para cancelar los movimientos

anteriores } else{

ucEstadoBotones = Esperando; //Vuelvo al estado de prueba } ucEstadoBotones = Boton_soltando; } break;

case Boton_soltando: if (bit_is_set(BOTON_1_PIN, BOTON_1) && bit_is_set(BOTON_2_PIN, BOTON_2) &&

bit_is_set(BOTON_3_PIN, BOTON_3)) { ucEstadoBotones = Botones_sueltos; ucTiempoAntirrebote = ANTIRREBOTE_MS; } break;

case Botones_sueltos: if (ucTiempoAntirrebote == 0) { if (bit_is_set(BOTON_1_PIN, BOTON_1) && bit_is_set(BOTON_2_PIN, BOTON_2) &&

bit_is_set(BOTON_3_PIN, BOTON_3)) {ucEstadoBotones = Esperando;

} } break;

default: ucEstadoBotones = Esperando; break; }

}

64

Page 65: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

comandos.c

/* * comandos.c * * Author: Ramiro Alonso * * Recepcion de comandos por el puerto serie, para control remoto del tripode * Formato del comando: * TRxx yyyyyy * * xx es el identificador del comando, las posibilidades son: * 01 ir a posicion cero → Hace rotar al eje en sentido antihorario hasta activar el fin de carrera, seteando el valor cero.→ Va sin parametro * 02 girar pasos en sentido horario → Hace rotar al eje en sentido horario la cantidad indicada en yyyyyy * 03 girar pasos en sentido antihorario → Hace rotar al eje en sentido antihorario la cantidad indicada en yyyyyy * 04 ir a posicion → Hace rotar el eje en el sentido necesario para ir a la posicion yyyyyy (no acepta numeros negativos) * 10 setear velocidad → permite cambiar la velocidad de rotacion (todavía no está implementado), el parametro es un solo caracter de 0 a 9 * * LOS VALORES yyyyyy son en pasos salvo para el comando TR10 en el que se representa la velocidad con un caracter de 0 a 9 */

#include <avr/io.h>

#include "USART.h" #include "macros.h" #include "inicio.h" #include "control.h" #include "Botones.h" #include "main.h"

extern unsigned int uiConfTiempoStep;

unsigned char ucComando_serie; unsigned char ucComando_control;

uint32_t ui32Parametro = 0;

// Esta funcion recibe datos por puerto serie y modifica el funcionamiento de la máquina con esos datos void Recepcion_comandos_serie(void){

Recepcion_USART_0(); // Recepcion de comandos

if (uchEstadoBufferRx_USART0==LLENO){ // Llegó un String de comando ucComando_serie = 0; ui32Parametro = 0; if((chBufferRx_USART0[0]=='T' || chBufferRx_USART0[0]=='t') && (chBufferRx_USART0[1]=='R' ||

chBufferRx_USART0[1]=='r')){ ucComando_serie = ((chBufferRx_USART0[2]-'0')*10 + (chBufferRx_USART0[3]-'0')); //Transformo los

caracteres del comando en un numero if (chBufferRx_USART0[4]==' '){ //Si el siguiente caracter es un espacio, entonces viene un parametro

yyyyyy ui32Parametro = (((chBufferRx_USART0[5]-'0')) * (uint32_t)100000 +

((chBufferRx_USART0[6]-'0'))*(uint32_t)10000 + ((chBufferRx_USART0[7]-'0'))*(uint32_t)1000 + ((chBufferRx_USART0[8]-'0')) * (uint32_t)100 + ((chBufferRx_USART0[9]-'0'))*(uint32_t)10 + (chBufferRx_USART0[10]-'0')); //Transformo los caracteres del parametro en un numero

65

Page 66: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

} if(ucComando_serie == 10){ //Si es un comando de control de velocidad

ui32Parametro = (chBufferRx_USART0[5]-'0'); //Transformo los caracteres del parametro en un numero

} }

uchEstadoBufferRx_USART0 = VACIO; // String leido, vuelvo a activar la recepcion

#ifdef USAR_DEBUG // Envía el parametrodel comando recibido por puerto serie

uint32_t Parametro_temp = 0; chBufferTx_USART0[0] = 'P'; chBufferTx_USART0[1] = 'a'; chBufferTx_USART0[2] = 'r'; chBufferTx_USART0[3] = ':'; chBufferTx_USART0[4] = ' '; Parametro_temp = ui32Parametro; chBufferTx_USART0[5] = Parametro_temp/100000 +

'0'; Parametro_temp = Parametro_temp - (100000 *

(Parametro_temp/100000)); chBufferTx_USART0[6] = Parametro_temp/10000 + '0';Parametro_temp = Parametro_temp - (10000 *

(Parametro_temp/10000)); chBufferTx_USART0[7] = Parametro_temp/1000 + '0'; Parametro_temp = Parametro_temp - (1000 *

(Parametro_temp/1000)); chBufferTx_USART0[8] = Parametro_temp/100 + '0'; Parametro_temp = Parametro_temp - (100 *

(Parametro_temp/100)); chBufferTx_USART0[9] = Parametro_temp/10 + '0'; Parametro_temp = Parametro_temp - (10 *

(Parametro_temp/10)); chBufferTx_USART0[10] = Parametro_temp/1 + '0'; chBufferTx_USART0[11] = '\n'; chBufferTx_USART0[12] = '\r'; Transmitir_Buffer_USART0 (chBufferTx_USART0,13);

#endif }

switch (ucComando_serie){ case 01:

bIrACero = true; i32Pasos_a_realizar = 0; // Para cancelar los movimientos

anteriores break;

case 02: i32Pasos_a_realizar = i32Pasos_a_realizar + ui32Parametro;

break;

case 03: i32Pasos_a_realizar = i32Pasos_a_realizar - ui32Parametro;

break;

case 04: i32Pasos_a_realizar = ui32Parametro - i32Posicion_motor ;

if(i32Pasos_a_realizar == 0){ // Si ya estoy en el punto al que se quiere ir

66

Page 67: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

chBufferTx_USART0[0] = 'O'; chBufferTx_USART0[1] = 'k'; chBufferTx_USART0[2] = '\n'; Transmitir_Buffer_USART0 (chBufferTx_USART0,3);

} break;

case 10: //Configuracion de velocidad if (ui32Parametro < 10 )

uiConfTiempoStep = 10 - ui32Parametro; break;

default: break; } ucComando_serie = 0; // Borra el comando

}

control.h

/* * control.h * * Author: Ramiro Alonso */

#ifndef CONTROL_H_ #define CONTROL_H_

#include <stdbool.h>

/***************************************************************************** * Prototipos *****************************************************************************/ void Control_motor(void);

extern bool bIrACero;

#endif /* CONTROL_H_ */

67

Page 68: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

control.c

/* * control.c * * Author: Ramiro Alonso */

#include <avr/io.h>

#include "macros.h" #include "inicio.h" #include "control.h" #include "main.h" #include "USART.h"

extern unsigned int uiTiempoStep; extern unsigned int uiConfTiempoStep; extern unsigned char step_up;

bool bIrACero;

// Esta funcion controla los movimientos del motor a partir de los comandos rebibidos void Control_motor(void){

if(bIrACero == true){ CLEAR_BIT(SENTIDO_1_PORT, SENTIDO_1); //Sentido antihorario if (bit_is_clear(FIN_CARRERA_1_PIN, FIN_CARRERA_1)){ // Si no estoy sobre el fin de carrera if(uiTiempoStep == 0){ uiTiempoStep = uiConfTiempoStep; //Reinicio el contador if (step_up!=0){ SET_BIT(STEP_1_PORT, STEP_1); step_up = 0; } else { CLEAR_BIT(STEP_1_PORT, STEP_1); step_up = 1; } } } else{ //Si llegué al cero bIrACero = false; i32Posicion_motor = 0; // Reinicia el contador de la posicion (en pasos) chBufferTx_USART0[0] = 'O'; chBufferTx_USART0[1] = 'k'; chBufferTx_USART0[2] = '\n'; Transmitir_Buffer_USART0 (chBufferTx_USART0,3); } } else{ if(uiTiempoStep == 0 && i32Pasos_a_realizar != 0){ if(i32Pasos_a_realizar > 0){ SET_BIT(SENTIDO_1_PORT, SENTIDO_1); //Sentido horario uiTiempoStep = uiConfTiempoStep; if (step_up==1){ i32Pasos_a_realizar --; i32Posicion_motor ++;

if(i32Pasos_a_realizar == 0){ // Si llegué al punto al que quería ir

68

Page 69: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

chBufferTx_USART0[0] = 'O'; chBufferTx_USART0[1] = 'k'; chBufferTx_USART0[2] = '\0'; Transmitir_Buffer_USART0 (chBufferTx_USART0,3); } SET_BIT(STEP_1_PORT, STEP_1); step_up = 0; } else { CLEAR_BIT(STEP_1_PORT, STEP_1); step_up = 1; } }

if(i32Pasos_a_realizar < 0){ CLEAR_BIT(SENTIDO_1_PORT, SENTIDO_1); //Sentido antihorario uiTiempoStep = uiConfTiempoStep; if (step_up==1){ i32Pasos_a_realizar ++; i32Posicion_motor --;

if(i32Pasos_a_realizar == 0){ // Si llegué al punto al que quería ir chBufferTx_USART0[0] = 'O'; chBufferTx_USART0[1] = 'k'; chBufferTx_USART0[2] = '\0'; Transmitir_Buffer_USART0 (chBufferTx_USART0,3); } SET_BIT(STEP_1_PORT, STEP_1); step_up = 0; } else { CLEAR_BIT(STEP_1_PORT, STEP_1); step_up = 1; } } } } }

69

Page 70: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

USART.h

/* * USART.h * * Author: Ramiro Alonso */

#ifndef _USART_H #define _USART_H

// La siguiente definicion habilita el eco del puerto serie // #define ECO_RECEPCION

/***************************************************************************** * Prototipos *****************************************************************************/ void Inicio_USART_0 (void); void Recepcion_USART_0(void); void Transmision_USART_0(void); void USART0_Flush(void); void Transmitir_Buffer_USART0 (char *chBufferPtr, int maxBufferSize); void Esperar_USART_O_TX (void);

/***************************************************************************** * Definiciones varias *****************************************************************************/ #define UBRR 8 // UBRR para una velocidad de transmisión de 115200bps con: fosc = 8MHz, U2X = 1 #define VALOR_U2X0 1 #define USART0_BUFFER_ZISE100 // tamaño máximo del buffer de datos del USART #define TIMEOUT_USART_0 100 // timepo de timeout de espera para USART en 0.1 milesimas segundo (timer2)

#define STANDBY_USART0_RX 0 #define RECIBIR_USART0 1

#define STANDBY_USART0_TX 0 #define TRANSMITIR_USART0 1 #define BYTE_MASK 0x000000FF // mascara para tomar el primer byte

// PARA LA RECEPCION DEL PUERTO SERIE extern unsigned char uchEstadoRecepcionUSART0; // variable de la maquina de estados del recepción por USART extern unsigned char uchEstadoBufferRx_USART0; // variable de estado del buffer de recepción del UASART, lleno o vacio extern unsigned char uchContAuxRx_USART0; // contador auxiliar de recepción extern char chBufferRx_USART0[USART0_BUFFER_ZISE]; // buffer de recepción USART del uc

// PARA LA TRANSMISION DEL PUERTO SERIE extern unsigned char uchEstadoTransmisionUSART0; // variable de la maquina de estados del transmisión por USART extern unsigned char uchEstadoBufferTx_USART0; // variable de estado del buffer de transmisión del USART, lleno o vacio extern unsigned char uchContAuxTx_USART0; // contador auxiliar de transmisión extern char chBufferTx_USART0[USART0_BUFFER_ZISE]; // buffer de transmisión USART del uc

70

Page 71: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

extern unsigned int uContTimeoutUSART0; // contador de timeout para espera del USART #endif /* _USART_H */

USART.c

/* * Control para tripode medidor de diagramas de radiación * * USART.c * Contiene las maquinas de estados correspondientes a la recepción y a la transmisión * por USART del uc. * * Author: Ramiro Alonso * */

#include "inicio.h" #include "USART.h" #include "macros.h"

#include <avr/io.h>

unsigned int uContTimeoutUSART0; // contador de timeout para espera del USART

/***************************************************************************** * Variables Máquina de estados de recepción *****************************************************************************/

unsigned char uchEstadoRecepcionUSART0; // variable de la maquina de estados del recepción por USART char chBufferRx_USART0[USART0_BUFFER_ZISE]; // buffer de recepción USART del uc unsigned char uchEstadoBufferRx_USART0; // variable de estado del buffer de recepción del UASART, lleno o vacio unsigned char uchContAuxRx_USART0; // contador auxiliar de recepción

/***************************************************************************** * Variables Máquina de estados de transmisión *****************************************************************************/

unsigned char uchEstadoTransmisionUSART0; // variable de la maquina de estados del transmisión por USART char chBufferTx_USART0[USART0_BUFFER_ZISE]; // buffer de transmisión USART del uc unsigned char uchEstadoBufferTx_USART0; // variable de estado del buffer de transmisión del USART, lleno o vacio unsigned char uchContAuxTx_USART0; // contador auxiliar de transmisión

/************************************************************************ * Inicio del USART ************************************************************************/ // La velocidad de transmisión es de 115,200 kbps, 8 bit de datos, sin control de paridad y 1 bit de parada.

void Inicio_USART_0 (void) { // cargo el UBRR necesario para el baudrate escogido UBRRH = (UBRR>>8) & BYTE_MASK;

71

Page 72: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

UBRRL = UBRR & BYTE_MASK;

// limpio el flag de transmisión y no multiprocessor mode UCSRA = (OFF<<TXC)|(VALOR_U2X0<<U2X)|(OFF<<MPCM);

// deshabilito la interrupción por recepción, por transmisión y por buffer vacio. Habilito la transmisión y la recepicón, 8n bit de datos y pongo en 0 el noveno bit

UCSRB = (OFF<<RXCIE)|(OFF<<TXCIE)|(OFF<<UDRIE)|(SET<<RXEN)|(SET<<TXEN)|(OFF<<UCSZ2)|(OFF<<TXB8);

// Modo asincronico, sin bit de paridad, un bit de stop, 8 bit de datos UCSRC = (SET<<URSEL)|(OFF<<UMSEL)|(OFF<<UPM1)|(OFF<<UPM0)|(OFF<<USBS)|

(SET<<UCSZ1)|(SET<<UCSZ0)|(OFF<<UCPOL);

uchEstadoBufferRx_USART0 = VACIO; uchEstadoBufferTx_USART0 = VACIO;

USART0_Flush(); } /************************************************************************ * Esta funcion recibe datos por el puerto serie y los almacena en * el buffer de recepcion ************************************************************************/ void Recepcion_USART_0(void) {

switch (uchEstadoRecepcionUSART0) { case STANDBY_USART0_RX:

if ((!(UCSRA & (SET<<RXC))) || (uchEstadoBufferRx_USART0 == LLENO)) { // Si el buffer está lleno o no recibo ningin caracter

uchEstadoRecepcionUSART0 = STANDBY_USART0_RX; } else { // Recibí un caracter y el buffer está vacio

uchContAuxRx_USART0 = 0; uchEstadoRecepcionUSART0 = RECIBIR_USART0;

} break;

case RECIBIR_USART0: if (uchContAuxRx_USART0 == 0) {

if ((UCSRA&(SET<<FE)) || (UCSRA&(SET<<DOR)) || (UCSRA&(SET<<PE))) { /* Frame Error (FE), Data OverRun (DOR) and Parity Error (UPE) */

USART0_Flush(); uchEstadoBufferRx_USART0 = VACIO; uchEstadoRecepcionUSART0 = STANDBY_USART0_RX;

} else {

chBufferRx_USART0[uchContAuxRx_USART0] = UDR; //Cargo el primer caracter

if ((chBufferRx_USART0[uchContAuxRx_USART0] == '\n') || (chBufferRx_USART0[uchContAuxRx_USART0] == '\r')) { /* chequeo no haber recibido un \0, sino corto la recepción */

chBufferRx_USART0[uchContAuxRx_USART0 + 1] = '\0';

#ifdef ECO_RECEPCION Esperar_USART_O_TX (); /* si el registro de

envio esta lleno, espero */ UDR = '\n'; Esperar_USART_O_TX (); /* si el registro de

envio esta lleno, espero */

72

Page 73: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

UDR = '\r'; #endif

uchEstadoBufferRx_USART0 = LLENO; //Fin de recepcion uchEstadoRecepcionUSART0 = STANDBY_USART0_RX;

} else {

#ifdef ECO_RECEPCION /* escribo el caracter que llegó*/ Esperar_USART_O_TX (); /* si el registro de

envio esta lleno, espero */ UDR = chBufferRx_USART0[uchContAuxRx_USART0]; #endif

uchContAuxRx_USART0 ++; uchEstadoRecepcionUSART0 = RECIBIR_USART0;

} }

} else if (!(UCSRA & (SET<<RXC))) { // Recibo un caracter, que no es el primero

uchEstadoRecepcionUSART0 = RECIBIR_USART0; } else if (uchContAuxRx_USART0 < (USART0_BUFFER_ZISE-1)) {

if ((UCSRA&(SET<<FE)) || (UCSRA&(SET<<DOR)) || (UCSRA&(SET<<PE))) { /* Frame Error (FE), Data OverRun (DOR) and Parity Error (PE) */

USART0_Flush(); uchEstadoBufferRx_USART0 = VACIO; uchEstadoRecepcionUSART0 = STANDBY_USART0_RX;

} else {

chBufferRx_USART0[uchContAuxRx_USART0] = UDR; // Cargo el dato en el buffer

if ((chBufferRx_USART0[uchContAuxRx_USART0] == '\n') || (chBufferRx_USART0[uchContAuxRx_USART0] == '\r')) { /* chequeo no haber recibido un \0, sino corto la recepción */

chBufferRx_USART0[uchContAuxRx_USART0 + 1] = '\0';

#ifdef ECO_RECEPCION Esperar_USART_O_TX (); /* si el registro de

envio esta lleno, espero */ UDR = '\n'; Esperar_USART_O_TX (); /* si el registro de

envio esta lleno, espero */ UDR = '\r'; #endif

uchEstadoBufferRx_USART0 = LLENO; uchEstadoRecepcionUSART0 = STANDBY_USART0_RX;

} else {

#ifdef ECO_RECEPCION /* escribo el caracter que llegó*/ Esperar_USART_O_TX (); // si el registro de

envio esta lleno, espero UDR = chBufferRx_USART0[uchContAuxRx_USART0]; #endif

uchContAuxRx_USART0 ++; uchEstadoRecepcionUSART0 = RECIBIR_USART0;

73

Page 74: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

} }

} else if (uchContAuxRx_USART0 == (USART0_BUFFER_ZISE-1)) {

chBufferRx_USART0[uchContAuxRx_USART0] = '\0'; uchEstadoBufferRx_USART0 = LLENO; uchEstadoRecepcionUSART0 = STANDBY_USART0_RX;

} else {

uchEstadoRecepcionUSART0 = RECIBIR_USART0; } break;

default: uchEstadoBufferRx_USART0 = VACIO; uchEstadoRecepcionUSART0 = STANDBY_USART0_RX; break;

} }

/************************************************************************ * USART vacio el buffer de recepción ************************************************************************/ void USART0_Flush(void) {

unsigned char uchDummy; unsigned int uContFlush0 = 0;

while (UCSRA & (SET<<RXC)) { uchDummy = UDR; // Hay que vaciar el buffer para desactivar la interrupción del puerto serie if (uContFlush0 == USART0_BUFFER_ZISE) {

break; } uContFlush0 ++;

} }

/************************************************************************ * Transmisión buffer conpleto por USART0 (de prepo y de corrido), bloqueante ************************************************************************/

void Transmitir_Buffer_USART0 (char *chBufferPtr, int maxBufferSize) {

int i = 0; while ((*(chBufferPtr + i) != '\0') && (i < (maxBufferSize-1))) {

Esperar_USART_O_TX (); // si el registro de envio esta lleno, espero UDR = *(chBufferPtr + i); i ++;

} Esperar_USART_O_TX (); // si el registro de envio esta lleno, espero UDR = '\0'; // Envío un ultimo

caracter /0 }

/************************************************************************ * Esperar USART0 para transmitir ************************************************************************/ void Esperar_USART_O_TX (void) {

uContTimeoutUSART0 = TIMEOUT_USART_0; while (!(UCSRA & (SET<<UDRE)) && (uContTimeoutUSART0 != 0));

}

74

Page 75: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

macros.h

75

Page 76: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

/* * macros.h * * Author: Ramiro Alonso */

#ifndef MACROS_H_ #define MACROS_H_

/***************************************************************************** * Defniciones varias *****************************************************************************/

#define ERROR 1 #define OK 0

#define SET 1 #define CLEAR 0

#define HIGH 1 #define LOW 0

#define ON 1 #define OFF 0

#define SI 1 #define NO 0

#define LLENO 1 #define VACIO 0

#define CERO 0x00 #define UNOS 0xFF

#define ENTRADA 0 #define SALIDA 1

/***************************************************************************** * Defnición de macros *****************************************************************************/

/* Activa un bit determinado en el registro. */ #define SET_BIT(registro, bitNumero) registro |= (SET<<bitNumero)

/* Pasiva un bit determinado en n registro. */ #define CLEAR_BIT(registro, bitNumero) registro &= ~(SET<<bitNumero)

/* Define la dirección de un pin determinado de un puerto. */ #define DIRECCION_PIN(DDR_puerto, pinNumero, direccion) if (direccion ==

76

Page 77: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

SALIDA) { DDR_puerto |= (SALIDA<<pinNumero); } else { DDR_puerto &= ~(SALIDA<<pinNumero); } \

/* Activa o desactiba el pull up de un pin determiando de entrada. */ #define PULL_UP_PIN(puerto, pinNumero, pullUp) if (pullUp == ON) { puerto |= (ON<<pinNumero); } else { puerto &= ~(ON<<pinNumero); } \

/* Retardos. */ #define NO_OPERATION for (unsigned int uRet = 2; uRet != 0; uRet--)

#endif /* MACROS_H_ */

77

Page 78: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

E) Extracto de la hoja de datos del motor 17HS8401

78

Page 79: Trabajo final de especialización en Sistemas Embebidoslaboratorios.fi.uba.ar/lse/tesis/LSE-FIUBA-Trabajo-Final-CESE... · Trabajo final de especialización en Sistemas Embebidos

F) Datos del rulemán 608ZZ

79