İçindekiler:

RC Düzlem Altimetre (Spektrum Telemetri ile uyumlu): 7 Adım
RC Düzlem Altimetre (Spektrum Telemetri ile uyumlu): 7 Adım

Video: RC Düzlem Altimetre (Spektrum Telemetri ile uyumlu): 7 Adım

Video: RC Düzlem Altimetre (Spektrum Telemetri ile uyumlu): 7 Adım
Video: Spektrum Vario meter/altimeter setup 2024, Kasım
Anonim
RC Düzlem Altimetre (Spektrum Telemetri ile uyumlu)
RC Düzlem Altimetre (Spektrum Telemetri ile uyumlu)

Bu altimetreyi, pilotun ABD'deki RC uçaklarda 400 feet sınırının altında olduğunu bilmesi için yaptım. Arkadaşım, her zaman 400 fitin altında olduğunu kesin olarak söyleyemediği için endişeliydi ve telemetri verisine sahip bir sensörün sağlayacağı ek güvenceyi istedi. Evet, Spektrum'dan bir sensör satın alabilirsiniz, ancak bu projeyi 20 dolardan daha düşük bir fiyata (zaten fiyatları şişirilmiş olan) kesme tahtalarıyla inşa edebilirsiniz. Zaten J-link programlayıcınız varsa, bunu birkaç dolara özel bir panoda oluşturabilirsiniz. Xbus protokolünü anladıktan sonra, desteklenen diğer sensörlerden herhangi birini yapabilirsiniz! Ama bu projede sadece bir altimetreyi işleyeceğim…

Parça listesi:

  • Bu proje için küçük olduğu için Seeeduino XIAO mikrodenetleyici kartı kullandım, bu proje için bol miktarda güce sahip bir M0 işlemci kullanıyor, kutudan çıkmaya hazır hem I2C hem de SPI'ye sahip ve 3.3v mantığı kullanıyor, böylece seviye kayması yok gereklidir.

    https://www.seeedstudio.com/Seeeduino-XIAO-Arduino…

  • Hava basıncını algılamak için Adafruit'ten bir BMP388 devre kartı satın aldım. Kartın hem I2C hem de SPI'si bozuldu ve 3.3v veya 5v mantığında çalışabilir.

    https://www.adafruit.com/product/3966

  • Devreyi kablolamak için protoboard
  • Lehim/havya
  • Erkek/dişi pin başlıkları, böylece sensörü/mikrodenetleyiciyi kolayca ayırabilirim.
  • Küçük düğme. Bunu başlangıç irtifasını sıfırlamak için kullanıyorum.
  • Düğmede aşağı çekme için 10k direnç.
  • Spektrum alıcısının telemetri portuna takmak için JST-XH 4 pinli dişi konnektör
  • SEGGER J-Link EDU programcısı, M0'ı bir önyükleyici olmadan flaş eder.

    https://www.adafruit.com/product/3571

  • Adafruit SWD 10 pinli devre kartı

    www.adafruit.com/product/2743

Gereçler

  • Ayrıca altimetrem için küçük bir mahfazayı 3D olarak yazdırdım, ancak buna gerek yok.
  • Osiloskop - Eğer yoksa, bunu şiddetle tavsiye ederim:

    https://store.digilentinc.com/analog-discovery-2-1…

Adım 1: Spektrum Telemetri Protokolünü Öğrenin

Spektrum Telemetri Protokolünü Öğrenin
Spektrum Telemetri Protokolünü Öğrenin
Spektrum Telemetri Protokolünü Öğrenin
Spektrum Telemetri Protokolünü Öğrenin
Spektrum Telemetri Protokolünü Öğrenin
Spektrum Telemetri Protokolünü Öğrenin

Bu çoğunlukla benim için Raymond Domingo tarafından yapıldı. Spektrum ile uyumlu bir altimetre yapmışlardı, bu yüzden bu kaynak kodunu takip etmek gerçekten yardımcı oldu. Spektrum telemetri veri sayfası boşlukların geri kalanını doldurdu. Alıcıdan veri seviyelerini ölçmek, 3.3v mantığına ihtiyacım olacağını gösterdi.

Alıcı aygıt adresini gönderir ve ardından 16 baytlık bir yanıt bekler. Veri sayfası, tüm çeşitli sensörlerin yapılarını gösterir. Yapı 16 bayt uzunluğunda olmasa bile, alıcı her seferinde 16 bayt geri bekler.

Spektrum Veri Sayfası:

www.spektrumrc.com/ProdInfo/Files/SPM_Tele…

Raymond Domingo'nun Projesi:

www.aerobtec.com/download/altisSpektrumInte…

2. Adım: Donanımı Seçin

