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_FORMAT
registro (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.
fonte
Respostas:
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 ):
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,
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
(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 .
fonte