ทำให้เซ็นเซอร์ใด ๆ ออกจาก FPGA: 4 ขั้นตอน

ทำให้เซ็นเซอร์ใด ๆ ออกจาก FPGA: 4 ขั้นตอน

สารบัญ:

Anonim

ผู้ผลิตส่วนใหญ่พยายามสร้างเทอร์โมมิเตอร์อย่างน้อยหนึ่งครั้งในชีวิตของพวกเขาบางทีคนที่พวกเขาอยู่ที่บ้านอาจไม่ฉลาดพอหรือบางทีพวกเขาคิดว่าพวกเขาสามารถสร้างเนสต์ถัดไป อย่างไรก็ตามในบางครั้งพวกเขามีไมโครคอนโทรลเลอร์ที่มีซอฟต์แวร์ล้ำสมัยติดอยู่กับเซ็นเซอร์อุณหภูมิ (และเซ็นเซอร์อื่น ๆ: ความดันแสง) จนถึงขณะนี้ทุกอย่างสมบูรณ์แบบซอฟต์แวร์กำลังทำงานและเซ็นเซอร์กำลังรับรู้ มาทดสอบกัน!

อืม … เขาอาจจะทำให้เซ็นเซอร์ร้อนขึ้นโดยใช้เครื่องเป่าผมและทำให้มันเย็นลงโดยใช้น้ำแข็งมันใช้งานได้สักครั้ง แต่ดูเหมือนจะไม่เป็นมืออาชีพเซ็นเซอร์เปลี่ยนค่าเร็วเกินไปถ้าคุณร้อนขึ้นมันจะไม่ร้อนเกินสององศา โครงงานเป็นรูปปั้นครึ่งตัว! แต่อัลกอริทึมนั้นใหม่คำนึงถึงปัจจัยหลายอย่างสิ่งที่น่าละอายที่เขาติดอยู่กับสิ่งเล็ก ๆ น้อย ๆ อย่างโง่เขลานี้

โซลูชันของฉันคือ: ทำให้ FPGA ทำหน้าที่เป็นเซ็นเซอร์ที่มีค่าสตรีมจากพีซี (หรือเก็บไว้ในหน่วยความจำหรือสร้างโฆษณาภายใน FPGA) ดังนั้นสำหรับ MCU อันมีค่าของคุณ FPGA จะมีลักษณะเหมือนเซ็นเซอร์ แต่ไม่ใช่เซ็นเซอร์ใด ๆ: เซ็นเซอร์ใดที่คุณต้องการ บางทีคุณอาจตัดสินใจว่าคุณต้องการความละเอียดมากขึ้นหรือเวลาตอบสนองเร็วกว่าที่คาดไว้คุณต้องเปลี่ยนเซ็นเซอร์ สั่งซื้อออนไลน์มันจะมาถึงในอีกสองสามวันสองสามเดือนใครจะรู้ ตอบสนอง PCB ของคุณหรือสั่งซื้อโมดูลด้วยเซ็นเซอร์ใหม่ หรือ … คลิกไม่กี่ครั้งและ FPGA ได้รับการกำหนดค่าเป็นเซ็นเซอร์ใหม่ของคุณและสามารถจำลองการกำหนดค่าภายในที่แน่นอน

ในขณะที่เขียนสิ่งนี้ FPGA สามารถทำหน้าที่เป็น LM75 พร้อมกับเก็บข้อมูลอุณหภูมิใน BRAM (บน FPGA)

วัสดุ:

ขั้นตอนที่ 1: MCU

MCU ที่ฉันเลือกคือ LPC4337 บน LPCXpresso ด้านบนของมันฉันมี shield (LPC General Purpose Shield) พร้อมจอแสดงผลและเซ็นเซอร์ LM75 จริง LPC4337 เป็น ARM Cortex M4 ทำงานที่ 200MHz และ Cortex M0 ที่เล็กกว่า (ไม่ได้ใช้ที่นี่) เซ็นเซอร์จริงเชื่อมต่อกับอุปกรณ์ต่อพ่วง I2C1 และอุปกรณ์เสมือนจริงของเราจะเชื่อมต่อกับ I2C0 แหล่งที่มามีอยู่ใน GitHub ของฉัน

