calcular inclinação usando acelerômetro?


16

Eu tenho um acelerômetro ADXL203 de dispositivos analógicos em uma placa de montagem e queria usá-lo para medir a inclinação de alguns equipamentos em uma frequência razoavelmente alta (20-30 Hz). estou ligando-o a um campbells cr3000 logger para fazer a detecção. Alguém tem instruções sobre como interpretar as saídas do sensor. obrigado


Obrigado a todos pelos comentários. Atenciosamente, TROY
troy jensen

Eu sei que tenho o mais alto, mas se você não gosta do meu, pelo menos aceita o de alguém.
Kortuk

Respostas:


12

Eu tenho várias coisas a dizer aqui, e algumas delas envolvem concordar com pingswept e outras com penjuin.

cr3000

A amostragem cr3000 em 16 bits e 100 Hz será um pouco lenta para você remover facilmente o ruído dos seus dados, mas com uma precisão significativamente maior, será utilizável. Duvido que você possa obter 13 ou 14 bits de precisão sem alguns algoritmos de filtragem muito bons. Os acelerômetros me ensinaram que a vibração é o diabo, fótons detonados.

Capacitor de saída

Você precisa fazer o que a folha de dados diz e a teoria dos sinais indica. Para citar a folha de dados:

A saída do ADXL103 / ADXL203 possui uma largura de banda típica de 2,5 kHz. O usuário deve filtrar o sinal neste momento para limitar erros de alias. A largura de banda analógica não deve exceder a metade da frequência de amostragem analógico-digital para minimizar o alias. A largura de banda analógica pode ser reduzida ainda mais para reduzir o ruído e melhorar a resolução.

Isso significa que você precisa escolher um capacitor para manter sua taxa abaixo de 50Hz. Se você colocá-lo acima disso, poderá obter o alias e o alias torna o ruído da vibração um demônio com o qual você assinou um acordo. Eles afirmam como calcular os níveis de ruído do dispositivo e, a uma largura de banda de 50Hz, um pico de pico a ruído de 0,006 * A gravidade nem será notada se você o tiver em um dispositivo com vibrações.

Interpretando Dados

Provavelmente é nisso que você mais se interessa e é relativamente fácil de fazer. Você precisa marcar um tempo em que o dispositivo está em ponto morto, quando é plano e você o mantém relativamente parado. Aguarde um ou dois segundos nesse momento e, em seguida, você pode tirar a mediana desses dados para determinar a tensão sem G. Em seguida, você pode usar isso como um ponto com o qual você comparou o dispositivo. Agora, a partir deste ponto, posso citar diretamente a folha de dados:

Quando o acelerômetro é perpendicular à gravidade, sua produção muda quase 17,5 mg por grau de inclinação .

Portanto, você pode simplesmente usar essa aproximação se não quiser inclinar muito, mas precisará usar a geometria se planeja inclinar na direção e em ângulos que não são extremamente pequenos.

Se você estiver indo para um tamanho maior, eles ainda terão as equações definidas como:

PASSO = ASIN (AX / 1 g)
ROLO = ASIN (AY / 1 g)

Tanto quanto eu posso dizer, seu dispositivo oferece uma mudança de 1V por 1G de aceleração colocada nele. Se você tiver realizado a fase de calibração, poderá fazer medições, subtrair o deslocamento e ter o número de Gs sendo experimentados.

Pare de ler aqui, a menos que você tenha problemas ou queira obter mais informações para melhorar a abordagem.

Eu adicionei um pouco mais decente de falar sobre outras abordagens e métodos para melhorar sua abordagem para sistemas ou sistemas em rápida mudança nos quais você vai programar o dispositivo fazendo as amostras.

Frequência de amostragem

Você precisa fazer uma amostragem significativamente mais rápida do que a velocidade com que o dispositivo altera as direções em que está acelerando, pois é necessário medir a orientação de 20 a 30 vezes por segundo. você precisa ser capaz de medir com rapidez suficiente para filtrar o ruído de vibração e a aceleração devido a outros efeitos, que eu achei bastante grandes ao trabalhar com um acelerômetro.

Acelerômetro de 3 eixos

