สารบัญ:

RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry): 7 ขั้นตอน
RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry): 7 ขั้นตอน

วีดีโอ: RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry): 7 ขั้นตอน

วีดีโอ: RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry): 7 ขั้นตอน
วีดีโอ: Spektrum NX Series Tutorials - Telemetry 2024, กรกฎาคม
Anonim
RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry)
RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry)

ฉันสร้างเครื่องวัดระยะสูงนี้เพื่อให้นักบินรู้ว่าพวกมันอยู่ต่ำกว่าขีดจำกัด 400 ฟุตสำหรับเครื่องบิน RC ในสหรัฐอเมริกา เพื่อนของฉันเป็นกังวลเพราะเขาไม่สามารถพูดได้อย่างแน่นอนว่าเขาอยู่ต่ำกว่า 400 ฟุตเสมอ และต้องการการรับรองเพิ่มเติมว่าเซ็นเซอร์ที่มีข้อมูลการวัดและส่งข้อมูลทางไกลจะให้ ได้ คุณสามารถซื้อเซ็นเซอร์จาก Spektrum ได้ แต่คุณสามารถสร้างโปรเจ็กต์นี้ได้ในราคาต่ำกว่า $20 ด้วยกระดานฝ่าวงล้อม (ซึ่งมีราคาสูงเกินจริงไปแล้ว) หากคุณมีโปรแกรมเมอร์ J-link อยู่แล้ว คุณสามารถสร้างสิ่งนี้บนกระดานแบบกำหนดเองได้ในราคาไม่กี่ดอลลาร์ ไม่ต้องพูดถึงเมื่อคุณเข้าใจโปรโตคอล Xbus แล้ว คุณสามารถสร้างเซ็นเซอร์อื่นๆ ที่รองรับได้! แต่ฉันจะครอบคลุมเครื่องวัดระยะสูงในโครงการนี้ …

ส่วนรายการ:

  • ฉันใช้บอร์ดไมโครคอนโทรลเลอร์ Seeeduino XIAO สำหรับโปรเจ็กต์นี้เนื่องจากมีขนาดเล็ก ใช้โปรเซสเซอร์ M0 ที่มีพลังเหลือเฟือสำหรับโปรเจ็กต์นี้ มีทั้ง I2C และ SPI ที่พร้อมจะออกจากกล่อง และใช้ลอจิก 3.3v จึงไม่มีการเลื่อนระดับ ที่จำเป็น.

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

  • สำหรับการตรวจจับแรงดันอากาศ ฉันซื้อบอร์ดฝ่าวงล้อม BMP388 จาก Adafruit บอร์ดมีทั้ง I2C และ SPI แยกออก และสามารถทำงานได้ที่ลอจิก 3.3v หรือ 5v

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

  • Protoboard สำหรับเดินสายวงจร
  • หัวแร้ง/หัวแร้ง
  • ส่วนหัวของหมุดตัวผู้/ตัวเมีย เพื่อให้สามารถถอดเซ็นเซอร์/ไมโครคอนโทรลเลอร์ออกได้อย่างง่ายดาย
  • ปุ่มเล็ก. ฉันใช้สิ่งนี้เพื่อรีเซ็ตระดับความสูงเริ่มต้น
  • ตัวต้านทาน 10k สำหรับการดึงลงที่ปุ่ม
  • ขั้วต่อตัวเมีย 4 ขา JST-XH เพื่อเสียบเข้ากับพอร์ต telemetry ของเครื่องรับ Spektrum
  • โปรแกรมเมอร์ SEGGER J-Link EDU เพื่อแฟลช M0 โดยไม่ต้องใช้โปรแกรมโหลดบูต

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

  • บอร์ดฝ่าวงล้อม Adafruit SWD 10-pin

    www.adafruit.com/product/2743

เสบียง

  • ฉันยังพิมพ์ 3 มิติกล่องหุ้มขนาดเล็กสำหรับเครื่องวัดระยะสูงของฉันด้วย แต่ไม่จำเป็น
  • ออสซิลโลสโคป- หากคุณยังไม่มี ผมขอแนะนำตัวนี้:

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

ขั้นตอนที่ 1: เรียนรู้ Spektrum Telemetry Protocol

เรียนรู้ Spektrum Telemetry Protocol
เรียนรู้ Spektrum Telemetry Protocol
เรียนรู้ Spektrum Telemetry Protocol
เรียนรู้ Spektrum Telemetry Protocol
เรียนรู้ Spektrum Telemetry Protocol
เรียนรู้ Spektrum Telemetry Protocol

