Usando el protocolo I2C en comunicación con varios picaxe

Este documento originalmente lo publiqué en el foro ucontrol el 30 de enero de 2011, ahora lo posteo aca en mi blog.

El protocolo I2c (Inter-Integrated Cirtuit) fue desarrollado por Phillips, y es una interfaz que consiste en un bus de 2 líneas (reloj (scl), data (sda)), la versatilidad de este protocolo es que se pueden aplicar unas 128 asignaciones (osea podríamos agregar 128 dispositivos a esas 2 líneas de transmisión). Se diseño este protocolo con la finalida de comunicar varios integrados en una placa de circuito impreso.

La mayoría de dispositivos I2C se diseñan de 8 pines por lo que hace que sea muy factible en un diseño de circuito impreso. Hay 4 datos de configuración que debemos tener claro:

  • Dirección de esclavo: cada dispositivo debe tener una dirección distinta, es de una longitud de 7 bits y un octavo que es reservado para indicar si es escritura o lectura
  • Velocidad de bus: La mínima es de 100khz y la máxima de 400khz y algunos dispositivos solo trabajan a 100 Khz
  • Tamaño de dirección de registo: todos los datos enviados del maestro al esclavo son ESCRITURA, los de esclavo a maestro son LECTURA. Cuando el maestro o el esclavo tranmite ellos hacen las líneas del bus 0.
  • Buffer de escritura de página: Las memorias eeprom tienen un tiempo de escritura de 5 a 10ms, para evitar un retraso de escritura poseen un buffer que puede aceptar más de un bit al mismo tiempo, asi que si recibe 90 bytes no se tardaria 90ms sino que reduciría aproximadamente a 10ms de escritura
 
Así que con esta información podemos empezar la comunicación y unas pequeñas practicas de I2C: estas prácticas fueron realizadas con 2 20X2, conectando sus pines sda y slc y agregandole 2 resistencias de 4.7k como pull up. El pic o el dispositivo i2c que sera conectado debe poseer una dirección ej: %10100000, algunos dispositivos deben ser revisada en su hoja de datos la dirección recomendada para i2c, los desarrolladores de picaxe nos recomienda que si no sabemos que dirección colocar podemos usar %10100000, asi que empezamos:

comando hi2csetup:

      hi2csetup i2cmaster, direcciondelesclavo, modo, largodedirrección

En modo pueden escoger la velocidad máxima o mínima (i2cslow 100khz o i2cfast 400khz), deben ver la hoja de datos del dispositivo para ver a que velocidad pueden trabajar.

Largo de dirección: depende del dispositivos que usemos, si utiliza 8 bits (byte) o 16 (word), por ejemplo las eeprom 24lCxxB se debe usar un i2cbyte pero para eepro mayores se utiliza i2cword.

ej:
     hi2csetup i2cmaster, %10100000, icsolw, i2cbyte

El siguiente ejercicio mandara dos datos binarios al pic esclavo.


hi2csetup i2cmaster, %10100010, i2cslow, i2cbyte
b0 = 1
main:
 if b0 = 1 then
  hi2cout 0,(b0)
  b0 = 2
  pause 150
 endif
 if b0 = 2 then
  hi2cout 0,(b0)
  b0 = 1
  pause 150
 endif
goto main

El siguiente código es el pic esclavo el cual con los datos binarios invertirá el estado de dos de sus pines. Cuando recibe un dato por i2c el esclavo se activará su bandera hi2cflag, luego de activarse debe de restablecerse la bandera con hi2cflag = 0. 

Para configurar el pic esclavo se utiliza la siguiente sentencia:

hi2csetup i2cslave, direccion ej:      hi2csetup i2cslave, %10100010

hi2csetup i2cslave, %10100010
main:
 if hi2cflag = 0 then main
 hi2cflag = 0
 get hi2clast,b1
 if b1 = 1  then
  toggle c.0
 end if
 if b1 = 2 then
  toggle c.1
 end if
