Você está na página 1de 175

TRABAJO FIN DE GRADO

Título

Diseño y desarrollo de un gimbal con motores brushless

Autor/es

John Alexander Montoya Osorio

Director/es

Javier Rico Azagra y Montserrat Gil Martínez

Facultad

Escuela Técnica Superior de Ingeniería Industrial


Titulación

Grado en Ingeniería Eléctrica

Departamento

Curso Académico

2015-2016
Diseño y desarrollo de un gimbal con motores brushless, trabajo fin de grado
de John Alexander Montoya Osorio, dirigido por Javier Rico Azagra y Montserrat Gil
Martínez (publicado por la Universidad de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.

© El autor
© Universidad de La Rioja, Servicio de Publicaciones,
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INDUSTRIAL

TRABAJO DE FIN DE GRADO

TITULACIÓN: Grado en
Ingeniería Electrónica Industrial y Automática

CURSO: 2015/2016 CONVOCATORIA: JULIO

TÍTULO:
Diseño y desarrollo de un gimbal con motores brushless

AUTOR: John Alexander Montoya Osorio

DIRECTOR/ES: Javier Rico Azagra


Montserrat Gil Martinez

DEPARTAMENTO: Ingeniería Eléctrica


Diseño y desarrollo de un gimbal
con motores brushless

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Resumen
El principal objetivo de este proyecto fue desarrollar un gimbal de dos ejes
controlado mediante un procesador de arquitectura ARM y en base a medidas
tomadas desde acelerómetros y giroscopios. Un gimbal es un sistema de
estabilización para cámaras el cual implementa motores eléctricos para corregir
movimientos no deseados. El objetivo es realizar tomas de video estables, aunque
conseguir esto supone un primer reto. “Bruhsless“ hace referencia a los motores
sin escobillas los cuales se explican mas adelante. El resto de proyectos sobre la
elaboración de gimbales encontrados, usaban tarjetas ya construidas para el
control de un gimbal, por esta razón en este documento se presenta una primera
aproximación para el desarrollo de un sistema gimbal a un nivel mas profundo. La
idea que se persigue es construir un sistema de control para un gimbal sin este tipo
de tarjetas comerciales.
Abstract
Our goal with this Project was to create a 2 axis brushless gimbal controlled solely
by an ARM microprocessor with input from an accelerometer/gyro. A gimbal is a
camera stabilization system than uses motors to correct unwanted camera
motion. The goal is to create perfectly steady footage, although smoothing out any
bumps is a reasonable first benchmark. “Brushless” refers to brushless motor
which we will explain more about later. All the other gimbal projects we found are
controlled using fabricated gimbal control boards so we wanted to approach the
project from a more fundamental level. Our hope was to create brushless gimbal
control without this kind of board, but rather using an ARM microcontroller.
Diseño y desarrollo de un gimbal
con motores brushless

INDICE GENERAL

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTÍNEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
Indice general

ÍNDICE GENERAL

Contenido

INDICE GENERAL ........................................................................................................... 3

MEMORIA ....................................................................................................................... 7

1. INTRODUCCIÓN ........................................................................................................9

1.1. ANTECEDENTES .......................................................................................................... 9


1.2. OBJETIVOS Y ALCANCE .............................................................................................10

1.3. OBJETIVOS ESPECÍFICOS ...........................................................................................11


1.4. METODOLOGÍA Y PLAN DE TRABAJO ........................................................................12
1.5. ORGANIZACIÓN DEL DOCUMENTO ...........................................................................14

2. DESCRIPCIÓN DEL SISTEMA .................................................................................. 15

2.1. FUNDAMENTOS .........................................................................................................15


2.2. MATERIALES..............................................................................................................18

3. SISTEMA DE COMUNICACIONES ............................................................................ 19

3.1. PROTOCOLO DE COMUNICACIÓN I2C ......................................................................19


3.2. TRANSFERENCIA DE DATOS A TRAVÉS DEL BUS I2C ..............................................20
3.3. CONDICIÓN DE INICIO Y PARADA (START/STOP) ..............................................23
3.4. PAQUETE DE DIRECCIÓN...........................................................................................23
3.5. ESCRITURA EN UN DISPOSITIVO ESCLAVO ...............................................................24
3.6. LECTURA DESDE UN DISPOSITIVO ESCLAVO ............................................................25

4. SISTEMA DE ESTIMACIÓN DE ACTITUD ................................................................. 26

4.1. FUNDAMENTOS PARA LA ESTIMACIÓN DE ACTITUD ...............................................26


4.1.1. ÁNGULOS DE EULER .........................................................................................26
4.1.2. CUATERNIOS......................................................................................................29
4.2. SENSORES INERCIALES DE BAJO COSTE ...................................................................31
4.2.1. GIROSCOPIOS .....................................................................................................32
4.2.2. ACELERÓMETROS..............................................................................................33
4.3. TRATAMIENTO DE DATOS .........................................................................................34
4.3.1. ESTIMACIÓN DE ACTITUD CON ACELERÓMETRO ...........................................34

Alexander Montoya Osorio 2


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Indice general
4.3.2. ESTIMACIÓN CON GIROSCOPIO.........................................................................39
4.4. ESTIMADOR POR FUSIÓN SENSORIAL ......................................................................43
4.4.1. ESTIMACIÓN CON FILTRO COMPLEMENTARIO ................................................43
4.4.2. ESTIMACIÓN CON FILTRO MADWICK ...............................................................45

5. SISTEMA DE EXCITACIÓN PARA MOTORES BRUSHLESS ........................................ 47

5.1. MOTORES BRUSHLEES ..............................................................................................47


5.1.1. PARTES DE UN BLDC .......................................................................................48
5.1.2. PRINCIPIO DE FUNCIONAMIENTO Y CONTROL ................................................49
5.1.3. DRIVER DE CONTROL ........................................................................................51
5.2. TÉCNICAS DE CONMUTACIÓN PARA BLDC .............................................................52
5.2.1. TÉCNICA DE SEIS PASOS O SIXSTEP. CONMUTACIÓN TRAPEZOIDAL .............53
5.2.2. SPWM. SINUSOIDAL PULSE WIDTH MODULATION...........................................57
5.2.3. CURVA DE PAR OBTENIDA EN FUNCIÓN DEL MÉTODO DE CONMUTACIÓN ...61

6. SISTEMA DE CONTROL .......................................................................................... 63

6.1. ESTIMACIÓN DE LA FUNCIÓN DE TRANSFERENCIA .................................................65


6.2. EXPERIMENTO EN LAZO CERRADO MEDIANTE ENCODER INCREMENTAL.............65
6.3. EXPERIMENTO EN LAZO CERRADO MEDIANTE UNIDAD INERCIAL DE MEDIDA ....68
6.4. COMPARACIÓN ENTRE PLANTAS ..............................................................................70
6.5. DISEÑO DEL CONTROLADOR.....................................................................................72

7. DESCRIPCIÓN DEL HARDWARE EMPLEADO .......................................................... 74

7.1. TARJETA DE DESARROLLO ........................................................................................74


7.2. IMU (MPU-6050) .................................................................................................76
7.3. INVERSOR L6234 .....................................................................................................78
7.4. MOTOR GIMBAL .........................................................................................................78
7.5. PCB ..............................................................................................................................78

8. CONCLUSIONES ..................................................................................................... 80

ANEXOS ......................................................................................................................... 81

1. LIBRERIAS E IMPLEMENTACION DEL SOFTWARE8ERROR! BOOKMARK NOT


DEFINED.

1.1. LIBRERÍA TIMER ........................................... 8ERROR! BOOKMARK NOT DEFINED.


1.2. LIBRERÍA I2C ................................................ 8ERROR! BOOKMARK NOT DEFINED.
1.3. LIBRERÍA PWM E IMPLEMENTACION DEL SPWM8ERROR! BOOKMARK NOT
DEFINED.

1.4. LIBRERÍA PLL .............................................. 8ERROR! BOOKMARK NOT DEFINED.

Alexander Montoya Osorio 3


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Indice general
1.5. PROGRAMA PRINCIPAL. ............................... 8ERROR! BOOKMARK NOT DEFINED.

2. CODIGO ................................................................ERROR! BOOKMARK NOT DEFINED.

2.1. FICHERO PWM.H ........................................... ERROR! BOOKMARK NOT DEFINED.


2.2. CODIGO TIMERS ........................................... ERROR! BOOKMARK NOT DEFINED.
2.3. CODIGO I2C ..................................................... ERROR! BOOKMARK NOT DEFINED.
2.4. CODIGO PRINCIPAL.......................................... ERROR! BOOKMARK NOT DEFINED.
2.5. CODIGO PLL .................................................... ERROR! BOOKMARK NOT DEFINED.

PLANOS ..................................................................................................................... 117

1. PLANO NUMERO UNO. ESQUEMA ELÉCTRICO .................................................... 119

2. PLANO NUMERO DOS. CAPA INFERIOR DEL PCB .............................................. 120

3. PLANO NUMERO TRES. CAPA SUPERIOR DEL PCB ............................................ 121

4. PLANO NUMERO CUATRO. UBICACIÓN DE LOS COMPONENTES ......................... 122

PLIEGO DE CONDICIONES ...................................................................................... 123

1. DISPOSICIONES GENERALES .............................................................................. 125

1.1. OBJETO .................................................................................................................... 125


1.2. PROPIEDAD INTELECTUAL .................................................................................... 125
1.3. CONDICIONES GENERALES..................................................................................... 126
1.4. NORMAS LEYES Y REGLAMENTOS ......................................................................... 126

2. DEFINICIÓN Y ALCANCE ..................................................................................... 128

2.1. OBJETO DEL PLIEGO DE CONDICIONES ................................................................. 128


2.2. DOCUMENTOS QUE DEFINEN EL PROYECTO ......................................................... 128
2.3. COMPATIBILIDAD ENTRE DOCUMENTOS .............................................................. 129

3. ESPECIFICACIÓN TÉCNICA DE LOS COMPONENTES ............................................ 130

3.1. PCB ......................................................................................................................... 130


3.2. TARJETA ........................................................... ERROR! BOOKMARK NOT DEFINED.
3.3. REGULADOR ..................................................... ERROR! BOOKMARK NOT DEFINED.
3.4. L6432 .......................................................... ERROR! BOOKMARK NOT DEFINED.5
3.5. IMU ......................................................................................................................... 136

Alexander Montoya Osorio 4


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Indice general
3.6. MOTORES ................................................................................................................ 137

4. CONEXIÓN DE LOS COMPONENTES CON LA TARJETA .......................................... 138

5. CALIBRACIÓN Y MODIFICACIÓN DE PARÁMETROS SOFTWARE ......................... 139

6. CONDICIONES / ESPECIFICACIONES DE OPERACIÓN ......................................... 143

7. CONDICIONES ECONÓMICAS .............................................................................. 144

7.1. ERRORES EN EL PROYECTO ......................................................................... 144


7.2. LIQUIDACIÓN ..................................................................................................... 144
7.3. DISPOSICIÓN ...................................................................................................... 145

ESTADO DE LAS MEDICIONES ............................................................................... 146

1. ESTADO DE LAS MEDICIONES............................................................................. 148

1.1. MÓDULOS ELECTRÓNICOS: .................................................................................... 148


1.2. ELEMENTOS MECANICOS: ...................................................................................... 149
1.3. PCB:........................................................................................................................ 149
1.4. CABLEADO: ............................................................................................................. 150
1.5. RECURSOS HUMANOS:............................................................................................ 150

PRESUPUESTO ......................................................................................................... 151

1. PRESUPUESTO ............................................... 15ERROR! BOOKMARK NOT DEFINED.

2. CUADRO DE PRECIOS ..................................... 15ERROR! BOOKMARK NOT DEFINED.

3. DESGLOSE DEL PRESUPUESTO EN SUBAPARTADOS15ERROR! BOOKMARK NOT


DEFINED.

4. PRESUPUESTO GLOBAL ................................. 15ERROR! BOOKMARK NOT DEFINED.

Alexander Montoya Osorio 5


Universidad de la Rioja
Diseño y desarrollo de un gimbal
con motores brushless

Memoria

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
Memoria

ÍNDICE DE LA MEMORIA
1. NTRODUCCIÓN ......................................................................................................... 4

1.1. ANTECEDENTES .......................................................................................................... 4


1.2. OBJETIVOS Y ALCANCE ............................................................................................... 5

1.3. OBJETIVOS ESPECÍFICOS ............................................................................................. 6


1.4. METODOLOGÍA Y PLAN DE TRABAJO .......................................................................... 7
1.5. ORGANIZACIÓN DEL DOCUMENTO ............................................................................. 9

2. SCRIPCIÓN DEL SISTEMA ....................................................................................... 10

2.1. FUNDAMENTOS .........................................................................................................10


2.2. MATERIALES..............................................................................................................12

3. SISTEMA DE COMUNICACIONES ............................................................................ 13

3.1. PROTOCOLO DE COMUNICACIÓN I2C ......................................................................13


3.2. TRANSFERENCIA DE DATOS A TRAVÉS DEL BUS I2C ..............................................14
3.3. CONDICIÓN DE INICIO Y PARADA (START/STOP) ..............................................17
3.4. PAQUETE DE DIRECCIÓN...........................................................................................17
3.5. ESCRITURA EN UN DISPOSITIVO ESCLAVO ...............................................................18
3.6. LECTURA DESDE UN DISPOSITIVO ESCLAVO ............................................................19

4. SISTEMA DE ESTIMACIÓN DE ACTITUD ................................................................. 21

4.1. FUNDAMENTOS PARA LA ESTIMACIÓN DE ACTITUD ...............................................21


4.1.1. ÁNGULOS DE EULER .........................................................................................21
4.1.2. CUATERNIOS......................................................................................................24
4.2. SENSORES INERCIALES DE BAJO COSTE ...................................................................26
4.2.1. GIROSCOPIOS .....................................................................................................27
4.2.2. ACELERÓMETROS..............................................................................................28
4.3. TRATAMIENTO DE DATOS .........................................................................................29
4.3.1. ESTIMACIÓN DE ACTITUD CON ACELERÓMETRO ...........................................29
4.3.2. ESTIMACIÓN CON GIROSCOPIO.........................................................................34
4.4. ESTIMADOR POR FUSIÓN SENSORIAL ......................................................................38
4.4.1. ESTIMACIÓN CON FILTRO COMPLEMENTARIO ................................................39
4.4.2. ESTIMACIÓN CON FILTRO MADWICK ...............................................................41

5. SISTEMA DE EXCITACIÓN PARA MOTORES BRUSHLESS ........................................ 43

5.1. MOTORES BRUSHLEES ..............................................................................................43


5.1.1. PARTES DE UN BLDC .......................................................................................44

Alexander Montoya Osorio 2


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
5.1.2. PRINCIPIO DE FUNCIONAMIENTO Y CONTROL ................................................45
5.1.3. DRIVER DE CONTROL ........................................................................................47
5.2. TÉCNICAS DE CONMUTACIÓN PARA BLDC .............................................................48
5.2.1. TÉCNICA DE SEIS PASOS O SIXSTEP. CONMUTACIÓN TRAPEZOIDAL .............49
5.2.2. SPWM. SINUSOIDAL PULSE WIDTH MODULATION...........................................53
5.2.3. CURVA DE PAR OBTENIDA EN FUNCIÓN DEL MÉTODO DE CONMUTACIÓN ...58

6. SISTEMA DE CONTROL .......................................................................................... 60

6.1. ESTIMACIÓN DE LA FUNCIÓN DE TRANSFERENCIA .................................................62


6.2. EXPERIMENTO EN LAZO CERRADO MEDIANTE ENCODER INCREMENTAL.............62
6.3. EXPERIMENTO EN LAZO CERRADO MEDIANTE UNIDAD INERCIAL DE MEDIDA ....65
6.4. COMPARACIÓN ENTRE PLANTAS ..............................................................................67
6.5. DISEÑO DEL CONTROLADOR.....................................................................................69

7. DESCRIPCIÓN DEL HARDWARE EMPLEADO .......................................................... 71

7.1. TARJETA DE DESARROLLO ........................................................................................71


7.2. IMU (MPU-6050) .................................................................................................73
7.3. INVERSOR L6234 .....................................................................................................74
7.4. MOTOR GIMBAL .........................................................................................................75
7.5. PCB ..............................................................................................................................75

8. CONCLUSIONES ..................................................................................................... 77

Alexander Montoya Osorio 3


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

1. NTRODUCCIÓN

El presente documento titulado “Diseño y desarrollo de un gimbal con


motores brushless”, ha sido realizado por el alumno D. John Alexander Montoya
Osorio, con el fin de superar el Trabajo Fin de Grado y con él obtener el título de
Grado en Ingeniería Electrónica Industrial y Automática por la Universidad de La
Rioja. Para la realización del mismo se han seguido las indicaciones de D. Javier
Rico Azagra y Dña. Montserrat Gil Martínez, que han actuado como directores del
proyecto.

Las áreas científico técnicas en las que se enmarca este trabajo son,
principalmente, el Área de Ingeniería de Sistemas y Automática, y el de Tecnología
Electrónica

1.1. ANTECEDENTES

El propósito del proyecto es construir un sistema de estabilización de alta


calidad para cámaras de video usando motores brushless, estos dispositivos se
conocen comercialmente como Gimbal. Las principales ventajas de usar motores
brushless en lugar de otro motor se debe a que un BLDC (Brushless DC motor)
carece de engranajes, es fácil de instalar, pesa poco y presenta una dinámica
mucho más veloz que otro tipo de motores. Sin embargo para desarrollar un
sistema de estas características es necesario implementar algoritmos de
conmutación complejos, puesto que un BLDC debe ser electrónicamente
conmutado.

Un gimbales un soporte que permite la rotación de un objeto alrededor de


un eje. Si se montan tres gimbales de manera que sus ejes formen un sistema
ortogonal, este puede ser usado para mantener la orientación de un objeto
independientemente de las rotaciones que describa la estructura que soporta el
gimbal.

Dentro de las numerosas aplicaciones que se le da actualmente a un gimbal,


cabe destacar el gran uso que le ha dado la industria cinematográfica ya que
resulta ideal para suprimir la vibración que sufre la cámara durante la grabación
de video. Actualmente su coste de producción es bajo debido que los componentes
cada vez son más baratos y eficientes.

En la última década se ha popularizado el uso de gimbal sobre todo por el


auge de vehículos aéreos no tripulados, este hecho ha promovido el desarrollo de
tarjetas controladoras exclusivamente diseñadas para controlar un gimbal que
bien puede ser de 2 o 3 ejes. Estos dispositivos se conoce como: BGC (Brushless

Alexander Montoya Osorio 4


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Gimbal Controller) y están disponibles en el mercado. Todas ellas presentan la
misma topología y solo se diferencian en el número de ejes.

A lo largo de este documento se presenta el desarrollo integro de un sistema


gimbal de dos ejes. Las partes en las que se subdivide este proyecto abarcan el
diseño tanto a nivel mecánico (estructura) como de la parte de electrónica de
potencia y de control.

Para su implementación se ha empleado un microprocesador de


arquitectura Cortex ARM, una unidad inercial de medida o IMU y dos motores
brushless.

1.2. OBJETIVOS Y ALCANCE

La conclusión del proyecto que en este documento se propone, implica la


aplicación práctica de conceptos y conocimientos adquiridos durante la carrera en
diversas de las asignaturas del Grado en Ingeniería Electrónica. En este trabajo se
documenta el diseño de un sistema de control de posición para dos motores
brushless usando una Unidad Inercial de Medida o IMU por sus siglas en inglés,
como sensor. Con el fin de darle una utilidad práctica a este tipo de control se va a
diseñar un BGC o Brushless Gimbal Controller haciendo uso de una técnica de
conmutación conocida como SPWM (Sinusoidal Pulse Width Modulation). Mediante
esta técnica se pretende controlar al BLDC mediante una señal trifásica de la
misma manera que se hace con un motor trifásico convencional, sin embargo y
debido a que un motor brushless deber ser electrónicamente conmutado, se debe
modular una señal sinusoidal mediante señales PWM para excitar cada una de las
bobinas del motor. Una de las técnicas de conmutación más habituales para un
BLDC se conoce como 6 step o 6 pasos. Sin embargo esta técnica resulta ineficaz e
insuficiente para el control de posición basado en motores brushless debido a él
rizado en el par de salida y a la poca precisión obtenida.

Por otra parte, la elaboración de un gimbal basado en una unidad inercial de


medida supone el desarrollo de una librería en código C que implemente el
protocolo de comunicación I2C, ya que el sensor se comunica a través de este Bus.
Posteriormente será necesario aplicar un procedimiento de filtrado a las medidas
leías para mitigar problemas de ruido y el drift generado por los propios sensores.

La integración de todo el sistema supone la selección de un hardware y


software acorde a los requerimientos del sistema. Para el desarrollo del proyecto
será necesario integrar los siguientes elementos: un microprocesador, una unidad
inercial de medida, drivers de potencia para la conmutación de los motores,
motores, algoritmos de control, algoritmos de conmutación, filtros digitales,
modulación de señales, protocolos de comunicación y también implica el diseño de
un PCB que lo integre todo en la misma placa. Esta descripción demuestra

Alexander Montoya Osorio 5


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
claramente que para llevar a cabo el proyecto es necesario abarcar un amplio
rango de campos y materias para conducirlos hacia un mismo fin.

El propósito final y en la línea de los anteriores párrafos, es el de concluir un


proyecto que implique una aplicación directa y real de los conocimientos que se
van recolectando en varios áreas del rama durante el curso de esta carrera.

1.3. OBJETIVOS ESPECÍFICOS

A continuación se describen los objetivos específicos del Trabajo de Fin de


Grado.

• Objetivo 1: Desarrollo de un sistema de comunicaciones I2C para que el


microcontrolador genere el protocolo y posibilite la transferencia de
datos entre la CPU y el módulo de sensores a través del bus I2C.

• Objetivo 2: Desarrollo de un sistema de estimación que permita obtener


la actitud y orientación de la cámara a partir de los sensores de bajo
coste integrados en una unidad inercial de medida compuesta por
acelerómetros y giroscopios.

• Objetivo 3: Desarrollo de un sistema de excitación para un motor


brushless que no implemente sensores de tipo Hall.

• Objetivo 4: Desarrollo de un sistema de control de posición para


motores brushless que emplee para la realimentación la información
obtenida mediante los acelerómetros y los giroscopios.

• Objetivo 5: Diseño y construcción de una placa de circuito impreso para


la implementación del diseño en el sistema real. Esta debe contener la
electrónica de potencia, el microcontrolador, las conexiones del bus I2C,
las conexiones para el motor y la alimentación del todo el sistema.

• Objetivo 6: Diseño y construcción de una estructura mecánica sobre la


cual montar todo el sistema.

Alexander Montoya Osorio 6


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

1.4. METODOLOGÍA Y PLAN DE TRABAJO

Se describen las tareas realizadas y orientadas a la consecución de los


objetivos específicos del trabajo fin de grado. Dichas tareas representan a las
etapas en las que se fue dividendo el proyecto. A continuación se enumeran las
tares:

1. Investigación sobre técnicas de conmutación para motores brushless. Durante


esta fase se comprenden los principios físicos en los que se basa el
funcionamiento de un motor brushless, con el fin de encontrar una técnica
que permita la elaboración de un sistema preciso y de alto rendimiento.

2. Implementación de la técnica de conmutación SPWM. Una vez elegida la


técnica a usar, será necesario implementarla dentro del microprocesador.

3. Construcción del primer prototipo.

4. Desarrollo de filtros digitales para el acondicionamiento de las medidas.

5. Implementación de un modelo matemático basado en cuaternios para la


estimación de la orientación.

6. Desarrollo de un sistema de control de posición en lazo cerrado.

7. Ejecución de pruebas reales y análisis de resultados.

8. Construcción del soporte del gimbal.

9. Integración del sistema.

10. Redacción de documentos.

En las siguientes tablas se presenta una distribución temporal de las etapas,


en ellas cada columna representa una semana:

Alexander Montoya Osorio 7


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Primer semestre del año 2015

AÑO 2015
ENERO FEBRERO MARZO ABRIL MAYO JUNIO
T1
T2
T3
T4
T5
T6
T7
T8
T9
T10
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Segundo semestre del año 2015

AÑO 2015
JULIO AGOSTO SETIEMBRE OCTUBRE NOVIEMBRE DICIEMBRE
T1
T2
T3
T4
T5
T6
T7
T8
T9
T10
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Alexander Montoya Osorio 8


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Primer semestre del año 2016

AÑO 2016
ENERO FEBRERO MARZO ABRIL MAYO JUNIO
T1
T2
T3
T4
T5
T6
T7
T8
T9
T10
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

1.5. ORGANIZACIÓN DEL DOCUMENTO

Alexander Montoya Osorio 9


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

2. SCRIPCIÓN DEL SISTEMA

2.1. FUNDAMENTOS

Un gimbal de dos ejes está compuesto por una estructura mecánica que

Ilustración 2-1. Estrutura del gimbal

alberga dos motores situados de forma que puedan aplicar rotaciones, en


ejes independientes, sobre una estructura en la que se fija la cámara encargada de
la captura de imágenes. En la figura 2-1 aparece una representación 3D del gimbal
una vez terminado.

El sistema de control que gobierna cada uno de los motores es el encargado


de actuar sobre ellos de forma que la base del gimbal conserve una determinada
orientación. En las siguientes figuras se representa el gimbal en dos posiciones
diferentes. Véase como en ambos casos el giro combinado de los dos motores
produce que la base sobre la que se ubica la cámara se mantenga en una posición
fija. De este modo su orientación permanece inalterada pese al movimiento
exterior del sistema.

Esta característica es especialmente útil cuando se desea realizar una


captura de imágenes empleando un UAV multirotor
, ya que este tipo de equipos deben girar en sobre los ejes x e y para lograr su
desplazamiento. Por lo tanto, en ausencia de gimbal los movimientos del UAV
producen giros en la cámara, perdiendo el encuadre deseado.

Alexander Montoya Osorio 10


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 2-2. Rotacion del gimbal alrededor el eje del motor 1

Ilustración 2-3. Rotacion del gimbal alrededor el eje del motor 2

Para lograr la compensación de los giros aplicado en la estructura que


soporta la cámara, es necesario conocer en todo momento la orientación de la
misma con respecto de un sistema de referencias inercial. Para ello se emplean
sensores de bajo coste situados en la base del soporte de la cámara.
Tradicionalmente se emplean como sensores unidades de medida inercial, por
tratarse de equipos de bajo coste con precisión adecuada. No obstante, el empleo
de estos sensores de bajo coste repercute en un mayor esfuerzo de diseño, ya que
las medidas arrogadas por estos deben ser procesadas para inferir a partir de ellas
la orientación de la cámara.

Conocida la posición de la cámara, un sistema de control será el encargado


de determinar cuál es el giro necesario en cada uno de los ejes, y por lo tanto la
excitación necesaria en cada uno de los motores. Para lograr el cometido anterior
se emplean dos lazos de control SISO, que buscan en todo momento conservar el
ángulo en cada uno de los ejes.

Por último, las acciones de control generadas por los dos lazos de control
son traducidas en señales de excitación para los motores BLDC. Es decir, cada una
de las señales es procesada dando lugar a una lógica de conmutación de las fases
del motor.

Alexander Montoya Osorio 11


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

2.2. MATERIALES

Para el desarrollo del prototipo se han empleado los siguientes elementos


principales:

Los materiales usados para este proyecto se enumeran a continuación:


1. Tarjeta de desarrollo
2. Acelerómetros y giroscopios (IMU)
3. 2 motores brushless
4. Estructura de aluminio
5. Batería
6. Regulador de tensión 5 V
7. PCB
8. Componentes eléctricos pasivos

En la figura 2-4 se representan un esquema general del sistema en el que se


muestran los principales componentes con el fin de que se pueda intuir el
funcionamiento del equipo.

Ilustración 2-4. Componentes del gimbal

Alexander Montoya Osorio 12


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

3. SISTEMA DE COMUNICACIONES

A continuación se detallan todos los aspectos que conciernen al sistema de


comunicaciones empleado para establecer un enlace entre el sistema
microcontrolador y la unidad de medida inercial (IMU).

Téngase en cuenta que las comunicaciones representan una parte


importante del presente proyecto, dado que los sensores empleados para estimar
la orientación son fundamentales para el desempeño del sistema. Las pérdidas de
información entre el sensor y el procesador pueden dar lugar a comportamiento
erráticos, incluso desestabilizar el sistema, y por lo tanto se consideran
inasumibles.

Se ha optado por emplear el protocolo de comunicaciónI2C., conocido


como: Inter-Integrated Circuit. Todos los procesos de lectura de datos desde los
diferentes sensores (acelerómetros y giróscopos) se debe llevar a cabo siguiendo
este protocolo. La CPU se encarga de consultar periódicamente las medidas de
acelerómetros y giroscopios para así estimar la orientación de la base del gimbal.

El bus I2C facilita la comunicación entre microcontroladores, memorias y


otros dispositivos con cierto nivel de "inteligencia", sólo requiere de dos líneas de
señal y un común o masa. Fue diseñado a este efecto por Philips y permite el
intercambio de información entre muchos dispositivos a una velocidad aceptable,
de unos 100 Kbits por segundo, aunque hay casos especiales en los que se alcanzan
los 3,4 MHz.

A continuación se muestran los fundamentos de comunicación empleados.


El código desarrollado se ha omitido en la memoria por considerarse demasiado
extenso. Sin embargo, en los anexos del documento se incluyen las librerías
desarrolladas para establecer la comunicación entre los sensores y la unidad de
proceso.

3.1. PROTOCOLO DE COMUNICACIÓN I2C

El uso del bus I2C por numerosas empresas dedicadas a la elaboración de


periféricos para microprocesadores han hecho de este bus una de las principales
soluciones para la comunicación en sistemas embebidos ya que la mayoría de
componentes electrónicos tales como: sensores, ADC’s, drivers para motores
eléctricos y otros tipos de dispositivos, ofrecen esta alternativa de comunicación.
La principal característica de I²C es que utiliza dos líneas para transmitir la
información: una para los datos y otra para la señal de reloj. También es necesaria
una tercera línea, pero esta sólo es la referencia (masa).

Alexander Montoya Osorio 13


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Descripción de las señales:

• SCL (SystemClock) es la línea de los pulsos de reloj que sincronizan el sistema.


• SDA (System Data) es la línea por la que se mueven los datos entre los
dispositivos.
• GND (Masa) común de la interconexión entre todos los dispositivos
"enganchados" al bus.

Las líneas SDA y SCL para un dispositivo conectado al bus deben ser del tipo
drenaje abierto, es decir, un estado similar al de colector abierto, pero asociadas a
un transistor de efecto de campo (o FET). Se deben polarizar en estado alto
(conectando a la alimentación por medio de resistores "pull-up") lo que define una
estructura de bus que permite conectar en paralelo múltiples entradas y salidas.

Ilustración 3-1. Conexión de varios dispositivos al bus I2C

La figura 3-1 es suficientemente autoexplicativa. Las dos líneas del bus


están en un nivel lógico alto cuando están inactivas. En principio, el número de
dispositivos que se puede conectar al bus no tiene límites, aunque hay que
observar que la capacidad máxima sumada de todos los dispositivos no supere los
400 pF. El valor de los resistores de polarización no es muy crítico, y puede ir
desde 1K8 (1.800 ohms) a 47K (47.000 ohms). Un valor menor de resistencia
incrementa el consumo de los integrados pero disminuye la sensibilidad al ruido y
mejora el tiempo de los flancos de subida y bajada de las señales.

3.2. TRANSFERENCIA DE DATOS A TRAVÉS DEL BUS I2C

Habiendo varios dispositivos conectados sobre el bus, es lógico que para


establecer una comunicación a través de él se deba respetar un protocolo.
Digamos, en primer lugar, lo más importante: existen dispositivos maestros y
dispositivos esclavos. Sólo los dispositivos maestros pueden iniciar una
comunicación.

Alexander Montoya Osorio 14


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 3-2. Un dispositivo actuando como maestro

Cuando el bus esta libre las dos líneas permanecen en estado alto para
iniciar una comunicación el master debe generar una condición de START. El
primer byte que se transmite luego de la condición de inicio contiene siete bits que
componen la dirección del dispositivo que se desea seleccionar, y un octavo bit que
corresponde a la operación que se quiere realizar con él (lectura o escritura).

Todas las transferencias son de 9 bits, los 8 primeros contienen información


y el último corresponde al bit de ACK o bit de reconocimiento mediante el cual se
verifica que la transferencia se ha realizado con éxito o no.
Si el dispositivo cuya dirección corresponde a la que se indica en los siete
bits está presente en el bus, éste contesta con un bit en bajo, ubicado
inmediatamente luego del octavo bit que ha enviado el dispositivo maestro. Este
bit de reconocimiento le indica al dispositivo maestro que el esclavo reconoce la
solicitud y está en condiciones de comunicarse. Aquí la comunicación se establece
en firme y comienza el intercambio de información entre los dispositivos.

Si el bit de lectura/escritura (R/W) fue puesto en esta comunicación a nivel


lógico bajo (escritura), el dispositivo maestro envía datos al dispositivo esclavo.
Esto se mantiene mientras continúe recibiendo señales de reconocimiento, y el
contacto concluye cuando se hayan transmitido todos los datos y se genere la
condición de STOP. En el caso contrario, cuando el bit de lectura/escritura estaba a
nivel lógico alto (lectura), el dispositivo maestro genera pulsos de reloj para que el
dispositivo esclavo pueda enviar los datos. Luego de cada byte recibido el
dispositivo maestro (quien está recibiendo los datos) genera un pulso de
reconocimiento o ACK.

El dispositivo maestro puede dejar libre el bus generando una condición


de parada o STOP.

Definición de términos:

• Maestro (Master): Dispositivo que determina los tiempos y la


dirección del tráfico en el bus. Es el único que aplica los pulsos de
reloj en la línea SCL. Cuando se conectan varios dispositivos
maestros a un mismo bus la configuración obtenida se denomina
"multi-maestro".

Alexander Montoya Osorio 15


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
• Esclavo (Slave): Todo dispositivo conectado al bus que no tiene la
capacidad de generar pulsos de reloj. Los dispositivos esclavos
reciben señales de comando y de reloj generados desde el maestro.

• Formato de Datos (Data Format): La transmisión de un dato a


través de este bus consiste de 8 bits de dato (1 byte). A cada byte
transmitido al bus le sigue un noveno pulso de reloj durante el cual
el dispositivo receptor del byte debe generar un pulso de
reconocimiento.

• Bus libre (Bus Free): Estado en el que ambas líneas (SDA y SCL)
están inactivas, presentando un estado lógico alto. Es el único
momento en que un dispositivo maestro puede comenzar a hacer
uso del bus.

• Comienzo (START): Se produce cuando un dispositivo maestro


ocupa el bus, generando la condición. La línea de datos (SDA) toma
un estado bajo mientras que la línea de reloj (SCL) permanece alta

• Parada (Stop): Un dispositivo maestro puede generar esta


condición, dejando libre el bus. La línea de datos y la de reloj toman
un estado lógico alto.

• Dato válido (Valid Data): Situación presente cuando un dato


presente en la línea SDA es estable al tiempo que la línea SCL está a
nivel lógico alto.

• Reconocimiento (Acknowledge): El pulso de reconocimiento,


conocido como ACK (del inglés Acknowledge), se logra colocando la
línea de datos a un nivel lógico bajo durante el transcurso del noveno
pulso de reloj.

• Dirección (Address): Todo dispositivo diseñado para funcionar en


este bus posee su propia y única dirección de acceso, preestablecida
por el fabricante. Hay dispositivos que permiten definir
externamente parte de la dirección de acceso, lo que habilita que se
pueda conectar en un mismo bus un conjunto de dispositivos del
mismo tipo, sin problemas de identificación. La dirección 00 es la
denominada "de acceso general"; a ésta responden todos los
dispositivos conectados al bus.

• Lectura/Escritura (Bit R/W): Cada dispositivo tiene una dirección


de 7 bits. El octavo bit (el menos significativo) que se envía durante
la operación de direccionamiento, completando el byte, indica el tipo
de operación a realizar. Si este bit es alto el dispositivo maestro lee

Alexander Montoya Osorio 16


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
información proveniente de un dispositivo esclavo. Si este bit es
bajo, el dispositivo maestro escribe información en un dispositivo
esclavo.

3.3. CONDICIÓN DE INICIO Y PARADA (START/STOP)

La condición inicial, de bus libre, es cuando ambas señales están en estado


lógico alto. En este estado cualquier dispositivo maestro puede ocuparlo,
estableciendo la condición de inicio (START). Esta condición se presenta cuando
un dispositivo maestro pone en estado bajo la línea de datos (SDA), pero dejando
en alto la línea de reloj (SCL). Esta condición se ilustra en la figura 3-3

Ilustración 3-3. Condición de START

Por el contrario, cuando se desea finalizar una transmisión se debe generar


una condición de STOP que consiste en generar un flanco de subida en la linea SDA
mientras la línea SCL está a nivel alto.

Ilustración 3-4. Condición de STOP

3.4. PAQUETE DE DIRECCIÓN

Un paquete de dirección consiste en la dirección de un esclavo y la


operación de lectura (SLA+R) o escritura (SLA+W) a realizar. El MSB del byte de
dirección se transmite primero. De todas las direcciones posibles para un esclavo
solo la dirección 0000 000 está reservada para una llamada general que se lleva a
cabo cuando el master desea enviar un mensaje a todos los esclavos al mismo
tiempo.

Alexander Montoya Osorio 17


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 3-5. Paquete de dirección

Todos los paquetes de direcciones en el bus tienen 9 bits de longitud, de


ellos 7 bits codifican una dirección, 1 bit de operación (R/W) y el bit de
reconocimiento (acknowledge bit). Si el bit R/W es activado, una operación de
lectura se llevara a cabo, de lo contrario se lleva a cabo una operación de escritura
(bit a cero). Cuando un esclavo reconoce que ha sido direccionado debería
responder poniendo a nivel bajo la línea SDA durante el ciclo de reconocimiento
(acknowledge cycle o noveno bit). Si el esclavo direccionado está ocupado o por
algún otro motivo no puede atender la llamada del maestro, la línea SDA deberá
dejarse a nivel alto en el ACK clock cycle. El master puede entonces transmitir una
condición de STOP o REAPETED START (volver a enviar la condición de START)
para iniciar de nuevo una transmisión.

3.5. ESCRITURA EN UN DISPOSITIVO ESCLAVO

Habiendo direccionado ya el dispositivo esclavo, lo que debe hacer ahora el


maestro es enviar la ubicación interna o número de registro desde el que desea
leer o al que va a escribir. La cantidad depende, obviamente, de qué dispositivo es
y de cuántos registros internos posee. Algunos dispositivos muy simples no tienen
ninguno, pero la mayoría sí los poseen.

Después de una condición START la dirección del esclavo es transmitida.


Esta dirección contiene 7 bits seguidos por un octavo bit denominado bit de
dirección que nos indica si la transferencia actual es de lectura (bit a 1) o de
escritura (bit a 0). Una transferencia es siempre terminada por una condición de
STOP generada por el maestro, sin embargo, un maestro puede iniciar una
comunicación con otro dispositivo en el bus generando una nueva condición de
START y dirigirse a otro esclavo sin la necesidad de generar primero una condición
de STOP. La transferencia de datos sigue el formato mostrado en la figura 3-6.

Ilustración 3-6. Transmisión de una trama completa de datos

Alexander Montoya Osorio 18


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Todas las transacciones requieren ciclo de reloj de reconocimiento


comúnmente conocido como acknowledge bit, generado por el maestro. Durante el
ciclo de reconocimiento el transmisor (el cual puede ser el maestro o esclavo)
libera la línea SDA. Para reconocer la transacción, el receptor debe poner a nivel
bajo la SDA durante el ciclo de acknowledge.

La secuencia de escritura sobre un dispositivo esclavo se puede resumir en


los siguientes pasos:

1. Enviar una secuencia de inicio.


2. Enviar la dirección de dispositivo con el bit de lectura/escritura en
bajo.
3. Enviar el número de registro interno en el que se desea escribir.
4. Enviar el byte de dato[Opcionalmente, enviar más bytes de dato].
5. Enviar la secuencia de parada.
En los anexos de este documento aparece el diagrama de flujo en el cual se
ilustran las operaciones que deben llevarse a cabo para realizar operaciones de
escritura sobre el bus I2C haciendo uso de los registros del microcontrolador
TM4C123GLX.

3.6. LECTURA DESDE UN DISPOSITIVO ESCLAVO

Esta operación es algo más complicada, pero no demasiado. Antes de leer


datos desde el dispositivo esclavo, primero se le debe informar desde cuál de sus
direcciones internas se va a leer. De manera que una lectura desde un dispositivo
esclavo en realidad comienza con una operación de escritura en él. Es igual a
cuando se desea escribir en él: se envía la secuencia de inicio, la dirección de
dispositivo con el bit de lectura/escritura en bajo y el registro interno desde el que
se desea leer. Ahora se envía otra secuencia de inicio nuevamente con la dirección
de dispositivo, pero esta vez con el bit de lectura/escritura en alto. Luego se leen
todos los bytes necesarios y se termina la transacción con una secuencia de parada.

Secuencia de lectura desde un dispositivo esclavo

1. Enviar una secuencia de inicio.


2. Enviar la dirección de dispositivo con el bit de lectura/escritura en
bajo.
3. Enviar la dirección interna del registro.
4. Enviar una secuencia de inicio (inicio reiterado).
5. Enviar la dirección de dispositivo con el bit de lectura/escritura en
alto.
6. Leer un byte de dato.
7. Enviar la secuencia de parada.

Alexander Montoya Osorio 19


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

En los anexos de este documento aparece el diagrama de flujo en el cual se


ilustran las operaciones que deben llevarse a cabo para realizar operaciones de
lectura sobre el bus I2C haciendo uso de los registros del microcontrolador
TM4C123GLX

Alexander Montoya Osorio 20


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

4. SISTEMA DE ESTIMACIÓN DE ACTITUD

Como se ha descrito en capítulos anteriores, para el desarrollo del gimbal es


necesario conocer en todo momento la orientación de la cámara en un sistema de
referencia anclado a la base de la estructura. Para ello se emplean sensores
inerciales de bajo coste: acelerómetros, giroscopios y magnetómetros. A partir de
las medidas de estos sensores se puede estimar con precisión la actitud y
orientación con respecto al sistema de referencias inercial.

Esta estimación no es sencilla, prueba de ello son los numerosos trabajos


publicados en la literatura científica en los últimos años. En ellos puede
comprobarse como el proceso de estimación no es arbitrario.

El presente capítulo describe el sistema de estimación de actitud y


orientación desarrollado. En él se enuncian los fundamentos teóricos necesarios
para entender el problema abordado, se describen los sensores empleados, y se
muestran los resultados obtenidos mediante el empleo de diferentes estrategias de
estimación.

4.1. FUNDAMENTOS PARA LA ESTIMACIÓN DE ACTITUD

El propósito final del estabilizador de cámara es conservar la actitud de esta


en el espacio de un sistema de referencia anclado a la base de la estructura del
gimbal. Para mantener esta orientación en necesario disponer de una herramienta
matemática que nos permita determinar el la orientación del equipo.

Para representa la orientación existen dos alternativas: usar ángulos de


Euler (pitch, roll y ya) o cuaternios. A continuación se muestra una descripción de
estas alternativas, sus ventajas e inconvenientes.

4.1.1. ÁNGULOS DE EULER


Los ángulos de Euler constituyen un conjunto de tres coordenadas
angulares que sirven para especificar la orientación de un sistema de referencia de
ejes ortogonales, normalmente móvil, respecto a otro sistema de referencia de ejes
ortogonales normalmente fijos, usando una combinación de tres rotaciones sobre
diferentes ejes. Si todas las rotaciones son escritas en términos de matrices de
rotación D, C y B, entonces una rotación general A puede ser descrita como A = BCD

Por convenio se usan distintos ejes de coordenadas para describir la


orientación del sensor incluyendo el sistema de referencia inercial, el marco V1, V2
y el S.R B anclado y alineando con los ejes del sensor. Los ejes del S.R inercial están

Alexander Montoya Osorio 21


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
fijos en tierra y los S.R V1 y V2 se usan por conveniencia cuando se ilustra la
secuencia de operación para pasar del S.R inercial hacia el S.R del sensor.

Las rotaciones dadas por los ángulos de Euler (ф,θ,ψ), son:

Ilustración 4-1. Anguos de Euler

Como se muestra en la figura 4-1, el ángulo de yaw representa una rotación


sobre el eje Z alineado con el S.R inercial y el eje X e Y son rotados los grados que
indique el ya. El nuevo S.R girado ya grados se llama el S.R V1. La orientación de V1
después de la rotación se muestra en la figura 4-2. El nuevo S.R V1 aparece
mostrado en rojo.

Ilustración 4-2. Angulo yaw

𝒄𝒐𝒔(𝝍) 𝒔𝒊𝒏(𝝍) 𝟎
𝑹𝒗𝟏
𝑰 𝝍 = −𝒔𝒊𝒏(𝝍) 𝒄𝒐𝒔(𝝍) 𝟎
𝟎 𝟎 𝟏

El pitch representa una rotación sobre el eje Y del S.R V1 un ángulo θ como
se muestra en la figura 4-3. Es importante darse cuenta de que ángulo de pitch no
es una rotación sobre el eje y del S.R inercial.

Alexander Montoya Osorio 22


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 4-3. Angulo de pitch

𝒄𝒐𝒔(𝜽) 𝟎 −𝒔𝒊𝒏(𝜽)
𝑹𝒗𝟐
𝒗𝟏 𝜽 = 𝟎 𝟏 𝟎
𝒔𝒊𝒏(𝜽) 𝟎 𝒄𝒐𝒔(𝜽)

El S.R B es el sistema de coordenadas que está alineado con el sensor. El S.R


B se obtiene a través de una rotación sobre el eje X del S.R V2 el ángulo ф.

Ilustración 4-4. Angulo de roll

𝟏 𝟎 𝟎
𝑹𝑩
𝒗𝟐 𝝓 = 𝟎 𝒄𝒐𝒔(𝝓) 𝒔𝒊𝒏(𝝓)
𝟎 −𝒔𝒊𝒏(𝝓) 𝒄𝒐𝒔(𝝓)

La matriz de rotación que nos traslada de S.R inercial hasta el S.R del objeto
viene dada por :

𝑩 𝒗𝟐 𝒗𝟏
𝑹𝑩
𝑰 (𝝓, 𝜽, 𝝍) = 𝑹𝒗𝟐 𝝓 𝑹𝒗𝟏 𝜽 𝑹𝑰 𝝍

La principal desventaja del empleo de ángulos de Euler como sistema de


representación de orientación es el gimbal lock, o fenómeno de bloqueo de ejes. El
gimbal lock ocurre cuando la orientación del sensor no puede ser representada
inequívocamente usando ángulos de Euler. La orientación exacta en la cual el
gimbal lock ocurre depende del orden de las rotaciones usadas. Si se conserva el

Alexander Montoya Osorio 23


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
orden seguido anteriormente para las rotaciones, el gimbal lock ocurre cuando el
ángulo de pitch es de 90º grados. Cuando se produce esta situación, dos de los ejes
se alinean y se pierde un grado de libertad para las rotaciones. Este fenómeno se
ilustra en las figuras 4-5 y 4-6.

Ilustración 4-5. Ejes desalineados

Ilustración 4-6. Gimbal lock

Este es el principal problema de usar ángulos de Euler para la


representación de la orientación y solo se puede solucionar utilizando un método
diferente de representación como pueden ser el de los cuaternios. No obstante
equipos que trabajan con giros en pitch inferiores a 90º, pueden emplear este tipo
de sistemas de representación.

4.1.2. CUATERNIOS

Los cuaternios proporcionan una técnica alternativa de medida que no sufre


el gimbal lock. Su principal desventaja radica en que son menos intuitivos que los
ángulos de Euler y la matemática puede ser más complicada.

Alexander Montoya Osorio 24


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Un cuaternio es un vector de 4 elementos que puede ser usado para


codificar cualquier rotación en un sistema de coordenadas en 3 dimensiones.
Técnicamente un cuaternio está compuesto de un elemento real y tres elementos
complejos, y pueden ser usados para mucho más que rotaciones. En este apartado
se proporciona la información necesaria para usarlos para representar
orientaciones espaciales por lo que se ignoraran los detalles teóricos.
Al contrario que los ángulos de Euler, para estimar la orientación solo se
necesitan el S.R inercial y el S.R anclado al cuerpo del sensor.

Vamos a definir el vector qbi como el quaternio unitario que codifica la


rotación desde el S.R inercial hasta el S.R anclado al cuerpo que gira:

qbi a b c d T

Donde T indica el operador transpuesta. Los elementos b, c y d son la parte


vectorial y puede ser visto como el vector alrededor cual debe ser llevada a cabo la
rotación. El elemento a representa la parte escalar y especifica la cantidad de
rotación que deber ser llevada a cabo alrededor de la parte vectorial.
T
Específicamente si θ es el ángulo de rotación y Vx Vy Vz es el vector unitario que
representa el eje de rotación, los elementos del quaternio se definen como :

𝑎 = 𝒄𝒐𝒔 𝟎. 𝟓𝜽

𝑏 = 𝑽𝒙 𝒔𝒊𝒏⁡
(𝟎. 𝟓𝜽)

𝑐 = 𝑽𝒚 𝒔𝒊𝒏 𝟎. 𝟓𝜽

𝑑 = 𝑽𝒛 𝒔𝒊𝒏 𝟎. 𝟓𝜽

Rotaciones en 3D con cuaternios

El cuaternio anterior puede ser usado para rotar cualesquier vector de tres
elementos desde el sistema de referencia inercial hasta el sistema anclado al
sensor o S.R B usando la siguiente operación:

0 −1
VB = qbi qbi
VI

Esto significa que un vector puedo ser rotado tratándolo como un cuaterno
con parte real igual a cero y multiplicándolo por el cuaternio de orientación y su
inversa.

La multiplicación de dos cuaternios se ilustra a continuación:

Alexander Montoya Osorio 25


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Si

T
q1 = a1 b1 c1 d1

T
q 2 = a2 b2 c2 d2

El producto de q1 q 2 viene dado por:

a1 a 2 −b1 b2 −c1 c2 −d1 d2


a1 b 2 +b1 a2 +c1 d2 −d1 c2
q1 q 2 =
a1 c2 −b1 d2 +c1 a2 +d1 b2
a1 d2 +b1 c2 −c1 b2 +d1 a2

Para rotar un vector desde el S.R del objeto al S.R inercial se requiere
efectuar una multiplicación de dos cuaternios tales como los anteriormente
definidos. Alternativamente, el cuaternio de orientación puede ser usado para
construir una matriz de rotación de3x3 y llevar a cabo la rotación en una simple
operación. La matriz de rotación desde el sistema inercial hasta el sistema del
objeto se define como:

𝑎2 + 𝑏 2 − 𝑐 2 − 𝑑 2 2𝑏𝑐 − 2𝑎𝑑 2𝑏𝑑 + 2𝑎𝑐


𝑹𝒃𝒊 𝒒𝒃𝒊 = 2𝑏𝑐 + 2𝑎𝑑 𝑎 − 𝑏2 + 𝑐 2 − 𝑑2
2
2𝑐𝑑 − 2𝑎𝑏
2𝑏𝑑 − 2𝑎𝑐 2𝑐𝑑 + 2𝑎𝑏 𝑎2 − 𝑏 2 − 𝑐 2 + 𝑑2

Por lo tanto la rotación del sistema inercial al sistema del cuerpo puede ser
llevada a cabo usando la matriz de multiplicación:

VB = Rbi qbi VI

Las ecuaciones para convertir un cuaternio de orientación en los


correspondientes ángulos de Euler son:

ϕ atan2(2 ab + cd , 1 − 2(b2 + c 2 ))
θ = arcsin⁡(2(ac − db))
ψ atan2(2 ad + bc , 1 − 2(c 2 + d2 ))

4.2. SENSORES INERCIALES DE BAJO COSTE

Como se describe en este capítulo, para llevar a cabo la estimación de la


actitud y orientación se emplean una IMU (unidad de medida inercial), que consta
de un giróscopo y un acelerómetro. A continuación se muestra una descripción de
los mismos.

Alexander Montoya Osorio 26


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
4.2.1. GIROSCOPIOS
Los giroscopios, o girómetros, son dispositivos que miden o el movimiento
de rotación. Son pequeños sensores, de bajo costo que sirven para medir la
velocidad angular. La mayoría de los sensores actuales de pequeño tamaño, como
los que se utilizan en modelos de helicópteros y robots, están basados en circuitos
integrados cuya "alma" son pequeñísmaslengüetas vibratorias, construidas
directamente sobre el chip de silicio. Su detección se basa en que las piezas
cerámicas en vibración son sujetas a una distorsión que se produce por el efecto
Coriolis (son cambios en la velocidad angular).

Ilustración 4-7. Giroscopo mecanico

Ilustración 4-8. Giroscopio comercial

Un giroscopio MEMS (Microelectro Mechanical system ) de 3 ejes , similar a


la que se muestra en la figura 5-8, puede medir la rotación en torno a tres ejes : X,
Y , y Z . Algunos giroscopios vienen en variedades de eje simple y doble, pero el
giroscopio de tres ejes en un solo chip son cada vez más pequeño, menos costoso y
más populares. Los giroscopios son sensores capaces de ofrecer velocidades
angulares entorno a un eje, sin embargo los datos que pueda proporcionar están
sujetos a fenómenos eléctricos y mecánicos que van a falsear la verdadera
velocidad que se lee de cada sensor. En particular, los giroscopios suelen presentar
una componente continua o bias que además suele ser dinámica, esto quiere decir

Alexander Montoya Osorio 27


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
que la medida que tomemos de los sensores va a tener siempre un valor de offset
que falseara la muestra. Afortunadamente existen técnicas de procesamiento de
datos que nos permiten disminuir este offset y se basan en aplicar un filtro que
elimine las bajas frecuencias de las medidas y así poder disponer de datos un poco
mejores puesto que eliminar la componente continua de estas medidas va a ser
una tarea muy compleja.

Aunque los giroscopios funcionan mal a bajas frecuencias, no sucede lo


mismo para las altas frecuencias. Dicho de otra manera, cuando los giroscopios
giran a baja velocidad o están prácticamente parados, suelen presentar un ruido de
baja frecuencia que los hace de poco fiables para obtener medidas precisas
empleadas en la estimación de ángulos de giro. Sin embargo, cuando estas
velocidades de giro aumentan, las medidas resultan muy fiables y de hecho esto
por este motivo son ampliamente usados en sistemas que precisen el conocimiento
de la aptitud de un sistema.

4.2.2. ACELERÓMETROS
Los acelerómetros son dispositivos que miden la aceleración, que es la tasa
de cambio de la velocidad de un objeto. Esto se mide en metros por segundo al
cuadrado (m/s²) o en las fuerzas G (g). La sola fuerza de la gravedad corresponde
aproximadamente con 9,8 m/s², pero este valor fluctúa ligeramente con la altitud.
Los acelerómetros son útiles para detectar las vibraciones en los sistemas o para
aplicaciones que requieran el conocimiento de la orientación.

Generalmente, los acelerómetros contienen placas capacitivas


internamente. Algunos de estos son fijos, mientras que otros están unidos a
resortes minúsculos que se mueven internamente conforme las fuerzas de
aceleración actúan sobre el sensor. Como estas placas se mueven en relación el uno
al otro, la capacitancia entre ellos cambia. A partir de estos cambios en la
capacitancia, puede estimarse la aceleración.

Ilustración 4-9. Acelerómetro

Alexander Montoya Osorio 28


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 4-10. . Acelerometro comercial

Debido a que se puede conocer la dirección hacia donde apunta la fuerza de


gravedad en todo momento, es posible estimar la orientación usando simplemente
un acelerómetro de 3 ejes. Sin embargo este tipo de sensores también está sujeto a
fenómenos físicos que harán que las lecturas tomadas estén contaminadas con
ruido de alta frecuencia. Para solucionar este inconveniente basta con hacer pasar
los datos de las aceleraciones medidas por un filtro paso-bajo.

Llegados a este punto se puede concluir que hace falta un tratamiento


adecuado de los datos obtenidos de los giroscopios y acelerómetros para obtener
una estimación fiable. Estos ajustes en las medidas se detallan en el siguiente
apartado. No obstante, en él se demostrara como el empleo de un único
instrumento de mediada resulta ineficiente si se desea una precisión razonable,
dado que los dos instrumentos de medida presentan problemas en su
funcionamiento.

4.3. TRATAMIENTO DE DATOS

En este apartado se presentan una serie de experimentos en los que se


puede comprender la necesidad de aplicar un tratamiento de datos a la
información recogida de los acelerómetros y giroscopios. El objetivo final es
aplicar estrategias de filtrado que permitan mejorar la información, que
posteriormente será empleada para el cálculo del ángulo girado en torno a uno de
los ejes.

4.3.1. ESTIMACIÓN DE ACTITUD CON ACELERÓMETRO

Un acelerómetro puede medir la aceleración gravitacional terrestre y por lo


tanto proporcionar un marco de referencia absoluto a partir del cual sea posible
estimar la orientación del sensor. Sin embargo los acelerómetros se ven sujetos
altos niveles de ruido, por ejemplo, las aceleraciones debidas al movimiento del
sensor corromperán las medidas tomadas acerca de la dirección de la fuerza de
gravedad terrestre.

Alexander Montoya Osorio 29


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Estimación de actitud mediante acelerómetros

Determinar el ángulo mediante los acelerómetros resulta bastante sencillo


si suponemos que el sensor gira sobre su propio eje y la aceleración vista por los
acelerómetros solo es el producto de la fuerza de gravedad. En estas condiciones,
basta con calcular el arco cuya tangente es el cociente de dos aceleraciones. En la
figura 4-12 aparece representada la situación en la que el eje Z del sensor está
alineado con la fuerza gravitatoria. Cuando se produce un giro sobre el eje Y, la
aceleración de la gravedad pasa a estar desalineada con respecto a los ejes del
sensor y es entonces posible calcular en ángulo girado. Ver figura 4-13 en la que se
ilustra esta última situación.

Ilustración 4-11. Eje Z del sensor alineado con la gravedad

Ilustración 4-12. Eje Z del sensor forma un ángulo con la gravedad

Alexander Montoya Osorio 30


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

En este apartado se propone el cálculo alrededor del eje Y en base a las


medidas debidas a la aceleración de la gravedad en los ejes X y Z atendiendo a la
ecuación:

𝒂𝒙
𝜽𝒚 = 𝐚𝐭𝐚𝐧
𝒂𝒛

Filtro paso-bajo aplicado a los acelerómetros

Aunque el cálculo es sencillo, no resulta muy adecuado llevarlo a cabo sin


aplicar antes un filtro paso-bajo a las aceleraciones recogidas para que elimine el
ruido de alta frecuencia procedente de los acelerómetros. La ecuación en el
dominio de la frecuencia para el filtro paso-bajo que se aplica en este experimento
aparece en siguiente.

𝟏
𝐆 𝐬 =
𝟎. 𝟏𝐬 + 𝟏

En la figura 4-14 aparece el diagrama de Bode del filtro. Según el diagrama


de las señales cuya frecuencia sea inferior a la de corte (10 rad/s en este caso)
pasaran sin ser atenuadas, por el contrario las frecuencias superiores a 10 rad/s se
van a ver atenuadas.

Bode Diagram
0
Magnitude (dB)

-10

-20

-30

-40
0
Phase (deg)

-45

-90
-1 0 1 2 3
10 10 10 10 10
Frequency (rad/s)
Ilustración 4-13. Diagrama de bode de un filtro paso-bajo

Alexander Montoya Osorio 31


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ejecución y análisis de los resultados del experimento 1

Este experimento tiene como propósito identificar y visualizar las


diferencias en los resultados obtenidos cuando se usan los datos antes y después
de ser filtrados para el cálculo del ángulo de giro.

En la figura 4-15 se muestran los resultados del primer experimento. La


línea verde corresponde al ángulo calculado cuando no se aplica el filtro a los
datos, por otra parte la línea azul representa el ángulo estimado con los datos que
si han sido filtrados.

Exp1. Angulo estimado con acelerometros


100

80 Datos Filtrados (DF)


Datos No Filtrados (DNF)

60

40
Angulo ( grados )

X: 1.24
Y: 27.24

20

-20

-40

-60
0 1 2 3 4 5 6
Tiempo ( seg )
Ilustración 4-14. Resultados del primero experimento

Como se puede ver en la gráfica, la línea verde presenta una serie de


oscilaciones debidas a la vibración del mismo, sin embargo, los datos de la línea
azul que si han sido filtrados no presentan tales oscilaciones. Se puede concluir
entonces que el filtro funciona puesto que se ha conseguido eliminar el ruido
electrónico de alta frecuencia.

En las figuras 4-16 y 4-17 aparece el análisis espectral de cada una de las
señales. En la primera se observa como la señal que no ha sido filtrada presenta
magnitudes significativas para las frecuencias altas, sin embargo en la segunda
figura se ve claramente como después de aplicar el filtro, las componentes de alta
frecuencia han sido eliminadas.

Alexander Montoya Osorio 32


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 4-15. FFT de los datos antes de ser filtrados

Ilustración 4-16. . FFT de los datos después de ser filtrados

Alexander Montoya Osorio 33


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
4.3.2. ESTIMACIÓN CON GIROSCOPIO

Un giroscopio es capaz de medir velocidades angulares, si se conocen las


condiciones iníciales pueden ser integradas a lo largo del tiempo para determinar
la inclinación del sensor. Los giróscopos de precisión como pueden ser los anillos
laser son demasiado caros para la mayoría de aplicaciones y por lo tanto los
sistemas MEMS (Micro ElectricalMechanicalSystem) suelen usarse en la mayoría
de aplicaciones debido a que son más baratos aunque menos precisos. La
integración del error existente en las medidas efectuadas por un giroscopio nos
llevan a una acumulación del error en la orientación calculada. Por lo tanto, los
giroscopios por si solos no pueden proporcionar una mediad absoluta de la
orientación.

En este apartado se realiza una serie de experimentos con el fin de


comprender y visualizar los efectos negativos que producen las componentes de
baja frecuencia en la estimación del ángulo a partir de las medidas del giroscopio.

Análisis del giroscopio en reposo

Los giroscopios siempre presentan un offset a bajas frecuencias, al


integrarlo se desencadena una acumulación de errores que crece y crece con el
tiempo falseando por lo tanto la medida y haciéndola poco útil para cualesquier
aplicación real.

En la figura 4-18 aparecen las lecturas del giroscopio mientras este


permanece en reposo, en ella se puede ver que la velocidad angular leída ronda los
-0.68 °/s cuando en realidad debería ser cero, por lo tanto la integración sucesiva
de estos valores para la estimación del ángulo, conlleva la acumulación de un error
que se crece y crece con el tiempo.
Muestras
-0.62

X: 1.8
Y: -0.6256

-0.64

-0.66
Vel. Angular ( º/s )

-0.68

-0.7

-0.72

-0.74
0 1 2 3 4 5 6 7
Tiempo ( seg )

Ilustración 4-17. Datos recogidos con giroscopio en reposo

Alexander Montoya Osorio 34


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Tras realizar un análisis frecuencia a la señal anterior se logra distinguir
que efectivamente existe una componente a bajas frecuencias. Ver figura 4-19.

FFT Magnitude
500

450 X: 0.1429
Y: 477.2

400

350

300

250

200

150

100

50

0
0 5 10 15 20 25 30 35 40 45 50
Freq ( Hz )

Ilustración 4-18. Componentes de baja frecuencia en los giroscopios

Filtro paso-alto aplicado a los giroscopios

Para eliminar en la medida de lo posible estas componentes de baja


frecuencia se usa un filtro paso-alto de primer orden. Un filtro de estas
características atenúa las frecuencias que están por debajo de su frecuencia de
corte y deja pasar las frecuencias que estén por encima. En filtro paso-alto usado
para este experimento tiene como ecuación:

0.1s
G s =
0.1s + 1

La frecuencia de corte para este filtro es de 10 rad/s o 1.6 Hz, lo que


significa que las componentes que oscilen a menor frecuencia van a ser atenuadas
mientras que las frecuencias por encima de 10 rad/s pueden pasar sin ver
modificada su magnitud.

Un filtro con estas características atenúa el gran medida las bajas


frecuencias, por lo que resulta ser el filtro ideal para remover las componentes
continuas de las medidas tomadas de los giroscopios.

En la figura 4-20 se presenta el diagrama de bode para este filtro

Alexander Montoya Osorio 35


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Bode Diagram
0

Magnitude (dB) -10

-20

-30

-40

-50
90
Phase (deg)

60

30

0
-1 0 1 2 3
10 10 10 10 10
Frequency (rad/s)
Ilustración 4-19. Diagrama de bode de un filtro paso-alto

Tras aplicar el filtro anterior se realizan dos experimentos cuyos resultados


se muestran muestra en las siguientes figuras.

En la figura 4-21 aparece la comparación entre los ángulos estimados antes


y después del tratamiento de los datos mientras el sensor permanece en reposo.
Bajo esta situación es de esperar que ángulo medido sea siempre cero puesto que
no existe movimiento, sin embargo en la gráfica se observa que si no se filtran las
medidas el ángulo crece con el tiempo debido a la integración del error.
Exp2. Angulo estimado con giroscopio
0

-2

-4 Datos Filtrados (DF)


Datos No Filtrados (DNF)
-6
Angulo ( grados )

-8

-10

-12

-14

-16

-18
0 1 2 3 4 5 6
Tiempo ( seg )

Ilustración 4-20. Estimación del ángulo girado mediante giroscopio

Alexander Montoya Osorio 36


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

En la figura 4-22 aparecen los resultados del mismo experimento pero esta
vez el sensor gira entorno a uno de los ejes. Como se puede ver en la gráfica azul no
existe acumulación error; a partir de los 4 segundos el sensor se deja en reposo y
se observa que el ángulo no varía, sin embargo en la grafía verde se ve claramente
como el ángulo sigue variando a lo largo del tiempo debido a que en la señal existe
una componente continua que no ha sido eliminada.
Exp3. Angulo estimado con giroscopio
40

Datos Filtrados (DF)


Datos No Filtrados (DNF)
20

0
Angulo ( grados )

-20

-40

-60

-80
0 1 2 3 4 5 6
Tiempo ( seg )
Ilustración 4-21. Estimación del ángulo girado mediante acelerómetro

El análisis frecuencial para estas dos señales se representa en las figuras 4-


23 y 4-24. Cuando no se filtran los datos, el diagrama presenta componentes de
baja frecuencia de mucha magnitud. Cuando se filtran los datos estas componentes
casi desaparecen por completo.

Alexander Montoya Osorio 37


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria Exp . Analisis frecuencial
3
12000

10000 Angulo No Filtrado

8000

6000

4000

2000

0
0 5 10 15 20 25 30 35 40 45 50
Freq ( Hz )
Ilustración 4-22. FFT de las medidas de un acelerómetro
Exp3. Analisis en frecuencia
4000

3500 Angulo Filtrado

3000

2500

2000

1500

1000

500

0
0 5 10 15 20 25 30 35 40 45 50
Freq ( Hz )
Ilustración 4-23. FFT de las medidas de un acelerómetro una vez filtradas

4.4. ESTIMADOR POR FUSIÓN SENSORIAL

Vistos los inconvenientes encontrados al usar giroscopios y acelerómetros


para la estimación de ángulos de giro, surge la idea de usar la medición obtenida
por el giroscopio para tiempos cortos y realizar la corrección de la deriva con la
medición realizada por el acelerómetro en tiempos largos, debido a que esta última
medición tiende a ser la aceleración de la gravedad para periodos largos.

Alexander Montoya Osorio 38


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Para llevar a cabo este proceso de fusión sensorial suelen emplearse
diferentes alternativas. Las más comunes emplean filtros complementarios, filtros
complementarios explícitos o filtros de Kalman. En este trabajo se presentan dos
opciones de estimación. Por un lado un filtro complementario, y por el otro el filtro
propuesto por Madwick, que corresponde un filtro complementario explicito que
emplea una ley recursiva para llevar a cabo la corrección.

4.4.1. ESTIMACIÓN CON FILTRO COMPLEMENTARIO

El filtro complementario resulta sencillo de tratar matemáticamente y en


razón de su baja complejidad de implementación consume pocos recursos
computacionales. La idea básica del filtro complementario es combinar la salida
del acelerómetro y del giroscopio para obtener una buena estimación del ángulo
de orientación de la plataforma, compensando la deriva del giróscopo con la baja
dinámica del acelerómetro. El filtro complementario propuesto es el que se
muestra en la figura 4-25.

Ilustración 4-24. Fusion sensorial

Donde theta_a es el ángulo medido por el acelerómetro cuya señal esta


corrompida por ruidos de alta frecuencia proveniente de las vibraciones, theta_g es
el ángulo medido con el giroscopio, afectado por la deriva y theta el ángulo
estimado.

Las funciones de transferencia del filtro deben ser elegidas de acuerdo a

𝑯𝒂 𝒔 𝑮 𝒔 + 𝑯𝒈 𝒔 𝟏 − 𝑮 𝒔 =𝟏

En donde 𝑯𝒂 y 𝑯𝒈 representan las funciones de transferencia del


acelerómetro y el giroscopio respectivamente.

Suponemos que las funciones de transferencia de los sensores son iguales a


1. Esto es 𝑯𝒂 = 𝟏 = 𝑯𝒈 .

La función de transferencia elegida para G es un filtro pasa-bajo de primer


orden. Lo cual hace que la estimación en baja frecuencia dependa de la medición
del acelerómetro.

𝜶
𝑮(𝒔) =
𝒔+𝜶

Alexander Montoya Osorio 39


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Y la función de transferencia para 1 – G:

𝒔
𝟏 − 𝑮(𝒔) =
𝒔+𝜶

Este filtro nos permite hacer que las componentes de alta frecuencia de la
medición estimada dominadas por el aporte de las mediciones provenientes del
giroscopio.

Si ambas mediciones son ideales, la función de transferencia total del filtro


resulta:
𝜽(𝒔)
= 𝑮(𝒔) + 𝟏 − 𝑮 𝒔 = 𝟏
𝜽(𝒔)

Y por lo tanto hace que:

𝜽 𝒔 = 𝜽(𝒔)

Ensayo del filtro complementario

Tras la implementación el filtro complementario se efectúa un nuevo


experimento para determinar el ángulo. Los resultados del experimento se reflejan
en figura 4-64. Se aprecia como la gráfica de color verde (ángulo sin filtrado)
acumula un error a medida que pasa el tiempo aunque se ve que parte de cero
puesto que cuando el sensor esta inmóvil el ángulo sigue variando. En la gráfica
azul se aplica el filtro complementario a la estimación de los datos dando como
resultadoun estimación mucho más fiable y acertada.
Exp5. Angulo estimado con filtro complementario
100

80

Angulo Giro
60
Angulo Acc
Angulo Filtro Complementario
40
Angulo ( grados )

20

-20

-40

-60
0 1 2 3 4 5 6
Tiempo ( seg )

Ilustración 4-25. Resultados del filtro complementario

Alexander Montoya Osorio 40


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
4.4.2. ESTIMACIÓN CON FILTRO MADWICK
A continuación se presenta el filtro desarrollado por Sebastian Madgwick.
Los principios matemáticos que conforman el filtro se omiten puesto que
sobrepasa el propósito de este documento debido a su carga teórica. Si se desea
saber más acerca de este filtro existen referencias en el apartado de bibliografía.

Este apartado introduce un nuevo filtro de orientación que es aplicable a


una IMU y soluciona los problemas de carga computacional y estimación de
parámetros asociados al filtro Kalman y mejora el rendimiento del filtro
complementario. Este filtro incorpora dos funcionalidades, la primera de ellas es
que utiliza una fusión sensorial parecida a la del filtro complementario para
solucionar los problemas del ruido y las derivas. La segunda tiene que ver con la
estimación de la orientación ya que el filtro proporciona un algoritmo que la
calcula haciendo uso de una matemática basada en cuaternios.

Como ya se ha dicho este filtro emplea una representación de la orientación


mediante cuaternios por lo que se resuelve el problema de las singularidades
asociadas a la representación mediante ángulos de Euler.

La figura 4-27 muestra la representación en un diagrama de bloques de la


implementación del filtro para un IMU convencional.

Ilustración 4-26. Diagrama de bloques del filtro Madwick

Este filtro requiere solo de un parámetro 𝜷ajustable que puede ser


estimado teniendo en cuenta las características observables para cada uno de los
sistemas en el que se implemente. Mediante este parámetro es posible ajustar la
relevancia que tienen los acelerómetros o giroscopios a la hora de aplicar la fusión
sensorial. Si el parámetro 𝜷 = 𝟎, esto significa que la estimación de la orientación
se lleva a cabo exclusivamente a partir los giroscopios; si por el contrario el valor
es distinto de cero, existirá una fusión sensorial que hace que los resultados en la
estimación de la orientación sean más exactos.

Alexander Montoya Osorio 41


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Para este proyecto se escogió 𝜷 = 𝟎. 𝟏tras realizar varios experimentos se
llego a la conclusión de que este valor era el más adecuado.

En el artículo original escrito por el propio Sebastian Madgwick se incluye el


código fuente en lenguaje C que implementa el filtro que se muestra en la figura.

Alexander Montoya Osorio 42


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

5. SISTEMA DE EXCITACIÓN PARA MOTORES BRUSHLESS

A continuación se muestra el funcionamiento del sistema de excitación para


motores brushless. Este sistema corresponde con otro de los apartados críticos del
proyecto, ya que una lógica de conmutación deficiente degrada el comportamiento
del sistema.

Téngase en cuenta que la conmutación de motores BLDC, tradicionalmente


se ha realizado empleando sensores de efecto hall que permiten conocer la
posición del rotor. En este caso se emplean motores sensorless, hecho que complica
en gran medida la lógica encargada de realizar la conmutación de las fases del
motor.

Para que el lector pueda comprender el funcionamiento de este sistema, se


presenta una descripción del funcionamiento de un motor BLDC y las lógicas de
excitación más frecuentes.

5.1. MOTORES BRUSHLEES

Los motores de imanes permanentes y sin escobillas o BLDC (Brushless


DC)están remplazando a los motores convencionales que usan escobillas en
numerosas aplicaciones, ya que estos ofrecen una significativa eficiencia
energética, bajo ruido acústico y más fiabilidad por nombrar solo unas pocas
ventajas.

Un motor BLDC es capaz de proporcionar grandes cantidades de par a lo


largo de un amplio rango de velocidades. Los motores BLDC derivan de los
motores convencionales de corriente continua, por esto comparten la misma curva
de par-velocidad. La gran diferencia que existe entre ellos radica en que los BLDC
no usan escobillas, por lo que deben ser electrónicamente conmutados.

Ilustración 5-1. Motor brushless (BLDC)

Alexander Montoya Osorio 43


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
5.1.1. PARTES DE UN BLDC
Los motores BLDC son motores síncronos, esto indica que el campo
magnético producido por el estator y el campo magnético producido por el rotor
gira a la misma frecuencia. Un motor BLDC no experimenta el fenómeno de
deslizamiento o slip que normalmente se observa en motores con escobillas.

Están construidos con un rotor de imanes permanentes y bobinas de cobre


enrolladas a los polos del estator. En la figura 5-2 se muestra un motor brushless
desmontado.

Ilustración 5-2. Estator y rotor de un BLDC

El estator de un BLDC es la parte estática del motor y está compuesto


normalmente por laminaciones de acero a las que se arrollan bobinas colocadas
axialmente a lo largo de la periferia interna. Los bobinados de un motor brushless
están distribuidos a lo largo del estator en múltiples fases.

Un BLDC consta normalmente de tres fases conectadas en estrella en uno de


sus extremos. En el estator representado en la figura 5-4 a sus tres bobinados.

Ilustración 5-3. Bobinado de un BLDC

Ilustración 5-4.Conexión en estrella de un BLDC

Alexander Montoya Osorio 44


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

En el rotor (la parte del motor que gira) se incrustan imanes permanentes
de neodimio. El numero de imanes adheridos al rotor determina el numero de
conmutaciones que han de ocurrir para el motor gire una vuelta completa. Los
imanes se van colocando uno seguido del otro y alternando su polaridad tal y como
se muestra en la figura 5-6.

Ilustración 5-5.Imanes permanentes de un BLDC

Ilustración 5-6. Rotor

Los imanes de ferrita han sido usados tradicionalmente para construir


imanes permanentes. Sin embargo y debido al avance tecnológico, los imanes
construidos con tierras raras han ganado popularidad debido a que generan
campos magnéticos más fuertes y con un volumen más reducido que el de un imán
convencional de ferrita.

5.1.2. PRINCIPIO DE FUNCIONAMIENTO Y CONTROL

El funcionamiento de un motor brushless está basado en la interacción


entre dos campos magnéticos, uno lo producen las bobinas arrolladas en el estator
y el segundo lo producen los imanes permanentes alojados en el rotor.

Alexander Montoya Osorio 45


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
ara ilustrar el funcionamiento vamos a suponer que una de las bobinas del
estator esta energizada tal y como aparece en la figura 5-8.

Ilustración 5-7. Campo magnético generado por las bobinas del estator

Ilustración 5-8. Par de fuerzas generado entre el rotor y el estator

Cuando se hace circular corriente a través de la bobina se genera un campo


magnético que interacciona con los imanes del rotor produciendo de esta manera
una fuerza de atracción entre los polos magnéticos del rotor y del estator. Sin
embargo a medida que el rotor gira el par de giro va disminuyendo hasta que llega
un momento en el que se anula cuando los polos magnéticos se alinean
produciendo que el rotor deje de girar, por ello se debe energizar la siguiente
bobina si se desea generar de nuevo un par de giro que continúe con el
movimiento. Si el proceso se va repitiendo de manera adecuada se consigue hacer
girar el rotor como si de un motor paso a paso se tratara.

Para ser controlados de manera adecuada, los motores brushless requieren


de un circuito inversor que genere la secuencia adecuada de conmutación para que
el motor gire en uno de los dos sentidos. El orden en el que deben sucederse las
conmutaciones se determina a partir de algún tipo de sensor que nos permita
conocer la posición real del motor.

Alexander Montoya Osorio 46


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Un sistema de control para motores brushless convencional suele utilizar


tres sensores tipo Hall alojados dentro de la propia estructura del motor y sirven
para conocer la posición exacta del rotor. En función de las tres señales obtenidas
de los sensores Hall se genera un patrón de conmutaciones para que el motor gire
en algún sentido. En la figura 5-9 aparece representado un sistema convencional
de control para un BLDC, el sistema está compuesto por un circuito inversor, tres
sensores Hall y una unidad de procesamiento que es la encargada de generar las
conmutaciones.

Ilustración 5-9. Sistema de control basado en sensores Hall

Generalmente, los drivers usados para el control de un BLCD usan uno o


más sensores que aporten información acerca de la posición del rotor. Tal
implementación incrementa el coste debido al uso de sensores, cableado e
implementación en el motor. Además, muchos sensores no pueden ser usados
puesto que deben ir alojados dentro de la estructura del propio BLCD.

En este proyecto la posición exacta del rotor no se estima mediante


sensores Hall, en cambio una unidad inercial de medida (IMU) será usada para tal
fin.

5.1.3. DRIVER DE CONTROL


Para excitar las bobinas de un motor brushless se usa un circuito inversor
trifásico basado en transistores. Los inversores, o convertidores CC-CA, son un
circuito utilizado para convertir corriente continua en corriente alterna. Un
inversor tiene como función la de cambiar un voltaje CC de entrada en un voltaje
CA simétrico a la salida, procurando que este posea la magnitud y frecuencia
deseada por el usuario.

Los inversores trifásicos son utilizados para la alimentación de cargas


trifásicas que requieran corriente alterna. Algunas de las aplicaciones de estos
inversores son las siguientes:

Alexander Montoya Osorio 47


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

- Fuentes de tensión alterna trifásica sin interrupciones


- Puesta en marcha de motores de corriente alterna trifásicos
- Conexión de fuentes que producen energía en continua con las cargas
trifásicas (paneles fotovoltaicos).

El circuito de la figura 5-10 aparece un motor trifásico alimentado desde un


inversor por una fuente de corriente continua. El circuito inversor está compuesto
por 6 transistores y 6 diodos.

Ilustración 5-10. Circuito inversor con diodos en antiparalelo

Además de los transistores el circuito inversor debe implementar diodos en


antiparalelo para permitir que la corriente por las bobinas del motor no se
interrumpa puesto que si esto ocurre, se generarían picos muy altos de tensión
terminales del circuito.

Debido a la topología del circuito inversor es posible ir energizando


independientemente cada una de las bobinas del estator y generar una secuencia
de conmutación adecuada que haga girar el campo magnético y a su vez este
arrastre al rotor.

5.2. TÉCNICAS DE CONMUTACIÓN PARA BLDC

Mediante la conmutación se logran ir cambiando las corrientes de cada una


de las fases en el momento adecuado de tal manera que se genere un par de
rotación.

Las técnicas de control para motores brushless se pueden clasificar según el


algoritmo de conmutación implementado. Las más utilizadas actualmente son:

• Conmutación trapezoidal (también llamada 6- steps mode o basada en


sensores hall),
• Conmutación sinusoidal y

Alexander Montoya Osorio 48


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
• Control vectorial (Field Oriented Control).

Estas técnicas tienen básicamente como objetivo estimar la excitación


óptima para cada una de las fases del motor y se diferencian principalmente por su
complejidad de implementación, que se traduce en un incremento de prestaciones.

5.2.1. TÉCNICA DE SEIS PASOS O SIXSTEP. CONMUTACIÓN TRAPEZOIDAL

Uno de los métodos más simples de control de motores brushless es el


llamado conmutación trapezoidal o 6-steps.En este esquema se controla la
corriente que circula por los terminales del motor, excitando un par
simultáneamente y manteniendo el tercer terminal desconectado tal y como se
muestra en la figura 5-11.

Ilustración 5-11. Conmutación de las bobinas del motor

Sucesivamente se va alternando el par de terminales a excitar hasta


completar las seis combinaciones posibles y de manera que tras cada conmutación
el sentido de giro se conserve.

Las 6 conmutaciones deben ejecutarse atendiendo a la secuencia


especificada en la tabla 1. El esquema de conmutación de los transistores del
circuito inversor para un ciclo completo, aparece en las representado en la
secuencia que se muestra a continuación.

Tabla 1
Paso Bobina A Bobina B Bobina C
1 Vdc No conectada 0V
2 No conectada Vdc 0V
3 0V Vdc No conectada
4 OV No conectada Vdc
5 No conectada 0V Vdc
6 Vdc 0V No conectada

Alexander Montoya Osorio 49


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Alexander Montoya Osorio 50


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 5-12. Técnica de 6 pasos

Alexander Montoya Osorio 51


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

El par de giro que se genera con este esquema de conmutación presentan


bruscas variaciones a medida que se van sucediendo las conmutaciones durante un
ciclo eléctrico completo. El método de conmutación de 6 pasos introduce un rizado
del par que hará que el rotor vibre a medida que va girando. En la figura 5-13 se
ilustrar el par de rizado que genera la conmutación a 6 pasos.

Ilustración 5-13. Par de rizado obtenido mediante conmutación 6 step

Por otra parte, el ángulo girado tras cada conmutación depende del número
de par de polos que hay en el rotor. Como ejemplo se dirá que para los motores
usados en este proyecto es necesario completar 7 ciclos eléctricos para dar una
vuelta entera puesto que el rotor tiene 7 pares de polos, con esta disposición el
ángulo girado por cada conmutación resultaría:
𝑝𝑎𝑠𝑜𝑠
7 𝑐𝑖𝑐𝑙𝑜𝑠 ∗ 6 = 42 𝑝𝑎𝑠𝑜𝑠
𝑐𝑖𝑐𝑙𝑜

360 𝑔𝑟𝑎𝑑𝑜𝑠
𝜃𝑔𝑖𝑟𝑎𝑑𝑜 = = 8.57 𝑔𝑟𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑝𝑎𝑠𝑜
42 𝑝𝑎𝑠𝑜𝑠

Con una resolución de giro en el motor de 8.57 grados por conmutación


resulta imposible implementar un control de posición óptimo para el
funcionamiento de un gimbal.

Tanto el rizado del par como la poca resolución de giro hacen que esta
técnica resulte ineficiente para usarla en un gimbal real en donde es necesario
corregir ángulos de giro muy pequeños de decimas o incluso centésimas de grado.
Debido a estos inconvenientes se presenta necesario el uso de un método que
minimice estos efectos como bien puede ser el SPWM el cual se explica en el
siguiente apartado.

Alexander Montoya Osorio 52


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

5.2.2. SPWM. SINUSOIDAL PULSE WIDTH MODULATION

El rizado en el par de salida que se obtiene al aplicar la técnica de


conmutación de 6 pasos se produce debido a que solo dos de las tres bobinas de
cada motor están energizadas en todo momento y esto produce una caída brusca
de las corrientes y con ello del par. Para solucionar este problema se puede usar la
técnica de conmutación conocida como SPWM.

La gran diferencia que existe entre el método de 6 pasos y el SPWM radica


en que para el SPWM las tres fases del motor están energizadas a la vez. Esto
permite un control más preciso de las corrientes en el motor y por lo tanto del par.

La técnica de modulación sinusoidal de ancho de pulso persigue la


generación de una tensión sinodal trifásica equilibrada mediante la modulación de
una señal PWM en cada una de las salidas del inversor. Cuando se genera una
tensión de estas características se consigue reducir significativamente el rizado del
par gracias a que la corriente absorbida por el motor presenta un rango de
oscilación estrecho a lo largo de cada ciclo eléctrico y de tal manera, el par, que
depende de la magnitud de la corriente, presentara oscilaciones en un rango más
estrecho de valores en comparación con la técnica de modulación de 6 pasos. En
las figura 5-14 se ha representado la forma de onda de la corriente absorbida por
una carga trifásica equilibrada cuando está alimentada por un sistema de tensión
trifásico equilibrado, a lo largo de un ciclo eléctrico.

Alexander Montoya Osorio 53


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 5-14. Reducción del par de rizado mediante SPWM

Lo que se obtiene con este patrón de corriente es producir una salida de par
de mayor valor y que presenta un menor rango de oscilación en comparación al
par obtenido cuando se conmuta con la técnica de 6 pasos.

Una de las ventajas de usar señales PWM es que si la tensión continua de


bus es más grande que las tensiones requeridas por el motor, este puede ser
controlado limitando el porcentaje del ancho de pulso de señal.

Para modular una señal sinusoidal mediante PWM existen varias formas,
una de las más sencillas resulta de la comparación entre dos formas de onda, la
señal de referencia o señal a modular (señal modulada) se compara con una señal
de acarreo triangular de alta frecuencia (señal de acarreo). El resultado de esta
comparación se usa para generar una señal cuadrada la cual es una representación
modulada de la onda original. En el caso de la técnica SPWM, lo que se persigue
reproducir una señal sinusoidal mediante la modulación de una señal cuadrada.

En la figura 5-15 se ilustra la técnica de modulación SPWM

Alexander Montoya Osorio 54


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 5-15. Modulación de una sinusoide mediante onda triangular

La señal cuadrada que resulta contiene una réplica de la forma de onda


deseada en sus componentes de baja frecuencia y para este caso la onda resultante
esta constituida por 9 tramos. Si se aplicara esta señal a una carga inductiva como
lo es el motor, la corriente obtenida presenta la forma de onda mostrada en la
figura 5-16.

Ilustración 5-16. Puente inversor

Alexander Montoya Osorio 55


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 5-17. Corriente obtenida mediante el uso de la técnica SPWM

El número de tramos de la señal modulada esta directamente relacionada


con la resolución de giro que se puede alcanzar mediante esta técnica, pues como
bien se ha mencionado en el apartado anterior, se necesitan completar 7 ciclos
eléctricos por lo que si se usara la señal modulada de la figura 5-16, el ángulo
girado por cada tramo es:

𝑝𝑎𝑠𝑜𝑠
7 𝑐𝑖𝑐𝑙𝑜𝑠 ∗ 9 = 63 𝑝𝑎𝑠𝑜𝑠
𝑐𝑖𝑐𝑙𝑜

360 𝑔𝑟𝑎𝑑𝑜𝑠
𝜃𝑔𝑖𝑟𝑎𝑑𝑜 = = 5.7 𝑔𝑟𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑝𝑎𝑠𝑜
63 𝑝𝑎𝑠𝑜𝑠

5.7 grados de precisión continua siendo un valor bastante malo, sin


embargo se puede incrementar la precisión simplemente aumentado la frecuencia
de la señal de acarreo, de tal manera que a mayor frecuencia, el número de tramos
en los que se divide la señal de referencia es mayor también. En base a esto la señal
modulada en este proyecto se ha dividido en 540 tramos por lo que la resolución
alcanzada de giro resulta ser:

𝑝𝑎𝑠𝑜𝑠
7 𝑐𝑖𝑐𝑙𝑜𝑠 ∗ 540 = 3780 𝑝𝑎𝑠𝑜𝑠
𝑐𝑖𝑐𝑙𝑜

360 𝑔𝑟𝑎𝑑𝑜𝑠
𝜃𝑔𝑖𝑟𝑎𝑑𝑜 = = 0.095 𝑔𝑟𝑎𝑑𝑜𝑠 𝑝𝑜𝑟 𝑝𝑎𝑠𝑜
3780 𝑝𝑎𝑠𝑜𝑠

En la figura 5-18 se muestra una señal sinusoidal modulada en 48 tramos.


La corriente aplicada a la carga también esta representada.

Con una señal de acarreo a la frecuencia adecuada las componentes de alta


frecuencia no se propagan significativamente en la red debido a la presencia de
elementos inductivos. Sin embargo cuanto mayor es la frecuencia de acarreo,
mayor es número de conmutaciones por periodo, lo que incrementa la perdida de
potencia en los interruptores. Las frecuencias típicas de conmutación suelen ser de
2 a 15 kHz. También es recomendable que en sistemas trifásicos las tres formas de
onda sean simétric

Alexander Montoya Osorio 56


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 5-18. Sinusoide dividida en 48 tramos

La conmutación sinusoidal soluciona los problemas de eficiencia que


presenta la conmutación a 6 pasos. Sin embargo, presenta problemas a altas
velocidades de rotación del motor.

A mayor velocidad de rotación, mayor error y por lo tanto mayor


desalineación entre el vector de corrientes y la dirección de cuadratura del rotor.
Este hecho provoca una progresiva disminución del par motor (ver Figura 5-50).

Para mantener el par constante se necesita aumentarla corriente que circula


por el motor provocando una disminución de la eficiencia.

Este deterioro de la eficiencia aumenta al incrementarse la velocidad hasta


llegar a un punto en el que el desfase entre el vector de corrientes y la dirección de
cuadratura puede llegar a 90º produciendo un par motor completamente nulo.

Alexander Montoya Osorio 57


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 5-19. Curva de par/velocidad de un BLDC

5.2.3. CURVA DE PAR OBTENIDA EN FUNCIÓN DEL MÉTODO DE CONMUTACIÓN


Durante la fase de desarrollo de la técnica de conmutación se consultaron
muchos documentos aplicados al control de posición de motores brushless. En uno
de estos documentos aparecen recogidos varios experimentos del par registrado
en un motor BLDC según se conmuta con la técnica de seis pasos o la técnica de
SPWM. En cada uno de los experimentos se aparece representada la velocidad y el
par obtenido en función del tiempo.

A continuación se presentan los resultados de los cuales se pueden sacar


interesantes conclusiones acerca del comportamiento del motor según la técnica
de conmutación usada.

Ilustración 5-20.Ilustración
Par y velocidad
5-21. con
Par conmutación a 6conmutación
y velocidad con pasos 6 step

En la figura 5-21 aparecen los resultados obtenidos mediante la


conmutación de 6 pasos. Se observa que el la magnitud del rizado en el par es de

Alexander Montoya Osorio 58


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
0.15Nm. Por el contrario en la figura 5-22 en la que se implementa el SPWM, la
magnitud del rizado es de 0.08Nm.

Ilustración 5-22. Par y velocidad con conmutación SPWM

Se puede concluir gracias a estos experimentos que la técnica de


conmutación SPWM no solo reduce el rizado en el par de salida sino que también
aumenta el rendimiento en la transferencia de energía debido al que el valor RMS
de la corriente es mayor.

Alexander Montoya Osorio 59


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

6. SISTEMA DE CONTROL

En este apartado se describe el sistema de control empleado para garantizar


que los ángulos en cada uno de los ejes sean los adecuados. En él se explican los
procedimientos empleados, la metodología y la implementación de los
controladores. Las rotaciones en los dos ejes (Pitch y Roll) se realizan siguiendo el
criterio mostrado en la figura 6-1.

Ilustración 6-1. Ejes de referencia para el Gimbal

Desde el punto de vista de un sistema de control, un gimbal consiste en el


control de posición para dos motores brushless en este caso, y que están dispuestos
sobre dos ejes independientes.

El eje Z del sensor se monta de manera que este alineado con la dirección de
la fuerza de gravedad tal y como aparece representado en la figura 6-2. Los
controladores de ambos motores deben en todo momento corregir cualesquier
alteración en los ángulos de roll y pitch con el fin de conservar la orientación de la
base.

Alexander Montoya Osorio 60


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Ilustración 6-2. Alineamiento del sensor con la dirección de la gravedad

Cuando se realiza un sistema de control de posición es necesario disponer


de un sensor para poder medirla y cerrar el lazo de control. Para medir la posición
de un motor existen diversas alternativas y una de las más comunes es hacer uso
de un encoder, sin embargo para este caso, como ya se ha descrito, se emplean los
datos inferidos por el sistema de estimación de orientación. Independientemente
del sistema utilizado para estimar los ángulos de roll y pitch el esquema de control
sigue la estructura de control que se representa en las figuras 6-3 y 6-4.

Ilustración 6-3. Diagrama de control para el ángulo Roll

Ilustración 6-4. Diagrama de control para el ángulo Pitch

Alexander Montoya Osorio 61


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
A lo largo de este apartado se explican los procedimientos llevados a cabo
para determinar la planta del sistema, el diseño y validación del controlador. Todas
las estimaciones y comprobaciones se han efectuado con Matlab.

6.1. ESTIMACIÓN DE LA FUNCIÓN DE TRANSFERENCIA

Lo primero que debemos conocer es la planta del sistema a controlar y para


dicha tarea se hace uso de la herramienta ident que ofrece el programa Matlab.
Mediante la herramienta ideen es posible determinar el modelo de la planta a
partir de datos reales obtenidos en experimentos de identificación. Los datos han
sido recogidos tras realizar varios experimentos con el motor real, en cada
experimento se somete al sistema a una entrada escalón y se recoge el ángulo
girado mediante dos tipos de sensor, un encoder incrementa e IMU.

Si se disponen de los datos de entrada y salida se puede estimar una planta


cuya dinámica se aproxime a la dinámica real.

Para que la ident resulte una herramienta de valor se deben conocer de


antemano las características del sistema si se desea realizar una buena estimación
de la planta ya que ha de seleccionarse un modelo (número de polos y ceros) en
base a la cual se va a realizar una estimación.

Para este proyecto se supone que la planta debe presentar un integrador y


un polo real debido a que se trata de un sistema de control de posición, por lo que
se ha elegido el siguiente modelo:

𝐾𝑝
𝐺=
𝑠 ∗ (1 + 𝑡𝑝1 ∗ 𝑠)

6.2. EXPERIMENTO EN LAZO CERRADO MEDIANTE


ENCODER INCREMENTAL

El primer experimento consiste en inyectar al sistema con una señal de


referencia de 50 grados, realimentar con ganancia unitaria y posteriormente
recoger los datos de la señal de error y de la variable de control que en este caso
serán los grados girados por el motor. En la figura 6-5 aparece el resultado del
experimento.

Alexander Montoya Osorio 62


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Variable y accion de control


60

50
X: 1.62
Grados
40 Y: 50.4

30

20

10

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5

2.5

2
Accion de control

1.5

0.5

-0.5
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
Tiempo

Ilustración 6-5. Representación de la posición y la acción de control I

En este experimento se observa la posición angular del motor y el valor de


la acción de control a largo del tiempo.

Mediante el empleo de la herramienta ident de Matlab, y tras llevar a cabo la


estimación en base al modelo de la ecuación, se obtuvieron los siguientes
resultados:

𝟑𝟎𝟐. 𝟏𝟏
𝑮=
𝒔 ∗ (𝟏 + 𝟎. 𝟎𝟗𝟗𝟏𝟕𝟒 ∗ 𝒔)

En la figura 6-6 se comparan los datos obtenidos con el experimento real


(en negro) con la respuesta que se obtendría si se aplica la misma señal de
referencia al modelo de la ecuación anterior (en rojo). Como se puede ver el
comportamiento es bastante similar, de hecho la ident calcula que su estimación se
aproxima en un 79.43 % al modelo real.

Alexander Montoya Osorio 63


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Measured and simulated model output


60

50

40

30

20

10

-10
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Time

Ilustración 6-6. Comparación ente el modelo real el modelo estimado

Una vez se ha tiene un modelo de planta aproximad es hora de corroborar


que el modelo es lo bastante aproximado para que permita el diseño de un
controlador que mejore el comportamiento del sistema. Para ello se procedió a
repetir el experimento con un nuevo controlador y al mismo tiempo se realizó una
simulación que incluía la nueva planta y el mismo controlador para comparar las
respuestas real y simulada.

30

25

20

15

10

50 100 150 200 250 300 350

Ilustración 6-7. puesta real del sistema

Alexander Montoya Osorio 64


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Step Response
1

System: Closed Loop r to y


0.9 I/O: r to y
Settling time (seconds): 0.617

0.8

0.7

0.6

Amplitude 0.5

0.4

0.3

0.2

0.1

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

Time (seconds)

Ilustración 6-8. Respuesta esperada del sistema

A continuación se presentan las respuestas tras el experimento

En la figura de la izquierda se observa el experimento real para el cual se


inyecta una señal de referencia de 30 grados. En la figura de la derecha aparece la
simulación del mismo experimento y se puede ver que las dinámicas son bastante
similares.

Es necesario saber que en el experimento real cada 200 muestras


representan 1 segundo por lo que atendiendo a la figura se puede determinar que
la respuesta alcanza el estado estacionario entorno a la muestra 135 o lo que es lo
mismo 0.675 segundos. La simulación por su parte da un tiempo de
establecimiento de 0.617.

Atendiendo a la dinámica observada y a los tiempos de establecimiento se


puede concluir que el modelo aproximado es válido.

6.3. EXPERIMENTO EN LAZO CERRADO MEDIANTE


UNIDAD INERCIAL DE MEDIDA

En este apartado se repiten los mismos experimentos que en el apartado


anterior en el que se determinaba la planta del sistema pero esta vez usaremos la
unidad inercial de medida como sensor.

Alexander Montoya Osorio 65


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
En primer lugar sometemos al sistema a una entrada de referencia de 30
grados y posteriormente recogeremos los datos obtenidos de la acción de control y
la respuesta obtenida. La Figura 5-19 muestra los resultados obtenidos.

Variable y accion de control


40

30
Grados

20

10

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

0.8

0.6
Acc. control

0.4

0.2

-0.2
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Tiempo

Ilustración 6-9. Representación de la posición y la acción de control II

Tras estimar un nuevo modelo de la planta, la ident de Matlab determina


que la planta es:

𝟐𝟗𝟕. 𝟏𝟐
𝑮=
𝒔 ∗ (𝟏 + 𝟎. 𝟎𝟑𝟕𝟏𝟔𝟗 ∗ 𝒔)

La estimación que se obtiene de la planta se aproxima al modelo real en un


90.07 %. En la figura 6-10 se puede ver una comparación entre la respuesta real
(en negro) y la respuesta obtenida si se aplica el modelo de la ecuación 5.15 (en
granate).

Alexander Montoya Osorio 66


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Measured and simulated model output


40

35

30

25

20

15

10

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Time
Ilustración 6-10. Comparación ente el modelo real el modelo estimado

6.4. COMPARACIÓN ENTRE PLANTAS

En los apartados anteriores se realizaron experimentos para determinar la


planta del motor mediante dos sensores de posición diferentes. Tras analizar los
resultados se determinó que el modelo obtenido mediante la IMU se aproxima
mejor al modelo real. Para corroborar esta afirmación se realizó un nuevo
experimento con un escalón de 50 y se comparó la respuesta real con la dinámica
obtenida si se aplicara la misma señal de referencia a los modelos estimados.
Posteriormente se pudo ver que el segundo modelo se aproxima mejor a las
respuestas reales del sistema tal y como puede apreciarse en la figura 6-11 en la
que aparecen los resultados de la comparación.

Alexander Montoya Osorio 67


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
Measured and simulated model output
60

50

40

30

20

10

-10
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Time
Ilustración 6-11. Comparación entre plantas

𝟐𝟗𝟕. 𝟏𝟐
𝑮𝟏 = 𝟖𝟖. 𝟒𝟎𝟒𝟓 % 𝒅𝒆 𝒂𝒑𝒓𝒐𝒙.
𝒔 ∗ (𝟏 + 𝟎. 𝟎𝟑𝟕𝟏𝟔𝟗 ∗ 𝒔)

302.11
𝐺2 = 81.8566 % 𝑑𝑒 𝑎𝑝𝑟𝑜𝑥
𝑠 ∗ (1 + 0.099174 ∗ 𝑠)

Alexander Montoya Osorio 68


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

6.5. DISEÑO DEL CONTROLADOR

En un gimbal, el control de la posición ha de ser preciso, rápido y estable.

En un sistema gimbal se hace necesario disponer de un controlador lo


bastante rápido para poder corregir cualquier desviación del ángulo para cada uno
de los ejes. Para este propósito se diseñó mediante el lugar de las raíces un
controlador PID.

Root Locus Editor for Open Loop 1(OL1) Open-Loop Bode Editor for Open Loop 1(OL1)
100 150

100
80

50
60

Magnitude (dB)
0
40

-50

20

-100 G.M.: 22.9 dB


Imag Axis

Freq: 47.3 rad/s


0 Stable loop
-150
-90
-20

-135
-40
Phase (deg)

-180
-60

-225
-80

P.M.: 68.8 deg


Freq: 7.54 rad/s
-100 -270
-160 -140 -120 -100 -80 -60 -40 -20 0 20 -3 -2 -1 0 1 2 3 4
10 10 10 10 10 10 10 10
Real Axis Frequency (rad/s)

Ilustración 6-12. Lugar de las raíces para la planta del motor

En la figura 6-12 se observa el lugar de las raíces del conjunto controlador-planta.

El controlador resultante es:

(𝟏 + 𝟐𝟎 ∗ 𝒔)
𝑪 = 𝟎. 𝟎𝟎𝟏𝟑𝟐𝟑𝟑 Ecuacion 5.16
𝒔 ∗ (𝟏 + 𝟎. 𝟎𝟏𝟐 ∗ 𝒔)

Alexander Montoya Osorio 69


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

30

25

20

15

10

0
0 50 100 150 200 250 300

Ilustración 6-13. Respuesta obtenía tras aplicar el controlador

Step Response
1.2

System: Closed Loop r to y


I/O: r to y
Settling time (seconds): 0.284
0.8

0.6
Amplitude

0.4

0.2

-0.2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

Time (seconds)
Ilustración 6-14. Respuesta esperada tras aplicar el filtro

Alexander Montoya Osorio 70


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

7. DESCRIPCIÓN DEL HARDWARE EMPLEADO

En esta capitulo se presentan todos los componentes hardware que


componen este proyecto.

7.1. TARJETA DE DESARROLLO

Ilustración 7-1. EK-TM4C123GXL

La elección de esta tarjeta como plataforma de desarrollo fue motivada por


dos razones: la primera es que ya se había trabajado con ella en las clases de
sistemas embebidos y por otra parte, esta tarjeta implementa un microprocesador
con la suficiente potencia de cálculo y los periféricos adecuados para el desarrollo
de un gimbal como lo son los módulos de PWM que implementa y que serán de
gran utilidad para generar las señales de control para los driver de potencia.

La tarjeta de desarrollo que se emplea para este proyecto es la EK-


TM4C123GXL. Esta tarjeta forma parte de una serie de módulos de evaluación
desarrollados por la empresa Texas Instruments y en ellos implementan algunos
de sus principales microcontroladores. El EK-TM4C123GXL está basado en un
núcleo ARM Cortex-M4 de 32 bits y en particular implementa un microcontrolador
TM4C123GH6PM que puede alcanzar una velocidad de 80 MHz e incluyen
diferentes tipos de periféricos para el control de motores, módulos de
comunicación serie, ADCs entre otros.

Hay numerosa documentación y herramientas software que facilitan el


desarrollo de nuevas aplicaciones además de ejemplos de uso para cada uno de los
periféricos que implementa, lo que convierte este tipo de tarjetas en una solución
óptima y rápida para el desarrollo de sistemas embebidos.

Alexander Montoya Osorio 71


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria
En la siguiente lista se resumen las principales características del
microprocesador TM4C123GXL:

• Núcleo ARM Cortex-M4 con unidad de como flotante


• Velocidad máxima de la CPU 80 MHz
• 256-KB Flash
• 32-KB RAM and 2-KB EEPROM
• 2 ADCs de 12 bits que pueden alcanzar hasta 1 MSPS
• 2 Controladores CAN
• Hasta 40 salidas de PWM.
• Comunicaciones seria: 8 UARTs, 6 I2Cs, 4 SPI/SSI
• 43 GPIO pines.

Ilustración 7-2. Características modulo EK-TM4C123GXL

Alexander Montoya Osorio 72


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

7.2. IMU (MPU-6050)

El MPU-6050 integra 3 acelerómetros, 3 giroscopios y 3 magnetómetros


para cada uno de los ejes de referencia e implementa dos protocolos de
comunicación: I2C y SPI.

Ilustración 7-3. Unidad Inercial de Medida

El MPU-9150 incorpora 6 conversares analógico-digital (ADCs) de 16 bits


para digitalizar las salidas de los giroscopios y acelerómetros. La sensibilidad de
cada uno de los sensores se puede configurar. Los valores de sensibilidad para los
giroscopios están entre los 250 y 2000 grados/s y desde los 2g hasta 16g para los
acelerómetros.

Integra también una memoria FIFO on-chip de 1024 bytes que almacena las
medidas y ayuda al ahorro de energía ya que el dispositivo puede ser puesto en
modo de bajo consumo y seguir tomando muestras desde los sensores.

El protocolo de comunicación usado en este proyecto fue el I2C debido a


que resulta un protocolo fácil de implementar en un micro y además se pueden
transmitir datos con una velocidad máxima de 400 kbits/s.

Alexander Montoya Osorio 73


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

7.3. INVERSOR L6234

Ilustración 7-4. Driver de control L6234

El L6234 implementa un circuito de potencia diseñado para gobernar un


motor brushless. Básicamente consta de un circuito inversor con diodos en
antiparalelo y un circuito lógico para el control de corriente en cada rama del
inversor.

Las tensiones de trabajo están entre los 7 y 52 V y soporta picos de


corriente de 5 A. Las entradas lógicas son compatibles con los niveles de tensión
TTL.

En la figura 6-5 se muestra el diagrama del dispositivo.

Ilustración 7-5. ircuito externo requerido por el L6234

Alexander Montoya Osorio 74


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

7.4. MOTOR GIMBAL

Ilustración 7-6. Motor brushless EMAX GB2806

El motor usado es el EMAX GB2806, el bobinado de este motor está


diseñado especialmente para formar parte de un gimbal ya que el bobinado de
estos difiere de los convencionales motores BLDC usados en drones.

Este motor entrega el par necesario para mover masas que no superen los
300 – 400 gramos, según su hoja de características. Además del par él, motor es de
un tamaño reducido y resulto ser muy apropiado y eficiente.

7.5. PCB

Para integrar todo el sistema gimbal se diseño un PCB en el cual se


implemento toda la electrónica de potencia y de control. La placa ha sido diseñada
con el fin de que encaje directamente sobre la tarjeta de desarrollo para que
abarque el menor espacio posible.

El diseño del circuito ha sido realizado mediante KiCad por ser este un
software gratuito y bastante completo para el diseño de PCBs.

La placa se hizo mediante insoladora y revelado químico, este hecho


condicionó en gran medida el grosor mínimo de las pistas, siendo el mínimo de 0.8
mm. Si se diseñan pistas con un grosor menor a 0.8 mm se corre el riesgo de que el
acido usado para revelar la placa degrade la pista hasta cortarla totalmente. El
tamaño de la placa viene condicionado también por la dimensión de los
componentes usados.

Alexander Montoya Osorio 75


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

En la figuras 7-7 y 7-8 aparece el una captura del layout del PCB una vez se
ha concluido el trazado de las pistas y vías.

Ilustración 7-7. Layout capa superior del PCB

Ilustración 7-8. Layout capa inferior del PCB

Alexander Montoya Osorio 76


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

8. CONCLUSIONES

Debido a la complejidad y naturaleza del proyecto, es de esperar que existan


numerosas vías de mejora en cada una de las partes que lo componen.

Por un lado el buen comportamiento el gimbal viene determinado


principalmente por el método de excitación elegido para conmutar las bobinas de
motor y a la precisión alcanzada cuando se estima la actitud del sistema. Por ello es
en estos dos puntos donde se focalizo la mayor parte de esfuerzo y supuso una
gran búsqueda de información.

Los métodos y procedimientos elegidos para el desarrollo de un sistema de


estimación de actitud es un factor clave para el buen desempeño del gimbal puesto
que existen diferentes maneras de llevar a cabo la estimación de la actitud y la
precisión alcanzada esta íntimamente ligada a la complejidad del algoritmo que
lleve a cabo esta labor.

Problemas encontrados durante el desarrollo del proyecto:

• Técnicas de conmutación: existen varios métodos para la


conmutación de un BLCD, la elección de un método en particular
viene determinada por la precisión que se quiera alcanzar, sin
embargo la implementación de algoritmos mas preciso supondrá el
aumento de la complejidad de esta tarea. Para este proyecto se
alcanzo una resolución de 0.1 grado gracias a uso del SPWM aunque
para ellos fue necesario invertir una gran cantidad de tiempo en su
desarrollo.

Por otra parte, existe un método mas sofisticado que el SPWM


llamado SVPWM (Space Vector PWM) cuya aplicación supondría una
mejora de lo que ya se tiene y establece una vía investigación para el
futuro.

• Elección del driver para el motor brushless: este es un punto que


genero muchas dudas ya que existen gran numero de dispositivos en
el mercado y cada uno de ellos es adecuado para un tipo de tarea en
particular. Para este proyecto se tomo la decisión de incorporar el
mismo driver que implementa la gran mayoría de fabricantes del
controladoras para gimbal.

Alexander Montoya Osorio 77


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Vías de continuación:

Las partes que pueden ser mejoradas se listan a continuación:

• Se puede construir un gimbal de 3 ejes usando los mismos


procedimientos para este proyecto. Para llevar a cabo esto seria
necesario añadir un driver para el nuevo eje.

• El tamaño del PCB se puede reducir si se usan componentes SMD en lugar


de los Through Hole que se usaron aquí.

• El controlador que se implementa se puede mejorar, sin embargo


será necesario hallar una mejor manera de obtener el modelo
matemático del motor. Una vez realizada esta tarea se podría utilizar
como punto de partida para el desarrollo de un algoritmos de control
mas robusto.

Alexander Montoya Osorio 78


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Memoria

Alexander Montoya Osorio 79


Universidad de la Rioja
Diseño y desarrollo de un gimbal
con motores brushless

ANEXOS

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

ÍNDICE DE ANEXOS

1. LIBRERIAS E IMPLEMENTACION DEL SOFTWARE ....................................................3

1.1. LIBRERÍA TIMER .......................................................................................................... 3


1.2. LIBRERÍA I2C ............................................................................................................... 5
1.3. LIBRERÍA PWM E IMPLEMENTACION DEL SPWM ...................................................... 6
1.4. LIBRERÍA PLL ............................................................................................................. 7
1.5. PROGRAMA PRINCIPAL. .............................................................................................. 7

2. CODIGO ................................................................................................................. 11

2.1. FICHERO PWM.H .....................................................................................................11


2.2. CODIGO TIMERS .....................................................................................................18
2.3. CÓDIGO I2C ...............................................................................................................22
2.4. CODIGO PRINCIPAL....................................................................................................27
2.5. CODIGO PLL ..............................................................................................................36

Alexander Montoya Osorio 2


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

1. LIBRERIAS E IMPLEMENTACION DEL SOFTWARE

En este capitulo se describen las librerías que ha sido necesario generar para llevar
a cabo las diversas tareas asociadas al control de posición de los motores. Entre
tales tareas se contempla por poner un ejemplo, el uso del protocolo de
comunicación I2C para la transferencia de datos entre el microprocesador y la
unidad de sensores. Este requerimiento exige la elaboración o uso de alguna
librería que implemente el protocolo y que proporcione las funciones apropiadas
para tal fin.

Las librerías están directamente asociadas a la programación y manipulación de


los módulos hardware que intervienen en el funcionamiento del Gimbal. A
continuación se listan los módulos hardware empleados del microcontrolador
TM4C123GXL:

• Modulo PWM: usado para generar 6 señales de PWM


• Modulo I2C: este modulo se encarga de gestionar el protocolo I2C durante
la comunicación.
• Módulos TIMER: estos se emplean para la generación de interrupciones
periódicas. En total se utilizan 3 interrupciones para este proyecto.
A parte de las librerías existen dentro del código una serie de algoritmos y
funciones que llevan a cabo la modulación de las señales de PWM, filtrado y
tratamiento de datos y por último la estimación de la orientación.

En este apartado se detalla la estructura, composición, función de cada uno de las


porciones de código que implementa el Gimbal.

1.1. LIBRERÍA TIMER

La librería usada para generar interrupciones implica la programación de 3


módulos Timer del microprocesador TM4C123GHPZ. La metodología empleada
durante la programación de cada uno de los Timer implica conocer el
funcionamiento del modulo y los registros asociados.

Aunque el modulo Timer que implementa el microprocesador puede ser


programado para cumplir con un amplio número de tareas, en este documento
solo se describe la programación de los módulos TIMER0, TIMER1 y TIMER2 para
que estos generen interrupciones periódicas. Las tareas periódicas que se deben

Alexander Montoya Osorio 3


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
ejecutar incluyen la toma de muestras de los sensores a una frecuencia
determinada y la modulación de la señales PWM.

El fichero que incluye la implementación de esta librería se llama: timers.cy


el código puede ser consultado el los ANEXOS.

Funciones de la librería timer.c :

• void Timer0A_Init(void(*task)(void), uint32_t period)


• void Timer1A_Init(void(*task)(void), uint32_t period)
• void Timer2A_Init(void(*task)(void), uint32_t period)

void TimerXA_Init(void(*task)(void), uint32_t period)

Esta función inicializa el timerX para que este genere interrupciones de


manera periódica y a una frecuencia establecida por el parámetro period

Parámetro Descripción
uint32_t period Indica el periodo de tiempo que transcurre entre
cada interrupción y se corresponde con el numero
de ciclos de reloj necesarios para incrementar el
valor de un contador desde cero hasta el valor de
period.
void(*task)(void) Es un puntero a la función que se va a ejecutar
cada vez que se produzca la interrupción.

• void Timer0A_Handler(void)
• void Timer1A_Handler(void)
• void Timer2A_Handler(void)

void TimerXA_Handler(void)

Esta función corresponde con el manejador de interrupciones para cada


uno de los Timer, se ejecuta cada vez que se produce la interrupción del y
dentro de ella se ejecuta la función apuntada por el puntero *task. Esta
función se ejecuta por primera vez al inicializar el Timer correspondiente
y no requiere ningún parámetro como argumento de la funcion.

Parámetro Descripción
ninguno

Alexander Montoya Osorio 4


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

1.2. LIBRERÍA I2C

Esta librería incluye tres funciones, una función sirve para inicializar los
módulos I2C del mircroprocesador TM4C123GP6Z y las otras dos se usan para
enviar y recibir datos mediante el protocolo I2C.

La librería I2C contiene las siguientes funciones:

• void I2C0_Init()

void I2C0_Init(void)

esta función inicializa el modulo I2C0, lo configura y habilita la salida de


las señales por los pines PB2 y PB3.
Parámetro Descripción
ninguno

• unsigned long writeMD(unsigned char addr, unsigned char addrReg,


unsigned char data)

unsigned long writeMD(unsigned char addr, unsigned char addrReg,


unsigned char data)

Esta función envía un byte de datos por el bus I2C a la dirección indicada
en addr

Parámetro Descripción
unsigned char addr addr contiene la dirección del dispositivo en el
que se quiere acceder

unsigned char dirección del registro interno del dispositivo


addrReg I2C

unsigned char data Byte de datos a transmitir

• unsigned long readMD(unsigned char addr,unsigned char regAddr,


unsigned char numbytes, unsigned char *databuff)

Alexander Montoya Osorio 5


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

unsigned long readMD(unsigned char addr,unsigned char regAddr,


unsigned char numbytes, unsigned char *databuff)

Esta función lee la cantidad de bytes indicada en numbytes y los almacena


en una matriz

Parámetro Descripción
unsigned char addr addr contiene la dirección del dispositivo en el
que se quiere acceder

unsigned char dirección del registro interno del dispositivo


addrReg I2C

unsigned char Byte de datos a transmitir


numbytes

unsigned char Puntero al array en donde se almacenan los


*databuff bytes leídos

1.3. LIBRERÍA PWM E IMPLEMENTACION DEL SPWM

La librería PWM incluye tres funciones de las cuales una se usa para
configurar el modulo PMW1 del microprocesador TM4C123GP6Z y las dos
funciones restante modulan una señal trifásica manipulando los registros del
modulo de manera síncrona.

La funciones de la librería PWM son:

• void PWM1_Init(uint16_t period)

void PWM1_Init(uint16_t period)

Esta función inicializa el modulo PWM1 para que este genere 6 salidas de
PWM a una frecuencia determinada a través de los pines: PF0,
PF2,PF3,PD0,PD1 y PA6.
Parámetro Descripción
uint16_t period Con el valor de indicado en period se calcula la
frecuncia de conmutación de la señal PWM

Alexander Montoya Osorio 6


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
• void SPWM_Modulation1(int8_t increment)
• void SPWM_Modulation2(int8_t increment)

void SPWM_ModulationX(int8_t increment)

Esta función genera una señal trifásica en los pines PF0, PF2 y PF3, si X =
1
Esta función genera una señal trifásica en los pines PDO,PD1 y PA6, si X
=0
Parámetro Descripción
int8_t increment Incremente puede tomar el valor de cero o uno
y determina la dirección de avance de las
señales moduladas para hacer mover el motor

1.4. LIBRERÍA PLL

Esta librería incluye una sola función. En ella se configura la frecuencia del
reloj del sistema y puede ser modificada si se modifica el valor del parámetro
SISDIV2 que aparece en el fichero: PLL.h

• void PLL_Init(void)

void PLL_Init(void)

Esta función establece la frecuencia del reloj del sistema

Parámetro Descripción
ninguno

1.5. PROGRAMA PRINCIPAL.

El fichero main.c incluye el código principal del proyecto en el cual definen


las funciones y los algoritmos necesarios para implementar el Gimbal propuesto en
este Trabajo de Fin de Grado. El contenido de este fichero puede ser consultado en
los ANEXOS.

Alexander Montoya Osorio 7


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
En el programa principal se definen 8 funciones, tres de ellas se usan para
generar las tres interrupciones en las que se basa el funcionamiento del Gimbal y el
resto constituye un conjunto de funciones que llevan a cabo las tareas de
tratamiento de datos y manipulación de las señales PWM.

A continuación de detallan las funciones que aparecen definidas en el


fichero main.c:

• void EnableInterrupts(void):

void EnableInterrupts(void)

Esta función habilita la generación global de las interrupciones


Parámetro Descripción
ninguno

• void WaitForInterrupt(void):

void WaitForInterrupt (void)

Cuando se ejecuta esta función el programa entra en un bucle infinito del


cual solo sale cuando se genera una interrupción
Parámetro Descripción
ninguno

• void func(double freq)


• void func2(double freq2)

void func(double freq)


void func2(double freq2)

Estas dos funciones manipulan los registros del TIMER0 y TIMER1 y son
usadas para variar la frecuencia de las señales moduladas. En base al
valor de freq/freq2, se calcula el numero de ciclos de reloj necesarios
para generar una sinusoide a la frecuencia deseada.

Parámetro Descripción
freq, freq2 El valor asignado a freq/freq2 corresponde con
la velocidad de giro del motor en
revoluciones/segundo.

Alexander Montoya Osorio 8


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

• void Calibrate_Gyros()

void Calibrate_Gyros()

Esta función sirve para calcular el drift que presentan los giroscopios con
el fin de extraer esta componente de las medidas. Solo se ejecuta una vez
al arrancar la aplicación.

Parámetro Descripción
ninguno

• void filterUpdate(float w_x, float w_y, float w_z, float a_x, float a_y,
float a_z)

void filterUpdate(float w_x, float w_y, float w_z, float a_x, float a_y, float
a_z)

Esta función implementa el filtro Madwick y se ejecuta periódicamente


después de cada tomada de datos. Los parámetros que se le pasan
corresponden con las aceleraciones y velocidades medidas por los
sensores. Dentro de esta función se lleva a cabo el tratamiento de datos y
el calculo del cuaternio de orientación.

Parametro Descripción
w_x, w_y, w_z Velocidad angular de cada uno de los
giroscopios
a_x, a_y, a_z Aceleración de cada uno de los acelerómetros

• void OutputSineWave(void)
• void OutputSineWave2(void)

void OutputSineWave(void)
void OutputSineWave2(void)

Estas dos funciones se ejecutan cada que se produce una interrupción que bien
puede ser del TIMER0 O TIMER1. Al mismo tiempo dentro de ellas se ejecutan los
funciones que modulan las señales PWM con las que se hacen girar los motores
Parámetro Descripción
ninguno

Alexander Montoya Osorio 9


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

• void PeriodTask(void)

void PeriodTask(void)

Esta función se ejecuta de manera periódica a la frecuencia del sistema, dentro de


ella se lleva a cabo la toma de datos y el cálculo de la acción de control.

Parámetro Descripción
ninguno

• int main(void)

int main(void)

Esta es la función principal, se ejecuta al iniciar el micro y dentro de ella se configura


la frecuencia del reloj de, sistema, el modulo I2C, el modulo PWM, los módulos
TIMER y también se ajusta la sensibilidad de los sensores. Una vez se han
configurado todos los dispositivos, el programa entra en un bucle infinito definido
en esta función y del que solo puede salir cuando se produzca una interrupción.

Parámetro Descripción
ninguno

Alexander Montoya Osorio 10


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

2. CODIGO

2.1. FICHERO PWM.H

// Fichero: PWM.h
// Alexander Montoya
// 01-07-2016

void PWM1_Init(uint16_t period);

// Cambio del ancho de pulso


void SPWM_Modulation1(int8_t increment);
void SPWM_Modulation2(int8_t increment);

Fichero PWM.c:

// Fichero: PWM.c
// Alexander Montoya
// 01-07-2016

/*
*********************************************************
*********************************************************
** En esta librería se definen las 3 funciones que **
** son necesarias para la generación de 6 señales **
** PWM usando el modulo PWM del mircroprocesador **
** TM4C123G6PZ. Una de las funciones inicializa y **
** configuran el modulo y las otras dos se usan para **
** cambiar el ancho de pulso de las señales PWM **
** **
*********************************************************
*********************************************************
*/

//
// Ficheros a incluir
//

#include <stdint.h>
#include "PWM.h"
#include <math.h>

Alexander Montoya Osorio 11


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

//
// Definición de punteros a los registros del modulo
//

#define PWM1_ENABLE_R (*((volatile uint32_t *)0x40029008))


#define PWM1_CTL_R (*((volatile uint32_t *)0x40029000))
#define PWM1_SYNC_R (*((volatile uint32_t *)0x40029004))

#define PWM1_0_CTL_R (*((volatile uint32_t *)0x40029040))


#define PWM1_0_LOAD_R (*((volatile uint32_t *)0x40029050))
#define PWM1_0_CMPA_R (*((volatile uint32_t *)0x40029058))
#define PWM1_0_CMPB_R (*((volatile uint32_t *)0x4002905C))
#define PWM1_0_GENA_R (*((volatile uint32_t *)0x40029060))
#define PWM1_0_GENB_R (*((volatile uint32_t *)0x40029064))

#define PWM1_1_CTL_R (*((volatile uint32_t *)0x40029080))


#define PWM1_1_LOAD_R (*((volatile uint32_t *)0x40029090))
#define PWM1_1_CMPA_R (*((volatile uint32_t *)0x40029098))
#define PWM1_1_GENA_R (*((volatile uint32_t *)0x400290A0))

#define PWM1_2_CTL_R (*((volatile uint32_t *)0x400290C0))


#define PWM1_2_LOAD_R (*((volatile uint32_t *)0x400290D0))
#define PWM1_2_CMPA_R (*((volatile uint32_t *)0x400290D8))
#define PWM1_2_CMPB_R (*((volatile uint32_t *)0x400290DC))
#define PWM1_2_GENA_R (*((volatile uint32_t *)0x400290E0))
#define PWM1_2_GENB_R (*((volatile uint32_t *)0x400290E4))

#define PWM1_3_CTL_R (*((volatile uint32_t *)0x40029100))


#define PWM1_3_LOAD_R (*((volatile uint32_t *)0x40029110))
#define PWM1_3_CMPA_R (*((volatile uint32_t *)0x40029118))
#define PWM1_3_CMPB_R (*((volatile uint32_t *)0x4002911C))
#define PWM1_3_GENA_R (*((volatile uint32_t *)0x40029120))
#define PWM1_3_GENB_R (*((volatile uint32_t *)0x40029124))

#define GPIO_PORTA_AFSEL_R (*((volatile uint32_t *)0x40004420))


#define GPIO_PORTA_ODR_R (*((volatile uint32_t *)0x4000450C))
#define GPIO_PORTA_DEN_R (*((volatile uint32_t *)0x4000451C))
#define GPIO_PORTA_AMSEL_R (*((volatile uint32_t *)0x40004528))
#define GPIO_PORTA_PCTL_R (*((volatile uint32_t *)0x4000452C))

#define GPIO_PORTD_AFSEL_R (*((volatile uint32_t *)0x40007420))


#define GPIO_PORTD_ODR_R (*((volatile uint32_t *)0x4000750C))
#define GPIO_PORTD_DEN_R (*((volatile uint32_t *)0x4000751C))
#define GPIO_PORTD_AMSEL_R (*((volatile uint32_t *)0x40007528))
#define GPIO_PORTD_PCTL_R (*((volatile uint32_t *)0x4000752C))

Alexander Montoya Osorio 12


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
#define GPIO_PORTF_AFSEL_R (*((volatile uint32_t *)0x40025420))
#define GPIO_PORTF_ODR_R (*((volatile uint32_t *)0x4002550C))
#define GPIO_PORTF_DEN_R (*((volatile uint32_t *)0x4002551C))
#define GPIO_PORTF_AMSEL_R (*((volatile uint32_t *)0x40025528))
#define GPIO_PORTF_PCTL_R (*((volatile uint32_t *)0x4002552C))
#define GPIO_PORTF_LOCK_R (*((volatile uint32_t *)0x40025520))
#define GPIO_PORTF_CR_R (*((volatile uint32_t *)0x40025524))

#define SYSCTL_RCGCGPIO_R (*((volatile uint32_t *)0x400FE608))


#define SYSCTL_RCGCPWM_R (*((volatile uint32_t *)0x400FE640))

#define SYSCTL_PRGPIO_R (*((volatile uint32_t *)0x400FEA08))


#define SYSCTL_PRPWM_R (*((volatile uint32_t *)0x400FEA40))

#define STEPS 540


#define PI 3.14159265358979323846

uint16_t Wave2[1000];

//***************** PWM1_Init ************************


// Esta función inicializa el modulo PWM1 para
// que este genere 6 salidas de PWM a una
// frecuencia determinada a través de los pines: PF0,
// PF2,PF3,PD0,PD1 y PA6.
// Entradas: - period -> este valor determina
// la frecuencia de conmutación de las
// señales PWM
// Salidas : NULL
//***************** PWM1_Init ************************

void PWM1_Init(uint16_t period){

// Calculo de los 50 valores de la señal a modular


for (int i=0;i<=(STEPS-1);i++)
Wave2[i]= 10+ (0.5*(2/(sqrt(3))*sin(i*2*PI/STEPS) +
1/(3*sqrt(3))*sin(i*2*3*PI/STEPS))+0.5)*600 ;

// Se proporciona una señal de reloj a los modulos PWM1


SYSCTL_RCGCPWM_R |= 0x00000002;

Alexander Montoya Osorio 13


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
// Espera mientras se termina la anterior instrucción
while((SYSCTL_PRPWM_R&0x00000002)==0){};

// Se activa el reloj para los puertos A/D/F


SYSCTL_RCGCGPIO_R |= 0x00000029;

// Espera mientras se termina la anterior instrucción


while((SYSCTL_PRGPIO_R&0x00000029)==0){};

GPIO_PORTF_LOCK_R |= 0x4C4F434B;
GPIO_PORTF_CR_R |= 0x01;

GPIO_PORTF_AFSEL_R |= 0x0D; // Habilita funcionalidad alternativa para los


pines PF0/PF2/PF3
GPIO_PORTF_ODR_R &= ~0x0D; // Deshabilita salida a colector abierto para
los pines PF0/PF2/PF3
GPIO_PORTF_DEN_R |= 0x0D; // Habilita función digital en los pines
PF0/PF2/PF3
GPIO_PORTF_AMSEL_R &= ~0x0D; // Deshabilita función analógica en los
pines PF0/PF2/PF3

GPIO_PORTA_AFSEL_R |= 0x40; // Habilita funcionalidad alternativa para los


pines PA6
GPIO_PORTA_ODR_R &= ~0x40; // Deshabilita salida a colector abierto para
los pines PA6
GPIO_PORTA_DEN_R |= 0x40; // Habilita función digital en los pines PA6
GPIO_PORTA_AMSEL_R &= ~0x40; // Deshabilita función analógica en los
pines PA6

GPIO_PORTD_AFSEL_R |= 0x03; // Habilita funcionalidad alternativa para los


pines PD0/PD1
GPIO_PORTD_ODR_R &= ~0x03; // Deshabilita salida a colector abierto para
los pines PD0/PD1
GPIO_PORTD_DEN_R |= 0x03; // Habilita función digital en los pines
PD0/PD1
GPIO_PORTD_AMSEL_R &= ~0x03; // Deshabilita función analógica en los
pines PD0/PD1

GPIO_PORTF_PCTL_R = (GPIO_PORTF_PCTL_R&0xFFFF00F0)+0x00005505; //
Configura PF0/2/3 para soportar señales de PWM
GPIO_PORTD_PCTL_R = (GPIO_PORTD_PCTL_R&0xFFFFFF00)+0x00000055; //
Configura PD0/1 para soportar señales de PWM
GPIO_PORTA_PCTL_R = (GPIO_PORTA_PCTL_R&0xF0FFFFFF)+0x05000000; //
Configura PA6 para soportar señales de PWM

Alexander Montoya Osorio 14


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
// Configuración de los generadores
PWM1_0_CTL_R |= 0x32;
PWM1_1_CTL_R |= 0x12;
PWM1_2_CTL_R |= 0x12;
PWM1_3_CTL_R |= 0x32;

PWM1_0_GENB_R = 0xB00;
PWM1_0_GENA_R = 0x0B0;
PWM1_1_GENA_R = 0x0B0;

PWM1_2_GENA_R = 0x0B0;
PWM1_3_GENA_R = 0x0B0;
PWM1_3_GENB_R = 0xB00;

// Se configura la frecuencia de conmutación


PWM1_0_LOAD_R = period - 1;
PWM1_1_LOAD_R = period - 1;
PWM1_2_LOAD_R = period - 1;
PWM1_3_LOAD_R = period - 1;

// Se definen un ancho de pulso para cada una de las señales


PWM1_0_CMPB_R = 200 -1;
PWM1_0_CMPA_R = 100 - 1;
PWM1_1_CMPA_R = 50 - 1;
PWM1_3_CMPB_R = 200 - 1;
PWM1_2_CMPA_R = 100 - 1;
PWM1_3_CMPA_R = 50 - 1;

// Se habilitan todos los generadores


PWM1_0_CTL_R |= 0x01;// Arranca el generador 0
PWM1_1_CTL_R |= 0x01;// Arranca el generador 1
PWM1_2_CTL_R |= 0x01;// Arranca el generador 2
PWM1_3_CTL_R |= 0x01;// Arranca el generador 3

PWM1_ENABLE_R |= 0xD7;// enable PWM1 Generator 0/1/2/3


}

//*************** SPWM_Modulation1 *****************


// Esta función genera una señal trifásica de
// de ancho de pulso variable.
// Entradas: - increment -> indica la dirección de
// avance de la sinusoide.
// Salidas : NULL
//*************** SPWM_Modulation1 *****************

uint8_t ft=1;

Alexander Montoya Osorio 15


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

void SPWM_Modulation1(int8_t increment){

static int16_t index = 0;


static int16_t index_2 = 180;
static int16_t index_3 = 360;

index = index + increment;


if (index > STEPS-1) index = 0;
if (index < 0) index = STEPS-1;

index_2 = index_2 + increment;


if (index_2 > STEPS-1) index_2 = 0;
if (index_2 < 0) index_2 = STEPS-1;

index_3 = index_3 + increment;


if (index_3 > STEPS-1) index_3 = 0;
if (index_3 < 0) index_3 = STEPS-1;

if (ft){ft=0; PWM1_SYNC_R |= 0x0C;}

PWM1_2_CMPA_R = Wave2[index]; // cambio de ancho de pulso en la señal


PWM1_3_CMPA_R = Wave2[index_2]; // cambio de ancho de pulso en la señal
PWM1_3_CMPB_R = Wave2[index_3]; // cambio de ancho de pulso en la señal

PWM1_CTL_R |= 0x0C;
}

//************* PWM_Modulation2 **********************


// Esta función genera una señal trifásica de
// de ancho de pulso variable.
// Entradas: - increment -> indica la dirección de
// avance de la sinusoide.
// Salidas : NULL
//************* PWM_Modulation2 **********************

uint8_t ft2=1;

void SPWM_Modulation2(int8_t increment){

static int16_t index = 0;


static int16_t index_2 = 180;
static int16_t index_3 = 360;

Alexander Montoya Osorio 16


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

index = index + increment;


if (index > STEPS-1) index = 0;
if (index < 0) index = STEPS-1;

index_2 = index_2 + increment;


if (index_2 > STEPS-1) index_2 = 0;
if (index_2 < 0) index_2 = STEPS-1;

index_3 = index_3 + increment;


if (index_3 > STEPS-1) index_3 = 0;
if (index_3 < 0) index_3 = STEPS-1;

if (ft2){ft2=0; PWM1_SYNC_R |= 0x03;}

PWM1_0_CMPB_R = Wave2[index]; //cambio de ancho de pulso en la señal


PWM1_0_CMPA_R = Wave2[index_2]; //cambio de ancho de pulso en la señal
PWM1_1_CMPA_R = Wave2[index_3]; //cambio de ancho de pulso en la señal

PWM1_CTL_R |= 0x03;
}

Alexander Montoya Osorio 17


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

2.2. CODIGO TIMERS

Fichero Timers.h:

// Fichero: Timers.h
// Alexander Montoya
// 01-07-2016

#ifndef __TIMER0AINTS_H__ // do not include more than once


#define __TIMER0AINTS_H__

void Timer2A_Init(void(*task)(void), uint32_t period);

void Timer1A_Init(void(*task)(void), uint32_t period);

void Timer0A_Init(void(*task)(void), uint32_t period);

#endif // __TIMER0AINTS_H__

Fichero Timers.c:

// Fichero: Timers.h
// Alexander Montoya
// 01-07-2016

/*
*********************************************************
*********************************************************
** En esta librería se definen las definen las **
** funciones usadas para generar interrupciones **
** periódicas a una frecuencia particular haciendo **
** uso de los módulos Timer del microporcesador **
** TM4C123G6PZ **
*********************************************************
*********************************************************
*/

#include <stdint.h>
#include "tm4c123gh6pm.h"

void (*PeriodicTask)(void); // user function

Alexander Montoya Osorio 18


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
void (*PeriodicTask2)(void); // user function
void (*PeriodicTask3)(void); // user function

// ***************** Timer2A_Init ****************


// Activa las interrupciones del TIMER2 para
// ejecutar tareas periódicas
// Entrada: - task -> puntero a una funcion definida por el usuario
// - period en unidades (1/clockfreq), 32 bits
// Salidas: NULL
// ***************** Timer2A_Init ****************
void Timer2A_Init(void(*task)(void), uint32_t period){
uint32_t P = period;
SYSCTL_RCGCTIMER_R |= 0x04; // 0) activa TIMER2A
PeriodicTask = task; // funcion de usuario
TIMER2_CTL_R = 0x00000000; // 1) Deshabilita Timer2A durante la
configuración
TIMER2_CFG_R = 0x00000000; // 2) configura Timer2A a modo 32-bit
TIMER2_TAMR_R = 0x00000002; // 3) configuración en modo periódico y
cuenta descendente
TIMER2_TAILR_R = P -1; // 4) valor de recarga
TIMER2_TAPR_R = 0; // 5) bus clock resolution
TIMER2_ICR_R = 0x00000001; // 6) borra bandera TIMER2A timeout
TIMER2_IMR_R = 0x00000001; // 7) generación de interrupción modo timeout
NVIC_PRI5_R = (NVIC_PRI5_R&0x00FFFFFF)|0x30000000; // 8) prioridad 3
NVIC_EN0_R = 1<<23; // 9) habilita la rutina de interrupción en el vector de
interrupciones
TIMER2_CTL_R = 0x00000001; // 10) habilita el TIMER2A

// ***************** Timer2A_Handler ****************


// Función que se ejecuta cada que se produce
// una interrupción por parte del Timer2
// ejecutar tareas periódicas
// Entrada: NULL
// Salidas: NULL
// ***************** Timer2A_Handler ****************
void Timer2A_Handler(void){
TIMER2_ICR_R = TIMER_ICR_TATOCINT;// borra bandera
(*PeriodicTask)(); // ejecuta la función de usuario
}

// ***************** Timer1A_Init ****************


// Activa las interrupciones del TIMER1 para
// ejecutar tareas periódicas
// Entrada: - task -> puntero a una función definida por el usuario
// - period en unidades (1/clockfreq), 32 bits
// Salidas: NULL

Alexander Montoya Osorio 19


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
// ***************** Timer1A_Init ****************
void Timer1A_Init(void(*task)(void), uint32_t period){
uint32_t P = period;
SYSCTL_RCGCTIMER_R |= 0x02; // 0) activa TIMER1A
PeriodicTask2 = task; // función de usuario
TIMER1_CTL_R = 0x00000000; // 1) Deshabilita Timer1A durante la
configuración
TIMER1_CFG_R = 0x00000000; // 2) configura Timer2A a modo 32-bit
TIMER1_TAMR_R = 0x00000002; // 3) configuración en modo periódico y
cuenta descendente
TIMER1_TAILR_R = P -1; // 4) valor de recarga
TIMER1_TAPR_R = 0; // 5) bus clock resolution
TIMER1_ICR_R = 0x00000001; // 6) borra bandera TIMER1A timeout
TIMER1_IMR_R = 0x00000001; // 7) generación de interrupción modo timeout
NVIC_PRI5_R = (NVIC_PRI5_R&0xFFFF00FF)|0x00008000; // 8) priority 8
NVIC_EN0_R = 1<<21; // 9) habilita la rutina de interrupción en el vector de
interrupciones
TIMER1_CTL_R = 0x00000001; // 10) habilita el TIMER1A

// ***************** Timer1A_Handler ****************


// Función que se ejecuta cada que se produce
// una interrupción por parte del Timer2
// ejecutar tareas periódicas
// Entrada: NULL
// Salidas: NULL
// ***************** Timer1A_Handler ****************
void Timer1A_Handler(void){
TIMER1_ICR_R = TIMER_ICR_TATOCINT;// acknowledge timer1A timeout
(*PeriodicTask2)(); // execute user task
}

// ***************** Timer0A_Init ****************


// Activa las interrupciones del TIMER0 para
// ejecutar tareas periódicas
// Entrada: - task -> puntero a una función definida por el usuario
// - period en unidades (1/clockfreq), 32 bits
// Salidas: NULL
// ***************** Timer0A_Init ****************
void Timer0A_Init(void(*task)(void), uint32_t period){

SYSCTL_RCGCTIMER_R |= 0x01; // 0) activa TIMER0A


PeriodicTask3 = task; // función de usuario

Alexander Montoya Osorio 20


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
TIMER0_CTL_R = 0x00000000; // 1) Deshabilita Timer0A durante la
configuración
TIMER0_CFG_R = 0x00000000; // 2) configura Timer0A a modo 32-bit
TIMER0_TAMR_R = 0x00000002; // 3) configuración en modo periódico y
cuenta descendente
TIMER0_TAILR_R = period-1; // 4) valor de recarga
TIMER0_TAPR_R = 0; // 5) bus clock resolution
TIMER0_ICR_R = 0x00000001; // 6) borra bandera TIMER0A timeout
TIMER0_IMR_R = 0x00000001; // 7) generación de interrupción modo timeout
NVIC_PRI4_R = (NVIC_PRI4_R&0x00FFFFFF)|0x80000000; // 8) priority 4
NVIC_EN0_R = 1<<19; // 9) habilita la rutina de interrupción en el vector de
interrupciones
TIMER0_CTL_R = 0x00000001; // 10) habilita el TIMER0A
}

// ***************** Timer0A_Handler ****************


// Función que se ejecuta cada que se produce
// Una interrupción por parte del Timer0
// ejecutar tareas periódicas
// Entrada: NULL
// Salidas: NULL
// ***************** Timer0A_Handler ****************
void Timer0A_Handler(void){
TIMER0_ICR_R = TIMER_ICR_TATOCINT; // borra bandera
(*PeriodicTask3)(); // ejecuta función de usuario 3
}

Alexander Montoya Osorio 21


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

2.3. CÓDIGO I2C

Fichero I2C.h:

// Fichero : I2C.h
// Alexander Montoya Osorio
// 01/06/2016

#ifndef I2C_H
#define I2C_H

void I2C0_Init(void);
unsigned long writeMD(unsigned char addr, unsigned char addrReg, unsigned char
data);
unsigned long readMD(unsigned char addr,unsigned char regAddr, unsigned char
numbytes, unsigned char *databuff);

#endif

Fichero I2C.c:

// Fichero : I2C.c
// Alexander Montoya Osorio
// 01/06/2016

/*
*********************************************************
*********************************************************
** En esta librería se definen las funciones **
** necesarias para inicializar el modulo **
** I2C0 del microprocesador TM4C123G6PZ y usarlo **
** para llevar a cabo transferencias de datos **
** entre el micro y la IMU **
** **
*********************************************************
*********************************************************
*/
//
// Ficheros a incluir
//
#include "I2C.h"
#include <stdint.h>
#include "tm4c123gh6pm.h"

Alexander Montoya Osorio 22


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

//
// Definición de procedimientos
//
#define SLA_W(address) (address << 1)
#define SLA_R(address) ((address << 1) + 0x01)

//
// Definición de etiquetas
//
#define I2C_MCS_ACK 0x00000008 // Data Acknowledge Enable
#define I2C_MCS_DATACK 0x00000008 // Acknowledge Data
#define I2C_MCS_ADRACK 0x00000004 // Acknowledge Address
#define I2C_MCS_STOP 0x00000004 // Generate STOP
#define I2C_MCS_START 0x00000002 // Generate START
#define I2C_MCS_ERROR 0x00000002 // Error
#define I2C_MCS_RUN 0x00000001 // I2C Master Enable
#define I2C_MCS_BUSY 0x00000001 // I2C Busy
#define I2C_MCR_MFE 0x00000010 // I2C Master Function Enable

//********************** I2C0_Init ********************


// Esta función inicializa el modulo cero de I2C
// y lo configura para su uso con una velocidad de
// 100 Kbit/s. También configura los pines PB2,3
// de tal manera que PB2 contiene la señal de reloj
// (SCL) y PB3 la señal de datos (SDA).
// Entradas: NULL
// Salidas : NULL
//********************** I2C0_Init ********************

void I2C0_Init()
{
SYSCTL_RCGCI2C_R |= 0x0001; // 1) Activa el modulo I2CO
SYSCTL_RCGCGPIO_R |= 0x0002; // 2) Activa el puerto B
while((SYSCTL_PRGPIO_R&0x0002) == 0){};// ready? Bucle de espera mientras se
activa el puerto

GPIO_PORTB_AFSEL_R |= 0x0C; // 3) Habilita la funcionalidad alternativa


// para os pines PB2,3 para ser usados
GPIO_PORTB_ODR_R |= 0x08; // 4) Habilita PB3 como salida a colector
abierto
GPIO_PORTB_DEN_R |= 0x0C; // 5) Habilita PB2,3 como pines de
etrada/salida digital
// 6) configura PB2,3 como señales I2C

Alexander Montoya Osorio 23


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
GPIO_PORTB_PCTL_R = (GPIO_PORTB_PCTL_R&0xFFFF00FF)+0x00003300;
GPIO_PORTB_AMSEL_R &= ~0x0C; // 7) Deshabilita funcionalidad analógica
para PB2,3
I2C0_MTPR_R = 2; // 8) Establece un velocidad de comunicación de
100 Kbit/s
I2C0_MCR_R = I2C_MCR_MFE; // 9) Habilita el modulo I2C para su uso
}

//******************** writeMD *************************


// Esta función envía por el bus I2C un byte de
// datos al dispositivo apuntado por la dirección
// indicada en addr.
// Entradas: - addr -> dirección dispositivo I2C
// - regAddr -> dirección del único registro al que se quiere acceder
// - data -> dato a ser enviado
// Salidas : NULL
//******************** writeMD *************************

unsigned long writeMD(unsigned char addr, unsigned char addrReg, unsigned char
data) // write
{
// Añade bit de escritura
I2C0_MSA_R = SLA_W(addr);

// Pone el dato en el registro de salida


I2C0_MDR_R = addrReg;

// Espera mientras el bus esta ocupado


while (I2C0_MCS_R & I2C_MCS_BUSY){};

// Genera una condición de START en el bus y envia el dato


I2C0_MCS_R = I2C_MCS_START|I2C_MCS_RUN;

// Espera mientras el bus esta ocupado


while (I2C0_MCS_R & I2C_MCS_BUSY){};

// Se comprueba que no ha ocurrido ningún error durante la transferencia


if((I2C0_MCS_R&(I2C_MCS_DATACK|I2C_MCS_ADRACK|I2C_MCS_ERROR)) != 0){
I2C0_MCS_R = (0| I2C_MCS_STOP|I2C_MCS_RUN);
return (I2C0_MCS_R&(I2C_MCS_DATACK|I2C_MCS_ADRACK|I2C_MCS_ERROR));
}

// Se pone un nuevo dato en el registro de salida


I2C0_MDR_R = data;

Alexander Montoya Osorio 24


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
// Se genera una condición de START y se envía el nuevo dato
I2C0_MCS_R = I2C_MCS_STOP|I2C_MCS_RUN

// Espera mientras el bus esta ocupado


while (I2C0_MCS_R & I2C_MCS_BUSY){};

// Devuelve cero si no hubieron errores


return (I2C0_MCS_R&(I2C_MCS_DATACK|I2C_MCS_ADRACK|I2C_MCS_ERROR));
}

//********************** readMD ***********************


// Esta función devuelve en un array los bytes de
// datos recibidos por el bus I2C del dispositivo
// cuya dirección esta contenida en addr.
// Entradas: - addr -> dirección dispositivo I2C
// - regAddr -> dirección del el primer registro a leer
// - nunbytes -> numero de bytes a leer
// - *databuff -> puntero a un array de bytes
// Salidas : NULL
//********************** readMD ***********************

unsigned long readMD(unsigned char addr,unsigned char regAddr, unsigned char


numbytes, unsigned char *databuff)
{

// Añade bit de escritura


I2C0_MSA_R = SLA_W(addr);

// Pone el dato en el registro de salida


I2C0_MDR_R = regAddr;

// Espera mientras el bus esta ocupado


while (I2C0_MCS_R & I2C_MCS_BUSY){};

// Genera una condición de START en el bus y envía el dato


I2C0_MCS_R = I2C_MCS_START|I2C_MCS_RUN;

// Espera mientras el bus esta ocupado


while (I2C0_MCS_R & I2C_MCS_BUSY){};

// Añade bit de lectura


I2C0_MSA_R = SLA_R(addr);

// Genera una condición de START en el bus y se prepara el modulo para validar


dato recibido
I2C0_MCS_R = I2C_MCS_START|I2C_MCS_RUN|I2C_MCS_ACK;

Alexander Montoya Osorio 25


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

// Si hubieron errores durante la recepción se genera una condición de STOP y se


abandona la función
if((I2C0_MCS_R&(I2C_MCS_ADRACK|I2C_MCS_ERROR)) != 0){
I2C0_MCS_R = (0 | I2C_MCS_STOP |I2C_MCS_RUN);
return (I2C0_MCS_R&(I2C_MCS_DATACK|I2C_MCS_ADRACK|I2C_MCS_ERROR));
}

// Bucle para recibir la cantidad de datos indicada en numbytes


int i = 0;
for(i=0;i<numbytes;i++)
{
if (i==0)
databuff[i] = I2C0_MDR_R; // Se almacena el dato leido
I2C0_MCS_R = I2C_MCS_ACK | I2C_MCS_RUN; // Genera señal ACK

// Espera mientras la transmisión se lleva a cabo


while(I2C0_MCS_R&I2C_MCS_BUSY){};

if((I2C0_MCS_R&(I2C_MCS_ADRACK|I2C_MCS_ERROR)) != 0)
{
I2C0_MCS_R = (0 | I2C_MCS_STOP | I2C_MCS_RUN);

// Devuelve informe de errores si hubo algun error


return (I2C0_MCS_R&(I2C_MCS_DATACK|I2C_MCS_ADRACK|I2C_MCS_ERROR));
}

databuff[i] = I2C0_MDR_R; // Put data in the data register

// Se almacena el dato leído


I2C0_MCS_R = I2C_MCS_STOP | I2C_MCS_RUN;

// Espera mientras la transmisión se lleva a cabo


while(I2C0_MCS_R&I2C_MCS_BUSY){};

return 0;
}

Alexander Montoya Osorio 26


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

2.4. CODIGO PRINCIPAL

Fichero gimbal.c:

// Fichero: gimbal.c
// Alexander Montoya Osorio
// 01/06/2016

/*
*********************************************************
*********************************************************
** Este es el programa principal que se ejecuta
** al arrancar el gimbal. Se debe garantizar la inclusión
** de todos los ficheros necesario. El reloj del sistema
** se configura a 50 Mhz y la frecuencia de muestreo
** se establece en 200 Hz
*********************************************************
*********************************************************
*/

//
// Ficheros a incluir
//

#include "tm4c123gh6pm.h"
#include <stdint.h>
#include "PLL.h"
#include "Timer0A.h"
#include <stdio.h>
#include <stdlib.h> // C99 variable types
#include <math.h>
#include "PWM.h"

#include "I2C.h"

//
// Constantes del sistema
//
#define deltat 1.0f/500.0f // sampling period in seconds (shown as 1 ms)
#define gyroMeasError 3.14159265358979f * (5.0f / 180.0f) // gyroscope
measurement error in rad/s (shown as 5 deg/s)

Alexander Montoya Osorio 27


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
#define beta 0.1f
#define Fs 500
#define FS 50000000/Fs
#define SCALE_GYRO 16.4
#define SCALE_ACC 16384
#define PI 3.14159265358979323846

//
// Funciones del sistema
//
void DisableInterrupts(void); // Disable interrupts
void EnableInterrupts(void); // Enable interrupts
long StartCritical (void); // previous I bit, disable interrupts
void EndCritical(long sr); // restore I bit to previous value
void WaitForInterrupt(void); // low power mode

//
// Acción de control para cada uno de los motores
//
void func(double freq);
void func2(double freq2);

//
// Calibración de los giros
//
void Calibrate_Gyros(void);

//
// Variables globales del sistema
//
float a_x1, a_y1, a_z1; // medidas de los acelerómetros en m/s^2
int16_t ia_x, ia_y, ia_z; // medidas del acelerómetro

float w_x1, w_y1, w_z1; // medidas de los giroscopios en º/s


int16_t iw_x, iw_y, iw_z;

float SEq_1 = 1.0f, SEq_2 = 0.0f, SEq_3 = 0.0f, SEq_4 = 0.0f; // estimated orientation
quaternion elements with initial conditions

float eR,eP;
float errorR;

Alexander Montoya Osorio 28


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
float errorP;

uint8_t datArray[14];
float yaw,roll,pitch;

float AngleIn = 0 ;
float AngleRef = 0;
float AngleOut = 0 ;
int count = 1;

int8_t increment = 0;
int8_t increment2 = 0;

float ref=0;

float
GYRO_XOUT_OFFSET_1000SUM,GYRO_YOUT_OFFSET_1000SUM,GYRO_ZOU
T_OFFSET_1000SUM;
float GYRO_XOUT_OFFSET,GYRO_YOUT_OFFSET,GYRO_ZOUT_OFFSET;

//***************** filterUpdate ************************


// Esta función implementa el filtro Madwick. En ella
// se acondicionan las medidas y se calcula el cuaternio
// de orientación.
// Entradas: - w_x, w_y, w_z -> velocidad angular en cada eje
// - a_x, a_y, a_z -> aceleración lineal en cada eje
// Salidas : NULL
//***************** filterUpdate ************************
void filterUpdate(float w_x, float w_y, float w_z, float a_x, float a_y, float a_z)
{
// Local system variables
float norm; // vector norm
float SEqDot_omega_1, SEqDot_omega_2, SEqDot_omega_3, SEqDot_omega_4; //
quaternion derrivative from gyroscopes elements
float f_1, f_2, f_3; // objective function elements
float J_11or24, J_12or23, J_13or22, J_14or21, J_32, J_33; // objective function
Jacobian elements
float SEqHatDot_1, SEqHatDot_2, SEqHatDot_3, SEqHatDot_4; // estimated
direction of the gyroscope error
// Axulirary variables to avoid reapeated calcualtions
float halfSEq_1 = 0.5f * SEq_1;
float halfSEq_2 = 0.5f * SEq_2;
float halfSEq_3 = 0.5f * SEq_3;
float halfSEq_4 = 0.5f * SEq_4;

Alexander Montoya Osorio 29


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
float twoSEq_1 = 2.0f * SEq_1;
float twoSEq_2 = 2.0f * SEq_2;
float twoSEq_3 = 2.0f * SEq_3;

// Normalise the accelerometer measurement


norm = sqrt(a_x * a_x + a_y * a_y + a_z * a_z);
a_x /= norm;
a_y /= norm;
a_z /= norm;
// Compute the objective function and Jacobian
f_1 = twoSEq_2 * SEq_4 - twoSEq_1 * SEq_3 - a_x;
f_2 = twoSEq_1 * SEq_2 + twoSEq_3 * SEq_4 - a_y;
f_3 = 1.0f - twoSEq_2 * SEq_2 - twoSEq_3 * SEq_3 - a_z;
J_11or24 = twoSEq_3; // J_11 negated in matrix multiplication
J_12or23 = 2.0f * SEq_4;
J_13or22 = twoSEq_1; // J_12 negated in matrix multiplication
J_14or21 = twoSEq_2;
J_32 = 2.0f * J_14or21; // negated in matrix multiplication
J_33 = 2.0f * J_11or24; // negated in matrix multiplication
// Compute the gradient (matrix multiplication)
SEqHatDot_1 = J_14or21 * f_2 - J_11or24 * f_1;
SEqHatDot_2 = J_12or23 * f_1 + J_13or22 * f_2 - J_32 * f_3;
SEqHatDot_3 = J_12or23 * f_2 - J_33 * f_3 - J_13or22 * f_1;
SEqHatDot_4 = J_14or21 * f_1 + J_11or24 * f_2;
// Normalise the gradient
norm = sqrt(SEqHatDot_1 * SEqHatDot_1 + SEqHatDot_2 * SEqHatDot_2 +
SEqHatDot_3 * SEqHatDot_3 + SEqHatDot_4 * SEqHatDot_4);
SEqHatDot_1 /= norm;
SEqHatDot_2 /= norm;
SEqHatDot_3 /= norm;
SEqHatDot_4 /= norm;
// Compute the quaternion derrivative measured by gyroscopes
SEqDot_omega_1 = -halfSEq_2 * w_x - halfSEq_3 * w_y - halfSEq_4 * w_z;
SEqDot_omega_2 = halfSEq_1 * w_x + halfSEq_3 * w_z - halfSEq_4 * w_y;
SEqDot_omega_3 = halfSEq_1 * w_y - halfSEq_2 * w_z + halfSEq_4 * w_x;
SEqDot_omega_4 = halfSEq_1 * w_z + halfSEq_2 * w_y - halfSEq_3 * w_x;
// Compute then integrate the estimated quaternion derrivative
SEq_1 += (SEqDot_omega_1 - (beta * SEqHatDot_1)) * deltat;
SEq_2 += (SEqDot_omega_2 - (beta * SEqHatDot_2)) * deltat;
SEq_3 += (SEqDot_omega_3 - (beta * SEqHatDot_3)) * deltat;
SEq_4 += (SEqDot_omega_4 - (beta * SEqHatDot_4)) * deltat;
// Normalise quaternion
norm = sqrt(SEq_1 * SEq_1 + SEq_2 * SEq_2 + SEq_3 * SEq_3 + SEq_4 * SEq_4);
SEq_1 /= norm;
SEq_2 /= norm;
SEq_3 /= norm;
SEq_4 /= norm;
}

Alexander Montoya Osorio 30


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

//
// Avance sinuoide trifasica para el Roll
//
void OutputSineWave(void)
{
SPWM_Modulation1(increment);
func(errorR);

//
// Avance sinuoide trifasica para el Pitch
//
void OutputSineWave2(void)
{
SPWM_Modulation2((increment2);
func2(errorP);
}

float u,u_m1,u_m2,u_m3;
float e,e_m1,e_m2,e_m3;

float u2,u2_m1,u2_m2,u2_m3;
float eP,e2_m1,e2_m2,e2_m3;

//***************** PeriodTask ************************


// Esta función inicializa se ejecuta periódicamente
// y en ella se realiza el muestreo de los sensores
// y se implementan los controladores
// Entradas: NULL
// Salidas : NULL
//***************** PeriodTask ************************
void PeriodTask(void){

//
// Lectura de datos
//
unsigned long leido = readMD(0x68,0x3B,0x14,datArray);

Alexander Montoya Osorio 31


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
iw_x = ((datArray[8] << 8) + datArray[9]); // Gyro X
iw_y = ((datArray[10] << 8) + datArray[11]); // Gyro Y
iw_z = ((datArray[12] << 8) + datArray[13]); // Gyro Z

ia_x = ((datArray[0] << 8) + datArray[1]); // Acel X


ia_y = ((datArray[2] << 8) + datArray[3]); // Acel Y
ia_z = ((datArray[4] << 8) + datArray[5]); // Acel Z

//
// Eliminar bias de los giros
//
w_x1 = iw_x - GYRO_XOUT_OFFSET;
w_y1 = iw_y - GYRO_YOUT_OFFSET;
w_z1 = iw_z - GYRO_ZOUT_OFFSET;

//
// Cambio de unidades a rad/s
//
w_x1 = -w_x1*PI/180;
w_y1 = -w_y1*PI/180;
w_z1= w_z1*PI/180;

a_x1 = ia_x;
a_y1 = ia_y;
a_z1 = -ia_z;

//
// Aplicación filtro Madwick
//
filterUpdate(w_x1/SCALE_GYRO,w_y1/SCALE_GYRO,w_z1/SCALE_GYRO,a_x
1/SCALE_ACC,a_y1/SCALE_ACC,a_z1/SCALE_ACC);

//
// Calculo de angulos Roll, Pitch y Yaw
//
roll = atan2(2*SEq_1*SEq_2+2*SEq_3*SEq_4,1-2*SEq_2*SEq_2-
2*SEq_3*SEq_3)*180/PI;
pitch = asin(2*SEq_1*SEq_3 - 2*SEq_4*SEq_2)*180/PI;
yaw = atan2(2*SEq_1*SEq_4 - 2*SEq_3*SEq_2 ,1-2*SEq_3*SEq_3-
2*SEq_4*SEq_4)*180/PI;

//
// Calculo del error
//
eR = ref - roll;

Alexander Montoya Osorio 32


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
eP = ref - pitch;

//
// Calculo accion de control
//
u = 0.004564*eR + 0.00001141*e_m1 - 0.004563*e_m2 + 1.655*u_m1 -
0.6552*u_m2 ; // pid Roll
u2 = 0.004564*eP + 0.00001141*e2_m1 - 0.004563*e2_m2 + 1.655*u2_m1 -
0.6552*u2_m2 ; // pid Pitch

u_m3 = u_m2;
u_m2 = u_m1;
u_m1 = u;
e_m3 = e_m2;
e_m2 = e_m1;
e_m1 = eR;

u2_m3 = u2_m2;
u2_m2 = u2_m1;
u2_m1 = u2;
e2_m3 = e2_m2;
e2_m2 = e2_m1;
e2_m1 = eP;

errorP = u2;
errorR = u;
}

//******************* main ************************


// Esta función inicializa inicializa todos
// los módulos del micro que se van a usar, configura
// los sensores y entra un bucle infinito del que solo
// saldrá si se produce una interrupción
// Entradas: NULL
// Salidas : NULL
//******************* main ************************
int main(void){

//
// Configura reloj del sistema
//
PLL_Init():

Alexander Montoya Osorio 33


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
//
// Inicialización del modulo I2C0
//
I2C0_Init();

//
// Configuración IMU
//
writeMD(0x68,0x1A,0x06); // Activamos filtro interno de la IMU
writeMD(0x68,0x1B,0x18); // Gyro scale to 2000 º/s
writeMD(0x68,0x1C,0x00); // Acel scale to 2g
writeMD(0x68,0x6B,0x02); // Sleep disable

//
// Calibración de sensores
//
Calibrate_Gyros();

//
// Inicialización modulo PWM1
//
PWM1_Init(1300);

//
// Inicialización de los Timer
//
Timer0A_Init(&OutputSineWave2, 190476);
Timer1A_Init(&OutputSineWave, 190476);
Timer2A_Init(&PeriodTask, FS);
EnableInterrupts();

while(1){
WaitForInterrupt();
}
return 0;
}

//******************* func ************************


// Esta función reprograma el TIMER1 para
// generar interrupciones periódicas a distintas
// frecuencias. Las interrupciones se usan para ir
// desplazar las ondas sinusoidales a la frecuencia
// pasada como parámetro

Alexander Montoya Osorio 34


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
// Entradas: - freq -> frecuencia en rev/s a la que
// se quiere hace girar el motor
// Salidas : NULL
//******************* func ************************
void func(double freq)
{

if (freq == 0) increment = 0;

else{

uint32_t P;
double vel = (1/(freq*3780))*50000000;

P = fabs(vel);

if (P > 1322751) P = 1322751;


if (P < 1128) P = 1128;

if (freq > 0) increment = 1;


if (freq < 0) increment = -1;

TIMER1_TAILR_R = P -1; // 4) reload value


}
}

//******************* func2 ************************


// Esta función reprograma el TIMER2 para
// generar interrupciones periódicas a distintas
// frecuencias. Las interrupciones se usan para ir
// desplazar las ondas sinusoidales a la frecuencia
// pasada como parámetro
// Entradas: - freq -> frecuencia en rev/s a la que
// se quiere hace girar el motor
// Salidas : NULL
//******************* func2 ************************
void func2(double freq2){

if (freq2 == 0) increment2 = 0;

else{

uint32_t P;
double vel = (1/(freq2*3780))*50000000;

Alexander Montoya Osorio 35


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
P = fabs(vel);

if (P > 1322751) P = 1322751;


if (P < 1128) P = 1128;

if (freq2 > 0) increment2 = 1;


if (freq2 < 0) increment2 = -1;

TIMER0_TAILR_R = P -1; // 4) reload value


}
}

//***************** Calibrate_Gyros **********************


// Esta función calcula el valor de drif
// de los acelerómetros al inicializar el Gimbal
// para ajustar su calibración
// Salidas : NULL
//***************** Calibrate_Gyros **********************
void Calibrate_Gyros()
{
int x = 0;
for(x = 0; x<1000; x++)
{
readMD(0x68,0x43,0x06,datArray); // Acc

iw_x = ((datArray[0] << 8) + datArray[1]); // Gyro X


iw_y = ((datArray[2] << 8) + datArray[3]); // Gyro Y
iw_z = ((datArray[4] << 8) + datArray[5]); // Gyro Z

GYRO_XOUT_OFFSET_1000SUM += iw_x;
GYRO_YOUT_OFFSET_1000SUM += iw_y;
GYRO_ZOUT_OFFSET_1000SUM += iw_z;

GYRO_XOUT_OFFSET = GYRO_XOUT_OFFSET_1000SUM/1000;
GYRO_YOUT_OFFSET = GYRO_YOUT_OFFSET_1000SUM/1000;
GYRO_ZOUT_OFFSET = GYRO_ZOUT_OFFSET_1000SUM/1000;
}

2.5. CODIGO PLL

Fichero PLL.h:

Alexander Montoya Osorio 36


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

// Fichero: PLL.h
// Alexander Montoya Osorio
// 01/06/2016

// El #define SYSDIV2 inicializa el


//PLL a la deseada frecuencia.

#define SYSDIV2 7
// bus frequency is 400MHz/(SYSDIV2+1) = 400MHz/(7+1) = 50 MHz

// confitura el sistema para funcionar con el reloj del PLL


void PLL_Init(void);

/*
SYSDIV2 Divisor Clock (MHz)
0 1 reserved
1 2 reserved
2 3 reserved
3 4 reserved
4 5 80.000
5 6 66.667
6 7 reserved
7 8 50.000
8 9 44.444
9 10 40.000
10 11 36.364
11 12 33.333
12 13 30.769
13 14 28.571
14 15 26.667
15 16 25.000
16 17 23.529
17 18 22.222
18 19 21.053
19 20 20.000
20 21 19.048
21 22 18.182
22 23 17.391
23 24 16.667
24 25 16.000
25 26 15.385
26 27 14.815
27 28 14.286
28 29 13.793
29 30 13.333
30 31 12.903
31 32 12.500

Alexander Montoya Osorio 37


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
32 33 12.121
33 34 11.765
34 35 11.429
35 36 11.111
36 37 10.811
37 38 10.526
38 39 10.256
39 40 10.000
40 41 9.756
41 42 9.524
42 43 9.302
43 44 9.091
44 45 8.889
45 46 8.696
46 47 8.511
47 48 8.333
48 49 8.163
49 50 8.000
50 51 7.843
51 52 7.692
52 53 7.547
53 54 7.407
54 55 7.273
55 56 7.143
56 57 7.018
57 58 6.897
58 59 6.780
59 60 6.667
60 61 6.557
61 62 6.452
62 63 6.349
63 64 6.250
64 65 6.154
65 66 6.061
66 67 5.970
67 68 5.882
68 69 5.797
69 70 5.714
70 71 5.634
71 72 5.556
72 73 5.479
73 74 5.405
74 75 5.333
75 76 5.263
76 77 5.195
77 78 5.128
78 79 5.063
79 80 5.000
80 81 4.938

Alexander Montoya Osorio 38


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
81 82 4.878
82 83 4.819
83 84 4.762
84 85 4.706
85 86 4.651
86 87 4.598
87 88 4.545
88 89 4.494
89 90 4.444
90 91 4.396
91 92 4.348
92 93 4.301
93 94 4.255
94 95 4.211
95 96 4.167
96 97 4.124
97 98 4.082
98 99 4.040
99 100 4.000
100 101 3.960
101 102 3.922
102 103 3.883
103 104 3.846
104 105 3.810
105 106 3.774
106 107 3.738
107 108 3.704
108 109 3.670
109 110 3.636
110 111 3.604
111 112 3.571
112 113 3.540
113 114 3.509
114 115 3.478
115 116 3.448
116 117 3.419
117 118 3.390
118 119 3.361
119 120 3.333
120 121 3.306
121 122 3.279
122 123 3.252
123 124 3.226
124 125 3.200
125 126 3.175
126 127 3.150
127 128 3.125
*/

Alexander Montoya Osorio 39


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS

Fichero PLL.c :

// Fichero: PLL.c
// Alexander Montoya Osorio
// 01/06/2016

/*
*********************************************************
*********************************************************
** En esta librería se define una función para **
** inicializar el reloj del sistema a una frecuencia **
** determinada por el usuario haciendo uso del PLL **
** **
*********************************************************
*********************************************************
*/

#include "PLL.h"

// The #define statement SYSDIV2 in PLL.h


// initializes the PLL to the desired frequency.

// bus frequency is 400MHz/(SYSDIV2+1) = 400MHz/(7+1) = 50 MHz


// see the table at the end of this file

#define SYSCTL_RIS_R (*((volatile unsigned long *)0x400FE050))


#define SYSCTL_RIS_PLLLRIS 0x00000040 // PLL Lock Raw Interrupt Status
#define SYSCTL_RCC_R (*((volatile unsigned long *)0x400FE060))
#define SYSCTL_RCC_XTAL_M 0x000007C0 // Crystal Value
#define SYSCTL_RCC_XTAL_6MHZ 0x000002C0 // 6 MHz Crystal
#define SYSCTL_RCC_XTAL_8MHZ 0x00000380 // 8 MHz Crystal
#define SYSCTL_RCC_XTAL_16MHZ 0x00000540 // 16 MHz Crystal
#define SYSCTL_RCC2_R (*((volatile unsigned long *)0x400FE070))
#define SYSCTL_RCC2_USERCC2 0x80000000 // Use RCC2
#define SYSCTL_RCC2_DIV400 0x40000000 // Divide PLL as 400 MHz vs. 200
// MHz
#define SYSCTL_RCC2_SYSDIV2_M 0x1F800000 // System Clock Divisor 2
#define SYSCTL_RCC2_SYSDIV2LSB 0x00400000 // Additional LSB for SYSDIV2
#define SYSCTL_RCC2_PWRDN2 0x00002000 // Power-Down PLL 2
#define SYSCTL_RCC2_BYPASS2 0x00000800 // PLL Bypass 2
#define SYSCTL_RCC2_OSCSRC2_M 0x00000070 // Oscillator Source 2
#define SYSCTL_RCC2_OSCSRC2_MO 0x00000000 // MOSC

// configure the system to get its clock from the PLL


void PLL_Init(void){
// 0) configure the system to use RCC2 for advanced features
// such as 400 MHz PLL and non-integer System Clock Divisor

Alexander Montoya Osorio 40


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
ANEXOS
SYSCTL_RCC2_R |= SYSCTL_RCC2_USERCC2;
// 1) bypass PLL while initializing
SYSCTL_RCC2_R |= SYSCTL_RCC2_BYPASS2;
// 2) select the crystal value and oscillator source
SYSCTL_RCC_R &= ~SYSCTL_RCC_XTAL_M; // clear XTAL field
SYSCTL_RCC_R += SYSCTL_RCC_XTAL_16MHZ;// configure for 16 MHz crystal
SYSCTL_RCC2_R &= ~SYSCTL_RCC2_OSCSRC2_M;// clear oscillator source field
SYSCTL_RCC2_R += SYSCTL_RCC2_OSCSRC2_MO;// configure for main oscillator
source
// 3) activate PLL by clearing PWRDN
SYSCTL_RCC2_R &= ~SYSCTL_RCC2_PWRDN2;
// 4) set the desired system divider and the system divider least significant bit
SYSCTL_RCC2_R |= SYSCTL_RCC2_DIV400; // use 400 MHz PLL
SYSCTL_RCC2_R = (SYSCTL_RCC2_R&~0x1FC00000) // clear system clock divider
field
+ (SYSDIV2<<22); // configure for 80 MHz clock
// 5) wait for the PLL to lock by polling PLLLRIS
while((SYSCTL_RIS_R&SYSCTL_RIS_PLLLRIS)==0){};
// 6) enable use of PLL by clearing BYPASS
SYSCTL_RCC2_R &= ~SYSCTL_RCC2_BYPASS2;

Alexander Montoya Osorio 41


Universidad de la Rioja
Diseño y desarrollo de un gimbal
con motores brushless

Planos

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
Planos

ÍNDICE DE PLANOS

1. PLANO NUMERO UNO. ESQUEMA ELÉCTRICO ..........................................................3

2. PLANO NUMERO DOS. CAPA INFERIOR PCB ...........................................................4

3. PLANO NUMERO TRES. CAPA.SUPERIOR PCB ........................................................5

4. PLANO NUMERO CUATRO. UBICACIÓN DE LOS COMPONENETES .............................6

Alexander Montoya Osorio 2


Universidad de la Rioja
1 2 3 4 5 6

CONN_01X03 CONN_01X03

P2

P3
1
2
3

1
2
3
L6234_1 L6234_2
1 20 1 20
OUT1 OUT2 OUT1 OUT2
A 2 19 2 19 A
PWM4 IN1 IN2 PWM6 PWM1 IN1 IN2 PWM2
3 18 3 18
ENABLE EN1 EN2 ENABLE ENABLE EN1 EN2 ENABLE
4 17 4 17
Vs SENSE1 Vs SENSE1
5 16 5 16
GND GND GND GND
6 15 6 15
GND GND GND GND
GND 7 14 GND GND 7 14 GND
Vs SENSE2 Vs SENSE2

C7

C4
GND

GND
C

C
8 13 8 13
ENABLE EN3 VBOOT ENABLE EN3 VBOOT
9 12 9 12
PWM5 IN3 VCP PWM3 IN3 VCP
10 11 10 11
OUT3 VREF OUT3 VREF
C10 C12
C9
C6

D3

D1
VCC

D
CP CP
D C D
C

D4 GND D2
GND

C3 C8
B B
CP C

GND

Etapa de potencia para el control de motores


CONN_01X03 CONN_01X04
P5

P1

+VBUS
1
2
3

4
3
2
1

VCC VCC
+VBUS
7805

CONN_01X02
ENABLE
P4
1 1
VI VO
3
GND GND 2

GND
J3-J1 J2-J4
2 1 2 1 C1 C2
ENABLE PWM1 GND U1

2
4 3 4 3 PWM3
C 6 5 6 5 C C C
PWM4 GND
CONN_02X10

CONN_02X10

PWM5
8 7 PWM2
8 7 PWR_FLAG PWR_FLAG
10 9 10 9
12 11 12 11
14 13 14 13 GND
16 15 16 15
18 17 18 17 GND VCC
PWM6
20 19 20 19

Conectores tarjeta e IMU Etapa de alimentacion

UNIVERSIDAD DE LA RIOJA
Sheet: /
D File: PCB.sch D

Title: Esquema electrico del PCB


Size: A4 Date: 2016-06-26 Rev:
KiCad E.D.A. kicad 4.0.2-stable Id: 1/1
1 2 3 4 5 6
1 2 3 4

A A

B B

C C

D D

E E

UNIVERSIDAD DE LA RIOJA
Sheet:
File: noname3.kicad_pcb
Title: Capa inferior del PCB
Size: A4 Date: 2016-07-06 Rev: 1.0
KiCad E.D.A. pcbnew 4.0.2-stable Id: 1/1
F F
1 2 3 4
1 2 3 4

A A

B B

C C

D D

E E

UNIVERSIDAD DE LA RIOJA
Sheet:
File: noname3.kicad_pcb
Title: Capa superior del PCB
Size: A4 Date: 2016-07-06 Rev: 1.0
KiCad E.D.A. pcbnew 4.0.2-stable Id: 1/1
F F
1 2 3 4
Diseño y desarrollo de un gimbal
con motores brushless

Pliego de condiciones

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

ÍNDICE DEL PLIEGO DE CONDICIONES

1. DISPOSICIONES GENERALES .................................................................................... 3

1.1. OBJETO ......................................................................................................................... 3


1.2. PROPIEDAD INTELECTUAL ......................................................................................... 3
1.3. CONDICIONES GENERALES.......................................................................................... 4
1.4. NORMAS LEYES Y REGLAMENTOS .............................................................................. 4

2. DEFINICIÓN Y ALCANCE ...........................................................................................6

2.1. OBJETO DEL PLIEGO DE CONDICIONES ...................................................................... 6


2.2. DOCUMENTOS QUE DEFINEN EL PROYECTO .............................................................. 6
2.3. COMPATIBILIDAD ENTRE DOCUMENTOS ................................................................... 7

3. ESPECIFICACIÓN TÉCNICA DE LOS COMPONENTES ..................................................8

3.1. PCB .............................................................................................................................. 8


3.2. TARJETA .....................................................................................................................10
3.3. REGULADOR ...............................................................................................................12
3.1. L6432 .......................................................................................................................14
3.2. IMU ............................................................................................................................16
3.3. MOTORES ...................................................................................................................17

4. CONEXIÓN DE LOS COMPONENTES CON LA TARJETA ............................................. 18

5. CALIBRACIÓN Y MODIFICACIÓN DE PARÁMETROS SOFTWARE ............................ 19

6. CONDICIONES / ESPECIFICACIONES DE OPERACIÓN ............................................ 23

7. CONDICIONES ECONÓMICAS ................................................................................. 24

7.1. ERRORES EN EL PROYECTO ............................................................................24


7.2. LIQUIDACIÓN ........................................................................................................24
7.3. DISPOSICIÓN .........................................................................................................25

Alexander Montoya Osorio 2


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

1. DISPOSICIONES GENERALES

1.1. OBJETO

El objeto del presente proyecto titulado “Diseño y desarrollo de un


gimbal con motores brushless”es la Culminación con éxito los estudios de
Grado en Ingeniería Electrónica Industrial y Automática,y está enmarcado bajo la
designación "Trabajo de Fin de Grado".

El autor del presente trabajo ha cursado los estudios en la Universidad de


La Rioja, cumpliendo con las directrices especificadas por dicho centro en la
normativa del trabajo fin de grado en vigor en el curso 2015/2016.

En este documento se exponen todas las condiciones técnicas de montaje,


especificaciones a cumplir por los elementos y materiales comerciales que se
deben considerar a la hora de llevar a cabo la realización del proyecto.

En caso de no realizarse las condiciones tal como se presenta en este


documento, el proyectista no se responsabilizará de los posibles fallos y averías
propias del funcionamiento, repercutiendo todo el peso del problema sobre
terceras personas.

Todas las modificaciones de las que pueda ser susceptible el proyecto,


deberán ser aprobadas por el ingeniero o proyectista.

1.2. PROPIEDAD INTELECTUAL

Según el artículo 12 del reglamento de PFC de la ESCUELA TÉCNICA


SUPERIOR de Ingeniería Industrial de La Rioja, aprobado por el Consejo de
Gobierno del 15 de Abril de 2005, "Podrá ser consultada la copia de la biblioteca si
el autor y el Director de Proyecto Fin de Carrera así lo autorizan por escrito".

Alexander Montoya Osorio 3


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

1.3. CONDICIONES GENERALES

Este proyecto se ajusta en su desarrollo a los reglamentos y disposiciones


electrónicas vigentes. Atendiendo a esto una vez se haya aprobado por el
Ministerio de Industria, tendrá carácter de obligado cumplimiento.

Una vez realizado el proyecto, se podrán realizar diversas modificaciones


siempre bajo la supervisión del ingeniero o proyectista.

En caso de efectuarse alguna modificación, el correspondiente proyecto


modificado se considera como parte integrante del proyecto definitivo y como tal,
sujeto a las condiciones y especificaciones aprobadas por el ministerio.

La empresa adjudicataria suscribirá contrato ante notario donde se hará


constar, a parte de los términos legales obligatorios, plazos de entrega y la
conformidad con la sanción cuyo incumplimiento pueda acarrear.

1.4. NORMAS LEYES Y REGLAMENTOS

La realización del proyecto se regirá por la Ordenanza General de Seguridad


e Higiene en el Trabajo del 7 de abril de 1970 y posteriores actualizaciones. Así
mismo, se regirá por el Reglamento Electrotécnico de Baja Tensión, en el que se
tendrán en cuenta las siguientes normas:

• UNE 20-514-82: Reglas de seguridad para los aparatos electrónicos

• UNE 157001:2002: sobre criterios generales para la elaboración de


proyectos, que establece las consideraciones generales que permitan
precisar las características que deben satisfacer los proyectos de productos
obras y edificios, instalaciones, servicios o software, para que sean
conformes al fin que están destinados.

• ISO/IEC 25000: conocida como SQuaRE (System and Software


QualityRequirements and Evaluation), es una familia de normas que tiene
por objetivo la creación de un marco de trabajo común para evaluar la
calidad del producto software.

• ISO/IEC 25001 Planning and Management: establece los requisitos y


orientaciones para gestionar la evaluación y especificación de los
requisitos del producto software.

Alexander Montoya Osorio 4


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Este proyecto debido a sus características se encuentra recogido, dentro del
reglamento electrónico de baja tensión:

“Se calificará como instalación eléctrica de baja tensión, todo conjunto de


aparatos y circuitos asociados en previsión de un fin particular, producción,
conversión, transformación, distribución o utilización de la energía eléctrica cuyas
tensiones nominales sean iguales o inferiores a 1000 V para corriente alterna y 1500
V para corrientes continuas”.

Alexander Montoya Osorio 5


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

2. DEFINICIÓN Y ALCANCE

2.1. OBJETO DEL PLIEGO DE CONDICIONES

El presente pliego regirá en unión de las disposiciones que con carácter


general y particular se indican, y tiene por objeto la ordenación de las condiciones
técnico-facultativas que han de regir en la ejecución del presente Proyecto.

Se considerarán sujetas a las condiciones de este Pliego, todos los trabajos


cuyas características y presupuestos, se adjuntan en las partes correspondientes
del presente Proyecto. Se incluyen por tanto en este concepto los trabajos de
programación para el estabilizador, así como la configuración de datos y
algoritmos.

Si en el transcurso de los trabajos se hiciera necesario ejecutar cualquier


clase de modificación o instalaciones que no se encuentren descritas en este Pliego
de Condiciones, el Adjudicatario estará obligado a realizarlas con estricta sujeción
a las órdenes que, al efecto, reciba del proyectista, y en cualquier caso, con arreglo
a las reglas del buen arte constructivo.

El Ingeniero tendrá plenas atribuciones para sancionar la idoneidad de los


sistemas empleados, los cuales estarán expuestos para su aprobación de forma
que, a su juicio, los dispositivos que resulten defectuosas total o parcialmente,
deberán ser retirados o sustituidos, sin que ello dé derecho a ningún tipo de
reclamación por parte del Adjudicatario.

2.2. DOCUMENTOS QUE DEFINEN EL PROYECTO

El presente Pliego, conjuntamente con la Memoria, mediciones,


presupuesto, forman el presente proyecto. Los planos constituyen los documentos
que definen el proyecto en forma geométrica y cuantitativa.

Los documentos que definen el proyecto y que la propiedad entregue al


Contratista, pueden tener carácter contractual o meramente informativo.

Son documentos contractuales los Planos, Pliego de Condiciones,


Mediciones y Presupuestos Parcial y Total, que se incluyen en el presente Proyecto.

Alexander Montoya Osorio 6


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Los datos incluidos en la memoria y Anexos, así como la justificación de
precios tienen carácter meramente Informativo.

Cualquier cambio en el planteamiento del sistema que implique un cambio


sustancial respecto de lo proyectado deberá ponerse en conocimiento de la
Dirección Técnica para que lo apruebe, si procede, y redacte el oportuno proyecto
reformado.

2.3. COMPATIBILIDAD ENTRE DOCUMENTOS

En caso de incompatibilidad o contradicción entre los Planos y el Pliego,


prevalecerá lo escrito en este último documento. Lo mencionado en el Pliego de
Prescripciones Técnicas Particulares y omitido en los planos o viceversa, habrá de
ser considerado como si estuviese expuesto en ambos documentos, siempre que la
unidad de estudio este definida en uno u otro documento y figure en el
Presupuesto.

Alexander Montoya Osorio 7


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

3. ESPECIFICACIÓN TÉCNICA DE LOS COMPONENTES

3.1. PCB

Toda la electrónica de potencia y de control se integra en un circuito


impreso, de este salen las tres fases de cada motor y a él llegan los datos de los
sensores y la tensión de la batería.

La fabricación del circuito se lleva a cabo mediante el empleo de una


insoladora, y revelado químico en el laboratorio de la Universidad de La Rioja.

Las dimensiones del PCB vienen determinadas por el tamaño de los


componentes discretos usados para su construcción, por la tarjeta y en particular
por el tamaño de los condensadores, dado que se emplearon los disponibles en el
laboratorio de la universidad. Hay que añadir que todos los componentes
empleados son de tipo trueholl, por lo que si quiere reducir el tamaño de la placa,
estos pueden ser sustituidos por componentes smd, lo que significaría una
reducción significativa.

En la figura 1-1 se puede apreciar el tamaño del PCB y la ubicación de los


componentes

Ilustración 3-1. Disposición de los componentes en la PCB

Alexander Montoya Osorio 8


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Por otra parte y debido a que la fabricación del PCB se hace de forma
manual, el grosor de las pistas, vías y diámetro de los orificios debe ser tal que
facilite la tarea de soldar todos los componentes. En la siguiente lista aparecen los
grosores de línea y de las vías del PCB:

• Señales de control y tensión de alimentación 5V : 0.8 mm de


grosor
• Bus de tensión 9V : 1.2 mm de grosor
• Vías : 1.mm de diámetro y 0.8mm de orificio

La lista de componentes empleados se muestra en la Tabla 1.

Tabla 1

Componente Valor Distancia Descripcion


entre
pines
P2,P5 -- 0.1” Conectores tipo macho de tres pines en
ángulo para los motores
P4 -- 0.3” Conector batería
P1 -- 0.1” Conector de alimentación y datos para
la IMU
P3 -- 0.1” Conector de alimentación para la
tarjeta de desarrollo
D1,D2,D3,D4 -- 0.3” Diodos 1N4148.
C9,C6 10 nF 0.2” Condensador cerámico
C10,C12 1 µF 0.2” Condensador electrolítico
C4, C7 0.22 µF 0.6” Condensador cerámico
C8 0.1 µF 0.4” Condensador cerámico
C3 100 µF 0.2” Condensador electrolítico
J3-J1, J4-J2 -- 0.1” Conectores de 20 pines. Dos hileras de
10 para cada uno.
L6234_1, L6234_2 -- 0.1” Driver de potencia para el control de
los motores
7805 -- 0.1” Regulador de tensión de salida a 5V

Tabla 1. Listado de componentes de la PCB

Alexander Montoya Osorio 9


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

3.2. TARJETA

Tarjeta de desarrollo: la tensión de alimentación para la tarjeta debe estar


en el rango de 4.75 voltios a 5.25 voltios. Valores de tensión fuera de este rango
están desaconsejados por el propio fabricante. En este proyecto la alimentación de
la tarjeta se hace médiate un cable USB conectado al PC, sin embargo cualquier tipo
de cargador USB que entregue 5 voltios puede ser usado como fuente de
alimentación alternativa.

Ilustración 3-2. Componentes del módulo EK-TM4C123GXL

El módulo de evaluación EK-TM4C123GLX incluye las siguientes


características:

• Microcontrador TM4C123GH6PMZ
• Motion control PWM
• Conectores USB micro-A y micro-B para su programación y
depurado
• Un led RGB de uso general
• Dos botones de uso general
• On-board ICDI
• Switch de selección de alimentación
• Boton de Reset
• Dos conectores de 20 pines

Alexander Montoya Osorio 10


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Especificaciones técnicas del módulo:

Parámetro Valor
Tensión de alimentación De 4,7 a 5,25 voltios de continua desde uno
de las siguientes fuentes:
• Debugger (ICDI) USB Micro-B conectado a
un PC
• USB Micro-B puesto host

Dimensiones 2.0 in x 2.25 in x 0.425 in


Salida de corriente de corto circuito • 3.3 Voltios (300 mA)
• 5.0 Voltios ( 323 mA)

Dimensiones de la tarjeta:

Ilustración 3-3. Dimensiones del modulo EK-TM4C123GXL

Alexander Montoya Osorio 11


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

3.3. REGULADOR

LM7805 (regulador de tensión): la tensión de entrada debe estar entre 7 y


25 V. Para este proyecto se alimenta el circuito desde la batería a una tensión de
11.1 V.

Ilustración 3-4. Regulador de tensión L7805

Ilustración 3-5.Circuito típico de aplicación

Valores máximos de operación:

Símbolo Parámetro Valor Unidad


Vi Entrada de tensión para 35 V
Vo= 5 a 18 V
Io Salida de corriente Limitado
internamente
Pd Disipacion de potencia Limitado
internamente
Top Temperatura de operación -55 a 150 C

Alexander Montoya Osorio 12


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Dimensiones del componente:

Parametro Dimensión
en mm
A 4.40
E 10
e 2.4
L30 28.9
L 13

Ilustración 3-6. Dimensiones L7805

Alexander Montoya Osorio 13


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

3.1. L6432

El L6234 es un triple puente de transistores, y es usado para excitar las


bobinas del motor.

Ilustración 3-7. L6432

Descripcion de los pines

Número del pin Nombre Función


1, 20, 10 OUT1, OUT2, OUT3 Salidas de los tres canales
2, 19, 9 IN1, IN2, IN2 Entrada lógica de los canales 1, 2 y 3.
Un nivel alto en algúna entrada
habilita el paso de corriente del
transitor superior del puente.
3, 18, 8 EN1, EN2, EN3 Habilita los canales 1,2 y 3. Un nivel
alto habilita el canal.
4,7 Vs Tension de alimentación
14, 17 SENSE2, SENSE1 Salidas de corriente para la toma de
medidas
11 Vref Voltaje interno de referencia
12 VCP Bootstrasposcillator
13 VBOOT Sobrevoltaje de entrada para el
control de sol transitores superiores
de cada rama
5, 6, 15, 16 GND Termina común de masa

Alexander Montoya Osorio 14


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Condiciones recomendadas de operación:

Simbolo Parámetro Valor Unidad


Vs Tensión de alimentacion 7 a 42 V
Vod Voltaje diferencial pico (entre alguna 52 V
de las 3 salidas de tension)
Iout Corriente DC de salida 2.5 A
Vsense Voltaje de medida -1 a 1 V
Tj Rango de temperatura para la unión -40 a 125 C

Dimesiones del componente:

Ilustración 3-8. dimensiones L6432

Parámetro Dimension
en mm
D 24.8
E 8.8
e 2.54
F 7.1
L 3.3

Alexander Montoya Osorio 15


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

3.2. IMU

La unidad inercial de medida está basada en el MPU 6050, esta a su vez


contempla numerosas funcionalidades y características de operación y
programación. Debido a la multitud de características que se podrían enumerar, en
este apartado se presentan las características principales del módulo y de sus
sensores.

Ilustración 3-9. IMU

Principales características de los giroscopios:

• Salida digital para las medidas de velocidad angular en los


ejes X,Y y Z con rangos de escala programables entre ±250,
±500, ± 1000 y ±2000 °/seg.
• Implementa ADC’s de 16 bits para el almacenamiento de las
medidas.
• Filtro paso-bajo digital programable.

Principales características de los acelerómetros:

• Salida digital para las medidas de aceleración en los ejes X,Y y


Z con rangos de escala programables entre ±2g, ±4g, ± 8g y
±16g.
• Implementa ADC’s de 16 bits para el almacenamiento de las
medidas.
• Interrupciones programadas por el usuario

Características adicionales:

• Bus I2C auxiliar para leer data desde sensores externos.


• 1024 byte de memoria FIFO para la reducción del consumo.
• Filtros programables por el usuario para acelerómetros y
giroscopios.

Alexander Montoya Osorio 16


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
Características eléctricas y otras especificaciones:

Parámetros Rango
VDD. Alimentación 2.375 V a 3.465V
Frecuencia de com. I2C 100Khz a 400Khz
Temperaturas max de operacion -40 a +85 °C
Direcciones I2C 1101000

3.3. MOTORES

Ilustración 3-10. Motor

Dimensión y principales características:

Parámetro Valor
KV 100
Peso 55 g
Dist. Entre tornillos 16*19 mm
Métrica M3
Estructura 12N14P
Alimentación 3S Li-Poly
Dimensiones estator 28*6 mm

Alexander Montoya Osorio 17


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

4. CONEXIÓN DE LOS COMPONENTES CON LA TARJETA

El gimbal al ser un dispositivo que incorpora elementos mecánicos y


electrónicos, corre el riesgo de que el mal funcionamiento de alguna de sus partes
por leve que sea; influya notablemente en el comportamiento global.

En el posible caso de que un tornillo se afloje debido al uso, generaría un


patrón de vibraciones que el controlador intentara corregir en el mejor de los
casos, si se da el caso de que el controlador no sea lo suficiente rápido para mitigar
la perturbación.

Otra posible fuente de falla lo puede generar el mal/deficiente estado de las


conexiones en las líneas de I2C usadas para la comunicación con los sensores
puesto que una mala/errónea comunicación entre el microprocesador y la IMU
hará que el Gimbal se inestabilice para jamás volver a controlarse sino se reinicia
todo el sistema.

En la gráfica 9-6 aparecen los pines usados de la tarjeta, en total se usaron


12 pines, 3 de los cuales fueron soldados a la propia tarjeta para poder conectada
al PCB sin necesidad de ser alimentada mediante el puerto mini USB. Los tres pines
mencionados aparecen dentro del recuadro verde de la gráfica. De los 9 pines
restantes se usaron 6 para las señales de pwm, 2 pines para las líneas de
comunicación y otra para alimentar la IMU y al mismo tiempo habilitar el
funcionamiento de los driver’s de potencia. En la gráfica se muestra la disposición
de los pines usados para la interacción con los demás componentes.

Ilustración 4-1. Conexión entre la tarjeta y los elementos

Si se desea cambiar la distribución de los pines por algún motivo en


particular, se debe modificar el código del gimbal.

Alexander Montoya Osorio 18


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

5. CALIBRACIÓN Y MODIFICACIÓN DE PARÁMETROS


SOFTWARE

El gimbal al estar basado en sistema de control de una variable real, es de


esperar que cualesquier tipo de perturbación altere el buen desempeño del
sistema. Para reducir/eliminar cierto tipo de perturbación “controlada” como
puede ser el ruido introducido por los sensores es necesario la implementación de
filtros. El filtro que se usa para este proyecto lleva el nombre de Filtro Madwick y
permite su configuración mediante 2 parámetros (En el apartado 5.3.6 se explica
este su funcionamiento). Además de los parámetros del filtro existen otros valores
que pueden ser modificados y que afectan al buen/mal funcionamiento de todo el
conjunto.

En este apartado se agrupan todos los parámetros que pueden ser


modificados y se explica cómo su variación afecta al comportamiento global.

• PID

La ecuación en tiempo discreto que se usa para implementar el controlador


está compuesta por cinco sumas y cinco multiplicaciones. Los coeficientes
de la ecuación definen el comportamiento de un sistema basado en leyes
físicas por lo tanto alteración de algún coeficiente por leve que sea este,
puede conllevar a que el sistema sea inestable. Es por ello que se
recomienda no alterar ninguno de estos valores sino se tiene conocimiento
de lo que se hace, de lo contrario el sistema se vuelve inestable y empieza a
retorcer los cables hasta el punto de llegar a romperlos.

• Frecuencia de muestreo

La velocidad a que se recogen los datos y se calcula la orden de control


puede modificar, sin embargo no se garantiza el buen funcionamiento del
Gimbal si se superan los 500 Hz debido a que existe una limitación en la
velocidad máxima usada durante la comunicación mediante el protocolo
I2C. El parámetro aparece dentro del código del fichero main.c(disponible
en los anexos) y su nombre dentro del programa es: “Fs”. Dentro del código
esta variable aparece como un define al inicio del fichero y es ahí donde
debe modificarse.El valor que se le dé a la Fs se relaciona con la unidad de
hertzios.

Por ultimo cabe comentar que la ecuación que implementa el controlador


está basada en una aproximación matemática en la que la frecuencia de
muestreo es uno de sus parámetros, por lo tanto cuando se modifica la

Alexander Montoya Osorio 19


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
frecuencia del sistema las ecuaciones dejan de representar la ecuación
original puede que el sistema no funcione como se espera.

• Sensibilidad acc/gyro . Escala


La sensibilidad de los acelerómetros y giróscopos de la IMU pueden variar
entre los ±2g y ±16g para los acelerómetros y ±250 °/s y ±2000 °/s para los
giróscopos. Para este proyecto se consideró que una sensibilidad de ±2g
para los acelerómetros y ±2000 °/s para los giroscopios era la adecuada. En
base a esto a los datos recogidos se les debe aplicar una escala para que se
adapten a las unidades que se estén manejando.
Las tabla XXX y XXX muestran los valores de escala posibles y que deben ser
cambiados dentro del código en las variables SCALE_GYRO y
SCALE_ACCpara que las modificaciones de la sensibilidad tengan efecto a
efectos de cálculo. Las variables aparecen definidos dentro del código
main.c que se encuentra disponible en el apartado de ANEXOS.

Ilustración 5-1. Sesibilidad d los acelerómetros

Ilustración 5-2.Sesibilidad d los giroscopios

• Parámetro β

Debido a que el filtro usado en este proyecto para la estimación de la


orientación basa su funcionamiento en la fusión sensorial acelerómetros y
giróscopos, existe un parámetro que afecta al comportamiento del filtro
Madwick implementado para el tratamiento de datos y la estimación de la
orientación. En función de su valor el filtro pondera de manera diferente los
cálculos obtenidos en base a los giroscopios o acelerómetros. El parámetro
se llama beta y está dentro del fichero main.c. Los valores para este
parámetro deben estar en el rango de 0 a 1 según se precise. Cuando se

Alexander Montoya Osorio 20


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
modifica este valor el filtro cambia su comportamiento en régimen
permante por lo que afecta de forma directa a la estimación de la
orientación de tal manera que para valores cercanos a cero, se calcula la
orientación teniendo en cuenta solo los giróscopos y para valores
superiores, se hace una ponderación entre los cálculos obtenidos por ambos
sensores.

• Modulación de onda implementada. SPWM

Para este proyecto se usa un método de conmutación conocido como


Sinusoidal PWM o SPWM para el control de los motores que consiste en la
modulación de una onda sinusoidal a partir de una onda cuadrada. Para
alcanzar este propósito se requiere el almacenamiento de una serie de
valores dentro de un array y que se corresponde con los valores discretos
de una onda sinusoidal.En la figura 5-3 se muestra el proceso de
discretización de una señal sinusoidal.

Ilustración 5-3, Discretizacion de una sinusoide

Cuando el Gimbal se inicia, se lleva a cabo el cálculo de los 540 valores de


una onda senoidal, la forma de onda puede cambiarse si se modifica la
ecuación dentro del código. La ecuación aparece definida dentro del fichero
“PWM.c” y se calcula dentro de la función: “PWM1A_Init(uint16_t period)
y los valores se almacenan dentro del vector denominado: Wave2[540],
que aparece definida dentro del mismo fichero que la función.

• Inicialización de los módulos de generación de PWM

La frecuencia de conmutación de las señales de PWM suele estar entre los


valores de 10 a15 kHz, sin embargo para esta aplicación se seleccionaron
valores por encima de los 30 Khz como se verámás adelante en este
apartado.
Por otra parte,existe dentro del códig ouna función definida como:
“PWM1A_Init(uint16_t period) “, que inicializa los módulos de PWM en
base al valor de period. Este valor es igual al número de ciclos de reloj
necesarios para incrementar un contador hasta ese valor partiendo desde

Alexander Montoya Osorio 21


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones
cero, según esto se puede afirmar que si se calcula el producto entre el
periodo de la señal de reloj y el valor dado a la variable period, nos dará
como resultado el periodo de conmutación de la señal PWM.

En la versión del software presentada con este proyecto y adjunta en los


ANEXOS, se inicializan los módulos PWM con un valor de 1300, según esto
la frecuencia de conmutación será:

𝑝𝑒𝑟𝑖𝑜𝑑𝑜 𝑐𝑜𝑛𝑚𝑢𝑡𝑎𝑐𝑖𝑜𝑛 = 1300 ∗ 𝑃𝑒𝑟𝑖𝑜𝑑𝑜 𝑠𝑒ñ𝑎𝑙 𝑑𝑒 𝑟𝑒𝑙𝑜𝑗


𝑃𝑒𝑟𝑖𝑜𝑑𝑜 𝑠𝑒ñ𝑎𝑙 𝑑𝑒 𝑟𝑒𝑙𝑜𝑗 = 20 𝑛𝑠
𝑝𝑒𝑟𝑖𝑜𝑑𝑜 𝑐𝑜𝑛𝑚𝑢𝑡𝑎𝑐𝑖𝑜𝑛 = 1300 ∗ 20 = 26 µ𝑠
1
𝑓𝑟𝑒𝑐. 𝑐𝑜𝑛𝑚𝑢𝑡𝑎𝑐𝑖𝑜𝑛 = = 38.461 𝐾ℎ𝑧
0.000026𝑠

• Calibración del Gimbal

Cuando se arranca el sistema el microprocesador realiza una calibración de


los sensores por lo que estos deberían estar inmóviles durante este proceso
para que la calibración sea precisa.
Si el sistema no se calibra satisfactoriamente la primera vez que se
arranque, se debe hacer un reset general mediante el botón de la tarjeta de
desarrollo.

Alexander Montoya Osorio 22


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

6. CONDICIONES / ESPECIFICACIONES DE OPERACIÓN

La estructura del gimbal no debería estar nunca de manera que los ejes de
los motores estén alineados. Tal disposiciónhará que la estimación de los ángulos
de Roll y Pitch sea incorrecta por que se produce una singularidad matemática
dentro del modelo usado para la estimación. Por este motivo se debe prestar
atención en para evitar que se alineen los ejes.

Los motores del Gimbal han sido diseñados para funcionar con baterías tipo
LiPo de 3 celdas, por lo que el uso de cualesquier otro tipo de batería no garantiza
el correcto funcionamiento del sistema ya que una tensión de alimentación
indebida puede producir calentamiento de los motores y una tensión muy baja
puede suponer una pérdida del par de giro.

Las conexiones entre todos los elementos deben estar garantizadas para
que el Gimbal funcione bien. Cabe resaltar que un fallo en las comunicaciones va a
suponer que el sistema se comporte de manera indeterminada.

Alexander Montoya Osorio 23


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

7. CONDICIONES ECONÓMICAS

7.1. ERRORES EN EL PROYECTO

En el caso de existir errores de diseño se dará cuenta al proyectista para dar


con la solución al problema.

Además se prohibirá el uso de la aplicación por posibles daños que pueda


ocasionar hasta que el error se vea subsanado.

7.2. LIQUIDACIÓN

Terminada la elaboración del proyecto se procederá a la liquidación, donde


se incluyen los importes correspondientes a la elaboración del proyecto.
En el caso de que surgiera alguna posible modificación aprobada por la
dirección del proyecto el contratante será el encargado de abonar este importe
íntegramente.

Al suscribir el contrato el contratante deberá abonar al adjudicatario el 60%


del total del presupuesto. Tras la entrega e instalación de la aeronave se deberá
realizar un nuevo abono del 20% del total del presupuesto, que será condición
necesaria para continuar con el proceso de diseño necesario para el control del
UAV. En caso de no realizar el abono el proyectista queda exento de todos los
deberes sus contractuales.

El 20% se quedará como garantía durante los 6 primeros meses a partir de


la fecha de puesta en marcha del montaje final. Si transcurrido este periodo de
tiempo no se han advertido evidencias de defecto, se abonara la cantidad
pendiente de entrega, y a partir de ese momento, se consideran completamente
concluidos los compromisos entre las dos partes, a excepción del periodo de
garantía que cubre lo citado anteriormente.

Alexander Montoya Osorio 24


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Pliego de condiciones

7.3. DISPOSICIÓN

Las dos partes contratantes, dirección técnica y empresa, ratifican el


contenido del siguiente pliego de condiciones, el cual tiene igual validez, a todos los
efectos, que una estructura publica, prometiendo fiel cumplimiento.

En Logroño a 4 de Julio de 2016

Fdo. Alexander Montoya Osorio.

Alexander Montoya Osorio 25


Universidad de la Rioja
Diseño y desarrollo de un gimbal
con motores brushless

Estado de las mediciones

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
Estado de las mediciones

ÍNDICE

1. ESTADO DE LAS MEDICIONES................................................................................... 3

1.1. MÓDULOS ELECTRÓNICOS: ......................................................................................... 3


1.2. ELEMENTOS MECANICOS: ........................................................................................... 4
1.3. PCB:............................................................................................................................. 4
1.4. CABLEADO: .................................................................................................................. 5
1.5. RECURSOS HUMANOS:................................................................................................. 5

Alexander Montoya Osorio 2


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Estado de las mediciones

1. ESTADO DE LAS MEDICIONES

En este apartado se listan en diferentes grupos la totalidad de los


componentes usados para la construcción del Gimbal. En cada lista aparece la
referencia, nombre, unidades usadas y unidades en las que se mide la propiedad
del elemento. Las referencias usadas corresponden con las de planos en caso de
que este exista.

Los 5 grupos en los que se incluyen todos los componentes son:

• Módulos electrónicos
• PCB
• Cableado
• Elementos mecánicos
• Recursos humanos

A continuación se desarrolla cada uno los grupos.

1.1. MÓDULOS ELECTRÓNICOS:

Dentro de este grupo se incluyen los elementos de control y senseo

Móduloselectrónicos
Referencia Unidad Unidades Nombre del elemento
EK-TM4C123GLX unidades 1 LauchPadEvaluation Kit
L6234 unidades 2 Driver para motor trifásico
MPU unidades 1 Unidad Inercial de medida
Batería unidades 1 Fuente de tensión

Alexander Montoya Osorio 3


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Estado de las mediciones

1.2. ELEMENTOS MECANICOS:

Elementos mecanicos
Referencia Unidad Unidades Nombre del elemento
EMAX-GB2806 unidades 2 Motor bruhsless
Estructura metálica unidades 1 Estructura Gimbal
Tornillo M3 unidades 8 Tornillo motor-estructura

1.3. PCB:

La referencia a cada elemento corresponde con la notación usada en los planos del
PCB.

PCB
Referencia Unidad Unidades Nombre del elemento
PCB unidades 1 Circuito impreso diseñado
C1 unidades 1 Condensador cerámico 0,33µF/50V
C6 Y C9 unidades 2 Condensadorcerámico 10nF/25V
C4 y C7 unidades 2 Condensador cerámico 0,22µF/50V
C2 y C8 unidades 2 Condensadorcerámico 0,1µF/25V
C10 y C12 unidades 2 Condensador electrolítico 1µF
C3 unidades 1 Condensador electrolítico 100µF
D1, D2, D3 y D4 unidades 4 Diodo 1N4148
L6234_1 y L6234_2 unidades 2 Conector DIP20
J3-J1 y J2-J4 unidades 2 Conector hembra 20 pines. 2x10
P5 unidades 1 Conector hembra 3 pines
7805L unidades 1 Regulador de tensión
P4 unidades 1 Conector batería
P1 unidades 1 Conector IMU
P2 y P3 unidades 2 Conector motor

Alexander Montoya Osorio 4


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Estado de las mediciones

1.4. CABLEADO:

Cableado
Referencia Unidad Unidades Nombre del elemento
Cable IMU 1 Cable de alimentación sensor y bus I2C
Cable motor 1 1 Cable motor
Cable motor 2 1 Cable motor

1.5. RECURSOS HUMANOS:

Recursos humanos
Referencia Unidad Unidades Nombre del elemento
Investigaciónde técnicas de
RH1 Horas 150
conmutación para motores BLDC
RH2 Horas 150 Investigación en tratamiento de datos
RH3 Horas 300 Programación
RH4 Horas 30 Diseño PCB
RH5 Horas 20 Diseño estructura mecánica
RH6 Horas 90 Redacción del documento

Alexander Montoya Osorio 5


Universidad de la Rioja
Diseño y desarrollo de un gimbal
con motores brushless

Presupuesto

ALUMNO: ALEXANDER MONTOYA OSORIO


DIRECTORES DE PROYECTO: JAVIER RICO AZAGRA Y MONTSERRAT GIL
MARTINEZ
CURSO 2015 – 2016
UNIVERSIDAD DE LA RIOJA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto

ÍNDICE DEL PRESUPUESTO

1. PRESUPUESTO .........................................................................................................3

2. CUADRO DE PRECIOS ...............................................................................................4

3. DESGLOSE DEL PRESUPUESTO EN SUBAPARTADOS .................................................6

4. PRESUPUESTO GLOBAL ...........................................................................................8

Alexander Montoya Osorio 2


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto

1. PRESUPUESTO

Se parte de la información recogida en el Estado de las mediciones para


realizar el presupuesto.

Para el cálculo se presupone para una sola unidad Gimbal, por lo que los
precios que aparecen para cada unidad corresponden con el precio normal de
mercado para un usuario común.

El presupuesto se divide en tres apartados

• Cuadro de precios. Aquí aparece el precio unitario para cada componente.


• Desglose del presupuesto en sub-apartados. Donde se presupuesta cada una de
las partidas, incluyendo ya las unidades de cada componente.
• Presupuesto global impuestos incluidos. Donde se suman los apartados
anteriores y se incluyen tasas e impuestos.

El presupuesto se desglosara en los mismos apartados que en el Estado de


las mediciones:

• Módulos electrónicos
• PCB
• Cableado
• Elementos mecánicos
• Recursos humanos

Alexander Montoya Osorio 3


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto

2. CUADRO DE PRECIOS

En este apartado se incluyen los precios de cada uno de los componentes.

Cuadro de precios de los móduloselectrónicos

Moduloselectronicos
Referencia Unidad Nombre del elemento Precio/Ud
EK-TM4C123GLX unidades LauchPadEvaluation Kit 13 €
L6234 unidades Driver para motor trifásico 5,84 €
MPU unidades Unidad Inercial de medida 3,91 €
Batería unidades Fuente de tensión 10,46 €

Cuadro de precios PCB

PCB
Referencia Unidad Nombre del elemento Precio/Ud
PCB unidades Circuito impreso diseñado 10 €
C1 unidades Condensador cerámico 0,33µF/50V 0,181 €
C6 Y C9 unidades Condensador cerámico 10nF/25V 0,187 €
C4 y C7 unidades Condensador cerámico 0,22µF/50V 0,124 €
C2 y C8 unidades Condensador cerámico 0,1µF/25V 0,154 €
C10 y C12 unidades Condensador electrolítico 1µF 0,136 €
C3 unidades Condensador electrolítico 100µF 0,152 €
D1, D2, D3 y D4 unidades Diodo 1N4148 0,300 €
L6234_1 y L6234_2 unidades Conector DIP20 0,500 €
J3-J1 y J2-J4 unidades Conector hembra 20 pines. 2x10 2,500 €
P5 unidades Conector hembra 3 pines 0,500 €
7805L unidades Regulador de tensión 1,950 €
P4 unidades Conector batería 0,320 €
P1 unidades Conector IMU 0,320 €
P2 y P3 unidades Conector motor 0,320 €

Cuadro de precios PCB

Cableado
Referencia Unidad Nombre del elemento Precio/Ud
Cable de alimentación sensor y bus
Cable IMU I2C 0,50 €
Cable motor 1 Cable motor 0,50 €
Cable motor 2 Cable motor 0,50 €

Alexander Montoya Osorio 4


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto

Cuadro de precios elementos mecánicos

Elementos mecanicos Precio/Ud


Referencia Unidad Nombre del elemento
EMAX-GB2806 unidades Motor bruhsless 15 €
Estructura metálica unidades Estructura Gimbal 3€
Tornillo M3 unidades Tornillo motor-estructura 0,01 €

Cuadro de precios Recursos humanos

Recursos humanos
Referencia Unidad Nombre del elemento Precio/Ud
Investigación técnicas de
RH1 Horas 30 €
conmutación para motores BLDC
Investigación en tratamiento de
RH2 Horas datos 30 €
RH3 Horas Programación 30 €
RH4 Horas Diseño PCB 30 €
RH5 Horas Diseño estructura 30 €
RH6 Horas Redacción documento 30 €

Alexander Montoya Osorio 5


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto

3. DESGLOSE DEL PRESUPUESTO EN SUBAPARTADOS

Presupuesto móduloselectrónicos:

Móduloselectrónicos
Referencia Unidad Unidades Nombre del elemento Precio/Ud Subtotal
EK-TM4C123GLX Ud 1 LauchPadEvaluation Kit 13 € 13,00 €
L6234 Ud 2 Driver para motor trifasico 5,84 € 11,68 €
MPU Ud 1 Unidad Inercial de medida 3,91 € 3,91 €
Batería Ud 1 Fuente de tensión 10,46 € 10,46 €
Subtotal 39,05 €

Presupuesto cableado:

Cableado
Referencia Unidad Unidades Nombre del elemento Precio/Ud Sub Total
Cable de alimentación sensor y bus
Cable IMU Ud 1 I2C 0,50 € 0,50 €
Cable motor 1 Ud 1 Cable motor 0,50 € 0,50 €
Cable motor 2 Ud 1 Cable motor 0,50 € 0,50 €
Subtotal 1,50 €

Presupuesto PCB:

PCB
Referencia Unidad Unidades Nombre del elemento Precio/Ud Subtotal
PCB Ud 1 Circuito impreso diseñado 10 € 10,000 €
C1 Ud 1 Condensador cerámico 0,33µF/50V 0,181 € 0,181 €
C6 Y C9 Ud 2 Condensadorcerámico 10nF/25V 0,187 € 0,374 €
C4 y C7 Ud 2 Condensador cerámico 0,22µF/50V 0,124 € 0,248 €
C2 y C8 Ud 2 Condensadorcerámico 0,1µF/25V 0,154 € 0,308 €
C10 y C12 Ud 2 Condensador electrolítico 1µF 0,136 € 0,272 €
C3 Ud 1 Condensador electrolítico 100µF 0,152 € 0,152 €
D1, D2, D3 y D4 Ud 4 Diodo 1N4148 0,300 € 1,200 €
L6234_1 y L6234_2 Ud 2 Conector DIP20 0,500 € 1,000 €
J3-J1 y J2-J4 Ud 2 Conector hembra 20 pines. 2x10 2,500 € 5,000 €
P5 Ud 1 Conector hembra 3 pines 0,500 € 0,500 €
7805L Ud 1 Regulador de tensión 1,950 € 1,950 €

Alexander Montoya Osorio 6


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto
P4 Ud 1 Conector batería 0,320 € 0,320 €
P1 Ud 1 Conector IMU 0,320 € 0,320 €
P2 y P3 Ud 2 Conector motor 0,320 € 0,640 €
Subtotal 22,465 €

Presupuesto Elementos mecánicos:

Elementos mecanicos
Referencia Unidad Unidades Nombre del elemento Precio/Ud Sub Total
EMAX-GB2806 Ud 2 Motor bruhsless 15 € 30,00 €
Estructura metálica Ud 1 Estructura Gimbal 3€ 3,00 €
Tornillo M3 Ud 8 Tornillo motor-estructura 0,01 € 0,04 €
Subtotal 33,04 €

Presupuesto Recursos humanos:


Recursos humanos
Referencia Unidad Unidades Nombre del elemento Precio/Ud Sub Total
Investigaciontécnicas de
RH1 Horas 250 30 € 7.500 €
conmutación para motores BLDC
Investigación en tratamiento de
4.500 €
RH2 Horas 150 datos 30 €
RH3 Horas 300 Programación 30 € 9.000 €
RH4 Horas 40 Diseño PCB 30 € 1.200 €
RH5 Horas 20 Diseño estructura 30 € 600 €
RH6 Horas 90 Redacción documento 30 € 2.700 €
Subtotal 25.500 €

Alexander Montoya Osorio 7


Universidad de la Rioja
Diseño y desarrollo de un gimbal con motores brushless
Presupuesto

4. PRESUPUESTO GLOBAL

Con los presupuestos parciales calculados, se realiza el presupuesto total.

Resumen general del presupuesto


1 Móduloselectrónicos 0,1526 % 39,05 €
2 PCB 0,0878 % 22,465 €
3 Cableado 0,0059 % 1,50 €
4 Elementos mecánicos 0,1291 % 33,04 €
5 Recursos humanos 99,6247 % 25.500 €

Presupuesto de ejecución material 25.596,06 €

Gastos generales 13% 3.327,49 €

Beneficio Industrial 6% 1.535,76 €

Suma______________________________________ 30.459,31 €

Impuestos añadidos IVA 21% 6.396,45 €

TOTAL CON IMPUESTOS 36.855,76 €

El valor total del presupuesto del proyecto, impuestos incluidos, asciende a


la cantidad de TREINTAISEIS MIL OCHOCIENTOS CINCUENTA Y CINCO EUROS
CON SETENTAISEIS CENTIMOS.

En Logroño a 4 de Julio de 2016

Fdo. Alexander Montoya Osorio.

Alexander Montoya Osorio 8


Universidad de la Rioja

Você também pode gostar