Segundo, se você tiver um acelerômetro de três eixos, poderá facilmente reconhecer quando um eixo está perdendo parte da aceleração devido à gravidade (ou seja, quando o eixo z tem sua queda de magnitude em 2m / s ^ 2, você sabe que o ganho que você viu no outro eixo é a gravidade). Isso ainda será confuso, mas, em geral, haverá uma adição de aceleração que fornece a velocidade necessária para alterar sua orientação e, em seguida, uma alteração na aceleração devido à mudança de orientação, permitindo que você reconheça a orientação.

Problemas com 2 eixos

Isso será, como disse penjuin, quase impossível com um acelerômetro de 2 eixos e superficial na melhor das hipóteses se você tiver um sistema que possa ter de 20 a 30 orientações diferentes por segundo ou se precisar de uma medida exata de orientação em todas as vezes. Estou certo de que um aluno de mestrado poderia escrever uma tese bastante interessante sobre isso, ou um doutorado poderia escrever uma dissertação sobre como melhorar esse algoritmo.

Ruído de vibração

Para adicionar mais, se você puder colocar seu dispositivo em cima de algo que o manterá estaticamente bloqueado ao movimento do dispositivo, mas reduzirá a vibração, você obterá números muito melhores e não precisará de tanta filtragem de software. Algum preenchimento simples de espuma pode ser colocado entre o acelerômetro e o dispositivo, e se for digital, isso não aumentará o ruído elétrico e ajudará a absorver o ruído da vibração. Isso só deve ser feito se houver problemas com o ruído da vibração.

Acelerômetro digital

Eu sugeriria um acelerômetro digital ao qual você pode usar o SPI para se conectar. Os dados podem ser atingidos com uma taxa muito alta e você pode trabalhar em segundo plano, pois o seu SPI realiza o trabalho constante de carregar o próximo conjunto de valores. Você precisará de um bom microcontrolador se for feito digitalmente. Se você pode me dar melhores detalhes sobre o que você quer fazer, posso dar um feedback melhor. Se você deseja um aviso com base na detecção de inclinação, deve ser muito fácil fazer com todos os analógicos, mas se você deseja medir a posição e o ângulo do equipamento durante a operação, prepare-se para algum trabalho.

Informe-me se há algo que eu possa adicionar para tornar essa resposta mais clara ou aplicável ao que você estava procurando.


11
Apenas para constar, essa resposta é épica.
pingswept

11
Dr. Kortuk, Ph.D em acelerômetros! :-)
Jay Atkinson

Eu escrevi essa resposta porque fiquei pensando que tinha esquecido algo, então percebi que era um pouco longo e acrescentei o mais rápido possível, mas parece que as pessoas preferem a resposta longa.
Kortuk

No ruído da vibração, talvez eu tenha tido uma quantidade maior durante o tempo de operação devido à presença de um motor sem escova CC (BLDC), mas antes de ser ligado, ainda havia números significativos de vibração.
Kortuk

3

Eu escrevi e reescrevi esta resposta várias vezes com muitas idéias matemáticas loucas, mas sinceramente não acho que isso possa ser feito com precisão. Você pode fazer algumas matemáticas vetoriais, mas e se:

  • O objeto para de se mover
  • O objeto tem uma velocidade constante
  • O objeto bate em um solavanco / você bate nele
  • A força gerada subindo a inclinação está abaixo da resolução do eixo Z

Embora eu tenha certeza de que há alguma solução maluca para fazer esse tipo de coisa, não tenho certeza de que valeria a pena; acelerômetros simplesmente não foram projetados para esta tarefa (pelo menos que eu saiba). Para o que você está tentando alcançar, gostaria de sugerir uma abordagem giroscópico usando qualquer dos estes , todos os quais seria bastante resistente a todos os problemas acima.


Os acelerômetros são projetados para isso, na verdade, há uma seção inteira sobre como fazê-lo. Os acelerômetros são de custo muito baixo em muitos casos e, às vezes, o custo é um problema maior do que a funcionalidade perfeita.
Kortuk

3
Eu sempre tento explicar isso aos alunos, e vou adicioná-lo aqui, porque acho que é um conceito importante. Engenharia nem sempre é fazer da melhor maneira, é fazer de tal maneira que o usuário não possa diferenciar nada além do preço.
Kortuk