ส่วนใหญ่ทำเพื่อฉันโดย Raymond Domingo พวกเขาได้สร้างเครื่องวัดระยะสูงที่เข้ากันได้กับ Spektrum แล้ว ดังนั้นการติดตามซอร์สโค้ดนั้นจึงช่วยได้มาก แผ่นข้อมูลการส่งข้อมูลทางไกลของ Spektrum กรอกข้อมูลในช่องว่างที่เหลือ การวัดระดับข้อมูลจากเครื่องรับแสดงว่าฉันต้องการตรรกะ 3.3v

ผู้รับจะส่งที่อยู่อุปกรณ์ จากนั้นคาดว่าจะตอบกลับแบบ 16 ไบต์ แผ่นข้อมูลแสดงโครงสร้างของเซ็นเซอร์ต่างๆ ทั้งหมด แม้ว่าโครงสร้างจะมีความยาวไม่เกิน 16 ไบต์ แต่ตัวรับกลับต้องการ 16 ไบต์ในแต่ละครั้ง

เอกสารข้อมูล Spektrum:

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

โครงการของ Raymond Domingo:

www.aerobtec.com/download/altisSpektrumInte…

ขั้นตอนที่ 2: เลือกฮาร์ดแวร์

เลือกฮาร์ดแวร์
เลือกฮาร์ดแวร์
เลือกฮาร์ดแวร์
เลือกฮาร์ดแวร์
เลือกฮาร์ดแวร์
เลือกฮาร์ดแวร์

ฉันใช้บอร์ดฝ่าวงล้อม BMP388 จาก Adafruit เพื่อตรวจวัดแรงกด การฝ่าวงล้อมให้ I2C และ SPI breakouts และทำงานที่ลอจิก 3.3v หรือ 5v Adafruit ทำงานได้ดีมากกับกระดานฝ่าวงล้อม ดังนั้นฉันจึงซื้อมัน ฉันใช้บอร์ด DFRobot Gravity BMP388 แทนในงานสร้างของฉัน เนื่องจากบอร์ด Adafruit ของฉันถูกใช้งานไปแล้ว

เนื่องจากอุปกรณ์ I2C ของโฮสต์ใช้ลอจิก 3.3v ฉันจึงต้องการไมโครคอนโทรลเลอร์ 3.3v และฉันต้องการให้มันมีขนาดเล็ก ฉันกำลังจะใช้ Adafruit Trinket M0 แต่พวกมันค่อนข้างแพง และไม่มีหมุดหักมากนัก จากนั้นฉันก็พบบอร์ด Seeeduino XIAO เป็นบอร์ด M0 ที่มีทั้ง I2C และ SPI พร้อมใช้งาน พร้อมขั้วต่อ USB-C แถมยังเล็กมากอีกด้วย! โดยรวมแล้วฉันชอบบอร์ดนี้มาก

Spektrum ใช้ขั้วต่อตัวผู้ขนาด 4 พิน JST-XH บนเครื่องรับสำหรับพอร์ต "Xbus" ที่เราจะใช้งาน ฉันใช้ปลั๊กตัวเมีย JST-XH แบบ 4 พินบนเครื่องวัดระยะสูง และมันทำงานได้อย่างสมบูรณ์

ขั้นตอนที่ 3: เขียนซอฟต์แวร์

ฉันใช้ Arduino IDE เพื่อเขียนโค้ดทั้งหมด ฉันคัดลอกโปรโตคอล Spektrum telemetry ออกจากแผ่นข้อมูลและเพิ่มไปยังห้องสมุด Arduino ของฉัน เนื่องจาก Adafruit มีห้องสมุดที่ดีสำหรับการเกิดสิว ฉันจึงใช้ไลบรารี BMP3XX สำหรับเซ็นเซอร์ BMP388

ประเด็นหลักจากการออกแบบของฉันคือ:

  • ตั้งค่า I2C ให้ทำงานเหมือนอุปกรณ์ไคลเอนต์และตอบสนองต่อที่อยู่ของเครื่องวัดระยะสูง Spektrum (0x12)
  • อ่านบารอมิเตอร์ BMP388 ผ่าน SPI
  • บันทึกข้อมูลระดับความสูงในบัฟเฟอร์สองแบบที่แตกต่างกัน เพื่อให้คำขอ I2C จากเครื่องรับไม่ทำลายข้อมูล และสลับระหว่างบัฟเฟอร์ทั้งสองเมื่อดึงข้อมูล เพื่อให้แน่ใจว่าข้อมูลที่ส่งไปยังผู้รับจะสมบูรณ์เสมอ
  • ใช้ปุ่มเพื่อทำให้เครื่องวัดระยะสูงเป็นศูนย์

สำหรับรายละเอียดเพิ่มเติมและการวิเคราะห์โค้ด โปรดดูวิดีโอ

