L3G4200D picos aleatórios


8

Pesquisei este fórum um pouco em relação ao giroscópio L3G4200D e não vi esse problema mencionado, mas vi outros falando sobre isso em outros fóruns. Estou vendo um grande valor estranho em minha saída quando o giroscópio está parado. Infelizmente, parece que ninguém foi capaz de responder por que isso acontece, então pensei em perguntar ao redor

Portanto, estou coletando dados do giroscópio usando o i2c a 400kHz (modo rápido), coletando os dados do giroscópio usando a leitura multibyte (seis bytes de cada vez). Amostragem a 100Hz (também tentou os 800Hz superiores), também tentou com a filtragem ativada e desativada em valores diferentes. Não estou usando o pino de interrupção, mas estou usando o atributo 'block data update' no GYRCTRLREG4, para que os dados não sejam emitidos até que o LSB e o MSB sejam lidos. 2000dps completo e não fez nada com o FIFO. Posso postar meus valores exatos de registro, se isso ajudar, mas a maioria de vocês não terá a folha de dados em mãos.

A imagem abaixo mostra o meu problema. Os dados emitidos são bons, calculados corretamente (que eu saiba) e o ruído geral é muito aceitável. Mas então eu notei esses 'blips' irritantes aparecendo aleatoriamente quando o dispositivo está parado. Se eu ficar parado por alguns segundos, receberei um desses picos, sempre igualando em torno de 250-255 (portanto ~ 18 quando convertido, usando '(output * 70) / 1000'). Os picos, como eu digo, são aleatórios, podem aparecer em qualquer plano (na imagem abaixo, você pode ver o primeiro pico no plano X, o segundo no Y), sempre em torno do mesmo valor e um, dois ou todos três podem acontecer ao mesmo tempo. O valor grande é apenas para uma única amostra e volta ao normal.

erro blips

Vi em outro thread em algum lugar que eu deveria estar usando a função de espera de dados em bloco no GYRCTRLREG4, como mencionei antes, mas nenhuma alteração. Limitei o problema a ser quando o MSB é zero ou mais alto, ou seja, um número positivo; quando o MSB e o LSB são combinados, estou obtendo esses números grandes. Por exemplo, pego os dois bytes necessários para o plano X, obtenho um -6 no LSB e um 0 no MSB, combinando-os, obtendo-me 250 e, em seguida, convertendo doações (250 * 70) / 1000 = 17,5 dps ( ou seja, grande demais para parado / incorreto). Na mesma amostra, os dois bytes para o plano Y são -3 LSB e -1 MSN, combinando-os com -3 e convertendo com -0,21 (isto é, esperado / correto).

Estive neste problema há dias, também estou vendo alguns desses picos aleatórios com meu magnetômetro, então estou pensando que sou eu lendo o dispositivo (via i2c) incorretamente?

Quaisquer sugestões ou coisas a tentar são realmente bem-vindas!


Um link para a folha de dados pode ser útil: L3G4200D datasheet
Tut

Você resolveu o seu problema ? Estou preso desde um dia em um problema semelhante usando um giroscópio diferente. Eu tenho picos únicos a cada segundo e até agora não consegui resolver isso.
John

Também estou tendo esse mesmo problema com o L3g4200d. Você já descobriu isso?
quer

Respostas:


1

Como você está observando um problema semelhante com seu magnetômetro, acho que você tem um problema no barramento I2C. Embora possa ser um problema de código por causa da operação intermitente, primeiro eu verificaria como o barramento está conectado. Algumas coisas para verificar / experimentar:

  • Se você não estiver usando resistores de pull-up externos, tente resistores de pull-up de 10K no SDA e SCL. O pull-up interno na maioria dos microcontroladores não será forte o suficiente.

  • Se possível, reduza o comprimento do barramento o máximo possível e tente mantê-lo afastado dos sinais de alta velocidade.

  • Se estiver usando uma placa de ensaio, tente manter as conexões o mais direto possível para evitar excesso de capacitância.

  • Se você estiver usando placas de protótipo que já incluem resistores de pull-up, eles podem terminar em paralelo e você pode ter um valor de resistência de pull-up muito baixo.

  • Se você puder organizar o acesso a um escopo, seria ideal para garantir que o relógio e as linhas de dados tenham uma aparência agradável e quadrada e não sejam muito inclinadas.

Se essas etapas não funcionarem, a Texas Instruments possui o relatório do aplicativo Troubleshooting I2C Bus Protocol , que detalha o cálculo dos resistores de pull-up e dos problemas com os quais você pode trabalhar com capacitância.


Obrigado pela sua resposta. Eu testei em uma placa de ensaio, com fios curtos e alterei o valor do resistor, de 10k para 1,5k (resolvi em 1,5k). Eu também tenho uma placa composta, com componentes de montagem em superfície e trilhas muito curtas. Vou verificar com um escopo mais tarde, mas ficaria surpreso se meus resistores ou faixas de pull-up fossem um problema. Vou tentar coletar alguns dados de qualquer eletrônica para eliminar problemas de EMI.
ritchie888

0

O que pode estar acontecendo é que uma nova amostra está sendo coletada entre a leitura do LSB e do MSB. Portanto, se MSB = 0 e LSB = -4, você deve obter 252 ou cerca de 1g. Se a próxima leitura for MSB = 1 e LSB = 2, você deverá obter 258, o que é razoável. O problema é que, para 1 amostra, apenas o MSB atualizou para 1 e o LSB ainda é -4, você obtém 508, cerca de 2g, o que pode ser esse problema.

BDU em CTRL_REG4 deve impedir isso. Talvez leia esse registro do sensor e garanta que a retenção de bloco esteja ativada?


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.