در این سری آموزش‌‌های ویدئوی که توسط مهندس “سیاوش ادیب” از گروه MicroLab تهیه شده است، تلاش شده است از صفر تا صد راه‌اندازی و استفاده از مبدل آنالوگ به دیجیتال ACD128S102 توسط تراشه‌ی Xilinx SPARTAN-6 FPGA آموزش داده شود. بدین منظور ابتدا دیتاشیت تراشه‌ی ADC128S102 بطور کامل بررسی شده و به نکاتی که به منظور استفاده‌ی بهینه از این تراشه در فاز طراحی بایستی مورد توجه قرار گیرند اشاره شده است.

در ادامه به صورت گام به گام به توسعه‌ی ماژول‌های لازم جهت راه‌اندازی و ارتباط با ADC پرداخته شده است. ماژولهایی از جمله Clock Manager، ADC Data Multiplexer، Startup Handler و ADC128S102_driver.

سخت افزار مورد نیاز:

بخش اول: مقدمه

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

 

بخش دوم : پیاده‌سازی ماژول‌های Clock Manager  و Startup Handler

ماژول بعدی که در این بخش پیاده سازی می‌شود Startup Handler می‌باشد. وظیفه‌ی این ماژول این است که  پس از پایان پیکره‌بندی اولیه FPGA  و زمانیکه FPGA  شروع به کار می‌کند، این ماژول بقیه‌ی ماژول‌ها را تا مدتی در حالت ریست نگه ‌می‌دارد.

همچنین یک ویرایشگر متن جذاب برای برنامه‌نویسی راحت‌تر (و البته در محیطی زیباتر!) به نام Sublime معرفی می‌شود که در طول پروژه به جای ویرایشگر متن  نرم افزار ise از آن استفاده می‌شود. شما می توانید نحوه اضافه کردن Package VHDL به ویرایشگر Sublime را در بخش نهم مشاهده کنید.

 

بخش سوم: بررسی دقیق‌تر دیتا شیت ADC128S102

در این بخش، دیتا شیت ADC128S102 دقیق‌تر مورد بررسی قرار می‌گیرد . نحوه خواندن داده‌های ADC ، باید به صورتی باشد که داده‌ها ثابت (Hold) شده باشند. بنابراین در این بخش، در مورد نحوه زمانبندی خواندن داده‌های ADC توضیحاتی داده می‌شود. همچنین در این بخش دلیل انتخاب کلاک 32 مگاهرتز، توضیح داده می‌شود.

 

بخش چهارم: پیاده‌سازی ماژول ADC128S102

در این بخش ماژولی پیاده سازی شده است که بتواند با ADC128S102  ارتباط برقرار کند و آن را کنترل نماید. حالتی‌که در این بخش، برای راه‌اندازی ADC در نظر گرفته شده است حالت Free running می‌باشد. در حالت  Free running، کانال‌ها به صورت مداوم بررسی و مانیتور می‌شوند. البته حالت دیگری برای راه‌اندازی ADC نیز وجود دارد و آن حالت Trigger می‌باشد، که در این حالت، نمونه برداری یکبار انجام شده و سپس ADC متوقف می‌شود.

 

بخش پنجم: ادامه پیاده سازی ماژول ADC128S102

این بخش ادامه بخش قبل است و در قسمتی از برنامه از ساختار record به منظور خوانایی و زیبایی کد استفاده شده‌است. این ساختار، شبیه structure ها در زبان c هست.

 

بخش ششم: ADC Data Multiplexer

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

در این بخش داده‌هایی که از ADC دریافت می‌شود  در یک آرایه دو بعدی (با طول 12 بیت و با عمقی برابر با 8 ) ذخیره می‌شود. سپس بر اساس دیپ‌سوئیچ‌ها ، داده‌های یک کانال انتخاب می‌شوند که در خروجی قرار بگیرند. در واقع طبق مقادیر دیپ‌سوئیچ‌ها، به خانه‌های آرایه دو بعدی رجوع می‌شود و داده آن خانه، که همان کانال مورد نظر است، در خروجی قرار داده می‌شود سپس این خروجی به ماژول سون سگمت برای نمایش ارسال می‌شود.

 

بخش هفتم: Top Module

در این بخش تک تک ماژول‌های نوشته شده  به ماژول اصلی، اضافه می‌شوند و در پایان فایل ucf نیز به پروژه اضافه می‌شود، سپس پروژه  سنتز و implement می‌شود.

 

بخش هشتم: مشاهده نتایج روی سون سگمنت‌ها

در این بخش نتایج روی سون سگمنت‌های موجود روی مگاوینگ LogiX1 نمایش داده می‌شوند. از آنجایی که در این پروژه از 8 کانال ADC استفاده شده است و طبیعتا نمایش هر 8 کانال بطور همزمان از طریق سون‌سگمنت‌ها امکان‌پذیر نمی‌باشد، شماره کانال مورد نظر جهت نمایش از طریق دیپ‌سوئیچ‌های روی مگاوینگ انتخاب می‌شود. اعدادی که روی سون سگمنت‌ها نمایش داده می‌شوند بصورت Hexadecimal است و برای تبدیل آن به مقدار آنالوگ بایستی معادل decimal آن را بر عدد 4095 (که معادل1-212 است) تقسیم و نتیجه را در ولتاژ رفرنس که برابر 2/874 است ضرب کنیم. ملاحظه می‌شود که نتیجه‌ی نمایش داده شده همراه با درصدی خطا است که به بررسی دلایل و رفع آن پرداخته می‌شود. یکی از دلایل اصلی ایجاد خطا، تنظیم نبودن امپدانس ورودی ADC است که می‌توان از تقویت کننده‌ها برای تنظیم آن استفاده کرد اما در این بخش بدون استفاده از تقویت کننده‌ها و بصورت نرم افزاری و از طریق تغییر در برنامه، این مشکل حل شده است.

 

بخش نهم: اضافه کردن  Package VHDL به ویرایشگر Sublime

در این ویدئو  نحوه ی اضافه کردن VHDL packge به ویرایشگر Sublime Text آموزش داده می شود.

به همین روش می توانید Package های دیگه مثل Verilog و Python و . . . رو هم اضافه کنید.

 

دانلود فایل های پروژه:

دانلود ویرایشگر Sublime

دانلود کد‌‌های پروژه