จะสร้างมันได้อย่างไร? ดาวน์โหลด LPCXpresso IDE ร่วมกับไลบรารี่ LPCOpen นำเข้าไลบรารีนั้นไปยัง IDE และเปิดโครงการจาก GitHub ทุกอย่างควรได้รับการกำหนดค่าและคุณสามารถคลิกที่ "ดีบั๊ก" ที่มุมล่างซ้าย

โครงการทั้งหมดขึ้นอยู่กับหนึ่งในตัวอย่างของ NXP (เพื่อแสดงให้เห็นว่าโครงการของฉันจำลองเซ็นเซอร์จริงและไม่ต้องการรหัสพิเศษทางด้าน MCU) ในไฟล์หลัก (เรียกว่า iox_sensor.cpp) มีรหัสนี้:

#define SENSORS_ON_SHIELD #if ที่กำหนด (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif ถูกกำหนด (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif กำหนด

ด้วยการเปลี่ยน SENSOR_ON_SHIELD และ SENSOR_OR_FPGA ผู้ใช้จะสามารถสลับเวลาในการรวบรวมเซ็นเซอร์ที่จะพูดคุยซึ่งเป็นของจริงหรือของเสมือนจริงเนื่องจากพวกเขาอยู่บนหมุด I2C ที่แตกต่างกัน

ขั้นตอนที่ 2: FPGA

บอร์ด FPGA ที่ฉันเลือกคือ Artix 7 สร้างโดย Digilent โดยมี Xilinx Arty 7 ตัวเชื่อมต่อ PMod สองตัวถูกใช้ตัวหนึ่งสำหรับการดีบักและอีกตัวสำหรับการรับน้ำหนักจริงการเชื่อมต่อกับบอร์ด MCU

อีกครั้งซอร์สโค้ดสำหรับ FPGA มีอยู่ใน GitHub ของฉัน (โฟลเดอร์ fpgaSide)

จะสร้างมันได้อย่างไร? ดาวน์โหลดซื้อหรือเปิด Xilinx Vivado IDE นำเข้าไฟล์โครงการจาก GitHub หนึ่งในไฟล์ (content.coe) คือข้อมูลอุณหภูมิในรูปแบบ raw ที่จะถูกสตรีมไปยังเซ็นเซอร์ปลอม นอกจากนี้ยังมีไฟล์ Excel ที่มีชื่อเดียวกันที่ช่วยในการแปลงข้อมูลอุณหภูมิที่มนุษย์อ่านได้ไปเป็นข้อมูล LM75 ดิบ ฉันวางแผนที่จะเปลี่ยนสิ่งนี้เป็นกระบวนการอัตโนมัติด้วยซอฟต์แวร์ที่เขียนด้วยภาษาจาวา แต่จนถึงตอนนี้โซลูชันนี้ใช้งานได้ การสังเคราะห์และการดำเนินการควรใช้เวลาสักครู่พิจารณาเรื่องนี้

ขั้นตอนที่ 3: มันทำงานอย่างไร

