Recuperando dados de um acelerômetro saturado

10

Eu tenho um acelerômetro ADXL345 e o montei em um foguete híbrido para lançar. Infelizmente, esqueci de definir o intervalo do padrão de +/- 2g a +/- 8g (esperávamos 6g durante a decolagem).

Para o intervalo de +/- 2g, a folha de dados lista uma resolução de saída de 10 bits e para +/- 8g, uma resolução de 12 bits.

Notei isso na folha de dados vinculada acima, sob o DATA_FORMATregistro (0x31):

O registro DATA_FORMAT controla a apresentação dos dados no registro 0x32 através do registro 0x37. Todos os dados, exceto os da faixa +/- 16g, devem ser cortados para evitar rollover. ( ênfase minha )

Com base nessa declaração e no diagrama de blocos funcionais (um sensor de 3 eixos é conectado à "eletrônica dos sensores" e depois a um ADC), espero que haja uma maneira de resolver os dados corretos. Os fatores de escala estão listados na página 3 da folha de dados.

Existe uma maneira de resolver esses dados, pelo menos 1 ou 2 números significativos? (Por exemplo, eu tenho uma detecção de 1,9414g - isso deve ser em torno de 6). Eu não acho que o sensor tenha saturado, apenas o número nos registros de dados - e dados os fatores de escala e algumas mudanças criativas de bits (não está totalmente claro como eles ficam de 10 a 12 bits ao alterar a resolução), espero que eu possa recuperar algo útil dos meus dados.

Dang Khoa
fonte
Se você plota seus dados assumindo uma exibição de 2g com rolagem para ver os 2g inferiores de uma palavra mais longa, como fica o resultado. Para subir g, você pode ver uma série de dentes de serra. 0-2 = 0-2. 2-4 = 0-2. 4-6 = 0-2.
Russell McMahon
Vou tentar isso assim que recuperarmos o foguete. Os dados que eu tenho é insuficiente, uma vez que perdeu atrás de uma nuvem ..
Dang Khoa

Respostas:

7

Qual valor você realmente armazenou em "Register 0x31 — DATA_FORMAT"?

Suponho que você não armazenou nada nesse registro, portanto ele ainda está com seu valor de redefinição de 00. Em outras palavras, enquanto você coletava dados (da Tabela 16 e também da página 17 da folha de dados ADXL345 ):

  • Registre 0x31 - DATA_FORMAT == 00.
  • O FULL_RES == 0. Portanto, o dispositivo está no modo de 10 bits e os bits da faixa determinam a faixa g máxima e o fator de escala.
  • O Justify Bit == 0. Então, o modo justificado com extensão de sinal.
  • Os bits de intervalo == 00. Então, + - 2g de intervalo.

A primeira coisa que eu faria é recuperar os valores originais de 16 bits conforme lidos no acelerômetro. (ou seja, se eu descuidadamente descartar os dados originais, e tudo o que me resta são números em unidades de "g" que foram calculadas subtraindo algum deslocamento e multiplicado por algum fator de escala incorreto, copiaria os dados coletados em um planilha e divida pelo mesmo fator de escala (incorreto) e adicione esse deslocamento para tentar recuperar algo próximo aos valores originais).

Em seguida, eu representava graficamente os dados e veria se eles se parecem mais com "saturação", "linear" ou "rolagem" (conforme descrito abaixo).

A folha de dados é irritantemente vaga sobre o que acontece quando o sensor experimenta uma aceleração superior a 2 g.

discurso tangencial

Já lhe disse o quanto isso me incomoda quando escritores técnicos insistem em escrever com voz passiva? Quando o escritor usa a voz passiva na frase que você citou,

"Todos os dados, exceto os da faixa de ± 16 g, devem ser cortados para evitar rollover." (página 17)

Não sei dizer exatamente quem deve fazer esse recorte.

Muitas pessoas recomendam o uso da voz ativa . Quando sigo essas recomendações, meu texto geralmente é mais claro sobre quem faz o quê. Não é melhor quando escrevo coisas que são mais fáceis de entender , em vez de usar um estilo que as pessoas foram levadas a pensar que soa "mais profissional" ou "mais acadêmico"?

