สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
Ultra-WideBand Feather รวมโมดูล Decawave DWM1000 และ ATSAMD21 ARM Cortex M0 ไว้ในฟอร์มแฟคเตอร์ขนนก Adafruit โมดูล DWM1000 เป็นโมดูลไร้สายที่รองรับมาตรฐาน IEEE802.15.4-2011 UWB ซึ่งสามารถระบุตำแหน่งภายในอาคารได้อย่างแม่นยำและมีอัตราข้อมูลสูง ทำให้บอร์ดนี้สมบูรณ์แบบสำหรับโครงการหุ่นยนต์ที่ต้องการการแปลเป็นภาษาท้องถิ่น
คุณสมบัติ:– Decawave DWM1000 สำหรับการติดตามที่แม่นยำ– ARM Cortex M0 สำหรับแอปพลิเคชันที่รวดเร็วและทรงพลัง – Adafruit Feather เข้ากันได้กับระบบนิเวศที่มีอยู่มากมาย – อินเทอร์เฟซ SWD สำหรับการเขียนโปรแกรมและการดีบักแอปพลิเคชัน – ตัวเชื่อมต่อ USB-C – เครื่องชาร์จแบตเตอรี่ LiPo แบบบูรณาการ
สำหรับการเขียนและอัปเดตโครงการฉบับเต็ม ดูโครงการนี้ในเว็บไซต์ของฉัน Prototyping Corner ที่ prototypingcorner.io/projects/uwb-feather
แหล่งที่มาของฮาร์ดแวร์และซอฟต์แวร์สำหรับโครงการนี้มีอยู่ใน GitHub Repository
ขั้นตอนที่ 1: การออกแบบฮาร์ดแวร์
ตามที่กล่าวไว้ในบทนำ UWB Feather ประกอบด้วย ATSAMD21 ARM Cortext M0+ สำหรับสมองและโมดูล Decawave DWM1000 สำหรับย่านความถี่ไร้สายแบบกว้างพิเศษในรูปแบบขนนก การออกแบบค่อนข้างง่ายประกอบด้วย 20 รายการ BoM บน PCB 2 ชั้น Pinout รองรับ Adafruit M0 Feather
การชาร์จ LiPo นั้นจัดการโดย MCP73831 เซลล์เดียว ตัวควบคุมการจัดการการชาร์จแบบครบวงจร แรงดันไฟฟ้าของแบตเตอรี่สามารถตรวจสอบได้บน D9 อย่างไรก็ตาม จำเป็นต้องมีการเข้าถึง IO ทั้งหมด สามารถตัด JP1 เพื่อเพิ่มพินนี้ การควบคุมแรงดันไฟฟ้า 3.3 โวลต์ถูกสร้างไว้ล่วงหน้าโดยตัวควบคุมเชิงเส้นแบบเลื่อนออกต่ำ AP2112K-3.3 ให้สูงถึง 600mA
Pinout เข้ากันได้อย่างสมบูรณ์กับผลิตภัณฑ์ขนนก Adafruit M0 เพื่อการพกพาโค้ดที่ง่ายดาย สาย DWM1000 IO เชื่อมต่อกับบัส SPI และพินดิจิทัล 2, 3 และ 4 สำหรับ RST, IRQ & SPI_CS ตามลำดับ (ซึ่งไม่เปิดเผยผ่านส่วนหัว) D13 ยังเชื่อมต่อกับ LED ออนบอร์ด ซึ่งเป็นมาตรฐานในบอร์ดที่เข้ากันได้กับ Arduino จำนวนมาก
การเขียนโปรแกรมสามารถกำหนดไว้ล่วงหน้าบนส่วนหัว SWD หรือผ่าน USB หากโหลดด้วย bootloader ที่เกี่ยวข้อง เช่น uf2-samdx1 จาก Microsoft ดูเฟิร์มแวร์สำหรับข้อมูลเพิ่มเติม
หมายเหตุเกี่ยวกับV1.0
มีปัญหากับขั้วต่อ USB-C ในเวอร์ชัน 1 ของบอร์ดนี้ รอยเท้าที่ฉันใช้ไม่ได้รวมช่องเจาะที่จำเป็นสำหรับวิธีการติดตั้งช่องเจาะของส่วนประกอบนี้
เวอร์ชัน 1.1 จะมีการแก้ไขสำหรับสิ่งนี้รวมถึงการเพิ่มตัวเชื่อมต่อ micro-b สำหรับผู้ที่ต้องการ ดูข้อควรพิจารณาในเวอร์ชัน 1.1 ด้านล่าง
สำหรับการพิจารณาการออกแบบ Bill of Materials and Hardware เวอร์ชัน 1.1 โปรดดูที่การเขียนโครงการ
ขั้นตอนที่ 2: การประกอบ
ด้วย BoM เพียง 20 รายการและส่วนประกอบส่วนใหญ่ไม่เล็กกว่า 0603 (ตัวเก็บประจุแบบคริสตัล 2x คือ 0402) การประกอบด้วยมือของบอร์ดนี้จึงเป็นเรื่องง่าย ฉันมี PCB และลายฉลุประสานที่ผลิตโดย JLCPCB ในสีดำด้านพร้อมพื้นผิว ENIG
ค่าใช้จ่ายทั้งหมดสำหรับบอร์ด 5 แผ่น (แม้ว่า 10 แผ่นไม่มีความแตกต่างของราคา) และลายฉลุอยู่ที่ 68 ดอลลาร์ออสเตรเลีย แต่ 42 ดอลลาร์เป็นค่าจัดส่ง การสั่งซื้อครั้งแรกจาก JLCPCB และบอร์ดมีคุณภาพสูงมากและมีผิวที่สวยงาม
ขั้นตอนที่ 3: เฟิร์มแวร์: การเขียนโปรแกรม Bootloader
สามารถโหลดเฟิร์มแวร์ผ่านขั้วต่อ SWD ได้โดยใช้โปรแกรมเมอร์ เช่น J-Link จาก Segger ที่แสดงด้านบนคือ J-Link EDU Mini ในการเริ่มเขียนโปรแกรมบอร์ด เราต้องโหลดโปรแกรมโหลดบูตของเรา จากนั้นตั้งค่าห่วงโซ่เครื่องมือของเรา
ฉันจะใช้ Atmel Studio เพื่อแฟลช bootloader โดยเสียบ J-Link และเปิด Atmel Studio จากนั้นเลือก เครื่องมือ > การเขียนโปรแกรมอุปกรณ์ ภายใต้เครื่องมือ เลือก J-Link และตั้งค่าอุปกรณ์เป็น ATSAMD21G18A จากนั้นคลิกนำไปใช้
เชื่อมต่อ J-Link กับส่วนหัว SWD ขนนกและใช้พลังงานผ่าน USB หรือผ่านแบตเตอรี่ เมื่อเชื่อมต่อแล้ว ในส่วนลายเซ็นอุปกรณ์ ให้คลิกอ่าน กล่องข้อความลายเซ็นอุปกรณ์และแรงดันไฟฟ้าเป้าหมายควรเผยแพร่ตามนั้น หากไม่ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง
ในการแฟลช bootloader เราต้องปิดการใช้งานฟิวส์ BOOTPROT ก่อน ในการดำเนินการนี้ ให้เลือกฟิวส์ > USER_WORD_0. NVMCTRL_BOOTPROT และเปลี่ยนเป็น 0 ไบต์ คลิกโปรแกรมเพื่ออัปโหลดการเปลี่ยนแปลง
ตอนนี้เราสามารถแฟลช bootloader ได้โดยเลือก Memories > Flash และตั้งค่าตำแหน่งของ bootloader ตรวจสอบให้แน่ใจว่า Erase Flash ก่อนเลือกโปรแกรมและคลิก Program หากทุกอย่างเป็นไปด้วยดี D13 บนกระดานควรเริ่มเต้น
ตอนนี้ คุณจะต้องตั้งค่าฟิวส์ BOOTPROT เป็นขนาด bootloader 8kB เมื่อต้องการทำสิ่งนี้ให้เลือกฟิวส์ > USER_WORD_0. NVMCTRL_BOOTPROT และเปลี่ยนเป็น 8192 ไบต์ คลิกโปรแกรมเพื่ออัปโหลดการเปลี่ยนแปลง
เมื่อบูตโหลดเดอร์แล้ว D13 ควรกะพริบและหากเสียบผ่าน USB อุปกรณ์จัดเก็บข้อมูลขนาดใหญ่ควรปรากฏขึ้น นี่คือที่ที่สามารถอัปโหลดไฟล์ UF2 เพื่อตั้งโปรแกรมบอร์ดได้
ขั้นตอนที่ 4: เฟิร์มแวร์: รหัสกะพริบด้วย PlatformIO
สามารถอัปโหลดเฟิร์มแวร์ผ่านโปรโตคอล UF2 หรือโดยตรงผ่านอินเทอร์เฟซ SWD เราจะใช้ PlatformIO เพื่อความสะดวกและเรียบง่าย ในการเริ่มต้นสร้างโครงการ PIO ใหม่และเลือก Adafruit Feather M0 เป็นกระดานเป้าหมาย เมื่ออัปโหลดผ่าน SWD ด้วย J-Link ให้ตั้งค่า upload_protocol ใน platformio.ini ดังที่แสดงด้านล่าง
[env:adafruit_feather_m0] แพลตฟอร์ม = บอร์ด atmelsam = adafruit_feather_m0 framework = arduino upload_protocol = jlink
ตอนนี้คุณสามารถตั้งโปรแกรมบอร์ดด้วยความเรียบง่ายของกรอบงาน Arduino
ขั้นตอนที่ 5: เฟิร์มแวร์: กะพริบ Anchor
โมดูล DWM1000 สามารถกำหนดค่าให้เป็นจุดยึดหรือแท็กได้ โดยทั่วไปจุดยึดจะถูกเก็บไว้ที่ตำแหน่งคงที่ที่รู้จักและแท็กจะใช้จุดยึดเพื่อรับตำแหน่งสัมพันธ์กับจุดยึด ในการทดสอบโมดูล DWM1000 คุณสามารถอัปโหลดตัวอย่าง DW1000-Anchor จากที่เก็บ GitHub
หากต้องการแฟลชโปรแกรมนี้ด้วย PlatformIO จาก PIO Home ให้เลือก Open Project จากนั้นค้นหาตำแหน่งของโฟลเดอร์ DW1000-Anchor ในที่เก็บ GitHub จากนั้นคลิกปุ่มอัปโหลด PIO แล้วระบบจะค้นหาโพรบดีบักที่แนบมาโดยอัตโนมัติ (ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อและเปิดบอร์ดแล้ว)
จะต้องอัปโหลดเฟิร์มแวร์แท็กไปยังบอร์ดอื่น จากนั้นสามารถดูผลลัพธ์ได้ในเทอร์มินัลอนุกรม
ขั้นตอนที่ 6: ก้าวต่อไป
การปรับปรุงเพิ่มเติมสำหรับโครงการนี้จะรวมถึงการพัฒนาไลบรารี DW1000 ใหม่ บอร์ด V1.1 จะเปลี่ยนโครงการอื่นๆ ที่ใช้เทคโนโลยีที่หลากหลายนี้ หากมีความสนใจเพียงพอ ฉันจะพิจารณาผลิตและจำหน่ายแผงเหล่านี้
ขอบคุณที่อ่าน. แสดงความคิดเห็นหรือวิพากษ์วิจารณ์ในความคิดเห็นด้านล่างและอย่าลืมตรวจสอบโครงการที่ Prototyping Corner