Brujula Digital CMPS03

Hola a todos,

Es la primera vez que escribo en este foro, no se si me podreis ayudar, empezare explicando mi proyecto. Espero ser claro y conciso.

Parto de un robot mobil ya construido: Robotino® de Festo. Este robot tiene entradas analógicas y digitales, con el Procesador PC 104, compatible con MOPSlcdVE, 300 MHz, y sistema operativo Linux con kernel en tiempo real, SDRAM 128 MB.

Ya se controlarlo con lenguaje de alto nivel, los motores,etc y comunicarme via wifi o cable LAN.

El proyecto que quiero realizar es añadirle un sensor, en concreto un compass o brújula digital (CMPS03) lo que solo tiene dos buses de comunicacion PWM y bus I2C.

El problema recae en que no se como comunicar el sensor con el robot, es decir, se que necesita 5V el sensor, que necesita resistencias de pull up, pero no se si es compatible las entradas analogias/digitales con esta brujula. ¿Como puedo conectarlas, y si no puedo, existe alguna brujula digital compatible con mi PC?

Espero que me podais echar un cable, nunca mejor dicho, aunque se que es complicado.

Un saludo,

Marc

P.D. No estaba seguro en que sección postear el tema, si esta en la incorrecta decirmelo y lo posteo en otro lado, gracias
 
ni una sola respuesta aun... bueno, yo sigo haciendo cosas por mi cuenta, de todas maneras era dificil que alguien tuviera semejante capacidad, es un problema complicado... es un PFC de Ingenieria Técnica Industrial de ELectrónica, es lo único que me falta de la carrera, pero estas cosas no te las enseñan :D

en fin, igualmente he visto un par de temas que me han sido utiles y otros que simplemente interesantes.

un saludo!:)
 
No conozco mucho del tema, pero tu robot, tiene accesible algún puerto USB? Si ese es el caso, podrías usar usar algo como esto: http://www.superrobotica.com/S310425.htm y luego conectarte directamente con su bus I2C.
No obstante usando el PWM (en ese caso es cuando hay colocarle las resistencias al bus I2C), y si disponés de cualquier entrada lógica en el robot podrías determinar el ancho del pulso y con eso saber su orientación.
 
Mira esta brújula: HMC6352, posee interfaz I2C, o esta otra en 3 ejes: HMC6343, también I2C

Edit:
Por aquí se comentó algo sobre el tema

https://www.forosdeelectronica.com/posts/68266/
 
Última edición:
muchas gracias por vuestras aportaciones, ya tenia un par de cosas que habia encontrado, pero estudiaré estas propuestas, son bastante interesantes, sobretodo la del USB I2C, brutal, no habia pensado que por ahi si que puedo igual pillarlo, porque si que tengo un puerto USB libre :)

muchas gracias de nuevo. En cuanto tenga cosas claras y haga las pruebas os lo comento, ok?
si puedo haré algun video demostrativo y lo colgare :D

un saludo!
 
En realidad, es que soy brutalmente bruto :)
Solo usé el buscador, vi las características de tu robot, vi que tenía entrada USB (pero no sabía si estaba libre), y luego era fácil solo había que convertir el I2C a USB, eso sabía que se podía hacer :D
Un saludo y espero que muestres fotos de como se mueve tu robot.
 
No conozco mucho del tema, pero tu robot, tiene accesible algún puerto USB? Si ese es el caso, podrías usar usar algo como esto: http://www.superrobotica.com/S310425.htm y luego conectarte directamente con su bus I2C.
No obstante usando el PWM (en ese caso es cuando hay colocarle las resistencias al bus I2C), y si disponés de cualquier entrada lógica en el robot podrías determinar el ancho del pulso y con eso saber su orientación.

Creo que la primera opción es mejor, ya que con el mismo convertidor USB-I²C ya le da 5V necesarios (mi robot aporta 24V, aunque con un divisor de tension es facil pero mas sencillo con el USB) y ademas ya tiene las resitencias de pull-up necesarias para el bus I²C, solo estoy esperando a que me llegue y en cuanto lo tenga, a programar e instalarlo!!!
 
Espero pronto ver algún video de este pichón de "robotech" :)

Resulta que no podia utilizar el puerto USB, asi que quedaba descartado lo del convertidor I²C-USB, una lastima, porque aunque podria haber instalado el driver del controlador de ese USB, no tengo tiempo suficiente para configurar el pc para que lea ese USB que no sea la camara que ya implementaron los de FESTO, asi que ahora estoy con el señal PWM, pero me estoy haciendo un gran lio con todo esto, porque vereis, os explico el señal "PWM" que me sale del PIC18F232 de la brujula CMPS03:

Prorciona un pulso modulado en anchura que representa el ángulo de la posición del módulo respecto al norte magnético. La anchura de este pulso varia de 1ms(0º el Norte) hasta 36.99 ms (359,9º). Tiene por tanto una resolución de 100µs/º con un offset de +1ms. Cada vez que finaliza una medida, esta señal pasa a nivel "0" durante unos 65ms antes de iniciarse una nueva. El ciclo total tinaun una duración mínima de 66ms (cuando es el Norte, es decir una posición de 0º) y máxima de 102ms (para una posición de 359,9º, casi giro completo de la brújula). El pulso lo general un Timer interno de 16 bits que evoluciona cada 1µs, pero no es recomendable realizar medidas con intervalos inferiores a los 10µs (0,1º). La imagen que os he puesto muestra un diagrama de tiempos en el que se han representado 4 medidas o ciclos diferentes.





El ciclo 1 tiene una duración total de 66ms con una anchura de W de 1ms (offset 0º). Representa el Norte. El ciclo 2 con una duración de 75ms, tiene una anchura de 10ms (menos el offset son 9ms) es decir, representa 90º o el Este magnético. El ciclo 3 son 84 ms y una anchura de 19ms, es decir el Sur magnético o 180º. FInalmente el ciclo 4 representa 270º o Oeste.

Se que mediante filtros RC (pasa bajas) puedo conseguir pasar de esa señal cuadrada del PWM, a una analógica de 0 a 5V, para poder hacer una relación directa entre voltage-orientación, es decir que 0º sean 0V, indicando el Norte, si me salen 2,5V aprox serian 180º, es decir, el Sur magnético,etc. Pero la cuestión que yo planteo es, para saber que Resistencia y que condensador necesito, necesito la fórmula: RC=1/(2*Π*FPWM)

Pero, ¿Cual es mi Frecuencia del PWM si el período varia según la orientación??? es que no es un PWM normal, verdad? estoy hecho un lío.
 
es que no es un PWM normal, verdad?
Yep, tal cual, lo normal es frecuencia fija y variar el ancho del pulso, la señal que te entrega es de frecuencia y ancho variable.
Sea como sea, podes tomar la frecuencia máxima que va a haber y la tensión no va a ser exactamente proporcional (además va a tener un poco de ripple), pero como tenés un soft de control, podes corregir la variación que haya.
 
Revisa bien la placa PC104 puede que tenga una salida I2C o SMBUS, si no tienes puedes utilizar alguna salida/entrada para realizar una emulacion de puerto I2c en linux, seguramente ya esta hecho para puerto paralelo LPT.

http://pyi2c.sourceforge.net/

Si la placa tiene convertidor analogico-digital, solo con un simple filtro pasabajos en la salida PWM tambien funcionaria.
 
Atrás
Arriba