Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
https://www.youtube.com/watch?v=c-h-cSNPfzE
¿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.
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
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:
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:
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-)
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.
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”
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
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)
El protocolo SPI
La librería Wire
El protocolo USB
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.
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
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)
Aceleración
Desplazamiento
Cambio Capacitivo
Voltaje
Realmente el la estructura que forma la masa posee varias aletas formando
entonces el sistema :
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.
̅ × ̅̅̅
𝐹̅𝑐 = −2. 𝑚. (𝜔 𝑣)
Donde:
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:
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
Velocidad angular
Fuerza de Coriolis
Deformación
Cambio capacitivo
Voltaje
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.
Vease el ejemplo en 2D :
Hay dos problemas muy importantes cuando se planea hacer las mediciones:
el ruido y los errores.
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.