goto main

Ahora vamos a LEER un dato del pic esclavo por medio del pic maestro.

Empezaremos con el código del pic esclavo, para esto debemos tener en cuenta que el protocolo i2c no utiliza como lectura las variables b1, b2, etc. si no utiliza lo que es el SCRATPAD (pueden verlo en la pagina 12 del segundo manual de picaxe) para el pic 20x2 tengo la opcion de usar de 0 a 127 bytes en el scratchpad, el scratchpad es una memoria temporal para almacenar datos como arreglos, el cual usa el comando PUT (grabar) Y LET (leer).

En este ejemplo el pic grabará el valor de una entrada analógica en b5 y lo colocará en el scratpad.


hi2csetup i2cslave, %10100010
main:
 readadc 3, b5
 put 2,b5
goto main

 

El pic maestro solo debe de agregarse el comando hi2cin, seguido por el bloque en donde esta el scratchpad que en este caso es 2 y almacenarlo en una variable para luego mandarlo a la pc.

 

hi2csetup i2cmaster, %10100010, i2cslow, i2cbyte
main:
      hi2cin 2,(b1)
      sertxd ("data: ",#b1,13,10)
goto main

 

NOTA: observa que ahora en estos ultimos dos ejemplos le cambié la dirección al picaxe esclavo. 


Ahora supongamos que tengo 3 picaxe conectados en i2c, dos son esclavos y uno maestro, si la direcciones de los esclavos son : %10100000 y % 10100010 y el maestro quiere leer en ambos una entrada analogica digital (usaremos para los esclavos el mismo codigo para el esclavo del ejemplo anterior solo hay que cambiar las direcciones para cada pic). El código del maestro sería: 



hi2csetup i2cmaster, %10100000, i2cslow, i2cbyte
main:
 hi2cin [%10100000],2,(b1)
 sertxd ("data: ",#b1,13,10)
        pause 15
 hi2cin [%10100010],2,(b3)
 sertxd ("data: ",#b31,13,10)
goto main

Como verás el uso del i2c es muy fácil e intuitivo, debes tener en cuenta cada uno de los aspectos mencionados, puedes probarlos cambiandoles la velocidad a fast, espero que esta pequeña guia de cortos ejercicios te aclare la mente en la implementación del protocolo I2c comunicando 2 o más picaxes en su bus.

Instalación de bancos de capacitores


En industria, siempre se encuentran máquinas eléctricas (motores). Estos motores son alimentados con un voltaje trifásico y son una carga inductiva a la red, esta carga produce una degradación en el factor de potencia de la red eléctrica.

Lo ideal es que el factor de potencia de la red eléctrica de la empresa se mantenga entre 0.9 a 0.99, cuando se van agregando motores a la red el factor de potencia puede disminuir, por ejemplo a 0.71. Esto hace que las máquinas eléctricas consuman más corriente, aumentando el recibo que emite la empresa distribuidora de electricidad y además esta empresa multa en su recibo por un  mal factor de potencia.

La solución para esto es el cálculo e instalación de un banco de capacitores, que compensa la carga inductiva agregando carga capacitiva y corrigiendo el factor de potencia. Nosotros decidimos hasta donde queremos hacer que llegue el factor de potencia (0.9, 0.95, etc.), haciendo la salvedad que mientras más queramos llegar a la unidad más caro es el capacitor necesario.

Debes tener en cuenta los siguientes cálculos:

  • ·         Análisis de factor de potencia
  • ·         Cálculo de los KVAR necesarios del capacitor
  • ·         Cálculo de la protecciones eléctricas para el banco
  • ·         Calibre de conductor calculado a una temperatura de 90°

Los capacitores

Cabe resaltar que estos capacitores son distintos a los capacitores que se utilizan en motores, podemos encontrar dos presentaciones de los capacitores: cilíndricos e integrado.

Los capacitores cilíndricos son muy similares a los de los motores pero más grandes, mientras que el capacitor integrado es una caja rectangular donde ya vienen los 3 capacitores necesarios conectados en configuración delta.



Además de esto, tienen otras características como: auto reparable, resistencia interna de descarga, etc.

Cajón metálico

Es una caja metálica que se aterriza a tierra y se ambienta para la colocación de dispositivos de control, ventilación y de los capacitores. Es importante para la ventilación colocar filtros de aire y un ventilador.


Alambrado

Se puede utilizar cable AWG THHN para control como mínimo calibre 16 y para los capacitores colocar un calibre capaz de soportar la corriente del capacitor. DE PREFERENCIA DEBE EVITARSE HACER EMPALMES.



Para más información puedes ver los enlaces:

http://www.conae.gob.mx/work/sites/CONAE/resources/LocalContent/2392/1/images/folleto-1_FP_INELAP.pdf

Reparando un máquina de impresión offset


Recientemente me tocó reparar una máquina de impresión offset, la máquina es una ABDICK 9890 y acá les comparto un poco de lo que pude ver de esta maquinaria y su reparación.



La máquina posee 2 contactores, uno principal y el otro se encarga de la polarización del motor de DC de 2 HP para directa o reversa. Posee fusibles reseteables por segmentos de la máquina y un fusible retardado con el tiempo para el motor.

La máquina presento la falla de que no arrancó, así que primero revise voltajes y empecé a seguir cables para luego revisar las dos tarjetas que trae.

La primera es una tarjeta de relevación y alimentación, únicamente trae un regulador, reles y fusibles para dos etapas distintas de la impresora (fuente de agua y lámpara de trabajo).



La segunda tarjeta, es la encargada de regular la velocidad del motor, ahí es donde empecé a revisar los componentes. Al nomas sacar la placa note que hubo un gran corto circuito (Yeah!) en la placa, dañando las pistas y las soldaduras.



Haciendo una pausa, este módulo de control digital es muy interesante y completo para el control de motores. El que está instalado en la máquina es el KBIC-218 (el cual esta descontinuado, otro problema claro). Halle la web y un manual muy completo del uso de otros modelos de KBIC para distintos motores DC y estos controles, regulan la velocidad de motores de hasta 2HP colocándoles un disipador extra.



Así que empecé a buscar los componentes que se dañaron, topándome con un reto un poco inusual. El arreglo de SCR que se utilizaron no pude determinar si estaban dañados o no, ya que no encontré información ni el equivalente (a69256), un rápido chequeo con el multímetro me los mostro en buen estado (adivinando los pines), pero si en el futuro se dañan, es posible que cueste demasiado hallar un reemplazo, aunque halle una web que los vende, no creo que sean los originales ha de ser algún equivalente. Además de eso había que remendar la placa donde la pista se perdió.

Revisando todos los dispositivos semiconductores, encontré la gran mayoría en buen estado, únicamente un zener y el LM324 en mal estado. Después de remplazar estos componentes quemados, decidí regresar a probar la placa con el motor instalado. El motor arrancó pero no respondía el control de velocidad, así que técnicamente se desbocaba el motor.

Volví a revisar la placa con el temor de que eran los scr, pero después de revisar los elementos pasivos alrededor del cortocircuito, encontré que un trimpot estaba dañado, solo media de un extremo al centro pero del otro extremo no había lectura, un trimpot de 2.5k ohm que entraba justo en el ajuste de velocidad, así que decidí reemplazarlo pero no encontré ninguno de 2.5k ohm solo de 2k así que ajuste un poco con una resistencia en serie para más o menos ajustar el balance y calibrar por donde estaba el antiguo trimpot. Y la máquina respondió correctamente con el control de velocidad.

Aunque el módulo KBIC-218 esta descontinuado, es una propuesta muy interesante para control de motores DC, se alimenta con el voltaje según el modelo, un ajuste de potenciómetro, un interruptor de arranque y sus salidas para armadura y rotor (si el motor no tiene para armadura, se puede dejar desconectados).