Mostrando entradas con la etiqueta LabVIEW. Mostrar todas las entradas
Mostrando entradas con la etiqueta LabVIEW. Mostrar todas las entradas

miércoles, 7 de octubre de 2009

Uso de dispositivos I2C desde un PC con LabVIEW

Introducción
El I2C se ha convertido en un bus muy popular para la conexión de periféricos a microcontroladores, sobre todo en robótica doméstica por la aparición de numerosos sensores y actuadores que usan este tipo de comunicación.
Se trata de un bus donde un maestro (un PC ó microcontrolador principal) controla los accesos a los diferentes dispositivos esclavos que se pueden conectar al mismo bus. El maestro selecciona el dispositivo, la dirección del registro base dentro del dispositivo y el número de bytes que se desean escribir o leer. Los dispositivos esclavos deben poseer diferentes direcciones y se pueden conectar hasta 128 por bus.
El bus normalmente funciona con señales de 0 y 5V y la velocidad de trasferencia la marca el maestro, que puede tener una frecuencia entre 100 y 400 KHz.


Montaje chapucero del adaptador i2C y un SFR02

Para utilizar dispositivos I2C desde un PC necesitamos un adaptador de USB a I2C maestro. El que usa todo el mundo es el "Devantech USB I2C module". Es bastante económico ( veintitantos €) y fácil de usar, ya que implementa un puerto serie sobre USB (con drivers de FTDI) con un protocolo sencillo y además proporciona una salida de 5V que puede usarse para alimental ciertos dispositivos.
La conexión maestro-esclavos es muy fácil:

  • GND con GND
  • SCL con SCL
  • SDA con SDA
  • +5V ... depende
La entrada adicional que tiene el módulo adaptador sirve para otras cosas. Yo no la uso.
La salida de 5V se puede enviar por el bus, quedando entonces una conexión de cuatro líneas.
En la figura siguiente se muestra un ejemplo de conexionado, en la que el último dispositivo posee su propia alimentación y le basta con 3 hilos del bus (SCL-SDA-GND).


Ejemplo de uso:
Medida de distancias con un sensor sónar Devantech SFR02. La conexión es totalmente directa y no se ve el bus como tal.


Panel del programa de lectura

El programa de toma de medidas por sónar requiere de las inicialización del puerto serie con los parámetros adecuados para el adaptador concreto. En el bucle principal se realiza la lectura del registro lsb de distancia y se inicia una nueva medida mediante la escritura en el registro de comandos del SFR02.

Programa principal de lectura de sonar.


Librería de funciones I2C creada por El Hombre Mecatrónico para LabVIEW:
El programa anterior está basado en la siguiente librería de funciones para uso del bus I2C en labVIEW y que está incluida para descarga en el ejemplo anterior.




Función de Inicialización: I2CInit.vi



Función de Escritura: I2CWrite.vi



Función de Lectura: I2CRead.vi

Espero que este ejemplo le sirva a alguien.
Un saludo a todos los mecatrónicos.

martes, 8 de septiembre de 2009

Control de Servos con PC y LabVIEW

Para todos aquellos que queréis controlar vuestros servos de radiocontrol desde un PC, aquí cuento una de las maneras de hacerlo, aprovechando que el pisuerga pasa por Valladolid.



Existen servos de muchos tipos y tamaños.



Siempre se pueden reutilizar en plan cutre y hay multitud de elementos de montaje y acoplamiento para construir cosas interesantes.

Para montar un sistema de control de servos con PC necesitamos:
  • Un PC.
  • Una tarjeta de generación de señales PWM de servos.
  • Un adaptador para comunicar la tarjeta con el PC si es que ésta no viene ya con USB.
  • Servos.
  • Runtime de LabVIEW (o éntorno de desarrollo para modificar los ejemplo o crear vuestros propios programas).
  • Programas de control.




En nuestro caso estoy utilizando un netbook con Windows XP. Vale cualquiera con capacidad para ejecutar el sistema de desarrollo elegido.



La tarjeta de generación de PWM para servos que uso es una SSC32 de lynxmotion. La podéis encontrar en los brazos manipuladores de aficionados. Yo se la he quitado al mío y no sé si se la devolveré. Está muy bien para controlarla desde un PC porque tiene entrada RS232 y generación de trayectorias muy rudimentaria (límites de velocidad) que evita que los movimientos resultantes sean bruscos ( a la máxima velocidad de los servos) como pasa con otras tarjetas. También permite la obtención de las posiciones actuales de los servos, útil para establecer correspondencias en las lecturas de los sensores y las posiciones actuales si los movimientos son lentos. He necesitado un adaptador de rs232 a usb y la comunicación es a 19200 baudios.

Software:

Por claridad lo he hecho en dos partes: el programa principal (control.vi) y una función auxiliar que genera la cadena con la posición y la velocidad de un eje según el protocolo de la SSC32 (eje2ssc32.vi). Descargar aquí.




Panel de control de la aplicación básica. Es umy fácil reconfigurar y ampliar la interfaz de usuario según el número y tipo de servos.



El programa está bastante comentado.



Esta es una función auxiliar para simplificar el código del programa principal.

En el siguiente video se pueden ver la aplicación y algunos tipos de servos en funcionamiento.



Suerte y comentarios.