ขั้นตอนที่ 4: ต่อวงจร

ต่อวงจร
ต่อวงจร
ต่อวงจร
ต่อวงจร
ต่อวงจร
ต่อวงจร
ต่อวงจร
ต่อวงจร

ฉันใช้โปรโตบอร์ด แต่ถ้าคุณต้องการใช้เวลาในการออกแบบบอร์ดกัดแบบกำหนดเอง คุณสามารถทำให้วงจรสะอาดขึ้นมาก

ฉันเชื่อมต่อตัวเชื่อมต่อ JST-XH กับพิน I2C ของ XIAO เนื่องจากตัวรับส่งสัญญาณออก 5 โวลต์ไปยังบัส telemetry ค่าบวกจากบัสจึงไปที่พิน VCC ของ XIAO ด้วยวิธีนี้ตัวควบคุมออนบอร์ด 3.3v จะใช้ในการจ่ายไฟให้กับเซ็นเซอร์ BMP388

ขั้นตอนที่ 5: คอมไพล์โดยไม่มี Bootloader

คอมไพล์โดยไม่ต้องใช้ Bootloader
คอมไพล์โดยไม่ต้องใช้ Bootloader
คอมไพล์โดยไม่ต้องใช้ Bootloader
คอมไพล์โดยไม่ต้องใช้ Bootloader
  1. ค้นหาไฟล์ boards.txt ของคุณ (สำหรับบอร์ดใดก็ตามที่คุณใช้อยู่)

    ในกรณีของฉัน มันอยู่ที่นี่: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt

  2. คัดลอกบอร์ดของคุณและเปลี่ยนชื่อคีย์แรกเพื่อระบุเวอร์ชันที่ไม่มี bootloader ฉันเพิ่งเพิ่ม _nbl ในชื่อเดิม

    • เก่า: seeed_XIAO_m0
    • ใหม่: seeed_XIAO_m0_nbl
  3. เปลี่ยนค่า.name:

    • เก่า: seeed_XIAO_m0_nbl.name=Seeeduino XIAO
    • ใหม่: seeed_XIAO_m0_nbl.name=Seeeduino XIAO ไม่มี Bootloader
  4. แก้ไขลิงเกอร์ให้แฟลชโดยไม่มี bootloader โดยเปลี่ยนสคริปต์ builder ld:

    • เก่า: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with_bootloader.ld
    • ใหม่: seeed_XIAO_m0_nbl.build.ldscript=linker_scripts/gcc/flash_with out _bootloader.ld
  5. รีสตาร์ท Arduino IDE
  6. เลือกบอร์ด "Seeeduino XIAO No Bootloader" ใหม่จากเมนูบอร์ด
  7. เลือก "ส่งออกไบนารีที่คอมไพล์แล้ว"
  8. เมื่อคอมไพล์แล้ว ไฟล์.bin จะอยู่ในโฟลเดอร์โปรเจ็กต์ Arduino ของคุณ

ขั้นตอนที่ 6: แฟลช MCU ด้วย J-Link

แฟลช MCU พร้อม J-Link
แฟลช MCU พร้อม J-Link
แฟลช MCU พร้อม J-Link
แฟลช MCU พร้อม J-Link
แฟลช MCU พร้อม J-Link
แฟลช MCU พร้อม J-Link

Adafruit มีคำแนะนำที่ยอดเยี่ยมเกี่ยวกับการตั้งโปรแกรม bootloader ใหม่บนอุปกรณ์ M0/M4 ในกรณีของเรา เราต้องการกำจัดโปรแกรมโหลดบูต แต่มันทำงานในลักษณะเดียวกัน

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

เมื่อคุณทำเช่นนี้ คุณจะไม่สามารถอัปโหลดโค้ดผ่าน USB ได้ คุณสามารถทำตามคำแนะนำด้านบนเพื่อแฟลช bootloader กลับไปที่อุปกรณ์เพื่ออัปโหลดรหัสผ่าน USB อีกครั้งเหมือนที่คุณสามารถทำได้จากโรงงาน

