Doymuş bir ivmeölçerden veri kurtarma


10

Bir ADXL345 ivmeölçer var ve başlatmak için bir hibrit roket monte. Ne yazık ki, aralığı varsayılan olarak +/- 2g'den +/- 8g'ye ayarlamayı unuttum (kalkış sırasında 6g bekleniyor).

+/- 2g aralığı için veri sayfası 10 bitlik bir çıktı çözünürlüğü listeler ve +/- 8g için 12 bitlik bir çözünürlük listeler.

Bunu, DATA_FORMATkayıt altında (0x31) yukarıda bağlı veri sayfasında fark ettim :

DATA_FORMAT kaydı, 0x37 kaydı yoluyla 0x32 Kaydı için veri sunumunu kontrol eder . Rollover'ı önlemek için +/- 16g aralığı dışındaki tüm veriler kırpılmalıdır. ( benimkini vurgula )

Bu ifadeye ve fonksiyonel blok diyagramına dayanarak (3 eksenli bir sensör "elektronik algılama" ve daha sonra bir ADC'ye bağlı), doğru verileri çözmek için bir yol olduğunu umuyorum. Ölçek faktörleri veri sayfasının 3. sayfasında listelenmiştir.

Bu verileri en az 1 veya 2 anlamlı rakama çözebilmemin bir yolu var mı? (Örneğin, 1.9414g'lık bir tespitim var - bu 6 civarında olmalı). Sensörün doygun olduğunu düşünmüyorum, sadece veri kayıtlarındaki sayı - ve ölçek faktörleri ve bazı yaratıcı bit kaymaları (çözünürlüğü değiştirirken 10 ila 12 bit arasında nasıl aldıkları tamamen açık değil), umarım yapabilirim verilerimden yararlı bir şey kurtar .


Daha uzun bir kelimenin alt 2g'sini görmek için verilerinizi 2g'lık bir ekran üzerinden devrilme olarak çizerseniz, sresult nasıl görünür. Artan g için bir dizi testere dişi görmeye atlayabilirsiniz. 0-2 = 0-2. 2-4 = 0-2. 4-6 = 0-2.
Russell McMahon

Roketi kurtardığımızda bir şans vereceğim. Bir bulutun arkasında kaybettiğimiz için
elimdeki

Yanıtlar:


7

"Register 0x31 — DATA_FORMAT" içine gerçekte hangi değeri depoladınız?

Bu kayıt defterinde hiçbir şey saklamadığınızı varsayacağım , bu yüzden hala sıfırlama değerinde. Başka bir deyişle, veri toplarken ( ADXL345 veri sayfasının Tablo 16'sından ve sayfa 17'sinden ):

  • Kayıt 0x31 — DATA_FORMAT == 00.
  • FULL_RES == 0. Böylece cihaz 10 bit modunda ve aralık bitleri maksimum g aralığı ve ölçek faktörünü belirler.
  • Yaslama Biti == 0. İşaret uzantısına sahip doğru yaslanmış mod.
  • Aralık Bitleri == 00. Yani + - 2g aralığı.

Yapacağım ilk şey, ivmeölçerden okunan orijinal 16 bit değerlerini kurtarmak. (yani, orijinal verileri dikkatsizce fırlattıysam ve kalan tek şey, bazı ofset çıkartılarak ve bazı yanlış ölçek faktörüyle çarpılarak hesaplanan "g" birimlerindeki sayılarsa, toplanan verileri bir elektronik tabloyu ekleyin ve aynı (yanlış) ölçek faktörüne bölün ve ardından orijinal değerlere yakın bir şeyi kurtarmaya çalışmak için bu ofseti ekleyin).

Sonra verileri grafiğe alırdım ve "doygunluk", "doğrusal" veya "devrilme" (daha önce açıklandığı gibi) gibi görünüp görünmediğini görüyorum.

Veri sayfası, sensör 2 g'dan daha yüksek bir hızlanma yaşadığında ne olacağına dair belirsiz bir şekilde belirsizdir.

teğetsel rant

Teknik yazarlar pasif sesle yazmakta ısrar ettiğinde bana ne kadar sinir bozduğunu söyledim mi? Yazar alıntıladığınız cümlede pasif sesi kullandığında,

"Fareyle üzerine gelmekten kaçınmak için ± 16 g aralığı hariç tüm veriler kırpılmalıdır." (sayfa 17)

Bu kırpmayı tam olarak kimin yapması gerektiğini söyleyemem.

Birçok kişi aktif sesi kullanmanızı önerir . Bu öneriyi takip ettiğimde, metnim genellikle kimin ne yaptığını daha net. İnsanların "daha profesyonel" veya "daha akademik" düşünme seslerine kandırıldıkları bir stili kullanmak yerine , anlaşılması daha kolay şeyler yazarken daha iyi değil mi?

otomatik kırpma

En iyi tahminim ivmeölçerin otomatik olarak bu kırpmayı yapmasıdır.

doygunluk : İvme rampasını makul değerlerden yukarı doğru görürseniz, gizemli bir şekilde bir platoya takılıp + 2g'de veya yakınında doyurulursa, ivmeölçer verileri sizin için "yararlı bir şekilde" kırpmıştır. Kırpmadan sonra, "üst" değer artık "+ 2g'ye çok yakın bir ivmeyi" göstermez, ancak şimdi "en az 2g ve muhtemelen çok daha fazla bir ivmeyi gösterir - söylemenin bir yolu yoktur".

10 bit sağa yaslanmış modda olduğu için, bu 16 bit değerleri normal 16 bit işaretli tamsayılar olarak yorumladığımda,

  • 1.992 g'dan fazla gösteren 0x01FF = +511. Muhtemelen çok, çok daha fazlası.
  • 510/256 g ~ = 1,992 g gösteren 0x01FE = +510
  • 510/256 g ~ = 1.988 g gösteren 0x01FD = +509
  • ...
  • 1/0006 g = 0,0039 g gösteren 0x0001 = +1
  • 0 g belirten 0x0000 = 0
  • -1 / 256 g = 0,0039'u gösteren 0xFFFF = -1
  • ...
  • -510/256 = -1.992 g gösteren 0xFE02 = -510
  • 0xFE01 = -511, -511/256 = -1,996 g gösterir
  • 0xFE00 = -512, daha olumsuz bir şey gösterir -1.996 g. Muhtemelen çok, çok daha olumsuz.

(Evet, bu sensör için 4 ondalık basamak hassasiyetinin olmadığını biliyorum). (-511 veya -510 gibi bazı noktalarda doymuş bazı cihazlar gördüm. Genellikle verilere bakabilir ve gerçek doygunluk noktasını bulabilirim).

Bu kırpılmış veri kümesinden bazı yararlı verileri kurtarabilirsiniz . Örneğin, ivmenin kaç milisaniyenin en az 1,5 g olduğunu ölçmek için kullanabilirsiniz. Ne yazık ki, bu tür veri kümesindeki yaylaları gördüğünüzde, maksimum ivmeyi veya toplam dürtü ölçmek imkansız - yapabileceğiniz en iyi şey "demek, maksimum hızlanmanın en az 2g ve muhtemelen daha fazla olduğunu biliyoruz. ", ve hesapla" iyi, toplam dürtü en azından (bir şey) newton * saniye " olduğunu hesaplıyoruz ".

alternatifleri

İvmeölçerin verilerden kırpma yapıp yapmadığını anlamak mümkün olmalıdır. ("Doygunluk", "doğrusal" ve "devrilme" yi rampa yukarı olarak tanımladım - bazı veri kümelerinde bunun yerine rampaya bakmak daha açık olabilir).

doğrusal : Eğer hızlanma rampasını makul değerlerden yukarı doğru görürseniz, daha yüksek değerlere (512'nin üzerindeki veya -512'den daha fazla olan değerler) kadar rampa etmeye devam ederseniz, şanssızsınız - ivmeölçer aslında herhangi bir kırpma yapmadı ve tüm aralık boyunca geçerli verileriniz var.

devrilme : Hızlanma rampasını makul değerlerle görürseniz ve +2 g'a ulaşmadan hemen önce, -2 g yakınında fiziksel olarak gerçekçi olmayan bir değere atlar ve daha sonra hızlanmaya devam eder - muhtemelen sıfıra, ardından tekrar + 2g'ye yaklaşın ve tekrar -2 g'ye geri atlayın - o zaman yuvarlanma sargısına sahipsiniz. Şanslıysanız, değerler son derece yumuşak bir şekilde değişir, bu da her bir devreyi tespit etmeyi ve bu değerleri gerçek g kuvvetini kurtarmak için "paketini açmayı" mümkün kılar .

ps: Açık Devreler: Roket Bilgisayar düzenlemek için çekinmeyin .


harika! Roketi kurtarır kazanmaz bunu deneyeceğim. Şu andan itibaren bulmak için bir Cessna kiralamak zorunda kaldık .. umarım şanslıyız.
Dang Khoa

Roketimizi kurtaramayacağız gibi görünüyor, bu yüzden bu tartışma biraz tartışmalı (yer istasyonundan sadece birkaç veri noktam var). Ama teşekkürler!
Dang Khoa

@davidcary, açık Devreler: Roket Bilgisayar bağlantısı kopuk
Mahendra Gunawardena

@MahendraGunawardena: Bana söylediğin için teşekkürler. Şimdi çalışıyor mu?
davidcary
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.