Sunteți pe pagina 1din 33

Importante video para entender la señales analógicas y las señales digitales:

https://www.youtube.com/watch?v=c-h-cSNPfzE

¿Qué es un sistema digital?

Es un conjunto de dispositivos destinados a la generación, transmisión,


manejo, procesamiento o almacenamiento de señales digitales (formadas solo
ceros y unos, 0 cuando no hay electricidad, 1 cuando si hay)

¿Qué es un bus?

Es un sistema digital que funciona como un canal que transfiere los datos entre
diversos dispositivos electrónicos. Este bus puede ser de dos tipos:

En serie: donde el bus solamente es capaz de transferir los datos bit a bit (uno
tras otro) por un único canal, por lo que usa un único cable para transferir la
información. O también por dos canales, donde uno envía la información y el
otro la recibe usando por tanto en ese caso dos conectores para realizar la
comunicación de datos, RX (recepción) y TX (transmisión). No obstante,
pueden existir otros conductores para referencia de tensión, sincronismo de
reloj, etc.

En paralelo: en la cual se envían varios bits simultáneamente, cada uno por


un canal separado y sincronizado con el resto. Pudiendo transferir la
información por ejemplo de 8 bits en 8 bits. Para ello necesita un número
superior de conductores de comunicación, que varían en función del tipo de
puerto. Igualmente existe la posibilidad de conductores adicionales además de
los de comunicación.
Históricamente ambos tipos de puertos han convivido en los ordenadores,
empleándose los puertos paralelos en aquellas aplicaciones que requerían la
transmisión de mayores volúmenes de datos. Sin embargo, a medida que los
procesadores se hicieron más rápidos los puertos de serie fueron desplazando
progresivamente a los puertos paralelos en la mayoría de aplicaciones.

El microcontrolador del arduino, a través de algunos de sus pines de


entrada/salida (E/S), utiliza el sistema de comunicación serie para transmitir y
recibir órdenes y datos hacia/desde otros componentes electrónicos. Esto es
debido sobre todo a que en una comunicación serie solo se necesita en teoría
un único canal (un único “cable”), mientras que en una comunicación en
paralelo se necesitan varios cables, con el correspondiente incremento de
complejidad, tamaño y coste del circuito resultante.

Los protocolos de comunicación del arduino

Se ha de tener en cuenta que un protocolo se forma tanto por hardware como


por software, es decir, que para aplicar un cierto protocolo ha de disponerse
de ciertos componentes físicos y de un hardware que procese la información.

Por otro lado ya se sabe el Microcontrolador usa la comunicación de un bus


en serie, sin embargo, existen muchos protocolos y estándares diferentes
basados todos ellos en la transferencia de información en serie, pero
implementando de una forma diferente cada uno los detalles específicos
(como el modo de sincronización entre emisor y receptor, la velocidad de
transmisión, el tamaño de los paquetes de datos, los mensajes de conexión y
desconexión y de dar paso al otro en el intercambio de información, los voltajes
utilizados, etc.). De entre el gran número de protocolos de comunicación serie
reconocidos por la inmensa variedad de dispositivos electrónicos del mercado,
los que nos interesarán conocer son los que el ATmega328P (Microcontrolador
de arduino) es capaz de comprender y por tanto, los que podrá utilizar para
contactar con la variedad de periféricos conectables a él. En este sentido, los
estándares más importantes son:
El protocolo I2C