คู่มือ Adafruit นั้นละเอียดมาก แต่นี่เป็นขั้นตอนพื้นฐาน:

  1. สายจัมเปอร์บัดกรีที่ด้านหลังของบอร์ด XIAO

    • คู่มือ Adafruit ไม่ได้บอกว่าพิน RST บนกระดานฝ่าวงล้อม 2x5 จำเป็นต้องเชื่อมต่อกับพินรีเซ็ตบนกระดาน Adafruit แต่สำหรับ XIAO ฉันต้องเชื่อมต่อกับแผ่นทั้งสี่ที่ด้านหลังของกระดาน
    • ต้องเชื่อมต่อพิน VREF กับพิน XIAO 3.3v สิ่งนี้จะบอกดีบักเกอร์ว่าลอจิกของอุปกรณ์คือ 3.3v หากไม่มี หากคุณเลือกตัวเลือกที่ไม่ถูกต้อง ไมโครคอนโทรลเลอร์อาจสร้างความเสียหายได้
  2. ต่อสายจัมเปอร์เข้ากับ J-Link
  3. เปิดบอร์ด XIAO ด้วยสาย USB
  4. เปิด Atmel สตูดิโอ
  5. เลือกเครื่องมือ การเขียนโปรแกรมอุปกรณ์
  6. เลือกบอร์ด M0 ของคุณ ในกรณีนี้ ATSAMD21G18A
  7. เลือก SWD
  8. อ่านการกำหนดค่าจากเป้าหมาย
  9. หากคุณกำลังใช้ EDU J-Link ให้ยอมรับข้อกำหนดการใช้งาน (หากคุณปฏิบัติตามข้อกำหนดการใช้งาน)
  10. ตรวจสอบว่าแรงดันไฟฟ้าที่อ่านได้ถูกต้องที่มุมบนขวา ถ้ามันไม่ใช่ 3.3v คุณอาจทำลายบอร์ดของคุณ!
  11. ล้างฟิวส์ป้องกันการบู๊ต (ตั้งค่าขนาด bootloader เป็น 0 ไบต์) จากนั้นเลือกโปรแกรม
  12. ในส่วนความทรงจำ ให้เลือกไฟล์.bin หรือ.hex ที่คอมไพล์แล้ว และเลือกโปรแกรม

การแก้ไขปัญหา:

เมื่อคุณอ่านการกำหนดค่าอุปกรณ์ หากคุณได้รับข้อผิดพลาดของแรงดันไฟฟ้านอกช่วง ให้ตรวจสอบให้แน่ใจว่าได้เสียบปลั๊ก MCU เข้ากับแหล่งจ่ายไฟ และพิน J-Link VREF เชื่อมต่อกับ 3.3 โวลต์

ขั้นตอนที่ 7: คอมไพล์ใหม่โดยไม่มี Crystal ภายนอก

คอมไพล์ใหม่โดยไม่ต้องใช้คริสตัลภายนอก
คอมไพล์ใหม่โดยไม่ต้องใช้คริสตัลภายนอก

บอร์ด XIAO มีคริสตัลภายนอกที่ใช้เวลานานในการเริ่มต้น เครื่องรับ Spektrum จะทำการค้นหาอุปกรณ์บนบัส telemetry 350 มิลลิวินาทีหลังจากเปิดเครื่อง ดังนั้นเราต้องบอกให้คอมไพเลอร์ใช้ออสซิลเลเตอร์ภายในแทน ซึ่งจะทำให้การเริ่มต้นทำงานเกือบจะในทันที

  1. ค้นหาไฟล์ board.txt ที่คุณแก้ไขก่อนหน้านี้ (ใช่ ฉันสามารถช่วยคุณขั้นตอนนี้ก่อนหน้านี้ได้ แต่นี่เป็นกระบวนการเรียนรู้สำหรับฉัน)
  2. เพิ่ม "-DCRYSTALLESS" ในสตริง seeed_XIAO_m0_nbl.build.extra_flags สิ่งนี้จะบอกคอมไพเลอร์ให้ใช้ออสซิลเลเตอร์ภายใน
  3. คอมไพล์รหัสอีกครั้ง
  4. แฟลช MCU อีกครั้ง
  5. ตรวจสอบว่าเวลาเริ่มต้นเร็วพอโดยใช้ออสซิลโลสโคป

ดังที่คุณเห็นจากภาพ ช่องสีเหลือง 1 คือแหล่งจ่ายไฟ ช่องสีน้ำเงิน 2 เป็นพินพร้อมบนไมโครคอนโทรลเลอร์ ประมาณ 10 มิลลิวินาทีหลังจากเปิดเครื่อง ไมโครคอนโทรลเลอร์จะดึงช่องที่สองขึ้นสูง ซึ่งแสดงว่าอยู่ในลูปการตั้งค่า เมื่อตั้งค่าเสร็จแล้ว MCU จะถูกเข้ารหัสเพื่อดึงพินให้ต่ำ แสดงว่าลูปหลักกำลังเริ่มต้น ขอบเขตแสดงให้เห็นว่าการตั้งค่าใช้เวลาประมาณ 3 มิลลิวินาที โดยรวมแล้วไมโครคอนโทรลเลอร์จะใช้เวลา 13 มิลลิวินาทีหลังจากเปิดเครื่องเพื่อให้พร้อมใช้งาน

แนะนำ: