6 votos

¿Qué es la alineación derecha o izquierda de los datos en el CAD?

Estoy utilizando una placa de descubrimiento STM32F407 para el ADC y he encontrado que el DR o el registro de datos del ADC se puede configurar en la alineación izquierda o derecha. ¿Qué significa esto? Además, ¿cuáles son las ventajas/desventajas de cada alineación?

0 votos

No he encontrado eso en la hoja de datos, pero para mí indica que hay más espacios de bits en el registro de lo que está recibiendo de la A / D. Alineación derecha haría que el LSB de la A / D bit 0. La alineación izquierda indica lo mismo pero el MSB del resultado del A/D sería el MSB del registro. Los bits no se separarán y los valores no utilizados del registro se rellenarán con (leer hoja de datos). Piensa en un resultado de 12 bits de un registro A/D de 16 bits.

12voto

Neil Foley Puntos 1313

La alineación determina cómo terminará el binario en el registro de hardware. Supongamos que tienes un registro de 16 bits de resolución (o 2x8 bits) pero sólo 12 bits de resolución ADC. Su opción es entonces o bien obtener:

XXXX DDDD DDDD DDDD

o

DDDD DDDD DDDD XXXX

Donde "D" son los bits de datos y "X" son los bits de "no importa" (normalmente rellenados con ceros). La forma que requiera la menor cantidad de aritmética de bits para llegar al formato deseado suele ser la preferida. Una contendrá la necesidad de desplazamiento, la otra no.

Esto a su vez depende de endianess - el orden de los bytes. Si el ADC utiliza el mismo endianess que su CPU entonces usted elegiría el que mejor se adapte. En el caso de STM32 little endian que probablemente significa la segunda de las dos formas. Los ADCs integrados en los microcontroladores suelen tener el mismo endianamiento que la CPU. En el caso de los externos, podría tener tanto big como little endian.

4 votos

Además, si sólo necesita una resolución de 8 bits, y la salida se puede organizar como dddd dddd-dddd 0000 puede leer sólo el byte alto e ignorar la parte baja. Aunque tiene más sentido en un sistema de 8 bits como el AVR, que en un sistema de 32 bits.

0 votos

¿Y la precisión de los bits que se obtienen? He leído que esta es una respuesta para el mismo tema.

0 votos

@AdityaUbarhande ¿Qué quieres decir? Tendrás el tipo de precisión que hayas especificado/que garantice el ADC. Ni más ni menos.

1voto

Ronan Paixão Puntos 101

El STM32 es una CPU de 32 bits, pero su ADC tiene una resolución configurable de 6, 8, 10 o 12 bits.

Si echa un vistazo a la Manual de referencia del STM32F407 (RM0090) (este enlace es lo que he encontrado ahora, para Rev 19 de Feb 2021), sección 12.4, figuras 48-50, se ve esto:

RM0090 Rev19 figs 48-50

Con esto, puedes ver que se está accediendo a un registro de 16 bits, con el lugar para cada bit desde el menos significativo (D0) hasta el más significativo (D11 si estás usando la configuración de 12 bits). También puedes ver las implicaciones de la extensión de signo (SEXT), que suele ser una copia del bit más significativo después de aplicar el offset inyectado. También puedes ver el caso especial de alineación de 6 bits en la figura 50, que insinúa la utilidad de la alineación a la izquierda.

La alineación derecha es la más obvia: se obtienen los bits en bruto tal y como vienen del ADC, lo que da como resultado números de cero a formula . Si está capturando con un grupo inyectado puede restar un desplazamiento que puede hacer que el número sea negativo, de ahí los bits de extensión de signo.

La alineación a la izquierda es menos obvia, pero puede utilizarse como atajo cuando se trata de números de punto fijo. Si uno está considerando un "registro completo" como el número 1.0, entonces uno puede agregarlo fácilmente cuando se utiliza el ancho completo de los registros de 32 bits del STM32. Puedes sumar muchos de ellos y luego dividir/desplazar cuando el resultado final esté listo. Si se multiplican dos de ellos, se obtiene un valor de 32 bits, que se puede reescalar a 16 bits mediante un desplazamiento de 16 bits, que puede ser más rápido que, por ejemplo, un desplazamiento de 12 bits, porque sería sólo cuestión de mover media palabra. Luego, la mayor parte de esto se puede hacer también con una palabra de 12 bits alineada a la derecha, pero hay que gestionar los bits con mucho más cuidado. Tal vez la mayor ventaja provenga del hecho de que uno puede iniciar las operaciones matemáticas directamente, sin desplazar los datos primero. Dependiendo de la operación que estés haciendo, los bits añadidos a la derecha dan un resultado más fino, con menos instrucciones de máquina y menos riesgo de tener que gestionar tus resultados bit a bit*.

* En la parte del algoritmo, siempre hay que gestionarlo todo bit a bit. Sin embargo, hay menos posibilidades de error si "todas las operaciones son de 16 bits" que si tu posición es "esta operación es de 12 bits, ésta de 16 bits y ésta de 2*12-16=8 bits" y otras.

Ejemplo:

Estás aplicando un filtro IIR a la muestra de tu ADC (12 bits). Usted multiplica su muestra con un número, digamos que su coeficiente es de 16 bits y luego se acumula en la memoria para la siguiente iteración. La multiplicación resulta en un 12+16=28 bits. ¿Cómo se acumula? ¿Como 28-bits? ¿Como 12-bits para que sea la escala adecuada? ¿O un compromiso de 16-bits? En la primera opción, tienes que llevar la cuenta de que el número es realmente de 28-bits para cuando quieras utilizarlo en la siguiente operación. Si la siguiente operación es una multiplicación, tienes que escalarla antes de multiplicando. ¿Necesitas reducir la escala en 12 o 16 bits? ¿Recuerdas si el algoritmo está repartido por todo el código? ¿Y si utilizas el número en otras dos operaciones? ¿Mantendrás la pista del número de bits en cada una de ellas? Por otra parte, si lo escalas a 12 bits, pierdes todos los bits menos significativos. Si lo almacena como 16 bits, parece un compromiso, pero tiene que desplazarlo en 12 bits, lo que puede (o no, no conozco mucho la ISA) ser más lento.

Si te propones utilizar sólo 16 bits, multiplicas un número "virtual de 16 bits" por otro de 16 bits, luego lo desplazas 16 bits y sigues manteniendo 4 de los bits.

0 votos

¿Qué hay de la precisión de los bits que obtienes? Leí sobre eso en alguna otra respuesta para el mismo tema,

0 votos

@AdityaUbarhande, obtienes los mismos bits del ADC para una resolución dada, estén alineados a la derecha o a la izquierda. Entonces, al hacer cálculos, puedes (a veces) "ganar o perder" precisión, dependiendo de cómo manejes el escalado. Si descartas los bits menos significativos, pierdes precisión en un sentido análogo a la cuantización, pero sólo hasta el punto en que los bits son realmente significativos. A veces puedes "ganar" algunos bits mediante sobremuestreo u otros métodos (busca "Ganancia de procesamiento"), pero no siempre, así que añadir más bits del lado derecho también sólo ayuda hasta cierto punto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X