recorte automático

Meu melhor palpite é que o acelerômetro faz esse recorte automaticamente.

saturação : se você vê a aceleração aumentar através de valores plausíveis, misteriosamente fica preso em um platô, saturando com ou próximo de + 2g, então o acelerômetro "ajuda" cortou os dados para você. Após o recorte, o valor "top" não indica mais "uma aceleração muito próxima de + 2g", mas agora indica "uma aceleração de pelo menos 2g e, possivelmente, muito, muito mais - não há como saber".

Como estava no modo justificado à direita de 10 bits, quando interpreto esses valores de 16 bits como números inteiros assinados normais de 16 bits, espero ver valores que variam de

  • 0x01FF = +511, indicando mais de 1.992 g. Possivelmente muito, muito mais.
  • 0x01FE = +510, indicando 510/256 g ~ = 1.992 g
  • 0x01FD = +509, indicando 510/256 g ~ = 1.988 g
  • ...
  • 0x0001 = +1, indicando 1/256 g = 0,0039 g
  • 0x0000 = 0, indicando 0 g
  • 0xFFFF = -1, indicando -1/256 g = 0,0039
  • ...
  • 0xFE02 = -510, indicando -510/256 = -1,992 g
  • 0xFE01 = -511, indicando -511/256 = -1,996 g
  • 0xFE00 = -512, indicando algo mais negativo -1,996 g. Possivelmente longe, muito mais negativo.

(Sim, eu sei que 4 casas decimais de precisão não são justificadas para este sensor). (Eu já vi alguns dispositivos saturarem em algum outro ponto, como -511 ou -510. Geralmente, posso olhar para os dados e descobrir o ponto de saturação real).

Você pode recuperar alguns dados úteis desse conjunto de dados cortados. Você pode usá-lo para medir, por exemplo, quantos milissegundos a aceleração foi de pelo menos 1,5 g. Infelizmente, quando você vê os platôs nesse tipo de conjunto de dados, é impossível medir a aceleração máxima ou o impulso total - o melhor que você pode fazer é dizer: "bem, sabemos que a aceleração máxima é de pelo menos 2g e provavelmente mais "e calcule" bem, calculamos que o impulso total é de pelo menos (algo) newton * segundo ".

alternativas

Deveria ser possível descobrir se o acelerômetro recorta ou não os dados. (Descrevi "saturação", "linear" e "rolagem" em termos de aceleração - com alguns conjuntos de dados, pode ser mais claro observar a aceleração).

linear : se a aceleração aumentar com valores plausíveis, continue subindo para valores mais altos (valores acima de 512 ou mais negativos que -512), e você teve sorte - o acelerômetro não fez nenhum recorte e você tem dados válidos em todo o intervalo.

rolagem : se você observar a aceleração acelerar através de valores plausíveis e, pouco antes de chegar a +2 g, ela salta instantaneamente para um valor não fisicamente realista próximo a -2 ge depois continua a acelerar - possivelmente aumentando através de zero, aproximando-se de + 2g novamente e saltando para baixo perto de -2g novamente - então você terá uma rolagem. Se você tiver sorte, os valores mudam extremamente suavemente, tornando possível detectar cada rolagem e "desembrulhar" esses valores para recuperar a verdadeira força g.

ps: fique à vontade para editar Open Circuits: Rocket Computer .

davidcary
fonte
ótimo! Assim que recuperarmos o foguete, tentarei isso. A partir de agora, tivemos que fretar um Cessna para ajudar a encontrá-lo. Mas, com sorte, teremos sorte.
Dang Khoa
Parece que não conseguiremos recuperar nosso foguete, então essa discussão é um pouco discutível (só tenho alguns pontos de dados da estação terrestre). Mas obrigada!
Dang Khoa
@davidcary, os circuitos abertos: ligação Computer Rocket está quebrado
Mahendra Gunawardena
@MahendraGunawardena: Obrigado por me dizer. Está funcionando agora?
Davidcary