Donanım Seç
Donanım Seç
Donanım Seç
Donanım Seç
Donanım Seç
Donanım Seç

Basınç algılama için Adafruit'ten bir BMP388 koparma kartı kullandım. Ara, I2C ve SPI kesintileri sağlar ve 3.3v veya 5v mantığında çalışır. Adafruit, koparma tahtalarıyla her zaman harika bir iş çıkarıyor, ben de satın aldım. Adafruit tahtam zaten kullanımda olduğundan, yapımda bunun yerine bir DFRobot Gravity BMP388 kartı kullandım.

Ana bilgisayar I2C cihazının 3.3v mantığı kullandığı göz önüne alındığında, 3.3v mikro denetleyiciye ihtiyacım vardı ve küçük olmasını istedim. Bir Adafruit Biblo M0 kullanacaktım ama nispeten pahalılar ve çok fazla kırık pinleri yok. Sonra Seeeduino XIAO kartını buldum. USB-C konektörlü, hem I2C hem de SPI ile kullanıma hazır bir M0 kartıdır. Ayrıca, gerçekten çok küçük! Genel olarak bu tahtayı gerçekten beğendim (yavaş başlangıç kristali beni sonsuza kadar anlamama rağmen).

Spektrum, bağlanacağımız "Xbus" bağlantı noktası için alıcıda JST-XH boyutunda 4 pimli erkek konektör kullanır. Altimetrede 4 pinli JST-XH dişi fiş kullandım ve mükemmel çalıştı.

3. Adım: Yazılım Yazın

Tüm kodu yazmak için Arduino IDE'yi kullandım. Spektrum telemetri protokolünü veri sayfalarından kopyaladım ve Arduino kütüphaneme ekledim. Adafruit'in araları için her zaman güzel kütüphaneleri olduğundan, BMP388 kütüphanesini BMP388 sensörü için kullandım.

Tasarımımdan ana çıkarımlar:

  • I2C'yi bir istemci cihaz gibi davranacak ve Spektrum altimetre adresine (0x12) yanıt verecek şekilde ayarlayın.
  • SPI aracılığıyla BMP388 barometresini okuyun.
  • Alıcıdan gelen bir I2C talebinin verileri bozmaması için yükseklik verilerini iki farklı arabelleğe kaydedin ve verileri alırken iki arabellek arasında geçiş yapın. Bu, alıcıya gönderilen verilerin her zaman eksiksiz olmasını sağlar.
  • Altimetreyi sıfırlamak için bir düğme kullanır.

Daha fazla ayrıntı ve kod analizi için videoyu izleyin.

Adım 4: Devreyi Kablolayın

Devreyi Kablolayın
Devreyi Kablolayın
Devreyi Kablolayın
Devreyi Kablolayın
Devreyi Kablolayın
Devreyi Kablolayın
Devreyi Kablolayın
Devreyi Kablolayın

Ben protoboard kullandım, ancak özel bir freze kartı tasarlamak için zaman ayırmak istiyorsanız devreyi çok daha temiz hale getirebilirsiniz.

JST-XH konektörünü XIAO'nun I2C pinlerine bağladım. Alıcı telemetri veriyoluna 5 volt verdiğinden, veri yolundan gelen pozitif XIAO'nun VCC pinine gitti. Bu şekilde, BMP388 sensörüne güç sağlamak için yerleşik 3.3v regülatör kullanılır.

Adım 5: Önyükleyici Olmadan Derleyin

Bootloader Olmadan Derleme
Bootloader Olmadan Derleme
Önyükleyici Olmadan Derleme
Önyükleyici Olmadan Derleme
  1. Boards.txt dosyanızı bulun (kullandığınız pano için).

    Benim durumumda, burada bulunuyordu: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt

  2. Panonuzu kopyalayın ve önyükleyicisiz bir sürüm belirtmek için ilk anahtarı yeniden adlandırın. Orijinal isme _nbl ekledim.

    • Eski: seeed_XIAO_m0
    • Yeni: seeed_XIAO_m0_nbl
  3. .name değerini değiştirin:

    • Eski: seeed_XIAO_m0_nbl.name=Seeeduino XIAO
    • Yeni: seeed_XIAO_m0_nbl.name=Seeeduino XIAO Önyükleyici Yok
  4. Oluşturucu ld komut dosyasını değiştirerek bağlayıcıyı önyükleyici olmadan yanıp sönecek şekilde değiştirin:

    • Eski: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
    • Yeni: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with out _bootloader.ld
  5. Arduino IDE'yi yeniden başlatın.
  6. Panolar menüsünden yeni "Seeeduino XIAO No Bootloader" panosunu seçin.
  7. "Derlenmiş İkili Dosyayı Dışa Aktar" seçeneğini seçin
  8. Derlendikten sonra.bin dosyası Arduino proje klasörünüzde olacaktır.

