فهرست مطالب قسمت دوم
- قسمت دوم بخش اول: مقدمه و معرفی مدولاسیون عرض پالس (PWM)
- قسمت دوم بخش دوم: تولید PWM سختافزاری بر روی بورد Mojo FPGA
- قسمت دوم بخش سوم: ادامهی مطالب بخش قبلی و معرفی منابع
در قسمت اول این آموزش FPGAها و بورد Mojo را به شما معرفی کردیم و یک پروژهی مقدماتی نیز با این بورد انجام دادیم. در قسمت دوم که آن را در سه بخش با هم جلو میبریم ، قصد داریم پروژهی پیچیدهتر ساخت PWM سختافزاری را بر روی بورد Mojo FPGA یاد بگیریم.
از مدولاسیون عرض پالس یا همان PWM در سیستمهای نهفته استفادههای بسیاری میشود. مثلا برای کنترل روشنایی LED، کنترل سرعت موتور و یا حتی در کاربردهای ارتباطی. اگر از قبل با بوردهای آردوینو کار کرده باشید، حتما در زمان استفاده از تابع ()analogWrite با PWM سروکار داشتهاید. قبل از آنکه وارد پروژهی پیادهسازی PWM بر روی Mojo شویم، خالی از فایده نیست که ابتدا یک بار دیگر با هم طرز کار PWM را مرور کنیم.
مقدمه و معرفی مدولاسیون عرض پالس
میکروکنترلرها و یا سایر پردازندههای موجود در سیستمهای نهفته، وظایفی که به آنها محول میشود را با استفاده از مبنای سیگنالهای دیجیتال تفسیر و اجرا میکنند و همانطور که میدانیم سیگنالهای دیجیتال از دو حالت سیگنال سطح بالا (که معمولا متناظر با ولتاژ آنالوگ ۳.۵ و یا ۵ ولت است) و سیگنال سطح پایین (متناظر با ولتاژ آنالوگ ۰ ولت) خارج نیستند. این دو سطح را به ترتیب به مقادیر باینری ۱ و ۰ کد میکنند. با کمک همین دو سیگنال ۰ و ۱ میتوان taskهای بسیاری را انجام داد.
اما فرض کنید بخواهیم ولتاژهای خروجی را به صورتی دقیقتر از فقط دو وضعییت ON و Off گزارش کنیم. در این شرایط باید چه کار کنیم؟ این سوال مقدمهی خوبی برای فکر کردن به نحوهی پیادهسازی و اجرای کاربردهایی نظیر موارد فوق است که مثلا شدت یک خروجی (شدت نور LED) باید بتواند در وضعیتهایی به غیر از خاموش و روشن هم تنظیم و کنترل شود. اولین راهحلی که ممکن است به ذهن برسد این است که خروجی را ابتدا به ابزاری مانند مبدل دیجیتال به آنالوگ و سپس از آنجا به قطعه یا ابزار مورد نظر وصل کنیم. پیشنهاد درستی است اما یک راهحل بسیار سادهتر هم وجود دارد، استفاده از سیگنال PWM.
در حقیقت PWM مبتنی بر این واقعیت است که حواس انسان در سرعتهای بالای تغییر، قادر به تفکیک دقیق لبههای تغییر در پدیدههای فیزیکی مثلا تغییر سرعت موتور نیست. در حقیقت این سیگنال دیجیتال پالسهایی را با فرکانس بالا تولید میکند به طوری که در واقعیت نمیتوان چندان میان تک تک پالسها تفکیک قائل شد. یعنی اگر یک بازهی مشخص از زمان را در این سیگنال در نظر بگیریم، سطح سیگنال در کسری از این زمان بالا و در بقیهی آن پایین است. به آن کسر از زمان که سطح سیگنال بالا است duty cycle یا به اختصار duty آن سیگنال گفته میشود. میانگین سیگنال خروجی که میتواند شدت نور LED یا سرعت موتور یا هرچیز دیگری باشد، مستقیما تحت تاثیر پارامتر duty است. یعنی با تغییر duty میتوان میانگین تغییرات خروجی را نیز تغییر داد. در تصویر زیر شکل موجهای PWM مختلفی را میبینید که dutyهای مختلف دارند.
مقایسهی duty cyclesهای مختلف و شکل موجهای متناظر با آنها. واضح است که شدیدترین تغییرات خروجی زمانی اتفاق میافتد که duty cycles کامل یا 100 % است. یعنی در تمام بازهها سطح سیگنال بالا است.
تراشههای میکروکنترلری مانند ATmega که در بوردهای آردوینو هم استفاده میشوند، خودشان سختافزار لازم برای تولید سیگنال PWM را به صورت تعبیه شده دارند. کافیست که در کد آنها دستورات لازم برای استفاده از PWM قرار داده شود تا این سختافزار فعال شده و سیگنال را تولید کند. سیگنال تولید شده به یکی از پینهای مشخص و از پیش تعیین شدهی میکرو یا آردوینو متصل میشود و به راحتی قابل استفاده است. البته روی دیگر سکهی این راحتی این است که در این چیپها تنها از همین پین مشخص میتوان خروجی PWM گرفت. اما در بوردهای FPGA مانند Mojo این آزادی عمل را داریم که خودمان سختافزار تولید PWM را طراحی کرده و به هر تعداد که نیاز داشته باشیم آن را تکرار کنیم.
- منبع: ترجمه از سایت deviceplus.com
منبع: عکس شاخص از سایت enjoy-digital.fr
امیدوارم این آموزش برای شما مفید واقع شده باشه. جلسه قبلی و بعدی این آموزش را هم مطالعه کنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.