Autor Tema: Lectura errada de Magnetómetro HMC5883L  (Leído 11299 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Lectura errada de Magnetómetro HMC5883L
« en: 02 de Abril de 2013, 18:49:15 »
Buenas, estoy intentando usar el compás digital HMC5883L:

Datasheet del Compás digitalhttp://www51.honeywell.com/aero/common/documents/myaerospacecatalog-documents/Defense_Brochures-documents/HMC5883L_3-Axis_Digital_Compass_IC.pdf

Con un dspic33fj32mc204, en cuanto a la programación no tengo problemas, ya que la comunicación I2C funciona bien.
Lee correctamente los registros de identificación del dispositivo.

El problema es la lectura de los datos del sensor mismo. Lo configure correctamente pero a pesar de eso me da valores errados. Lo coloco quieto y los datos dados son aleatorios.
Solde otro sensor pensando que tal vez esta fallando, pero se sigue comportando igual.

Me cambie de lugar para ver si alguna interferencia magnética causaba eso pero nada.
El sensor lo compre solo, le tuve que colocar los condensadores que pide 0.22uf y 4.7uf, ambos ceramicos SMD.

Lo malo que no encontre el de 4.7uf y le coloque uno through-hole de tantalio que encontre.(ya que por donde vivo no venden en SMD)
En el datasheet dice que se debe colocar uno con bajo ESR.

Mi pregunta es si tal caracteristica de ESR del capacitor puede afectar mucho a un dispositivo(en este caso al HMC5883L, en el datasheet esta el diagrama en donde se coloca el capacitor).

Gracias.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #1 en: 02 de Abril de 2013, 19:59:25 »



En el esquema tienes un tercer condensador de 100nf entre masa y positivo, ignorar los condensadores de desacoplo podría afectar el funcionamiento del chip.
Supongo que sabes que los condensadores de tántalo están polarizados.

De todas formas, a mi me da la sensación de que es más un problema de programación que de hardware, pero por si acaso yo pondría lo que dice el datasheet, ambos condensadores cerámicos, y no olvides el condensador de desacoplo.

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #2 en: 02 de Abril de 2013, 20:22:00 »
Si, disculpa me olvidé comentar lo del condensador de 0.1uf también lo puse(no le tome importancia en el comentario ya que siempre lo pongo a todos los dispositivos que tienen alimentación)
Y lo probé tb con arduino, con sus propias librerias, y de igual manera no funciona bien.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #3 en: 02 de Abril de 2013, 20:56:04 »



Comprueba la polaridad del condensador de tántalo, o ponlo cerámico como indica el datasheet, en el hardware ya no hay más que "rascar".




Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #4 en: 02 de Abril de 2013, 22:51:24 »
Hola!!
Yo estoy trabajando con el mismo integrado, sólo que compré una placa ya hecha en sparkfun:
https://www.sparkfun.com/products/10724
Acá está el esquemático de este circuito, tal vez te sirva: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/IMU/9DoF-Stick-v13.pdf

Yo me comunico con un PIC18F2550 y unas librerías que programé. Decime si te sirven y te las paso.
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #5 en: 03 de Abril de 2013, 18:14:40 »
Al principio había colocado la polaridad del condensador al revés, pero ya lo coloque como debería ser. Y nada.

Le coloque la misma configuración que esta en el esquema,y tampoco me funciona bien. De paso bonita tarjeta gera, si la hubiera visto al principio , la hubiera comprado.
Me compre integrados sin tarjeta para que me salga más barato, lo malo que el magnetómetro me esta pasando factura, ya que el acelerometro y gyroscopo si me funcionan bien.

Ya mande a comprar el HMC5883L con todo y tarjeta, ya que intente de todo y nada.

Saludos.



Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #6 en: 03 de Abril de 2013, 23:38:59 »
Al principio había colocado la polaridad del condensador al revés, pero ya lo coloque como debería ser. Y nada.
El mismo condensador? Tal vez se daño por ponerlo al revés. Proba con otro.
Otra cosa.. como lo soldaste?? Esos integrados son casi imposibles!! Yo creo que va por ahi la cosa.
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #7 en: 04 de Abril de 2013, 13:07:28 »
Mmmm, puedes tener razón que se haya dañado por eso, justo me queda uno nuevo.
Mas tarde lo sueldo y comento.

Y lo sueldo con aire caliente, 240 grados, aprox 20 segundos. es un NANBU 852D.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #8 en: 30 de Diciembre de 2013, 00:20:34 »
Hola! ya funciona ese sensor? ando tras los mismos pasos tuyos parece

Yo lo tengo semi funcionando, pero creo que neceito revisar la calibracion (soft y hard iron) porque los ejes no responden igual... a vos com ote fue?

Saludos!
-
Leonardo Garberoglio

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #9 en: 31 de Diciembre de 2013, 01:20:15 »
Como te comente el el otro post, opté por los sensores en plaquita.
la calibración es muy importante, funcionando solo el magnetómetro(sin ninguna corrección por otro sensor) tengo una desviación estándar de 1 grado.
Si lo bajas me pasas los tips de como lo hiciste. :mrgreen:

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #10 en: 31 de Diciembre de 2013, 07:56:37 »
Como te comente el el otro post, opté por los sensores en plaquita.
la calibración es muy importante, funcionando solo el magnetómetro(sin ninguna corrección por otro sensor) tengo una desviación estándar de 1 grado.
Si lo bajas me pasas los tips de como lo hiciste. :mrgreen:

jajaj, es el límite de resolucion de mi magnetometro.... no creo pueda bajarlo.... hoy no estoy ni cerca!!!

Esa presicion la obtenes con la calibracion hard iron y soft iron?
tenes algo de código de este sensor y algo sobre la caliracion? algun algoritmo?

Saludos!
-
Leonardo Garberoglio

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #11 en: 04 de Enero de 2014, 02:20:17 »
En internet puedes encontrar mucha información sobre calibración en 2D, pero poca en 3D. El mejor algoritmo de calibración que encontré, aunque no la óptima ya que se basan en que la distorsión por soft-iron es tan pequeño que es despreciable, fue en esta página:

http://www.aepwebmasters.it/index.php/tutorial/11-robotica-e-sensori/32-calibrazione-magnetometro

Al final te dan un código en matlab para que lo pruebes, se basan en la nota de aplicación AN3192 de STmicroelectronics.
Sigo investigando por mejorar la calibración del gyro, acel y magnetómetro, además de la estimación de orientación. si tienes algunos datos importantes sería de gran ayuda.

Saludos.
« Última modificación: 04 de Enero de 2014, 02:26:46 por PCCM »

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #12 en: 04 de Enero de 2014, 08:44:50 »
Con el magnetómetro estoy un poco trabado para hacer pruebas, porque tengo que sacar la IMU del protoboard y hacerle un PCB con el micro para que pueda moverlo libremente. En este momento, si logueo Mx y My y lo giro 360° obtengo cualquier cosa menos un circulo... pero es por la gran influencia de metales...

En cuanto a lo de la orientacion sigo trabajando en la DCM, pero o hay algo que no entiendo o hay algo mal en mi código.

te comento por si me podes ayudar.
me hice este script de matlab:

clear;
imu_interval=0.02;
dcmEst=[1 0 0; 0 1 0; 0 0 1];
gyro=[0 1 0] * imu_interval;
g=[1 -gyro(3) gyro(2); gyro(3) 1 -gyro(1); -gyro(2) gyro(1) 1];
graf(5000,2)=zeros;
for n = 1:5000
    dcmEst=dcmEst*g;
    error=-dot(dcmEst(1,:),dcmEst(2,:))*0.5;
    x_est=[0 0 0];
    y_est=[0 0 0];
    x_est = dcmEst(2, :) * error;
    y_est = dcmEst(1, :) * error;
    dcmEst(1,:) = dcmEst(1,:) + x_est;
    dcmEst(2,:) = dcmEst(2,:) + y_est;
    dcmEst(3,:) = cross(dcmEst(1,:), dcmEst(2,:));
    dcmEst(1,:)=dcmEst(1,:)/norm(dcmEst(1,:));
    dcmEst(2,:)=dcmEst(2,:)/norm(dcmEst(2,:));
    dcmEst(3,:)=dcmEst(3,:)/norm(dcmEst(3,:));
    graf(n,1)=n*imu_interval;
    graf(n,2)=dcmEst(1,1);
   
end
figure
plot(graf(:,1),graf(:,2));

Como ves puse que mi gyro me da solo señal en Y, 1°/seg. El tiempo de muestreo es de 20mseg. El lazo es por 10 seg. por lo que espero que al final de todo la matric DCM quede con un roll de 10°. Lo que hice fue almacenar la fila 1 columna 1 de la DCM

http://imageshack.us/a/img197/506/bj9i.jpg

El tema es que no entiendo porque con girar solo 10° ese item de la DCM varía muchas veces entre 1 - 0 - -1 0.... en teoria ese item de la DCM debería variar con el cos del ángulo puesto que solo roto en un eje...
http://upload.wikimedia.org/math/8/8/6/8867b40e7d7d69e2db9cba8a7b42d2db.png

Eso es lo que no comprendo, no se si eso es normal o si mi código esta mal....
puse una pregunta en DIY Drone: http://diydrones.com/xn/detail/705844:Comment:1517619
y en esta página: http://www.starlino.com/dcm_tutorial.html
Pero no estoy hallando respuestas.... sabes donde puedo consultar por este tema?

Saludos!
-
Leonardo Garberoglio

Desconectado PCCM

  • PIC16
  • ***
  • Mensajes: 109
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #13 en: 04 de Enero de 2014, 11:09:58 »
Por los metales a los más te debe salir una elipsoide, he visto videos donde los prueban en protoboard:


En cuanto a la DCM, no entiendo mucho tu algoritmo, como que es "g", que es el "error". si pudieras explicar la lógica que aplicas te podría intentar ayudar.
Ademas si el muestreo es de 0.02 segundos a 5000 análisis da 100 segundos.

Pero entiendo lo que quieres hacer, te he hecho un código, Si te sirve de ayuda:
Código: [Seleccionar]

clc
clear
t=0;
%%%velocidad de muestreo
H=0.02;
%%datos iniciales
banqueo_cuerpo=0;
cabeceo_cuerpo=0;
guinada_cuerpo=0;
%%%velocidad angular del giroscopo en grados por segundo(idealmente siempre constante)
banqueo_gyro=0;
cabeceo_gyro=1;%% 1 grado/s
guinada_gyro=0;
%%%%
%%conversion a radianes
banqueo_gyro=(banqueo_gyro*pi)/180;
cabeceo_gyro=(cabeceo_gyro*pi)/180;
guinada_gyro=(guinada_gyro*pi)/180;

for i=1:500
%%%integrando para hallar los angulos respecto al cuerpo
banqueo_cuerpo=banqueo_cuerpo+H*banqueo_gyro;
cabeceo_cuerpo=cabeceo_cuerpo+H*cabeceo_gyro;
guinada_cuerpo=guinada_cuerpo+H*guinada_gyro;
%%%componentes de la DCM
Ax=[1 0 0;0 cos(banqueo_cuerpo) sin(banqueo_cuerpo);0 -sin(banqueo_cuerpo) cos(banqueo_cuerpo)];
Ay=[cos(cabeceo_cuerpo) 0 -sin(cabeceo_cuerpo);0 1 0;sin(cabeceo_cuerpo) 0 cos(cabeceo_cuerpo)];
Az=[cos(guinada_cuerpo) sin(guinada_cuerpo) 0; -sin(guinada_cuerpo) cos(guinada_cuerpo) 0;0 0 1];
DCM=Ax.*Ay.*Az;
%%%%%%calculo del angulo girado en el eje de referencia de la tierra
Convertido=DCM*[banqueo_cuerpo;cabeceo_cuerpo;guinada_cuerpo];
%%angulos de radianes a sexagesimales
banqueoT=(Convertido(1,1)*180)/pi;
cabeceoT=(Convertido(2,1)*180)/pi;
guinadaT=(Convertido(3,1)*180)/pi;
subplot(1,3,1)
hold on
plot(t,banqueoT);
subplot(1,3,2)
hold on
plot(t,cabeceoT);
subplot(1,3,3)
hold on
plot(t,guinadaT);
t=t+H;%%%aumento de tiempo para graficar
end
subplot(1,3,1)
xlabel('tiempo(s)')
ylabel('angulo-banqueo(°)')
grid
subplot(1,3,2)
xlabel('tiempo(s)')
ylabel('angulo-cabeceo(°)')
grid
subplot(1,3,3)
xlabel('tiempo(s)')
ylabel('angulo-guinada(°)')
grid


Puedes variar banqueo_gyro, cabeceo_gyro y guinada_gyro dándole velocidades angular constantes del giroscopio.

Recuerda que el método de integración también es importante, si tienes tiempos grandes de muestreo tu integración debe ser más precisa.
Por ejemplo para este algoritmo si colocas la guiñada a una velocidad angular de 10 grados/s te dará datos errados, pero si aumentas la velocidad de muestreo a 1ms te dará el angulo correcto.
« Última modificación: 04 de Enero de 2014, 11:27:19 por PCCM »

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Lectura errada de Magnetómetro HMC5883L
« Respuesta #14 en: 04 de Enero de 2014, 11:22:06 »
Creo que encontre los errores. El primero es el que tu mencionas, estoy corriendo el bucle por 100seg. de todos modos con esa modificacion tampoco funcionaba, lo que hacía es hacer menos bucles, pero había varios de ellos.
El principal problema es que yo ponía los datos del gyro en deg/sec mientras que debería estar haciendo los cálculos en rad/sec.

Ahora estoy en el trabajo, despues más tarde voy a poner la explicacion del código y voy a ver mejor el código que me pasaste.

Tambien tengo que probar haber si en la realidad funciona... pero en la simulacion ya lo hace!!!!!

Saludos y seguimos en contacto
-
Leonardo Garberoglio