Adım 6: J-Link ile Flaş MCU

J-Link ile Flash MCU
J-Link ile Flash MCU
J-Link ile Flash MCU
J-Link ile Flash MCU
J-Link ile Flash MCU
J-Link ile Flash MCU

Adafruit, bir M0/M4 cihazında bir önyükleyiciyi yeniden programlama konusunda harika bir kılavuza sahiptir. Bizim durumumuzda, önyükleyiciden kurtulmak istiyoruz, ancak aynı şekilde çalışıyor.

learn.adafruit.com/how-to-program-samd-boo…

Bunu yaptığınızda, USB üzerinden kod yükleyemezsiniz. Fabrikadan yapabildiğiniz gibi tekrar USB üzerinden kod yüklemek için önyükleyiciyi cihaza geri yüklemek için yukarıdaki kılavuzu takip edebilirsiniz.

Adafruit rehberi çok kapsamlıdır, ancak bunlar temel adımlardır:

  1. XIAO kartının arkasına lehim atlama telleri.

    • Adafruit rehberi, 2x5 devre kartındaki RST pininin Adafruit kartlarındaki sıfırlama pinine bağlanması gerektiğini söylemedi. Ancak XIAO için anakartın arkasındaki dört pedin hepsine de bağlanmam gerekiyordu.
    • VREF pininin XIAO 3.3v pinine bağlanması gerekir. Bu, hata ayıklayıcıya cihaz mantığının 3.3v olduğunu söyler. Onsuz, yanlış seçeneği seçerseniz mikrodenetleyiciye zarar verebilirsiniz.
  2. Jumper kablolarını J-Link'e bağlayın.
  3. XIAO kartını bir USB kablosuyla açın.
  4. Atmel Studio'yu açın.
  5. Araçlar Cihaz Programlama Seçin
  6. M0 kartınızı seçin. Bu durumda, ATSAMD21G18A
  7. SWD'yi seçin.
  8. Hedeften yapılandırmayı okuyun.
  9. EDU J-Link'i kullanıyorsanız, kullanım koşullarını kabul edin (kullanım koşullarına uyuyorsanız).
  10. Sağ üst köşede okunan voltajın doğru olduğunu doğrulayın. 3.3v değilse, tahtanızı kırabilirsiniz!
  11. Önyükleme koruma sigortasını temizleyin (önyükleyici boyutunu 0 bayta ayarlayın) ve ardından programı seçin.
  12. Anılar bölümünde derlenmiş.bin veya.hex dosyanızı seçin ve programı seçin.

Sorun giderme:

Cihaz konfigürasyonunu okurken voltaj aralık dışı hatası alırsanız MCU'nun güç kaynağına takılı olduğundan ve J-Link VREF pininin 3,3 volta bağlı olduğundan emin olun

7. Adım: Harici Kristal Olmadan Yeniden Derleyin

Harici Kristal Olmadan Yeniden Derleyin
Harici Kristal Olmadan Yeniden Derleyin

XIAO kartında, başlaması uzun zaman alan harici bir kristal bulunur. Spektrum alıcısı, güç açıldıktan 350 milisaniye sonra telemetri veriyolunda bir cihaz keşfi yapar, bu nedenle derleyiciye dahili osilatörü kullanmasını söylemeliyiz, bu da başlatmayı neredeyse anında yapacaktır.

  1. Daha önce değiştirdiğiniz boards.txt dosyasını bulun (evet, bu adımı daha önce kaydedebilirdim ama bu benim için bir öğrenme süreciydi)
  2. seeed_XIAO_m0_nbl.build.extra_flags dizesine "-DCRYSTALLESS" ekleyin. Bu, derleyiciye dahili osilatörü kullanmasını söyleyecektir.
  3. Kodu yeniden derleyin.
  4. MCU'yu yeniden flaşlayın.
  5. Bir osiloskop kullanarak başlatma süresinin yeterince hızlı olduğunu doğrulayın.

Resimden de görebileceğiniz gibi sarı kanal 1 güç kaynağıdır. Cyan kanal 2, mikrodenetleyici üzerindeki hazır pindir. Güç açıldıktan yaklaşık 10 milisaniye sonra, ikinci kanal, kurulum döngüsünde olduğunu gösteren mikro denetleyici tarafından yükseğe çekilir. Kurulum tamamlandıktan sonra, MCU, ana döngünün başladığını gösteren pimi aşağı çekmek için kodlanmıştır. Kapsam, kurulumun yaklaşık 3 milisaniye sürdüğünü gösterir. Genel olarak, mikrodenetleyicinin çalışmaya hazır olması, açıldıktan sonra 13 milisaniye sürer.

Önerilen: