สารบัญ:

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

วีดีโอ: สร้างเซ็นเซอร์ใด ๆ ออกจาก FPGA: 4 ขั้นตอน

วีดีโอ: สร้างเซ็นเซอร์ใด ๆ ออกจาก FPGA: 4 ขั้นตอน
วีดีโอ: การใช้งาน VHDL ลง FPGA ครั้งแรกบน Cyclone IV 2024, พฤศจิกายน
Anonim
Image
Image
FPGA
FPGA

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

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

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

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

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

MCU ที่ฉันเลือกคือ LPC4337 บน LPCXpresso ด้านบนฉันมีเกราะป้องกัน (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) คือข้อมูลอุณหภูมิในรูปแบบดิบที่จะถูกสตรีมไปยังเซ็นเซอร์ปลอม นอกจากนี้ยังมีไฟล์ Excel ที่มีชื่อเดียวกันซึ่งช่วยในการแปลงข้อมูลอุณหภูมิที่มนุษย์อ่านได้เป็นข้อมูลดิบ LM75 ฉันกำลังวางแผนที่จะเปลี่ยนสิ่งนี้เป็นกระบวนการอัตโนมัติด้วยซอฟต์แวร์ที่เขียนด้วย Java แต่จนถึงตอนนี้โซลูชันนี้ใช้งานได้ การสังเคราะห์และการดำเนินการควรใช้เวลาสักครู่ พิจารณาสิ่งนี้

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

มันทำงานอย่างไร?
มันทำงานอย่างไร?
มันทำงานอย่างไร?
มันทำงานอย่างไร?

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

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

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

วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน
วางมันทั้งหมดเข้าด้วยกัน

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

คำเตือน

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

แนะนำ: