สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: เรียนรู้ Spektrum Telemetry Protocol
- ขั้นตอนที่ 2: เลือกฮาร์ดแวร์
- ขั้นตอนที่ 3: เขียนซอฟต์แวร์
- ขั้นตอนที่ 4: ต่อวงจร
- ขั้นตอนที่ 5: คอมไพล์โดยไม่มี Bootloader
- ขั้นตอนที่ 6: แฟลช MCU ด้วย J-Link
- ขั้นตอนที่ 7: คอมไพล์ใหม่โดยไม่มี Crystal ภายนอก
วีดีโอ: RC Plane Altimeter (เข้ากันได้กับ Spektrum Telemetry): 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
ฉันสร้างเครื่องวัดระยะสูงนี้เพื่อให้นักบินรู้ว่าพวกมันอยู่ต่ำกว่าขีดจำกัด 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
ส่วนใหญ่ทำเพื่อฉันโดย 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
-
ค้นหาไฟล์ boards.txt ของคุณ (สำหรับบอร์ดใดก็ตามที่คุณใช้อยู่)
ในกรณีของฉัน มันอยู่ที่นี่: C:\Users\AppData\Local\Arduino15\packages\Seeeduino\hardware\samd\1.7.7\boards.txt
-
คัดลอกบอร์ดของคุณและเปลี่ยนชื่อคีย์แรกเพื่อระบุเวอร์ชันที่ไม่มี bootloader ฉันเพิ่งเพิ่ม _nbl ในชื่อเดิม
- เก่า: seeed_XIAO_m0
- ใหม่: seeed_XIAO_m0_nbl
-
เปลี่ยนค่า.name:
- เก่า: seeed_XIAO_m0_nbl.name=Seeeduino XIAO
- ใหม่: seeed_XIAO_m0_nbl.name=Seeeduino XIAO ไม่มี Bootloader
-
แก้ไขลิงเกอร์ให้แฟลชโดยไม่มี 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
- รีสตาร์ท Arduino IDE
- เลือกบอร์ด "Seeeduino XIAO No Bootloader" ใหม่จากเมนูบอร์ด
- เลือก "ส่งออกไบนารีที่คอมไพล์แล้ว"
- เมื่อคอมไพล์แล้ว ไฟล์.bin จะอยู่ในโฟลเดอร์โปรเจ็กต์ Arduino ของคุณ
ขั้นตอนที่ 6: แฟลช MCU ด้วย J-Link
Adafruit มีคำแนะนำที่ยอดเยี่ยมเกี่ยวกับการตั้งโปรแกรม bootloader ใหม่บนอุปกรณ์ M0/M4 ในกรณีของเรา เราต้องการกำจัดโปรแกรมโหลดบูต แต่มันทำงานในลักษณะเดียวกัน
learn.adafruit.com/how-to-program-samd-boo…
เมื่อคุณทำเช่นนี้ คุณจะไม่สามารถอัปโหลดโค้ดผ่าน USB ได้ คุณสามารถทำตามคำแนะนำด้านบนเพื่อแฟลช bootloader กลับไปที่อุปกรณ์เพื่ออัปโหลดรหัสผ่าน USB อีกครั้งเหมือนที่คุณสามารถทำได้จากโรงงาน
คู่มือ Adafruit นั้นละเอียดมาก แต่นี่เป็นขั้นตอนพื้นฐาน:
-
สายจัมเปอร์บัดกรีที่ด้านหลังของบอร์ด XIAO
- คู่มือ Adafruit ไม่ได้บอกว่าพิน RST บนกระดานฝ่าวงล้อม 2x5 จำเป็นต้องเชื่อมต่อกับพินรีเซ็ตบนกระดาน Adafruit แต่สำหรับ XIAO ฉันต้องเชื่อมต่อกับแผ่นทั้งสี่ที่ด้านหลังของกระดาน
- ต้องเชื่อมต่อพิน VREF กับพิน XIAO 3.3v สิ่งนี้จะบอกดีบักเกอร์ว่าลอจิกของอุปกรณ์คือ 3.3v หากไม่มี หากคุณเลือกตัวเลือกที่ไม่ถูกต้อง ไมโครคอนโทรลเลอร์อาจสร้างความเสียหายได้
- ต่อสายจัมเปอร์เข้ากับ J-Link
- เปิดบอร์ด XIAO ด้วยสาย USB
- เปิด Atmel สตูดิโอ
- เลือกเครื่องมือ การเขียนโปรแกรมอุปกรณ์
- เลือกบอร์ด M0 ของคุณ ในกรณีนี้ ATSAMD21G18A
- เลือก SWD
- อ่านการกำหนดค่าจากเป้าหมาย
- หากคุณกำลังใช้ EDU J-Link ให้ยอมรับข้อกำหนดการใช้งาน (หากคุณปฏิบัติตามข้อกำหนดการใช้งาน)
- ตรวจสอบว่าแรงดันไฟฟ้าที่อ่านได้ถูกต้องที่มุมบนขวา ถ้ามันไม่ใช่ 3.3v คุณอาจทำลายบอร์ดของคุณ!
- ล้างฟิวส์ป้องกันการบู๊ต (ตั้งค่าขนาด bootloader เป็น 0 ไบต์) จากนั้นเลือกโปรแกรม
- ในส่วนความทรงจำ ให้เลือกไฟล์.bin หรือ.hex ที่คอมไพล์แล้ว และเลือกโปรแกรม
การแก้ไขปัญหา:
เมื่อคุณอ่านการกำหนดค่าอุปกรณ์ หากคุณได้รับข้อผิดพลาดของแรงดันไฟฟ้านอกช่วง ให้ตรวจสอบให้แน่ใจว่าได้เสียบปลั๊ก MCU เข้ากับแหล่งจ่ายไฟ และพิน J-Link VREF เชื่อมต่อกับ 3.3 โวลต์
ขั้นตอนที่ 7: คอมไพล์ใหม่โดยไม่มี Crystal ภายนอก
บอร์ด XIAO มีคริสตัลภายนอกที่ใช้เวลานานในการเริ่มต้น เครื่องรับ Spektrum จะทำการค้นหาอุปกรณ์บนบัส telemetry 350 มิลลิวินาทีหลังจากเปิดเครื่อง ดังนั้นเราต้องบอกให้คอมไพเลอร์ใช้ออสซิลเลเตอร์ภายในแทน ซึ่งจะทำให้การเริ่มต้นทำงานเกือบจะในทันที
- ค้นหาไฟล์ board.txt ที่คุณแก้ไขก่อนหน้านี้ (ใช่ ฉันสามารถช่วยคุณขั้นตอนนี้ก่อนหน้านี้ได้ แต่นี่เป็นกระบวนการเรียนรู้สำหรับฉัน)
- เพิ่ม "-DCRYSTALLESS" ในสตริง seeed_XIAO_m0_nbl.build.extra_flags สิ่งนี้จะบอกคอมไพเลอร์ให้ใช้ออสซิลเลเตอร์ภายใน
- คอมไพล์รหัสอีกครั้ง
- แฟลช MCU อีกครั้ง
- ตรวจสอบว่าเวลาเริ่มต้นเร็วพอโดยใช้ออสซิลโลสโคป
ดังที่คุณเห็นจากภาพ ช่องสีเหลือง 1 คือแหล่งจ่ายไฟ ช่องสีน้ำเงิน 2 เป็นพินพร้อมบนไมโครคอนโทรลเลอร์ ประมาณ 10 มิลลิวินาทีหลังจากเปิดเครื่อง ไมโครคอนโทรลเลอร์จะดึงช่องที่สองขึ้นสูง ซึ่งแสดงว่าอยู่ในลูปการตั้งค่า เมื่อตั้งค่าเสร็จแล้ว MCU จะถูกเข้ารหัสเพื่อดึงพินให้ต่ำ แสดงว่าลูปหลักกำลังเริ่มต้น ขอบเขตแสดงให้เห็นว่าการตั้งค่าใช้เวลาประมาณ 3 มิลลิวินาที โดยรวมแล้วไมโครคอนโทรลเลอร์จะใช้เวลา 13 มิลลิวินาทีหลังจากเปิดเครื่องเพื่อให้พร้อมใช้งาน
แนะนำ:
Raspberry Pi - MPL3115A2 Precision Altimeter Sensor Python Tutorial: 4 ขั้นตอน
Raspberry Pi - MPL3115A2 Precision Altimeter Sensor Python Tutorial: MPL3115A2 ใช้เซ็นเซอร์ความดัน MEMS พร้อมอินเทอร์เฟซ I2C เพื่อให้ข้อมูลความดัน/ระดับความสูงและอุณหภูมิที่แม่นยำ เอาต์พุตเซ็นเซอร์ถูกแปลงเป็นดิจิทัลด้วย ADC 24 บิตความละเอียดสูง การประมวลผลภายในลบงานค่าตอบแทนออกจาก
วิธีทำเซนเซอร์ความชื้นในดิน DIY [เข้ากันได้กับ ARDUINO/ESP]: 3 ขั้นตอน
วิธีทำเซ็นเซอร์ความชื้นในดิน DIY [เข้ากันได้กับ ARDUINO/ESP]: สวัสดี ในคู่มือนี้ เราจะมาดูวิธีสร้างเซ็นเซอร์ความชื้นในดินตั้งแต่เริ่มต้น! มีราคาไม่แพงมากและเข้ากันได้กับไมโครคอนโทรลเลอร์ทุกประเภทตั้งแต่จุดไฟฟ้า วงจรแสดงเป็นการแบ่งเงินบำนาญอย่างง่าย
Raspberry Pi - MPL3115A2 Precision Altimeter Sensor Java Tutorial: 4 ขั้นตอน
Raspberry Pi - MPL3115A2 Precision Altimeter Sensor Java Tutorial: MPL3115A2 ใช้เซ็นเซอร์ความดัน MEMS พร้อมอินเทอร์เฟซ I2C เพื่อให้ข้อมูลความดัน/ระดับความสูงและอุณหภูมิที่แม่นยำ เอาต์พุตเซ็นเซอร์ถูกแปลงเป็นดิจิทัลด้วย ADC 24 บิตความละเอียดสูง การประมวลผลภายในลบงานค่าตอบแทนออกจาก
NRF24 Two-Way Radio for Telemetry: 9 ขั้นตอน (พร้อมรูปภาพ)
NRF24 Two-Way Radio for Telemetry: สวัสดีทุกคน ฉันชื่อ Pedro Castelani และฉันกำลังนำคำแนะนำแรกของฉันมาให้คุณ: การสร้างวิทยุสองทางด้วย Arduino สำหรับสิ่งที่คุณต้องการ ในโครงการนี้ เราจะทำ วงจรแยกสองวงจรซึ่งจะทำหน้าที่เป็นทั้งตัวรับและส่งสัญญาณ
Rocket Telemetry/ตัวติดตามตำแหน่ง: 7 ขั้นตอน
Rocket Telemetry/ตัวติดตามตำแหน่ง: โครงการนี้มีวัตถุประสงค์เพื่อบันทึกข้อมูลการบินจากโมดูลเซ็นเซอร์ 9 DOF ไปยังการ์ด SD และส่งตำแหน่ง GPS พร้อมกันผ่านเครือข่ายเซลลูลาร์ไปยังเซิร์ฟเวอร์ ระบบนี้ช่วยให้สามารถพบจรวดได้หากพื้นที่ลงจอดของระบบเกินกว่า