Por lo general, puedes descifrar conversiones como estas examinando las unidades. Si divide la lectura del ADC con unidades de cuentas por la sensibilidad con unidades de cuentas / g , entonces las unidades de cuentas en el numerador y el denominador de la división se cancelarán mutuamente, quedando con g , el resultado deseado.
Por lo tanto, debe dividir el recuento de ADC por la sensibilidad para convertir en aceleración, pero en este caso, también tiene que tener en cuenta el desplazamiento. Este acelerómetro mide tanto la aceleración positiva como la negativa, pero el recuento de ADC no está firmado. Esto es posible porque el valor de conteo de ADC de cero no corresponde a cero g, sino que corresponde a la aceleración más negativa. Y el punto medio del rango de valores de ADC corresponde a una aceleración cero.
Por lo tanto, tiene un rango de recuento de ADC de 0 a 1023 con una sensibilidad de 256 conteos / g. Y el rango de aceleración de -2 a +2 g (técnicamente +1.996 g) significa que tienes un desplazamiento de -2 g.
aceleración = (valor de recuento de ADC / sensibilidad) + desplazamiento
ejemplos:
- 256 cuentas / (256 cuentas / g) - 2 g = -1 g
- 1023 cuentas / (256 cuentas / g) - 2 g = +1.996 g
Desplazar a la derecha 8 bits es lo mismo que dividir por 256. Pero en este caso, debes tener cuidado de no perder demasiada resolución cuando cambias. Por ejemplo, si cambia la lectura de ADC de 10 bits a la derecha en 8 bits, solo le quedarán 2 bits correspondientes a solo 4 lecturas posibles (-2, -1, 0 y 1 g).
Multiplicar el valor de conteo por 1000 mg / g antes de desplazarse a la derecha por 8 bits guardará esa resolución y proporcionará la aceleración en unidades de mg en lugar de g.
Parece que el MMA8653 proporciona el valor ADC de 10 bits en los 10 bits más significativos del registro de 16 bits. En otras palabras, el valor de ADC se desplaza hacia la izquierda en 6 bits (o se multiplica por 64). También deberás tener en cuenta esto, tal vez cambiando a la derecha 6 antes de multiplicar por 1000. Y una vez que multipliques por 1000, el valor ya no entrará en 16 bits, por lo que tendrás que pasar a un valor de 32 bits. / p>