2
Há algo a ser dito para fazê-lo primeiro, e há muito a ser dito para fazê-lo melhor do que o último cara.
Kortuk

Eu concordo, mas depende de seus motivos (que troy não declarou); você quer que funcione bem ou quer aprender? Eles não são necessariamente mutuamente exclusivos, mas você não escreveria seu próprio compilador apenas para piscar um LED, a menos que desejasse aprender especificamente sobre o design do compilador.
penjuin

Sim, acrescento que para discutir sua resposta, em geral, se ele precisar dizer uma orientação diferente 30 vezes por segundo, haverá acelerações gigantescas, o que, por sua vez, significa que você precisa de muito mais de 100 amostras por segundo.
Kortuk

3

Se eu entender a folha de dados corretamente, a saída para cada eixo variará entre 1,5 V e 3,5 V conforme você inclina o eixo. Quando o dispositivo está vazio (ignorando o erro de alinhamento de pacote de ± 1 grau), as duas saídas devem apresentar 2,5 V.

Se você só precisar medir a inclinação em uma direção, poderá tirar o arco de desvio de 2,5 V para obter o ângulo em radianos e depois converter em graus. Se o dispositivo puder inclinar em qualquer direção, você poderá calcular os dois ângulos e, em seguida, calcular o ângulo composto a partir deles.

Para ser explícito: ângulo em torno de um eixo = (180 / π) * arcsin (Vout - 2.5)

Para obter uma boa resposta de frequência, você precisará de pequenos capacitores de saída, Cx e Cy. Da nota de rodapé 6 na p. 3 da folha de dados, parece que 0,02 uF forneceria uma largura de banda de 250 Hz, o que provavelmente é o ideal para a taxa de amostragem. Talvez você possa chegar a 0,1 uF, limitando a largura de banda a 50 Hz, mas seus sinais começarão a ficar atenuados.


Eu não acho que isso atenuará os sinais, a menos que você esteja se referindo às frequências mais altas, que é o ponto do limite. Ele precisa ir a 50Hz ou menos para combinar com seu dispositivo de amostragem de dados.
Kortuk

11
Ah, eu não tinha pensado nisso da perspectiva de aliasing. Eu ainda acho que as letras maiúsculas atenuam os sinais de alta frequência, mas isso é realmente uma coisa boa nesse caso. Então, sim, definir a largura de banda em torno de 50 Hz é bom.
pingswept

3

Estou adicionando uma segunda resposta, porque a minha outra é grande e você pode querer apenas simples.

A tampa do filtro precisa ter 0,10 uF ou maior para mantê-lo abaixo da taxa de aliasing (50Hz). Você precisa dar uma fase de calibração de alguns segundos com o dispositivo sentado nivelado com toda a aceleração da gravidade na direção Z, para determinar seu ponto G zero.

A tensão que você mede para o seu ponto G zero, provavelmente será diferente para a direção X e Y, não representa nada. Basta pegar a tensão que você obtiver e subtrair dela. Essa tensão, com o deslocamento subtraído, é o número de Gs que você está recebendo nessa direção.

Pegue o arcsin e você terá o seu ângulo nessa direção.

Isso ignora ruídos e outras acelerações. esteja preparado para que o NaN seja um resultado se você o inclinar totalmente e houver algum ruído.


0

Para obter qualquer ângulo, você precisa medir a aceleração da gravidade nas direções X e Y. subtraia a tensão média (2,5V) para que zero seja "sem aceleração".

Agora você pode encontrar o ângulo com arcsin (y / x). Mas isso é chato de usar, por causa da divisão e porque o sinal é ambíguo, então o que você realmente deseja que a função C atan2 (y, x). atan2 () acerta o sinal em todos os 360 graus.


Fora do tópico, como você não está usando um micro: se você está procurando atan2 () para usar em um microcontrolador, há um gerador atan2 () no meu site: http://vivara.net/cgi-bin/ cordic.cgi


Não é garantido 2,5 V para 0G. como ele provavelmente usará um computador para fazer as contas, duvido que o método que ele usa para fazer as contas seja importante.
Kortuk
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.