سلام

همانطور که می‌دانید در اغلب موارد FPGA ها (برخلاف میکروکنترلرها) دارای واحد مبدل آنالوگ به دیجیتال (ADC) داخلی نیستند و برای خواندن مقادیر آنالوگ در FPGA ها، نیازمند استفاده از یک مبدل ADC خارجی هستیم. بال ADC پازج، افزونه‌ای است که این قابلیت را به برد پازج-۱ اضافه می‌کند.  قبلا با نحوه‌ی ارتباط با بال ADC به دو طریق مختلف آشنا شدیم:

۱- استفاده از پردازنده‌ی MicroBlaze و  آی.پی.کورِ axi_spi (اینجا)

۲- پیاده‌سازی مستیم ارتباط SPI، توسط یک SPI IPCORE غیرپولی (اینجا)

در این نوشته قصد دارم تا به روش دیگری این کار را انجام دهم که ساده‌تر و جذاب‌تر از دو روش قبلی است:

استفاده از محیط توسعه‌ی DesignLab و پردازنده‌ی ZPUino!

(چنانچه هنوز با محیط DesignLab و نحوه‌ی کار با برد پازج در آن آشنایی ندارید توصیه می‌کنم این پست را مطالعه نمایید.)

 

اجرای پروژه نمونه:

با رفتن به منوی File > Examples > posedge_one > ADC، پروژه‌ی AnalogRead را انتخاب کنید تا این پروژه در پنجره‌ی جدیدی گشوده شود.

انتخاب پروژه نمونه AnalogRead

همانگونه که در توضیحات ابتدای کد پروژه اشاره شده، سخت افزار این پروژه شامل یک بال ADC است که به قسمت پایینی ردیف B کانکتور روی برد متصل شده است. کلیه‌ی قسمت‌های سخت‌افزار و نرم‌افزاری این پروژه از قبل آماده شده‌اند و شما می‌توانید به راحتی آنرا روی برد پروگرام کنید و نتیجه را ملاحظه نمایید. بدین منظور با قرار دادن دادن بال ADC در قسمت پایینی ردیف B کانکتور و سپس پروگرام کردن بخش‌های سخت‌افزاری و نرم‌افزاری پروژه روی برد، و سپس گشودن پنجره‌ی کنسول ارتباط Serial در سمت راست نوار ابزار، خواهیم دید که مقدار سیگنال آنالوگ اعمال شده به کانال ۰ مبدل ADC، با فواصل زمانی ۱ ثانیه، نمایش داده می‌شود.

در تصویر زیر، خروجی حاصل از اجرای این مثال را مشاهده می‌کنید که مقادیر مختلف ۵، ۳.۳، ۱.۲ و ۰ ولت موجود روی برد پازج را که به ترتیب با یک سیم به کانال ۰ مبدل وصل شده‌اند را نشان می‌دهد.

نمایش مقادیر آنالوگ روی پورت سریال

اما چه اتفاقی رخ داد؟ چگونه این کار به این سادگی انجام شد؟! بیایید تا نگاهی به قسمت‌های مختلف این پروژه بیندازیم.

بخش سخت‌افزار (Circuit):

جهت مشاهده‌ی نقشه‌ی شماتیک بخش سخت‌افزاری این پروژه، کافی است تا بر روی آیکن View Circuit در نوار ابزار بالای نرم‌افزار کلیک کنید تا نقشه‌ی زیر باز شود:

شماتیک بخش سخت‌افزاری (circuit) پروژه

همانطور که در تصویر فوق ملاحظه می‌کنید، بخش سخت‌افزاری (یا همان Circuit) متشکل از یک هسته‌ی پردازنده‌ی ZPUino و پریفرال‌هایی از جمله VGA، GPIO و دو واحد SPI است که یکی به اسلات شماره ۱۲ و دیگری به اسلات شماره ۱۳ پردازنده متصل است. SPI متصل به اسلات ۱۳ به بلوک ADC_Wing متصل است که در این پروژه با آن سر و کار داریم. سایر پریفرال‌ها در این پروژه کاربردی ندارند و بود و نبودشان فرقی نمی‌کند! با این مقدمه به سراغ توضیح مابقی پروژه می‌رویم.

بخش نرم‌افزار (Sketch)

در بخش نرم‌افزاری این پروژه، یک کد ساده‌ی آردوینویی داریم که از دو تابع setup و loop تشکل شده است.

در تابع setup، یک ارتباط سریال با نرخ ۹۶۰۰ ایجاد شده و سپس با دستور analog.begin، یک ارتباط spi با adc آغاز می‌شود. پارامترهای این تابع به ترتیب شامل موقعیت پین CS (در این مورد پین WBL4)، شماره اسلاتی از ZPUino که واحد spi مربوط به ADC به آن متصل است (در این مورد ۱۳) و نیز دقت نمونه‌برداری ADC است.

در تابع loop نیز که بصورت مداوم تکرار می‌شود، ابتدا شماره کانال مورد نظر ADC انتخاب و سپس مقدار آنالوگ آن کانال با دستور analog.read خوانده می‌شود و نتیجه آن پس از تبدیل و scale در مقیاس ۵، روی پورت سریال ارسال می‌شود. این کار با فواصل زمانی ۱ ثانیه به صورت مداوم تکرار می‌شود.

کد نرم‌افزاری (Sketch) پروژه

امیدوارم این نوشته را پسندیده باشید. چنانچه این مطلب برای شما جالب بوده، لطفا آن را در شبکه‌های اجتماعی با دوستان خود به اشتراک بگذارید.