Elegir un acelerómetro

2

Me gustaría recibir ayuda para elegir el acelerómetro adecuado para mi aplicación. He estado mirando muchos acelerómetros de varios fabricantes importantes y he realizado algunas pruebas en uno de los acelerómetros para obtener el resultado requerido. Básicamente, estoy buscando un acelerómetro que me dé una precisión de aproximadamente 0,5 grados en todo el ciclo de 360 grados. La sensibilidad de varios acelerómetros generalmente se da en 100 mV / g, etc., pero ¿podría alguien decirme cómo obtengo la precisión de esto? Tengo todas las hojas de datos de los distintos acelerómetros, pero no puedo entender cómo relaciono la precisión con la sensibilidad o busco algo más en la hoja de datos.

Idea principal: Sí, necesito usar un acelerómetro. Básicamente, tengo sensores de rotación para medir un ángulo a través de estos acelerómetros y tengo un sistema que usa cuatro de estos sensores juntos que requieren una precisión general del 1%. Teniendo eso en cuenta, estoy buscando lograr una precisión de 0.5 grados en cada sensor / acelerómetro para que la precisión general se mantenga por debajo del 1%.

El acelerómetro que he usado anteriormente es: MMA8451Q y la precisión que obtuve con Subió a aproximadamente 2,5 grados en ángulos de 90 y 270 grados. Tenía una sensibilidad de 4096 cuentas / g. Como esto no era lo suficientemente bueno, comencé a buscar otras opciones que me proporcionaran la precisión requerida. ¿Alguna sugerencia?

    
pregunta Neophile

2 respuestas

3

Ignora lo que dice stevenvh en su primer párrafo. Es la manera incorrecta de resolver el problema. Él está midiendo cos (ángulo), y dice que es básicamente inútil.

stevenvh ha arreglado su primer párrafo.

Para medir la inclinación con un acelerómetro, debe medir la aceleración horizontal , de modo que una inclinación positiva dé una lectura de aceleración positiva y una inclinación negativa dé una lectura de aceleración negativa. Ahora tu lectura es proporcional al pecado (ángulo).

TomandoestedispositivoADXLcomoejemplo.Cuandoestáacostadosobrelamesa,elejeZlee1g,mientrasqueXeYleen0g.Silogiras0,5ºalrededordelejeY,entonceslalecturadelejeZapenascambiará,perolalecturadelejeXcambiaránotablemente.

Supongamosquetenemosunacelerómetroconunasensibilidadde±1g,conunasalidade12bits,queofreceunrangode-2048..2047.

Entonces,a0º,medimos0gyobtenemosunasalidadeADCde0.A0.5ºmedimossen(0.5)g=0.0087g.LoquenosdaráunasalidadeADCde0.0087*2047=17.

Porlotanto,deberíapodermedirlosprimeros0.5ºdesdeelnivelconunacelerómetrode±1gyunADCde12bits,siemprequelocalibrecorrectamente.

Elproblemaesquesuprecisióndisminuyeamedidaquegirafueradenivel.Aquíesdondeentraunsegundoacelerómetro.Paralidiarconunarotacióncompletade360º,debeusardosacelerómetrosortogonales.(Porejemplo,undispositivode2ejes).

Uselaseñaldecadaunoparacalcularelángulo,luegotomeelpromedioponderadodeesosángulos,cadaunoponderadoporlaamplituddelaseñaldelotro.

floatAngle_radians(floatx,floaty)const{floatangle;if(fabs(x)>fabs(y)){angle=atan(y/x);if(x<0.0f)angle+=PI;}else{angle=PI*0.5f-(float)atan(x/y);if(y<0.0f)angle+=PI;}if(angle<0.0f)angle+=PI*2;if(angle>PI*2)angle-=PI*2;returnangle;}floatx_acc=ADC_read(x_axis_channel)//readxaxis(horizontal)floaty_acc=ADC_read(y_axis_channel)//readyaxis(vertical)x_acc*=1.0/2047;//scaletorange-1..+1y_acc*=1.0/2047;angle=angle_radians(x_acc,y_acc);

Agregado:comomencionanlosmarkrages,generalmentetambiénhayunafunciónllamadaatan2(),quehaceexactamenteesto:

angle=atan2(x_acc,y_acc);

Añadido:respondiendoalaspreguntasdeTheNewbie.

  

¿Entonces,básicamentealusarunacelerómetrodeejedoble/triplehaymejoresposibilidadesdeobtenerlaprecisióncorrectaconelpromedioyelfiltrado?

No,estoydiciendoqueparaobtenerunalecturaprecisaentodoelrangode360º,tienesparausardosejes.Unejeirádesdelaprecisiónmáximaen0ºhastalaprecisiónceroen90º.Elotroejeharálocontrario.

  

¿Podríamostrarmeunejemplodeuncálculodeprecisiónparalahojadedatosadjunta?

SuparteeselMMA8451Q,quecontieneunADCde14bits,estádisponibleenunaversión2g,queda4096cuentas/g.Estoeseldobledelaresolucióndemiejemploanterior.Sinembargo,laprecisiónnoestodoacercadelaresolución.TambiéndebetenerencuentaeldesplazamientoCero-g.

Cuando su dispositivo está plano sobre la mesa, un eje debe leer exactamente cero, pero no lo hará. Habrá un ligero desplazamiento. De acuerdo con la hoja de datos, esto puede ser de hasta ± 30 mg. ¡Esto es equivalente a un error de ángulo de 1.7º! Deberá tener en cuenta este error de compensación. Lo haces por calibración.

Tome un plato grueso de vidrio o granito pulido, y coloque un cojinete de bolas grande sobre él. Ajuste el ángulo del vidrio hasta que el rodamiento no ruede más. Esto es bastante nivel ahora.

Coloque su dispositivo plano sobre el vidrio y tome nota de la lectura de los sensores horizontales. Darán lecturas cercanas a cero. Ahora puede cargar estas lecturas en el dispositivo, y las restará de sus propias lecturas.

Unaúltimapreguntaeselruido.Laslecturasdelsensornoseránperfectamenteestables.Coneldispositivoestacionario,laslecturasprobablementefluctúenmuylevemente.Puedereducirelruidotomandovariaslecturasdesensores(16talvez)ypromediándolos.Porsupuesto,estoreducelatasadeactualizacióndesusensorreal.

Consulte puerta de Guy NXT para ver un buen artículo sobre la calibración del acelerómetro y el ruido del sensor.

    
respondido por el Rocketmagnet
5

La mayoría de los acelerómetros tienen al menos 2 ejes. Por debajo de 45 °, el coseno varía menos que el seno, por encima de 45 ° es al revés. Con una inclinación de 0 °, el sensor horizontal dará una lectura de 0 G, ese es el seno. La vertical te dará el coseno del ángulo de inclinación. Una rotación de 0.5 ° se puede leer mejor en el sensor horizontal. El peor de los casos de resolución es de 45 °. Sin (45 °) = 0.707, sin (45.5 °) = 0.713. Eso es una diferencia de 0.006. La resolución de 8 bits le da un LSB de 0.004, por lo que debería ser suficiente. La mayoría de los sensores digitales tienen una resolución mucho más alta. (Gracias, Rocketmagnet).

Eso es para acelerómetros con salida digital. Sin embargo, los dispositivos con salida analógica tienen, en principio, una resolución infinita. (Tenga en cuenta que los acelerómetros de salida PWM también son analógicos). Si bien lo digital tiene la ventaja de una lectura inequívoca (15 es 15 y nada más), el análogo no es tan claro. La precisión real que puede obtener depende de numerosos factores, como el ruido y la no linealidad. El ruido se puede solucionar promediando más de un par de cientos de muestras (si tiene tiempo para eso), la no linealidad mediante la calibración en varios ángulos.

editar
Rocketmagnet tiene un punto, y puedes explotarlo más. No necesita un segundo sensor para cuando su ángulo supere los 45 °. Como dije, la mayoría de los sensores de aceleración son de al menos 2 ejes, y un solo dispositivo típicamente tendrá un error de alineación de 0.01 °. No puede colocar dos partes separadas de manera precisa en una PCB. Ya que tiene dos sensores en un paquete, use ambos y haga un promedio de ellos.

  

"Oh, solo estoy usando el acelerómetro para la detección de la inclinación".

Solo pensando en alternativas. ¿Qué tal un codificador rotatorio absoluto ? Agregue un peso sobre él y móntelo para que pueda girar con la menor fricción posible. Un codificador de 10 bits le proporciona una resolución de 0.35 °.

    
respondido por el stevenvh

Lea otras preguntas en las etiquetas