(Inter-Integrated Circuit, también conocido con el nombre de TWI –de“Two-


Wire”, literalmente “dos cables” en inglés): es un sistema muy utilizado en la
industria principalmente para comunicar circuitos integrados,
microcontroladores o sistemas digitales entre sí. (Ver qué es un circuito
integrado en 1 minuto https://www.youtube.com/watch?v=01lcetcgwA8).

Características generales del protocolo I2c

 Posee una conexión muy simple de solo 2 cables o líneas para generar sus
comunicaciones con sensores, controladores o actuadores.
 Pueden existir 2 o más elementos comunicándose
 Es un bus SINCRONO eso quiere decir que en una de sus líneas requiere
una señal de reloj de frecuencia periódica muy precisa que sirve para
coordinar y sincronizar los elementos integrantes en la comunicación (es
decir, los emisores y receptores) de forma que todos sepan cuando
empieza cuánto dura y cuando acaba la transferencia de datos. Se suele
escribir como CLK (del inglés clock)
 Es un bus del tipo Half dúplex, es decir se comunica en una sola dirección
a la vez. Por lo que no puede transmitir y recibir datos al mismo tiempo. Sin
embargo puede simular las comunicaciones full dúplex (que si puede
transmitir y recibir a la vez) ya que por las velocidades de transferencia es
imperceptible el cambio de dirección de los datos.
 Todos los componentes que se incorporan o desean incorporar a este bus
deben de manejar el protocolo de comunicación, cosa por la que se pudiera
decir que todos los dispositivos que están controlados por este bus tienen
un pequeño circuito de control que permite reconozcan el protocolo de
comunicaciones, son por así decirlo “inteligentes”
 Este bus ofrece 3 velocidades de transmisión: estándar mode 100Kbits/s,
Fast mode 400Kbits/s y High-Speed Mode 3.4 Mbits/s siendo este último
usado para aplicaciones industriales

Estructura del bus I2C

Como ya se mencionó este bus serie está formado por dos cables, que puede
conectar varios dispositivos mediante un hardware muy simple que ya viene
incluido en ellos, por esos dos cables se produce una comunicación serie bit a
bit. Donde se transmiten dos señales, una por cada línea:

 Línea SCL (serial clock): es la señal de reloj que se utiliza para


sincronizar los datos (se explicara más detalladamente cómo lo hace
más adelante)
 Línea SDA: es la línea para la transferencia de datos

A su vez usa una conexión que se llama “and cableada” de dos resistencias
de pull- up ( Importante: ver que son resistencias de pull-up
https://www.youtube.com/watch?v=GfCnSsB-cuQ&t=324s –ver de minuto
0:36 a minuto 5:12- ,OJO para entender el video se tiene que tener claro
primero la diferencia de masa-tierra(GND) en un circuito :
https://www.youtube.com/watch?v=GfCnSsB-cuQ&t=324s .
Dato importante:

Estado lógico 1: Hay Tensión Estado lógico 0: no hay tensión.

Observando el esquema puede sugerirse la pregunta: ¿Qué función cumplen


las resistencias pull up en este contexto?, pues estas permiten que las líneas
de comunicación estén normalmente en ALTO (esto quiere decir que están
alimentadas o que poseen un valor lógico 1) cosa que asegura que todas las
entradas digitales de cada dispositivo que forma parte de la comunicación
sean estables lógicamente, esto quiere decir que todas las entradas digitales
tendrán un 1 como entrada, evitando así la interferencia que podría
presentarse si todas las entradas estuvieran normalmente en BAJO, puesto
que en ese sentido las entradas digitales tendrían las dos líneas SDA y SCL
al aire, pudiendo llegar a comportarse como antenas que atraen interferencia
a las entradas digitales pudiendo causar una inestabilidad lógica en los
dispositivos, causando errores por tanto en el funcionamiento de cada uno, ya
que pueden tender a recibir corrientes indeseadas generadas por la
interferencia (generando un 1 lógico indeseado).

Dato importante: Cada dispositivo que se conecta al bus es reconocido por


una única dirección que lo diferencia del resto de los circuitos conectados. Esta
dirección generalmente es de 7 bits y se forma de 4 bits fijos que son
determinados por el fabricante y 3 bits que pueden ser configurados. Al contar
con esos 3 bits configurables se puede integrar hasta 8 dispositivos del mismo
tipo en un mismo bus, evitando que en un mismo diseño haya 2 o más esclavos
con las misma dirección. Esto a excepción de algunos dispositivos especiales.
(Véase video https://www.youtube.com/watch?v=1KFA7_wISVM&t=916s –ver
desde minuto 23:04 hasta 25:04- ) . Sin embargo, está limitación de solo
poseer un máximo de 8 dispositivos de la misma clase puede romperse
colocando expansiones de bus que permiten tener 8 dispositivos más.

Por otro lado, en el esquema se puede observar que las comunicaciones en el


bus I2C son del tipo Master- Slave (Maestro-esclavo) donde siempre existe un
circuito de control (Microcontrolador) que gobierna y genera las señales para
usar este protocolo

El master (maestro): es el que gestiona las comunicaciones ya que es el que


inicia y termina la transferencia de datos. Además de generar y controlar la
señal de reloj que sincroniza la transmisión de datos. El master generalmente
es un microcontrolador.

El protocolo I2C puede ser multi-maestro, por lo que puede haber varios
dispositivos que tomen el poder de la comunicación. Sin embargo 1 solo
dispositivo puede tener el control del bus a la vez. Por lo que en el supuesto
caso de que exista un sistema donde el master sea un arduino uno por
ejemplo, y los slaves : 2 sensores, 1 pantalla LCD y un arduino MEGA . Puede
que en algún momento se desee el arduino MEGA sea el master, y el arduino
uno pase a ser slave. (Ver otro ejemplo más real de uso :
https://www.youtube.com/watch?v=1KFA7_wISVM –Ver a partir del minuto
14:32 hasta el minuto 16:22-)

El slave (esclavo): son los que se mantienen escuchando la línea de reloj


(creada por el master) y enviando los datos si la dirección interna de ellos
coincide con la que el dispositivo maestro está solicitando.

Características que posee la estructura del bus I2C

 Para realizar comunicaciones entre una computadora (aplicación software)


y dispositivos conectado al bus I2C es necesario programar un
microcontrolador que realice la decodificación de la información entre
ambos protocolos (ya que la computadora usa un protocolo distinto al I2C
para comunicarse, puede usar el protocolo USB -del cual se hablará más
adelante- o el R232). Por lo que el microcontrolador es un dispositivo muy
versátil ya que puede funcionar como traductor del pc a los dispositivos.
 La línea SDA es bidireccional, es decir, tanto el maestro como el esclavo
pueden actuar como transmisores o receptores de datos, dependiendo de
la función del dispositivo. Así, por ejemplo, un display es solo un receptor
de datos, mientras que una memoria recibe y transmite datos.
 Toda la información que circula por el bus es “escuchada” por todos los
dispositivos conectado a él, pero solo responderá aquel que sea
direccionado ( Ver video
https://www.youtube.com/watch?v=1KFA7_wISVM&t=916s –desde el
minuto 28:20 hasta el minuto 28:59- )

Hardware del Bus I2C

(Primero ver video de qué es un transistor :


https://www.youtube.com/watch?v=dIV5l9cx_ck&t=55s -ver desde el minuto
0:55- y ver video https://www.youtube.com/watch?v=7Q79fhvoRSs –desde el
minuto 0:44 hasta el minuto 4:00-)
Viendo más detalladamente el esquema del bus I2C se puede ver como cada
dispositivo independientemente si es master o slave posee un transistor NPN
en la entrada SDA y SCL. Este transistor es de vital importancia ya que es el
que genera la comunicación entre los distintos dispositivos. La base de dicho
transistor puede ser una clock out (salida de reloj) o data out (salida de datos)
, pero ¿qué significa esto realmente? pues resulta que a causa de las
resistencias pull-up, el colector de cada transistor está en ALTO, mientras que
el emisor está en tierra, por esta razón si el transistor recibe una señal en la
base, automáticamente el transistor “aterriza” la señal a tierra colocando la
línea en estado BAJO, haciendo de esa manera que TODA la línea que aterriza
el transistor no tenga tensión. Pudiendo tener entonces el transistor dos
estados posibles :

 Que el transistor este saturado, con lo cual lleva a un nivel BAJO a la


línea correspondiente, independientemente del estado de los otros
transistores. Cuando la línea esta es este estado se dice que esta
“ocupada”
 Que el transistor esté en corte, con lo cual el estado de la línea depende
de los otros transistores. Es decir, el bus está “libre”
Pero ¿por qué es importante saber esto?, pues resulta que la señal de la base
coincide con los datos de salida del dispositivo o con la salida de reloj. Por lo
que se puede tener por ejemplo algún sensor, que mida una señal analógica
de su entorno, la convierta en una señal digital (ceros y unos ) y transmita
esos ceros y unos por medio del transistor (data out) teniendo en cuenta una
lógica inversa, esto quiere decir, que en la base del transmisor lo que llegan
son ceros y unos que representan la señal recibida por el sensor, cuando llega
un 1 a la base del transistor este coloca de baja la línea, cuando le llega un 0
a la base, el transistor coloca la línea en ALTA (1) , por lo que existen una
lógica inversa, cada vez que el transistor recibe un 1 manda un 0 a la línea, y
cuando recibe un 0 manda un 1 a la línea. La lógica que manda el transistor
que forma parte del sensor es recibida por el master, quién recibe la
información por medio de una entrada digital o data in (entrada de datos)
representada con el triángulo de imagen.

Esta misma metodología es realizada para generar la señal de reloj por parte
del master, se implementa un transistor que genere una lógica inversa en la
línea para así sincronizar los datos que transmiten los dispositivos. Sin
embargo, esta función solo es realizable por el master, un slave no tiene
permitido generar la señal de reloj, a menos que se realice un cambio de
master. Puesto que los masters tienden a ser microcontroladores, por ser “muy
inteligentes” siempre poseerán dentro de su estructura dos transistores, uno
para generar la señal de reloj y otro para generar los datos o instrucciones al
bus. Mientras que pueden existir otros dispositivos como los sensores por
ejemplo que no son “tan inteligentes” por lo que solo poseen un transistor que
tiene la función de enviar datos. Ya que el otro no es necesario por el hecho
de que un sensor no tiene la capacidad de gestionar la comunicación de un
I2C (no pueden ser master), por lo que no necesita un transistor que genere la
señal de reloj, que es solo apto para maestros.
Se concluye entonces que los transistores emiten la información (ya sea data
o de reloj) la cual llega a cada dispositivo por medio de una entrada digital
representada por el triángulo de la imagen.

También se tiene que tener en cuenta que el número máximo de dispositivos


conectados al bus viene limitado por el máximo valor de capacitancia que
debería tener el bus de comunicación, que es de 400pf. (A mayores
dispositivos en las líneas mayor es el número de capacitancia en las mismas)
. Por otro lado el cálculo de las resistencias de pull-up dependen de la
capacidad del bus y del número de dispositivos conectados.

La comunicación del bus I2C

Inicio y final de la transmisión de datos:

Se sabe entonces que cuando el bus está libre las líneas SDA y SCL estarán
en estado ALTO gracias a las resistencias pull-up. Cuando el maestro, que es
el único que puede iniciar una comunicación, necesita hacerlo, la lleva a cabo
mediante una condición llamada START o condición de inicio, en la cual el
maestro lleva la línea SDA al estado bajo (gracias a su transistor interno)
mientras la SCL permanece en ALTO, para así posteriormente llevar la línea
SCL al estado bajo también. Véase la imagen:

Está condición de inicio hará que todos los dispositivos esclavos estén atentos
ya que se ha iniciado una transferencia de datos.
Una vez que finaliza la transferencia de datos, el maestro enviará una
condición de STOP al bus. La condición de STOP o fin es contraria a la de
START. Primero, el maestro, libera la línea SCL para que quede a nivel ALTO
y luego la línea SDA, quedando a final de cuentas ambas en ALTO, por el que
el bus vuelve a estar en estado de bus libre. Véase la imagen:

De esta forma se inicia y se finaliza una transmisión de datos a través del bus.
Después de la condición de inicio o START se enviarán o recibirán uno a uno
los bits de datos en serie, según sea el caso

Envió de datos:

Una vez establecida la condición de START por parte del maestro, se iniciará
la comunicación por bytes en grupos de 8 bits. Para la transmisión de datos,
la línea SDA no puede cambiar de estado mientras la línea SCL este en alto,
ya que esto se interpretaría como una condición de START o STOP, por lo
que, para transmitir un bit a la línea SDA, solo se debe cambiar SDA mientras
la línea SCL está en estado bajo
Obsérvese que luego de haber iniciado el patrón de START, la línea SCL se
va a baja para que de esa manera la línea SDA CAMBIE, ¿qué significa
cambiar? Pues que la línea empiece a generar el dato que desea transmitir,
en este caso cambió a ALTO para así generar un uno. Cuando la línea SDA
cambia exitosamente, la línea SCL va a alta de nuevo, en ese momento es
donde están los “Datos validos”

Igualmente se puede dar el caso donde el dato válido sea un 0

El master, al comenzar la comunicación lo primero que hará, será dar hacia el


bus la dirección del dispositivo esclavo correspondiente (7 bits) con el cual se
desea comunicar y con un último bit indicar si se esta la comunicación será del
tipo escritura o lectura, es decir, si se va a transmismitir o leer una información.
La imagen mostrada es un esquema genérico, razón por la que en cada
sección de “datos validos” pareciera como si la línea SDA estuviera en ALTA
y BAJA a la vez, realmente esto no es así, sin embargo se expresa de esa
forma en el esquema, para hacer entender que en la sección de “datos validos”
puede haber tanto un 0 como un 1 , por lo que cada bit tiene 2 estados posibles.

Se puede evidenciar como efectivamente los primeros 7 bits, pertenecen a la


dirección del dispositivo con el que el master desea comunicarse, mientras que
el ultimo bit es 0 si la comunicación será de escritura (W de write) o 1 si la
comunicación será de lectura (R de read). Obsérvese como efectivamente la
señal de reloj lleva los tiempos de cuando la señal SDA tiene que cambiar y
cuando tiene que mostrar los datos válidos.

Una vez que se ha transmitido estos 8 bits (que son igual a 1 byte) con la
dirección y el bit R/W, el dispositivo esclavo que tiene la dirección correcta
enviará un bit de reconocimiento o acknowledge ( se puede abreviar ACK) en
el noveno pulso de reloj, indicando al maestro que está listo para el envío o
recepción de datos. El bit de reconocimiento es obligatorio para completar
cada transmisión de un byte, excepto en el último byte leído de un esclavo, y
quien enviará este bit será quien reciba los datos, ya sea algún esclavo o el
propio maestro. En ambos casos, el maestro es quien generará el pulso de
reloj para el bit ACK. También se puede enviar un bit de reconocimiento
negado (NOT ACK o NACK) es decir, que equivale a un estado alto en el bit
de reconocimiento, si el bit de reconocimiento es un ACK o un NACK
dependerá de que dispositivo con que se esté tratando en la comunicación

Transferencia de datos de maestro a esclavo y de esclavo a maestro:

(ver video: https://www.youtube.com/watch?v=ipMTIQJrn6g&t=792s – Desde


el minuto 7:34 hasta el minuto 9:20)

Video practico: una comunicación I2C real, donde se puede apreciar todo lo
aprendido : https://www.youtube.com/watch?v=ipMTIQJrn6g&t=792s ver a
partir del minuto 9:35 hasta el minuto 11:58)

Ventajas del BUS I2C

 Puede tener distintos dispositivos compartiendo la misma línea de


datos, donde cada dispositivo puede tener una dirección diferente a la
que puede accederse para comunicarse
 Requiere pocos cables
 Dispone de mecanismos para verificar que la señal hay llegado

Desventaja del BUS I2C

 Es un protocolo para comunicarse entre circuitos. Esto significa que no


se puede separar demasiado los circuitos entre sí porque se puede
producir interferencia en la señal. Este protocolo no está diseñado para
la comunicación de dispositivos a larga distancia.
 Su velocidad es media-baja
 No es full duplex
 No hay verificación de que el contenido del mensaje es correcto

El protocolo SPI

Al igual que el sistema I²C, el sistema de comunicación SPI es un estándar


que permite controlar (a cortas distancias) casi cualquier dispositivo
electrónico digital que acepte un flujo de bits serie sincronizado (es decir,
regulado por un reloj). Igualmente, un dispositivo conectado al bus SPI puede
ser “master” o “slave“–, donde el primero es el que inicia la transmisión de
datos y además genera la señal de reloj (aunque, como con I²C , con SPI
tampoco es necesario que el maestro sea siempre el mismo dispositivo) y el
segundo selimita a responder.

La mayor diferencia entre el protocolo SPI y el I²C es que el primero requiere

de cuatro líneas (“cables”) en vez de dos. Una línea (llamada normalmente


“SCK”) envía a todos los dispositivos la señal de reloj generada por el maestro
actual; otra (llamada normalmente “SS”) es la utilizada por ese maestro para
elegir en cada momento con qué dispositivo esclavo se quiere comunicar de
entre los varios que puedan estar conectados (ya que solo puede transferir
datos con un solo esclavo a la vez); otra (llamada normalmente “MOSI”) es la
línea utilizada para enviar los datos –0s y 1s– desde el maestro hacia el
esclavo elegido; y la otra (llamada normalmente “MISO”) es la utilizada para
enviar los datos en sentido contrario: la respuesta de ese esclavo al maestro.
Es fácil ver que, al haber dos líneas para los datos la transmisión de
información es “full duplex” (es decir, que la información puede ser
transportada en ambos sentidos a la vez).

Estructura del BUS SPI

En las siguientes figuras se muestra el esquema de líneas de comunicación

existentes entre un maestro y un esclavo y entre un maestro y tres esclavos

respectivamente. Se puede observar que, para el caso de la existencia de


varios esclavos es necesario utilizar una línea “SS” diferente por cada uno de
ellos, ya que esta línea es la que sirve para activar el esclavo concreto que en
cada momento el maestro desee utilizar (esto no pasa con las líneas de reloj,
“MOSI” y “MISO”, que son compartidas por todos los dispositivos).
Técnicamente hablando, el esclavo que reciba por su línea SS un valor de
voltaje BAJO será el que esté seleccionado en ese momento por el maestro,
y los que reciban el valor ALTO no lo estarán (de ahí el subrayado superior
que aparece en la figura).

Como se puede ver, el protocolo SPI respecto el I²C tiene la desventaja de


exigir al microcontrolador dedicar muchos más pines de E/S a la comunicación
externa. En cambio, como ventaja podemos destacar que es más rápido y
consume menos energía que I²C.

La librería Wire

Permite comunicar mediante el protocolo I2C (también llamado TWI) la placa


Arduino con dispositivos externos. Tal como ya se ha comentado varias veces,
la comunicación se establece a través de los pines SDA (línea de datos,
ubicada en pin analógico 4 en la placa Arduino UNO) y SCL (línea de reloj,
ubicada en el pin analógico 5). Esta librería utiliza 7 bits para identificar el
dispositivo (lo que da la posibilidad de distinguir hasta 128 dispositivos
diferentes).

la librería Wire es bastante compleja porque permite controlar hasta el mínimo


detalle el proceso de comunicación entre dispositivos. Es por eso que muchas
veces se opta por utilizar librerías “para novatos” que ocultan los entresijos
internos del proceso comunicativo y ofrecen al usuario una forma mucho más
sencilla, clara y rápida de escribir sus sketches. Normalmente, cada dispositivo
diferente utilizará su librería “para novatos” correspondiente, por lo que nos
encontraremos con bastante variedad de librerías para elegir según el
dispositivo que queramos usar, a pesar de que todas ellas se basen en una
única librería base, la Wire.

El protocolo USB

La conexión USB de la placa Arduino, además de servir como alimentación


eléctrica, sobre todo es un medio para poder transmitir datos entre nuestro
computador y la placa, y viceversa. Este tráfico de información que se realiza
entre ambos aparatos se logra gracias al uso del protocolo USB, un protocolo
de tipo serie que tanto nuestro computador como la placa Arduino son capaces
de entender y manejar. No obstante, el protocolo USB internamente es
demasiado complejo para que el microcontrolador ATmega328P pueda
comprenderlo por sí mismo sin ayuda, ya que él tan solo puede comunicarse
con el exterior mediante protocolos mucho más sencillos técnicamente como
son el I2C o el SPI y pocos más. Por tanto, es necesario que la placa disponga
de un elemento “traductor” que facilite al ATmega328P (concretamente, al
receptor/transmisor serie de tipo TTL-UART que lleva incorporado) la
manipulación de la información transferida por USB sin que este tenga que
conocer los entresijos de dicho protocolo.
Breve nota sobre la tecnología TTL y el chip UART

Por “TTL” (“Transistor-to-Transistor Logic”) se entiende un tipo genérico de


circuito electrónico donde los elementos de entrada y salida de éste son
transistores bipolares. Y concretamente el chip UART (“Universal
Asynchronous Receiver-Transmitter”) que viene incorporado dentro del
microcontrolador ATmega328P (y que es el encargado de establecer la
comunicación de tipo serie entre este y el exterior) está construido con la
tecnología TTL.

El controlador del UART es el componente clave del subsistema de


comunicaciones series de una computadora. El UART toma bytes de datos y
transmite los bits individuales de forma secuencial. En el destino, un segundo
UART reensambla los bits en bytes completos. La transmisión serie de la
información digital (bits) a través de un cable único u otros medios es mucho
más efectiva en cuanto a costo que la transmisión en paralelo a través de
múltiples cables. Se utiliza un UART para convertir la información transmitida
entre su forma secuencial y paralela en cada terminal de enlace.

Que el receptor/transmisor UART sea de tipo TTL implica que los valores HIGH
(bits “1”) enviados o transmitidos los representará con un pulso de 5V (o 3,3V,
según el voltaje de trabajo del circuito) y los valores LOW (bits “0”) se
representará con un pulso de 0 V. Esto es importante porque otros tipos de
receptores/transmisores también serie (como por ejemplo los de tipo RS-232)
utilizan otros niveles de voltaje para representar los valores HIGH y LOW y por
tanto no son compatibles.

Este chip UART se denomina ATmega16U2 es todo un microcontrolador en sí


mismo (con su propia CPU, con su propia memoria, entre otros) y por tanto
podría realizar muchas más tareas que no solo la “traducción” del protocolo
USB. De hecho, técnicamente es posible desprogramarlo para que haga otras
cosas y convertir así la placa Arduino en virtualmente cualquier tipo de
dispositivo USB conectado a nuestro computador (un teclado, un ratón, un
dispositivo MIDI…). No obstante, por defecto el ATmega16U2 que viene
incluido en la placa Arduino viene ya con el firmware preprogramado para
realizar exclusivamente la función de “intérprete” al ATmega328P y ya está.

Estructura del protocolo USB

Se puede evidenciar osee dos líneas que ( positivo y tierra ) que proveen la
alimentación a los dispositivos conectados con este protocolo, mientas que
existen otros dos canales donde se genera una transferencia de datos del tipo
full dúplex.

El MPU 6050

Es una unidad de medición inercial (IMU), lo que significa que es un dispositivo


electrónico que mide e informa directamente acerca de la aceleración y
velocidad angular. Usando una combinación de acelerómetros y giroscopios.

¿Cómo mide la aceleración?

Los acelerómetros internamente tienen un MEMS ( MicroElectroMechanical


Systems) que emulan un sistema masa-resorte en los tres ejes, que permite
medir la aceleración.
Al aplicar una aceleración al conjunto, la masa suspendida ejercerá una fuerza
sobre los muelles (por la segunda ley de newton) causando que uno se
contraiga y otro se elongue, por lo que la posición relativa de la masa dentro
del sensor variará.

Este desplazamiento de la masa libre interior puede ser medido para


determinar la magnitud de la aceleración. El desplazamiento será proporcional
a la aceleración soportada, y se mantendrá constante mientras la aceleración
sea constante. Se ha de tener en cuenta que a pesar que no exista
movimiento, siempre el acelerómetro estará sensando la aceleración de
la gravedad.

En la vida real el sistema masa-resorte se ve de esta forma:


Siendo la imagen el sistema micro electromecánico que posee el chip. A pesar
que luce muy diferente a un sistema masa-resorte, realmente su
funcionamiento es el mismo.

Posee una masa central que cuenta con unos filamentos que están anclados
al sustrato, esto significa básicamente que están sujetos por los extremos.
Esta masa oscilara de un lado a otro por efecto de la aceleración.
Adicionalmente la masa posee unas aletas que poseerán un par de sensores
capacitivos fijos que permiten detectar el desplazamiento de la masa central
producto de la aceleración.
Se puede evidenciar como al producirse una aceleración, una sección de los
filamentos se deforma, simulando el comportamiento de un resorte. Mientras
que la aleta cambia su distancia con respecto a los sensores capacitivos, esta
variación de distancia es proporcional a la capacitancia de los sensores (ya
que las aletas y los sensores forman 2 placas que al separarse generan un
cambio capacitivo)

El cambio capacitivo genera un voltaje que es también es proporcional a la


aceleración. Permitiendo así medir la misma. Haciendo un resumen
esquemetico se tendría

Aceleración

Desplazamiento
Cambio Capacitivo

Voltaje
Realmente el la estructura que forma la masa posee varias aletas formando
entonces el sistema :

Los acelerómetros disponibles normalmente son de 3 ejes, es decir, son


capaces de medir la aceleración a la que está sometido el sensor en X, Y y Z
independientemente, lo que permite saber simultáneamente la magnitud y
dirección de la aceleración medida.

¿Cómo mide la velocidad angular?

A diferencia de los acelerómetros, los giroscopios son dispositivos puramente


diferenciales, es decir, no existe una referencia absoluta si no que siempre
medimos ángulos relativos a una referencia arbitraria.
Existen diversos tipos de giroscopios (mecánicos, de anillo láser, de fibra
óptica). Los que se emplean en MEMS son denominados giroscopios
vibratorios de efecto Coriolis (CVG)

Recordar que la fuerza de Coriolis es una fuerza ficticia que aparece sobre un
cuerpo en movimiento cuando se encuentra en un sistema en rotación.

El valor de esta fuerza es:

̅ × ̅̅̅
𝐹̅𝑐 = −2. 𝑚. (𝜔 𝑣)

Donde:

m = masa del cuerpo

ω = velocidad angular del cuerpo

v = velocidad radial del cuerpo dentro del sistema rotatorio

Para entender cómo se produce el efecto Coriolis en el interior del MEMS


consideremos el siguiente bloque de masa m, el cual se mueve a una
velocidad v, tal y como se observa en la figura por la fecha azul. Si a este
bloque se le aplica un movimiento angular Ωz, el cual se representa el rojo, se
producirá una fuerza de Corilis de valor F= -2m V x W, en la dirección que
apunta la flecha amarilla.
Igualmente, que con el acelerómetro utilizando un interfaz sensorial del tipo
capacitiva se consigue medir esa velocidad angular aplicada en función de la
fuerza de Coriolis generada.

En la práctica realmente, el MEMS lo que emula es el movimiento de dos


masas-resorte.

Las dos masas oscilan de forma constante a una velocidad v (flechas azules),
de tal forma que cuando se les aplica una velocidad angular, que viene
denotada por Ωz, las fuerzas de Coriolis resultantes tienen sentido opuesto
(flechas en amarillo) esto es así, más que nada por efecto de que el
movimiento es ROTACIONAL . Por estas fuerzas de Coriolis las masas
tenderán a tener un desplazamiento que generará una capacitancia en cada
una, creando así una diferencia capacitiva diferente de cero.

En el supuesto que una fuerza sea aplicada en las mismas 2 masas por efectos
de una aceleración lineal:

Las dos masas se moverán en la misma dirección por lo que la medida


capacitiva diferencial será cero. Y no existirá medida alguna. Por lo que la
fuerza de coriolis será la única que generé una diferencia capacitiva que será
la que permitirá conocer la velocidad angular.

Más realmente el sistema se vería como esta estructura:

Donde al igual que el acelerómetro, está formada por una parte móvil y otra
parte fija, la parte móvil son las que emulan los sistemas masa resorte, estas
masas se hacen oscilar por medio de una fuerza electroestática generada por
una corriente alterna, formando así, una frecuencia de resonancia mediante
un control automático muy preciso que controla la oscilación de las mismas
(por lo que se controla y conoce el valor de la velocidad radial) . Al existir una
velocidad angular, los brazos vibrantes generarán unas fuerzas de Coriolis que
generarán unas vibraciones de Coriolis, las cuales harán que la parte fija se
deforme produciendo una diferencia capacitiva que es proporcional a la
velocidad angular

Viendo las placas fijas más detalladamente:

En la figura de la izquierda no se aplica ningún movimiento angular, por lo que


las placas no se desplazan debido a ninguna fuerza. Por otro lado, en la figura
de la derecha, se ha aplicado un movimiento angular el cual produce el par de
fuerzas de Coriolis que desplazan las placas tal y como se observa en la figura.
Este desplazamiento produce una variación en la distancia entre placas del
condensador, lo que implica una variación de la capacidad del condensador.

Haciendo un resumen esquemetico se tendría:

Velocidad angular

Fuerza de Coriolis

Deformación

Cambio capacitivo
Voltaje

La señal de voltaje resultante recibida es amplificada, demodulada, y filtrada


para dar paso a una señal que es proporcional a la tasa de cambio de la
posición angular en un determinado eje.

Pines del MPU 6050

 Vcc: alimentación
 GND : tierra
 SCL y SDA : canales de comunicación del bus I2C.
Estos pines tienen una resistencia pull-up en placa
para una conexión directa al microcontrolador o
Arduino.
 XDA y XCL : son canales de comunicación de un
bus I2C auxiliar, que es usado cuando se quiere que el sensor sea master,
controlando sensores externos como magnetómetros o barómetros
 ADO : es para establecer la dirección que tendrá el dispositivo. Dicha
dirección depende si el pin es conectado a tierra o a alimentación. Si se
conecta a tierra la dirección será 0x68. Si es conectado a alimentación
será 0x69. El MPU 6050 trae por defecto la dirección 0x68 porque
internamente el pin ADO está conectado a tierra a través de una
resistencia.
 INT : es un pin que genera interrupciones, hace que el microcontrolador
detenga lo que está haciendo, para que se dé cuenta que el sensor
tiene información que transmitirle.

Características del MPU 6050


 Modulo basado en el sensor MPU 6050
 Opera con 3.3 V sin embargo, puede operar también a 5 V ya que el
modulo posee un regulador.
 Posee 6 grados de libertad porque incluye un acelerómetro de 3 ejes y
un giróscopo de 3 ejes
 Tiene un "Procesador de movimiento digital" (DMP), también llamado
"Unidad de procesamiento de movimiento digital". Este DMP se puede
programar con firmware y es capaz de realizar cálculos complejos con
los valores del sensor, gracias a los complejos algoritmos de captura de
movimiento que posee ya de manera predeterminada . El DMP ("Digital
Motion Processor") puede hacer cálculos rápidos directamente en el
chip. Esto reduce la carga para el microcontrolador (como el Arduino).
El DMP incluso puede hacer cálculos con los valores del sensor de otro
chip, por ejemplo, un magnetómetro conectado al segundo I2C bus
auxiliar que posee.
 Usa el I2C- bus para interactuar con el Arduino.
 Posee un sensor de temperatura
 Rango de escala del giroscopio = ± 250/ ± 500/ ±1000/ ±2000 º/s
 Rango de escala del acelerómetro = ± 2g, ± 4g, ±8g, ± 16
 Es muy preciso, ya que contiene hardware de conversión de analógico
a digital de 16 bits para cada canal. Por lo tanto, captura los canales x,
y y z al mismo tiempo.
 Contiene un búfer FIFO de 1024 bytes. Los valores del sensor se
pueden programar para colocarlos en el búfer FIFO. Y el buffer puede
ser leído por el Arduino. El búfer FIFO se usa junto con la señal de
interrupción. Si el MPU-6050 coloca los datos en el búfer FIFO, señala
al Arduino con la señal de interrupción para que el Arduino sepa que
hay datos en el búfer FIFO esperando a ser leídos.

Medidas indirectas que pueden ser obtenidas


gracias al acelerometro

Este sensor está constantemente registrando la aceleración de la gravedad.


Gracias a esto, es posible usar las lecturas del acelerómetro para saber cuál
es el ángulo de inclinación respecto al eje X o eje Y.

Vease el ejemplo en 2D :

Realmente en tercera dimensión el sistema quedaría :


Dado que el ángulo se calcula a partir de la gravedad, no es posible calcular
el ángulo Z con esta fórmula ni con ninguna otra. Para hacerlo se necesita otro
componente: el magnetómetro, que es un tipo de brújula digital. El MPU-6050
no lleva, y por tanto nunca podrá calcular con precisión el ángulo Z. Sin
embargo, para la gran mayoría de aplicaciones sólo se necesitan los ejes X e
Y.

Con este acelerómetro se puede intentar medir la velocidad del sistema y la


posición del mismo. Sin embargo, se ha tener en cuenta que este tipo de
mediciones integradas respecto al tiempo acumulan errores de medición y de
ruido o interferencia lo que conlleva a un efecto de deriva denominado drift.

Por otro lado, gracias al giroscopio se puede medir también el desplazamiento


angular integrando la velocidad angular.

El error en las medidas

Hay dos problemas muy importantes cuando se planea hacer las mediciones:
el ruido y los errores.

El ruido son todas aquellas interferencias que afectan a los dispositivos


electrónicos. El acelerómetro es capaz de medir cualquier ángulo, sin
embargo, sus lecturas son ruidosas y tienen un cierto margen de error. Por si
esto fuera poco, el acelerómetro también detecta cualquier aceleración que no
sea la de la gravedad. Por tanto, si mueves la IMU sin girarla, al aplicar una
aceleración en otro eje, la IMU lo detectará como un cambio de rotación.
Por otra parte, tenemos el giroscopio. A diferencia del acelerómetro, da las
medidas con mucha precisión. Pero al realizar los cálculos del ángulo es
inevitable que se produzca un pequeño error, que con el tiempo va
acumulándose hasta que cualquier similitud con la realidad es pura
coincidencia. Esto en inglés se llama drift.

Para solucionar esto hay varias formas de combinar los datos del acelerómetro
y el giroscopio o usar ciertos filtros especificos para así obtener medidas
precisas. Con estos filtros se puede conseguir eliminar el ruido, el drift y si se
desea saber el ángulo de inclinación conseguir que el acelerómetro no cambie
de ángulo al detectar otra fuerza que no sea la gravedad.

Los filtros que pueden ser utilizados son:

El filtro kálman: utilizado en los aviones, cohetes y satélites geoestacionarios.


Es considerado uno de los mayores hallazgos del siglo pasado ya que es
capaz de calcular el error de cada medida a partir de las medidas anteriores,
eliminarlo y dar el valor real del ángulo. En cierto modo es un algoritmo que
aprende en cada iteración. Sin embargo tiene dos problemas:

1. Tiene un coste de procesamiento algo elevado


2. Es muy complicado de entender.

El filtro complementario: Es ideal para implementar con Arduino: fácil de


utilizar, bajo coste de procesamiento y con una precisión muy buena. El Filtro
Complementario es en realidad una unión de dos filtros diferentes: un High-
pass Filter para el giroscopio y un Low-pass Filter para el Acelerómetro. El
primero deja pasar únicamente los valores por encima de un cierto límite, al
contrario que el Low-pass filter, que sólo permite a los que están por debajo.
El sensor MPU-6050 está montado en la placa GY-521 La placa del sensor tiene
un condensador para filtrar la señal, un indicador LED de funcionamiento y un
regulador de voltaje que permite usar el sensor con 5 V

S-ar putea să vă placă și