استفاده از PWM در لانچ پد MSP430 و کنترل نور LED
محتویات
سلام. استفاده از PWM در لانچ پد MSP430 و کنترل نور LED را آماده کردیم.
این آموزش بخشی از سری آموزش های لانچ پد MSP430 است. در این آموزش ما نحوه استفاده از PWM در لانچ پد را یاد میگیریم. ما اینکار را با کنترل میزان روشنایی یک ال ای دی انجام میدهیم. این آموزش بسیار به آموزش قبلی ما که استفاده از آنالوگ به دیجیتال در MSP430 است مربوط است زیرا ما از یک پتانسیومتر برای کنترل میزان روشنایی استفاده میکنیم.
فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.
در این آموزش ما ابتدا ولتاژ متغیر را از پتانسیومتر میگیریم و آن را به مقدار دیجیتال تبدیل میکنیم. سپس با استفاده از مقدار دیجیتال موج PWM و در نتیجه روشنایی ال ای دی را تنظیم میکنیم. فیلم عملکرد در انتهای صفحه قرار داده شده است.
PWM (مدولاسیون پهنای پالس) چیست؟
کلمه ی PWM مخفف Pulse Width Modulation است؛ بعدا دلیل این نام گذاری را خواهیم فهمید. اما فعلا PWM را به عنوان نوعی سيگنال که می تواند از یک IC دیجیتال مانند میکروکنترلر یا تایمر 555 تولید شود، بشناسید. سیگنالی که از این راه تولید شده، یک رشته از پالس خواهد داشت و این پالس ها به شکل موج مربع خواهند بود. یعنی در هر زمان معینی موج یا بالا خواهد بود یا پایین. برای درک بهتر اجازه دهید، سيگنال 5 ولت PWM را در نظر بگیریم، در این حالت سیگنال PWM یا 5 ولت (بالا) یا 0 ولت در سطح زمین (پایین) خواهد بود. برای آشنایی کامل با PWM، مقاله PWM چیست را بخونید.
مدت زمانی که سیگنال ها بالا می مانند به عنوان “On time” نام گذاری می شوند و مدت زمانی که سیگنال پایین می ماند به عنوان “off time” نام گذاری می شود. برای یک سیگنال PWM باید به دو پارامتر مهم مرتبط با آن، یکی دوره ی کاری PWM و دیگری فرکانس PWM توجه کنیم.
چرخه وظیفه PWM
درصد زمانی که سیگنال PWM در حد بالا باقی می ماند به عنوان چرخه وظیفه خوانده می شود. اگر سیگنال همیشه روشن باشد ، در چرخه 100٪ کار قرار دارد و اگر همیشه خاموش باشد ، چرخه وظیفه 0٪ است.
چرخه وظیفه = مدت زمان روشن / (مدت زمان روشن + مدت زمان خاموش)
Duty Cycle =Turn ON time/ (Turn ON time + Turn OFF time)
فرکانس PWM
فرکانس یک سیگنال PWM تعیین میکند که چقدر طول میکشد تا یک PWM یک دوره را کامل کند . یک دوره یعنی مدت زمان کامل روشن و خاموش شدن یک سیگنال PWM است که در بالا نشان داده شده است.
فرکانس = 1 / زمان دوره
زمان دوره = زمان روشن + زمان خاموش
Frequency = 1/Time Period Time Period = On time + Off time
به طور معمول سیگنال های PWM تولید شده توسط میکروکنترلر در حدود 500 هرتز خواهند بود ، از چنین فرکانس های بالا در دستگاه های سوئیچینگ با سرعت بالا مانند اینورتر یا مبدل استفاده می شود . اما همه ی برنامه ها به سرعت بالا نیار ندارند . به عنوان مثال برای کنترل یک موتور servo نیاز به تولید سیگنال PWM با فرکانس 50 هرتز داریم ، بنابراین فرکانس سیگنال PWM نیز توسط برنامه برای همه میکروکنترلر ها قابل کنترل است.
چگونه سیگنال های PWM را به ولتاژ آنالوگ تبدیل کنیم؟
برای کاربردهای ساده مانند کنترل سرعت موتور DC یا تنظیم روشنایی یک LED ، ما باید سیگنال های PWM را به ولتاژ آنالوگ تبدیل کنیم. این کار با استفاده از فیلتر RC به راحتی قابل انجام است و معمولاً در مواردی که یک ویژگی DAC لازم باشد استفاده می شود. مدار آن در زیر نشان داده شده است :
در نمودار بالا نشان داده شده که رنگ زرد، سیگنال PWM و رنگ آبی یک ولتاژ آنالوگ خروجی است. مقدار مقاومت R1 و خازن C1 را می توان بر اساس فرکانس سیگنال PWM محاسبه کرد اما معمولا از مقاومت 5.7K یا 10K و خازن 0.1u یا 1u استفاده می شود.
مدار پروژه راه اندازی PWM با لانچ پد MSP430
مدار بسیار ساده است و فقط یک پتانسیومتر و یک مقاومت و خازن برای تشکیل یک مدار RC و یک Led دارد. از پتانسیومتر برای تهیه ولتاژ آنالوگ استفاده می شود که بر اساس آن می توان چرخه وظیفه سیگنال PWM را کنترل کرد. خروجی پتانسیومتر به پین P1.0 وصل شده است که می تواند ولتاژ های آنالوگ را ارائه دهد. سپس ما باید سیگنال PWM تولید کنیم که می توان با استفاده از پین P1.2 این کار را انجام داد ، سپس این سیگنال PWM به مدار فیلتر RC ارسال می شود تا سیگنال PWM را به ولتاژ آنالوگ تبدیل کند که سپس به LED داده می شود.
درک این نکته بسیار مهم است که همه پین های موجود در برد MSP نمی توانند ولتاژ آنالوگ را بخوانند یا سیگنال PWM تولید کنند. پین های مشخصی که می توانند کارهای خاص را انجام دهند در شکل زیر نشان داده شده است. همیشه از این تصویر به عنوان راهنما برای انتخاب پین های خود برای برنامه نویسی استفاده کنید.
برنامه نویسی MSP برای تولید سیگنال PWM
پس از آماده شدن سخت افزار ، می توانیم برنامه نویسی را شروع کنیم. اولین مورد در برنامه ، اعلام پین هایی است که می خواهیم از آنها استفاده کنیم. در اینجا می خواهیم از پین شماره 4 (P1.2) به عنوان پین خروجی استفاده کنیم زیرا این پین قابلیت را برای تولید PWM دارد. بنابراین یک متغیر ایجاد می کنیم و نام پین را به آن اختصاص می دهیم تا بعداً در برنامه به راحتی به آن مراجعه شود. کد کامل در انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
int PWMpin = 4; //استفاده از پین 4 برای تولید PWM
در مرحله بعدی وارد setup void
می شویم. هر کد که در اینجا نوشته شود فقط یک بار اجرا می شود ، در اینجا ما اعلام می کنیم که از پین 4 به عنوان پین خروجی استفاده می کنیم زیرا یک PWM خروجی است. توجه داشته باشید که ما به جای شماره 4 از متغیر PWMpin استفاده کرده ایم تا کد معنی دار تر به نظر برسد.
void setup() { pinMode(PWMpin,OUTPUT); //تنظیم پین به عنوان خروجی }
سپس وارد عملکرد void loop ()
می شویم. هرچه اینجا بنویسیم مجددا اجرا می شود.
در این برنامه ما باید ولتاژ آنالوگ را بخوانیم و سیگنال PWM را بر این اساس تولید کنیم و این باید عمل باید به صورت مداوم اتفاق بیفتد. بنابراین ابتدا بیایید با خواندن ولتاژ آنالوگ از پین A0 که متصل به پتانسیومتر است شروع کنیم.
در اینجا ما با استفاده از تابع AanalogRead
مقدار را می خوانیم ، این تابع براساس مقدار ولتاژ اعمال شده روی پین ، مقدار 0-1024 تولید میکند. سپس این مقدار را در زیر متغیر به نام “Val” ذخیره می کنیم. تبدیل آنالوگ به دیجیتال به صورت کامل در قسمت قبلی آموزش توضیح داده شده است.
int val = analogRead(A0); // خواندن مقدار ولتاژ از پین A0
ما باید مقادیر 0 تا 1024 را از ADC به مقادیر 0 تا 255 تبدیل کنیم تا آن را به عملکرد PWM بدهیم. چرا باید این تبدیل را انجام دهیم؟ من این را به زودی خواهم گفت ، اما در حال حاضر فقط به یاد داشته باشید که باید تبدیل کنیم. برای تبدیل مجموعه ای از مقادیر به مجموعه ای دیگر از مقادیر ، Energia عملکردی شبیه Map در آردوینو دارد. بنابراین مقادیر 0-1024 را به 0-255 تبدیل می کنیم و آن را در متغیر “val” ذخیره می کنیم.
val = map(val, 0, 1023, 0, 255);
اکنون براساس موقعیت پتانسیومتر یک مقدار متغیر 0-255 داریم. تنها کاری که باید انجام دهیم این است که مقدار 0 تا 255 را به PWM بدهیم.
analogWrite(PWMpin,val);
بیایید به این سوال برگردیم که چرا 0-255 در پین PWM نوشته شده است. این مقدار 0-255 چرخه وظیفه سیگنال PWM را تعیین می کند. به عنوان مثال اگر مقدار سیگنال 0 باشد ، بدین معنی است که چرخه وظیفه 0٪ است، در مقدار 127 آن 50٪ و برای 255 چرخه وظیفه 100٪ است دقیقاً مثل آنچه در ابتدای مقاله نشان داده شده و توضیح داده شده است.
کد کامل
کد کامل کنترل روشنایی ال ای دی با PWM در برد MSP430 در باکس زیر آورده شده است.
int PWMpin = 4; void setup() { pinMode(PWMpin,OUTPUT); } void loop() { int val = analogRead(A0); val = map(val, 0, 1023, 0, 255); analogWrite(PWMpin,val); }
هنگامی که کد را در برد آپلود کردید و اتصالات را نیز مانند شماتیک مدار انجام دادید، نوبت به تست پروژه میرسد. فقط کافیست پتانسیومتر را بچرخانید تا تغییر در روشنایی ال ای دی را مشاهده کنید.
قسمت بعد : آموزش کنترل سروو موتور با لانچ پد MSP430