فهرست مطالب:

ایجاد هر سنسور از FPGA: 4 مرحله
ایجاد هر سنسور از FPGA: 4 مرحله

تصویری: ایجاد هر سنسور از FPGA: 4 مرحله

تصویری: ایجاد هر سنسور از FPGA: 4 مرحله
تصویری: این تنظیمات آیفون را همین حالا تغییر دهید ⛔❗ 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 با فرکانس 200 مگاهرتز و Cortex M0 کوچکتر است (در اینجا استفاده نمی شود). سنسور واقعی به I2C1 و دستگاه مجازی ما به I2C0 متصل است. منبع در GitHub من موجود است.

چگونه آن را بسازیم؟ LPCXpresso IDE را به همراه کتابخانه LPCOpen بارگیری کنید. آن کتابخانه را به IDE وارد کنید و همچنین پروژه را از GitHub باز کنید. همه چیز باید پیکربندی شود و می توانید بر روی "اشکال زدایی" در گوشه سمت چپ پایین کلیک کنید.

کل پروژه بر اساس یکی از نمونه های NXP است (زیرا نشان می دهد که پروژه من یک سنسور واقعی را شبیه سازی می کند و نیازی به کد خاصی در طرف MCU ندارد). در فایل اصلی (به نام iox_sensor.cpp) این کد نهفته است:

#تعریف SENSORS_ON_SHIELD

#اگر تعریف شده (SENSORS_ON_SHIELD) #تعریف SHIELD_I2C I2C1 #elif تعریف شده (SENSORS_ON_FPGA) #تعریف 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 کمک می کند. من در حال برنامه ریزی برای تغییر این به یک فرآیند خودکار با یک نرم افزار نوشته شده در جاوا هستم ، اما تا آن زمان این راه حل کار می کند. سنتز و پیاده سازی باید مدتی طول بکشد ، این را در نظر بگیرید.

مرحله 3: چگونه کار می کند؟

چگونه کار می کند؟
چگونه کار می کند؟
چگونه کار می کند؟
چگونه کار می کند؟

همانطور که گفتم ، برای MCU ، FPGA شبیه یک سنسور است ، دقیقاً یک سنسور I2C. خروجی لوازم جانبی I2C به ورودی FPGA متصل است. در داخل FPGA 3 جزء اصلی وجود دارد:- I2C Controller- I2C Device- DataThe I2C Controller داده های I2C را از پین های FPGA دریافت کرده و به بقیه FPGA ارسال می کند و همین کار را به ترتیب معکوس انجام می دهد. این دستگاه دارای یک حالت داخلی داخلی برای پروتکل I2C است (به هر حال ، در اینجا مستندات آن آمده است). این جزء به دستگاه I2C چه می فرستد؟ بایت در حال حاضر دریافت شده ، موقعیت آن بایت در ارتباط فعلی و اینکه آیا MCU در حال نوشتن یا خواندن از FPGA است یا خیر. دستگاه I2C بایت های ارسال شده را دریافت کرده و ساختار داخلی شبیه سازی شده سنسور را به روز می کند. ممکن است فقط اشاره گر ثبت را به روز کند یا داده های جدیدی را از منبع داده درخواست کند. جزء Data نقاط جدید داده را جریان می دهد. در حال حاضر فقط یک حافظه ROM است که آدرس آن (تقریبا) دو بار در ثانیه افزایش می یابد.

هدف نهایی من چیست؟ در تصویر دوم نشان داده شده است. یعنی: امکان شبیه سازی بیشتر دستگاههای I2C (سنسورها و سایر دستگاهها) را همزمان در داخل FPGA فراهم کنید. داده ها در پشت سنسور باید در FPGA ذخیره شوند و از طریق USB از طریق USB یا اترنت از رایانه پخش شوند. از سنسورهای پیشرفته تر و سایر دستگاه های I2C (حافظه ، درایورهای LED و غیره) پشتیبانی کنید.

مرحله 4: همه چیز را با هم ترکیب کنید

همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم
همه اش را بگذار کنار هم

اکنون زمان آن است که همه چیز را به هم متصل کنید. از لحاظ تئوری ، ساده است: برد mcu دارای اتصال PMod (I2C0 و SSP0 (می تواند مانند SPI کار کند)). برد Artix دارای 4 کانکتور PMod است که می توانید هر طور که می خواهید استفاده کنید. من کانکتور D را برای صحبت با MCU و کانکتور B را برای اتصال به Logic Analyzer انتخاب می کنم.

هشدار

شما نمی توانید این دو تخته را به هم وصل کنید. چرا؟ PMod برای سهولت اتصال یک برد Master/Host (که قدرت می دهد) به یک برد Slave/Sensor (که قدرت دریافت می کند) ساخته شد. اما در این پروژه هر دو برد قدرت می دهند و اگر خروجی 3.3 ولت را از یک برد به خروجی 3.3 ولت برد دیگر وصل کنید ممکن است اتفاقات بدی بیفتد. اما آنها ممکن است نه و شما فقط ممکن است پارامترهای ریل قدرت FPGA را تغییر دهید (آنها بسیار دقیق طراحی شده اند). بنابراین این ریسک را نکنید و کانکتور را یک پین به سمت چپ ببرید (و همچنین برد FPGA را بچرخانید) همانطور که در تصاویر بالا مشاهده می کنید. در اینجا مشخصات PMod وجود دارد ، شما می توانید آن را مطالعه کنید ، کاری که من با کلمات کوتاه انجام دادم این است که VCC های دو برد را به هم وصل نکنم.

توصیه شده: