L3G4200D paku acak

8

Saya telah mencari di forum ini sedikit tentang giroskop L3G4200D, dan belum melihat masalah ini disebutkan, tetapi saya telah melihat orang lain membicarakannya di forum lain. Saya melihat nilai besar yang aneh dalam output saya ketika giroskop itu diam. Sayangnya tidak ada yang bisa menjawab mengapa ini terjadi, jadi saya pikir saya akan bertanya-tanya

Jadi, saya mengumpulkan data dari gyro menggunakan i2c pada 400kHz (mode cepat), mengumpulkan data gyroscope menggunakan multibyte read (enam byte setiap kali). Pengambilan sampel pada 100Hz (mencoba 800Hz teratas juga), juga mencoba dengan penyaringan aktif dan nonaktif pada nilai yang berbeda. Saya tidak menggunakan pin interupsi, tetapi saya menggunakan atribut 'blok data pembaruan' di GYRCTRLREG4, sehingga data tidak dikeluarkan sampai LSB dan MSB dibaca. 2000dps penuh dan tidak melakukan apa pun dengan FIFO. Saya dapat memposting nilai register saya yang tepat jika itu membantu, tetapi angka sebagian besar dari Anda tidak akan memiliki lembar data.

Gambar di bawah ini menunjukkan masalah saya. Data yang dihasilkan bagus, dihitung dengan benar (sepengetahuan saya) dan kebisingan umum sangat bisa diterima. Tapi kemudian saya perhatikan 'blip' yang mengganggu ini muncul secara acak ketika perangkatnya diam. Jika saya membiarkannya diam selama beberapa detik, saya akan mendapatkan salah satu paku ini, selalu sama dengan sekitar 250-255 (dengan demikian ~ 18 ketika dikonversi, menggunakan '(output * 70) / 1000'). Paku, seperti yang saya katakan, acak, dapat muncul di bidang apa saja (pada gambar di bawah ini Anda dapat melihat lonjakan pertama di bidang X, kedua di Y), selalu di sekitar nilai yang sama, dan satu, dua, atau semua ketiganya bisa terjadi pada saat bersamaan. Nilai besar hanya untuk satu sampel, lalu kembali normal.

kesalahan blips

Saya melihat di utas lain di suatu tempat bahwa saya harus menggunakan fungsi tunggu data blok di GYRCTRLREG4, seperti yang saya sebutkan sebelumnya, tetapi tidak ada perubahan. Saya telah mempersempit masalahnya menjadi ketika MSB nol atau lebih tinggi, yaitu angka positif, lalu ketika MSB dan LSB digabungkan, saya mendapatkan angka-angka besar ini. Misalnya, saya ambil dua byte yang diperlukan untuk bidang X, saya mendapatkan -6 di LSB, dan 0 di MSB, menggabungkannya memberi saya 250, kemudian mengonversikan memberi (250 * 70) / 1000 = 17,5 dps ( yaitu terlalu besar untuk stasioner / salah). Dalam sampel yang sama, dua byte untuk bidang Y adalah -3 LSB dan -1 MSN, menggabungkannya memberi -3, dan mengonversi memberi -0,21 (yaitu yang diharapkan / benar).

Sudah dalam masalah ini selama berhari-hari sekarang, saya juga melihat sedikit lonjakan acak ini dengan magnetometer saya, jadi saya pikir saya salah membaca perangkat (via i2c)?

Ada saran atau hal yang harus dicoba!

ritchie888
sumber
Tautan ke datasheet mungkin membantu: L3G4200D datasheet
Tut
Apakah Anda memecahkan masalah Anda ? Saya terjebak sejak hari pada masalah yang sama menggunakan gyro yang berbeda. Saya memiliki paku tunggal setiap detik dan sejauh ini tidak bisa menyelesaikannya.
John
Saya juga mengalami masalah yang sama dengan L3g4200d ini. Apakah Anda pernah mengetahuinya?
penjebak

Jawaban:

1

Karena Anda mengamati masalah yang sama dengan magnetometer Anda, dugaan saya adalah Anda memiliki masalah pada bus I2C. Walaupun bisa jadi masalah kode karena operasi yang terputus-putus dulu saya akan memeriksa bagaimana bus terhubung. Beberapa hal untuk diperiksa / dicoba:

  • Jika Anda tidak menggunakan resistor pull-up eksternal, coba resistor pull-up 10K pada SDA dan SCL. Tarik internal pada kebanyakan mikrokontroler tidak akan cukup kuat.

  • Jika mungkin, kurangi panjang bus sebanyak mungkin dan cobalah untuk menjaga jaraknya dari sinyal kecepatan tinggi.

  • Jika menggunakan papan tempat memotong roti cobalah untuk menjaga koneksi selurus mungkin untuk menghindari kelebihan kapasitansi.

  • Jika Anda menggunakan papan prototipe yang sudah termasuk resistor pull-up, mereka mungkin berakhir secara paralel dan Anda mungkin memiliki nilai resistensi pull-up yang terlalu rendah.

  • Jika Anda dapat mengatur akses ke ruang lingkup yang ideal untuk memastikan jam dan garis data terlihat bagus dan persegi dan tidak miring terlalu banyak.

Jika langkah-langkah tersebut tidak berhasil, Texas Instruments memiliki laporan aplikasi Troubleshooting I2C Bus Protocol yang menjelaskan secara lebih rinci tentang penghitungan resistor pull-up dan masalah yang dapat Anda hadapi dengan kapasitansi.

PeterJ
sumber
Terimakasih atas tanggapan Anda. Saya sudah menguji pada kedua papan tempat memotong roti, dengan kabel pendek dan mengubah nilai resistor, dari 10k menjadi 1,5k (saya menetap di 1,5k). Saya juga memiliki papan rias, dengan komponen yang dipasang di permukaan dan trek yang sangat pendek. Saya akan memeriksa dengan lingkup nanti, tetapi saya akan terkejut jika saya menarik resistor atau trek adalah masalah. Saya akan mencoba mengumpulkan beberapa data dari elektronik untuk menghilangkan masalah EMI.
ritchie888
0

Apa yang mungkin terjadi adalah bahwa sampel baru sedang diambil antara membaca LSB dan MSB. Jadi jika MSB = 0 dan LSB = -4 Anda harus mendapatkan 252, atau sekitar 1g. Jika bacaan berikutnya adalah MSB = 1 dan LSB = 2, Anda harus mendapatkan 258, yang masuk akal. Masalahnya adalah ketika untuk 1 sampel hanya MSB telah diperbarui ke 1 dan LSB masih -4 Anda mendapatkan 508, sekitar 2g, yang mungkin blip ini.

BDU di CTRL_REG4 seharusnya mencegah hal ini. Mungkin membaca register itu dari sensor dan memastikan blok ditahan diaktifkan?

DDub
sumber
0

coba dengan Filter Median dan paku ini akan memudar.

Silakan merujuk pertanyaan saya di sini di StackExchange dan kemudian membaca posting ini tentang masalah yang sama

UserK
sumber