อย่างที่ฉันได้กล่าวไปแล้วสำหรับ MCU นั้น FPGA ดูเหมือนว่าเซ็นเซอร์ เอาต์พุตของอุปกรณ์ต่อพ่วง I2C เชื่อมต่อกับอินพุตของ FPGA ภายใน FPGA มีองค์ประกอบหลัก 3 ส่วน: - คอนโทรลเลอร์ I2C - อุปกรณ์ I2C - ข้อมูลคอนโทรลเลอร์ I2C ได้รับข้อมูล I2C จากหมุดของ FPGA และส่งไปยังส่วนที่เหลือของ FPGA และทำแบบเดียวกันในลำดับที่กลับกัน จะรักษาเครื่องสถานะภายในสำหรับโปรโตคอล I2C (โดยวิธีนี่คือเอกสารสำหรับมัน) องค์ประกอบนี้ส่งไปยังอุปกรณ์ I2C อะไร ไบต์ที่ได้รับในปัจจุบันตำแหน่งของไบต์นั้นในการสื่อสารปัจจุบันและระบุว่า MCU กำลังเขียนหรืออ่านจาก FPGA อุปกรณ์ I2C ได้รับจำนวนไบต์ที่ส่งและอัพเดตโครงสร้างภายในของเซ็นเซอร์ มันอาจอัพเดตตัวชี้การลงทะเบียนหรือร้องขอข้อมูลใหม่จากแหล่งข้อมูล คอมโพเนนต์ Data จะสตรีมจุดข้อมูลใหม่ ปัจจุบันเป็นเพียงหน่วยความจำ ROM ที่มีที่อยู่เพิ่มขึ้น (ประมาณ) สองครั้งต่อวินาที

เป้าหมายสุดท้ายของฉันคืออะไร มันจะแสดงในภาพที่สอง นั่นคือทำให้อุปกรณ์ I2C (เซ็นเซอร์และอื่น ๆ) สามารถจำลองในเวลาเดียวกันภายใน FPGA ข้อมูลที่ด้านหลังของเซ็นเซอร์ที่จะแคชใน FPGA และสตรีมจาก PC ผ่าน USB หรือ Ethernet สนับสนุนเซ็นเซอร์ขั้นสูงและอุปกรณ์ I2C อื่น ๆ (หน่วยความจำไดรเวอร์ LED ฯลฯ)

ขั้นตอนที่ 4: รวบรวมทุกอย่างเข้าด้วยกัน

ตอนนี้เป็นเวลาที่จะเชื่อมต่อทุกอย่างเข้ากับตลาด ในทางทฤษฎีแล้วมันง่าย: บอร์ด mcu มีตัวเชื่อมต่อ PMod (I2C0 & SSP0 (สามารถทำงานเหมือน SPI)) บอร์ด Artix มีตัวเชื่อมต่อ 4 PMod ที่สามารถใช้ได้ตามที่คุณต้องการ ฉันเลือกตัวเชื่อมต่อ D เพื่อพูดคุยกับ MCU และตัวเชื่อมต่อ B เพื่อเชื่อมต่อกับเครื่องวิเคราะห์ตรรกะของฉัน

การเตือน

คุณไม่สามารถเชื่อมต่อสองกระดานเข้าด้วยกันแบบนั้นได้ ทำไม? PMod สร้างขึ้นเพื่อลดการเชื่อมต่อของ Master / Host board (ที่ให้พลังงาน) กับ Slave / Sensor board (ที่รับพลังงาน) แต่ในโครงงานนี้ทั้งสองบอร์ดให้พลังงานและถ้าคุณเชื่อมต่อเอาท์พุท 3.3V จากบอร์ดหนึ่งไปยังเอาต์พุต 3.3V ของบอร์ดอื่น สิ่งเลวร้าย ได้ เกิดขึ้น. แต่พวกเขาอาจไม่ได้และคุณอาจเปลี่ยนพารามิเตอร์ของรางพลังของ FPGA (พวกเขาได้รับการออกแบบอย่างระมัดระวัง) ดังนั้นอย่าเสี่ยงและย้ายขั้วต่อหนึ่งพินไปทางซ้าย (และพลิกบอร์ด FPGA) ตามที่เห็นในภาพด้านบน นี่คือสเปค PMod คุณเรียนได้สิ่งที่ฉันทำในระยะสั้นคือไม่เชื่อมต่อ VCCs ของสองบอร์ด