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.
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!