برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

آموزش نحوه راه اندازی درایور MD5 با آردوینو Arduino

ShahBaz | سه شنبه, ۱ اسفند ۱۳۹۶، ۱۰:۴۷ ب.ظ

آموزش نحوه راه اندازی درایور MD5 با آردوینو Arduino

توسط محمود حسن پور دهنوی · تیر ۱۰, ۱۳۹۵

مقدمه

در این مقاله  قصد داریم نحوه راه اندازی درایور MD5 را با برد آموزشی Arduino توضیح دهیم. آردوینو یک بورد آموزشی پلتفرم می ­باشد که به صورت Open-Source و بر مبنای سادگی استفاده از سخت افزار و نرم افزار طراحی شده است. بورد آردوینو می ­تواند ورودی ­های مختلف از قبیل انواع سنسور و پیام ­های صوتی و متنی را دریافت کرده و متناسب با آن خروجی­ های مطلوبی را به منظور کنترل یک موتور، روشن کردن یک LED، انتشار پیام به صورت آنلاین و… تولید نماید.

درایور MD5

درایور MD5 قادر است سرعت یک موتور DC را از طریق دریافت پالس PWM کنترل نماید. رنج ولتاژ کاری درایور از ۵٫۵ تا ۳۶ ولت و قابلیت جریان دهی آن تا ۱۰ آمپر می ­باشد. در شکل زیر نمایی از درایور و شماتیک آن را مشاهده می ­کنید.

md5

شکل۱: درایور موتور MD5

شماتیک مدار کنترلی

برای تولید پالس PWM راه­ حل­ های مختلفی وجود دارد که یکی از آن­ها استفاده از بورد آردوینو می ­باشد. در شکل زیر می ­توانید نحوه اتصال بورد آردوینو به درایور MD5 را مشاهده نمایید.

Ciruit

شکل۲: شماتیک مدار کنترلی

همان طور که در شکل بالا مشاهده می ­کنید درایور MD5 شامل سه قسمت می­ باشد. بخش یک وروردی توان درایور می­ باشد که بایستی به منبع توان جریان مستقیم در رنج ولتاژ ۵٫۵ تا ۳۶ ولت متصل شود. بخش سه خروجی درایور بوده که باید به موتور DC متصل شود. در بخش دو ورودی­ های فعال ساز، کنترلی و تعیین جهت قرار دارند.

مطابق شکل بالا ابتدا بایستی ولتاژ +۵V و GND را از بورد آردوینو به برد بورد منتقل کنیم. سپس پایه +۵V در درایور را به خط ولتاژ مثبت پنج ولت در برد بورد متصل می ­کنیم، با اتصال پایه +۵V درایور به ولتاژ مثبت پنج ولت، درایور فعال خواهد شد. در گام بعد پایه PWM درایور را به پین سه آردوینو و پایه­ های تعیین جهت INB و INA را به ترتیب به پایه­ های ۸ و ۹ آردوینو متصل می ­کنیم.

نوشتن کد آردوینو

در زیر می ­توانید کدهای برنامه را مشاهده کنید.
int motorPin = 3;
int DirPin8  = 8;
int DirPin9  = 9;
void setup()
{
  pinMode(motorPin,OUTPUT);
  pinMode(DirPin8,OUTPUT);
  pinMode(DirPin9,OUTPUT);
  digitalWrite(DirPin8, LOW);
  digitalWrite(DirPin9, LOW);
  Serial.begin(9600);
  while(! Serial);
  Serial.println("Speed 0 to 255");
}
 
void loop()
{
  if(Serial.available())
  {
     int speed = Serial.parseInt();
     if(speed >= 0 && speed<= 127)
     {
        speed = speed*2;
        digitalWrite(DirPin8, LOW);
        digitalWrite(DirPin9, HIGH);
        analogWrite(motorPin,speed);
     }
     else
     {
        speed = (255-speed)*2;
        digitalWrite(DirPin8, HIGH);
        digitalWrite(DirPin9, LOW);
        analogWrite(motorPin,speed);
     }
  }  
}
int motorPin = 3;
int DirPin8  = 8;
int DirPin9  = 9;
void setup()
{
  pinMode(motorPin,OUTPUT);
  pinMode(DirPin8,OUTPUT);
  pinMode(DirPin9,OUTPUT);
  digitalWrite(DirPin8, LOW);
  digitalWrite(DirPin9, LOW);
  Serial.begin(9600);
  while(! Serial);
  Serial.println("Speed 0 to 255");
}

void loop()
{
  if(Serial.available())
  {
     int speed = Serial.parseInt();
     if(speed >= 0 && speed<= 127)
     {
        speed = speed*2;
        digitalWrite(DirPin8, LOW);
        digitalWrite(DirPin9, HIGH);
        analogWrite(motorPin,speed);
     }
     else
     {
        speed = (255-speed)*2;
        digitalWrite(DirPin8, HIGH);
        digitalWrite(DirPin9, LOW);
        analogWrite(motorPin,speed);
     }
 

کد فوق می­ تواند سرعت موتور DC را در دو جهت کنترل کند. بدین منظور بایستی از قمست Tools در نرم افزار آردوینو وارد Serial Monitor شوید، سپس با وارد کردن یک عدد بین ۰ تا ۲۵۵ می تواند سرعت موتور را کنترل کنید بدین صورت که از عدد ۰ تا ۱۲۷ سرعت موتور در جهت مستقیم و از عدد ۱۲۸ تا ۲۵۵ سرعت موتور در جهت برعکس کنترل خواهد شد.  توضیح کد برنامه و نحوه عملکرد آن را می ­توانید در فیلم آموزشی زیر مشاهده کنید.


انجمن پرسش و پاسخ ربات سازان

  • ShahBaz

معرفی استپر موتور(stepper motor)

ShahBaz | سه شنبه, ۱ اسفند ۱۳۹۶، ۰۸:۳۲ ب.ظ

معرفی استپر موتور(stepper motor)

۰J4511.600

در این پست بحث ما در مورد موتور پله‌ ای است. موتور پله‌ ای(stepper motor) یک وسیله پرکاربرد است که پالس های الکتریکی را به حرکت مکانیکی تبدیل می کند.در کاربرد هایی مانند کنترل هارد دیسک،چاپگرهای ماتریس نقطه ای و روباتیک، موتور پله‌ ای برای کنترل موقعیت استفاده میشود. موتور پله‌ ای نمونه ای از موتورهای الکتریکی هستند که بدون استفاده از فیدبک امکان کنترل سرعت و تنظیم موقعیت حرکتی را در اختیار ما قرار می دهند.با تحریک ورودی توسط پالس موتور به اندازه چند درجه حول محور خود دوران می کند.در حقیقت یک موتور پله‌ ای پالس الکتریکی را به حرکت مکانیکی تبدیل می کند.عملکرد اصلی یک موتور پله ای به شفت موتور اجازه می دهدتا به اندازه زاویه ای دقیق مطابق پالس های الکتریکی ارسالی به موتور بچرخد. از آنجا که شفت موتور فقط به اندازه زاویه طراحی شده هنگام پالس الکتریکی حرکت می کنه می توان با کنترل پالس های الکتریکی ارسالی موقعیت و سرعت را کنترل کرد.

اگر شفت موتور در حالت سکون یا صفر باشد، میزان گشتاوری که از طرف یک منبع خارجی برای تکان دادن شفت از محل فعلیش نیاز است، گشتاور نگهدارنده نامیده می شود.گشتاور نگهدارنده به موتور های پله ای این اجازه را می دهد که موقعیت خود را به هنگام توقف به طور محکم حفط کنند.موتور پله ای عموما در موقعیت توقف بدون انرژی باقی می ماند و هنگامی که تغذیه موتور به طور کلی قطع شود بصورت مغناطیسی در موقعیت قبلی خود قفل می شود.واحد سرعت موتور پله ای (step/s) یا گام بر ثانیه می باشد که تابعی از میزان سوئیچینگ می باشد.یعنی با افزایش سرعت پالس دهی سرعت موتور زیاد می شود. موتور پله‌ ای امتیازاتی را نسبت به موتورهای عادی دارند که مهمترین آن کنترل گشتاور است. تا زمانی که انرژی لازم برای یک موتور پله ای فراهم شود، استاتور در برابر هر تلاش برای تغییر وضعیت مقاومت خواهد کرد.

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

مهمترین اجزاء تشکیل دهنده یک موتور الکتریکی

۱-روتور:

روتور همان شفت مرکزی موتور می باشد.در موتورهای dc معمولی سیم پیچها برروی روتور قرار دارند و با چرخش روتور می چرخند و آهن ربای دائم ثابت است. ولی در موتورهای پله ای آهن ربای دائم بر روی روتور قرار می گیرد و سیم پیچ ثابت می باشد.

۲-استاتور:

استاتور در موتورهای dc معمولی از یک آهنربای دائمی تشکیل شده است که گرداگرد شفت روتور قرار گرفته است. در موتورهای پله ای سیم پیچها در این بخش قرار دارند.  برخی موتورها مخصوصأ موتورهای بزرگتر از یک آهنربای الکتریکی به عنوان استاتور استفاده می کنند. پیش از اینکه آهنرباهای دائمی با قدرت های متنوع امروزی ساخته شوند، استاتورها از آهنرباهای الکتریکی تشکیل شده بودند.

 

زاویه پله

زاویه ای را که شفت موتور به ازای پیمودن یک گام طی می کند زاویه پله می گویند.به عبارتی زاویه پله مینیمم زاویه چرخش در ارتباط با یک پله است.

باید توجه داشت که برخلاف برداشت اولیه ای که به ذهن می رسد یک موتور پله ای برای رسیدن به پله های کوچکتر نیاز به تعداد سیم های بیشتری در استاتور ندارد.بیشتر موتورها ۴ سیم برای سیم پیچ استاتور(A,B,C,D) و دو سیم مشترک برای سر وسط دارند.برخی از تولید کنندگان به جای دو سیم فقط از یک سیم برای سیگنال مشترک استفاده می کنند.

ارتباط تعداد پله در ثانیه و RPM

 اگر تعداد دور بر دقیقه(RPM) را در تعداد پله در یک دور ضرب کنیم و بعد عدد حاصل را بر ۶۰ تقسیم کنیم تعدارد پله در ثانیه بدست می آید.

موتورهای پله ای به دو دسته کلی تقسیم می شوند 

۱- موتورهای تک قطبی

متعارفترین موتورهای پله ای تک قطبی چهار استاتور سیم پیچ دارند که دو به دو باهم زوج هستند و بر طبق شکل زیر (lead-5)دارای یک سر وسط مشترک میباشند. در این موتورها از سیم پیچ ها در یک جهت جریان کشیده می شود و به همین جهت  به موتور پله ای چهار فاز یا تک قطبی معروف هستند.شفت موتور پله ای یک حرکت تکرار پذیر یا پله ای دارد که امکان حرکت آن به یک مکان دقیق را فراهم می کند.این موتورها دارای پنج یا شش سیم برای اتصال هستند و معمولأ با ۳٫۶ در هر گام ( ۱۰۰ گام در یک چرخ کامل) و یا ۷٫۵در هر گام ( ۴۸ گام در یک چرخ کامل) ساخته می شوند.

 اگر موتور پله ای پنج سیمه باشد، یکی از آنها سیم مشترک است که به مثبت منبع تغذیه متصل می شود و چهار سیم دیگر به فازهای موتور متصل می شوند.برخی انواع موتورهای پله ای شش سیمه هستند. این موتورها دارای دو مجموعه سیم پیچ هستند و معمولأ در پرینترها استفاده می شوند.جابه جایی موتور پله ای از یک نقطه به نقطه دیگر باعث حرکت دورانی آن می شود. تعداد جابه جایی هایی که برای انجام یک چرخش کامل انجام می شود با تعداد گام های آن برابر است و از ویژگی های اختصاصی هر موتور پله ای می باشد. معمولأ موتورها با تعداد گام ها و یا درجه ی هر گام توصیف می شوند. تعدادی سیم پیچ در بدنه این موتورها تعبیه شده است که جابجایی دقیق موتور از یک نقطه به نقطه دیگر را ممکن می سازد.این سیم پیچ ها در استاتور یا بدنه موتور قرار گرفته اند.در شکل زیر آرایش انواع موتور های تک قطبی ۴،۵ و ۶ سیم را مشاهده می کنید.

۳lbbjpvj4eif1z0bsb28 (1)

شکل زیر یک موتور پله ای تک قطبی از نوع شش سیم دوفاز است.در هر فاز سر شماره ۲ سر مشترک است.در این شکل فاز یک با رنگ قرمز و فاز ۲ با رنگ آبی نمایش داده شده است.

A1IpU (1)

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

تصویر زیر نحوه اعمال پالس به یک موتور پله ای ۶ سیمه، در حالت نیم گام را نشان می دهد.سیم a سر مشترک دوسیم ۱a و ۲a، و سیم b سر مشترک دو سیم  ۱b و ۲b می باشد.

step-hrot (1)

انواع آرایش موتور پله ای تک قطبی

۱-دوفاز: 

مصرف توان در این حالت دوبرابر حالت نوسانی است. در این حالت در هر لحظه به دوسیم پالس ارسال می شود.

 ۴PDOPHA

۲-نیم گام: 

در این آرایش گام موتور نصف گام در حالت دوفاز است و دقت بالاتری دارد.در موتورهای نیم گام، ابتدا دو سیم پیچ و سپس یک سیم پیچ روشن می شود و این فرایند به صورت متناوب ادامه می یابد.

۸PDOPHA

۳-نوسانی:

 در این آرایش در هر لحظه تنها به یک سیم پالس ارسال می شود.

SHPDOPHA

تشخیص سیم های موتور پله ای تک قطبی پنج سیمه 

برای تشخیص آرایش مناسب یک موتور تک قطبی پنج سیمه به یک باتری و یک نوار چسب نیاز داریم. از یک ماژیک برای نشانه گذاری سیم پیچ ها استفاده می کنیم تا در قسمت های بعدی مکان روتور قابل تشخیص باشد.با استفاده از یک ولتمتر دیجیتالی سیم مشترک را پیدا می کنیم. این سیم نسبت به تمام سیم پیچ ها مقدار مقاومت یکسانی را نشان می دهد. سیم مشترک را به مثبت تغذیه متصل می کنیم. ولتاژ مناسب  ۵ تا ۶ ولت است.تکه ای از نوار چسب را به صورت عمودی بر روی شفت موتور قرار می دهیم. این نوار چسب به عنوان یک نشانه و برای مشاهده جابجایی موتور پله ای استفاده می شود.به دلخواه یک سیم پیچ را انتخاب می کنیم و آن را فاز یک می نامیم. این سیم را به زمین متصل می کنیم، ممکن است پس از اتصال شفت جابجایی کوچکی داشته باشد. در این وضعیت روتور بر روی فاز یک قفل می شود. سیم دیگری را انتخاب کرده و آن را به زمین متصل می کنیم و به دقت تغییرات نوار چسب روی شفت را مشاهده می کنیم. اگر شفت کمی به سمت راست چرخید، این سیم فاز دو می باشد. سیم دیگری را انتخاب نموده و آن را به زمین متصل می کنیم، به دقت نوار چسب روی شفت را نگاه می کنیم. اگر شفت مقدار کمی به سمت چپ بچرخد، این سیم فاز چهار می باشد.سیم آخر را انتخاب کرده و به زمین متصل می کنیم و به دقت به حرکت شفت نگاه می کنیم. اگر شفت ثابت بماند و جابجایی نداشته باشد، این سیم فاز سوم می باشد.

راه اندازی موتور پله ای تک قطبی

 برای راه اندازی یک موتور پله ای می توانیم از ترانزیستور های ماسفت و دوقطبی استفاده کنیم.بسته به توان مصرفی موتور می توان نوع و قدرت ترانزیستور را مشخص کرد.البته درایورهایی به صورت مدار مجتمع در بازار وجود دارد که معمول ترین آنها آیسی های uln2003 و uln2004 می باشند.

drivercpu-npn

۲- موتورهای دو قطبی

در این موتورها هر سیم پیچ در دو جهت برق دار می شود و هر کدام از سیم پیچ ها می تواند پلاریته مربوط به خود را داشته باشد. این موتورها یک سیمه نیز نامیده می شوند زیرا هر قطب یک سیم پیچ دارد. موتورهای پله ای دو قطبی چهار سیم پیچ دارند و هر جفت از آنها برای یک سیم پیچ در نظر گرفته شده است. هر سیم پیچ در یک موتور پله ای دو قطبی به یک منبع تغذیه معکوس شونده مانند درایور H-bridge نیاز دارد. از آنجاییکه موتورهای دو قطبی قوی تر از انواع تک قطبی هستند، در طراحی هایی که فضا محدودتر است مورد استفاده قرار می گیرند. یکی از کاربردهای این موتورها استفاده در فلاپی درایورهای کامپیوتر است.

                           step_motor1_2motorconnection_3

انواع آرایش موتور پله ای دو قطبی

۱-دوفاز: 

BI2PHAZ

 ۲-نیم گام: 

BI2NPHAZ

۳-نوسانی: 

BI1PHAZ

تشخیص سیم پیچ های موتور پله ای دو قطبی

 با استفاده از ولتمتر دیجیتالی دو سیم پیچ موتور را شناسایی کنید. اگر دو سیم مقاومت یکسانی داشتند متعلق به یک سیم پیچ هستند و دو سیم دیگر مربوط به سیم پیچ دیگر می باشند.

راه اندازی موتور پله ای دو قطبی

 برای راه اندازی یک موتور پله ای دو قطبی می توانیم از ترانزیستور های ماسفت و دوقطبی در آرایش  H-bridge استفاده کنیم. بسته به توان مصرفی موتور می توان نوع و قدرت ترانزیستور را مشخص کرد.البته درایورهایی به صورت مدار مجتمع در بازار وجود دارد که معمول ترین آنها آیسی l298 می باشد.

bipobpolar

  • ShahBaz

حلقه for در متلب

ShahBaz | دوشنبه, ۳۰ بهمن ۱۳۹۶، ۱۲:۰۵ ق.ظ

حلقه for در متلب

حلقه for در نرم افزار متلب ( matlab ) بیانگر تعداد تکرار دستورات به اندازه و گام حرکتی مشخص است ، ساختار کلی این حلقه در نرم افزار متلب بفرم زیر است

for  (parameter name)=initial : increament : final

     (  دستور یا فرمولهای محاسباتی )

end

مثال :

فرض کنید میخواهیم مقدار سینوس را در بازه 0 تا 2pi با گام 0.1pi  در نرم افزار متلب محاسبه کرده و در ماتریس سطری y ذخیره نمائیم و سپس نمودار مربوطه را ترسیم کنیم :

حل : یک m-file در نرم افزار مطلب باز کرده و برنامه زیر را در آن تایپ کنید :

clc;

clear all;

i=0;

for k=0:0.1*pi:2*pi

    i=i+1

    y(1,i)=sin(k);

    x(1,i)=k

end

plot(x,y,'b','linewidth',2)

axis([0 2*pi -2 2])

grid on

box off

legend('sin(x)')

قبل از اینکه برنامه را در مطلب اجرا کنید نکاتی راجع به آن توضیح میدهیم

همانگونه که از ساختار حلقه for  مشاهده می شود بعد از نوشتن این تابع در جلو این تابع با حداقل یک کاراکتر فاصله ( یا  بیشتر )  نام متغیر دلخواه مانند k نوشته می شود این متغیر لازم نیست حتما در دستورات داخل حلقه بکار رود بلکه مفهوم آن به عنوان یک پارامتر برای اینکه چند بار دستورات داخل حلقه اجرا شوند که در برنامه فوق تعداد تکرار 21 بار می باشد .

حال ساختاربرنامه فوق طوری است که از همین متغیر k برای سرعت بخشیدن به محاسبات نیز توانستیم استفاده نمائیم ، در داخل حلقه ازیک عبارت i=i+1 که در خارج از حلقه i=0 قرار داده ایم استفاده کرده ایم که شاید یرایتان مبهم باشد ، اصطلاحا به اینگونه متغیرها ، شماره انداز گفته می شود  .

نحوه عملکرد شماره انداز بدین صورت است که در حالت اول که i=0 فرض شده وارد حلقه می شویم و مقدار i بفرم i=i+1=0+1=1 تغیر می ابد ، پس در اولین اجرای حلقه i=1 شد ، در اجرای دوم حلقه مقدار جدید iدر رابطه قرار داده می شود و لذا i=i+1=1+1=2 و درنتیجه در اجرای دوم i=2 شد به همین ترتیب با هربار اجرای حلقه مقدار i به اندازه یک واحد ( میتوانید به دلخواه افزایش آنرا تغییر دهید )  افزایش پیدا می کند تفکر ایجاد شماره انداز شاید در ظاهر امری ساده و بیهوده به نظر برسد ولی در بسیاری از برنامه ها کاربرد آن را خواهید دید ، مثلا در برنامه فوق برای ایجاد شماره ستونهای ماتریس yو x مورد استفاده قرار گرفته است .

دستورات دیگر از حلقه for در نرم افزار مطلب ( matlab ) دستورات ترسیم دو بعدی می باشند که در قسمت مربوطه به طور مفصل شرح داده خواهد شد ، بعد از اجرای برنامه در نرم افزار متلب خروجی برنامه شما بصورت زیر خواهد بود :

   شما می توانید چندین حلقه for   را که نیاز داشتید بصورت تو در تو بکار ببرید ، البته نحوه اجرا بدین صورت خواهد بود که بعد از هر بار اجرای کامل حلقه داخلی حلقه خارجی فقط یکبار اجرا خواهد شد :

for i=1:5

    for j=1:3

        a(i,j)=2*j-i;

    end

end

نحوه عملکرد برنامه فوق را شرح میدهیم :

    

خروجی برنامه فوق ماتریس a را بفرم زیر مشاهده خواهید کرد :

a =

 

     1     3     5

     0     2     4

    -1     1     3

 ساده ترین تصوری که میتوان از عملکرد حلقه های تو در تو بیان کرد همانند عملکرد عقربه های ثانیه شمار و دقیقه شمار و ساعت شمار است که میتوان آنرا مشابه سه حلقه تو در تو دانست که به ازاء هربار اجرای داخلی ترین حلقه ( ثانیه شمار) حلقه خارجی آن یک گام به جلو ( دقیقه شمار) و به ازای هریار اجرای کامل این حلقه ( دقیقه شمار) حلقه خارجی آن( ساعت شمار یک گام ) به جلوتر میرود  :

     مثال ااز سه حلقه تو در توی for  در متلب:

 

F{1,1} = [1 2; 3 4];

F{1,2} = [-1 0; 0 1];

F{2,1} = [7 8; 4 1];

F{2,2} = [4i 3+2i; 1-8i 5];

 

for k = 1:4

   for m = 1:2

      for n = 1:2

         NUM(m,n,k) = F{k}(m,n);

      end

   end

end

  • ShahBaz

نحوه انتخاب گیربکس

ShahBaz | شنبه, ۲۸ بهمن ۱۳۹۶، ۰۹:۰۵ ب.ظ

نحوه انتخاب گیربکس

نحوه انتخاب گیربکس

نحوه انتخاب گیربکس


به منظور انتخاب گیربکس مناسب و بهره برداری بهینه از آن، لازم است اطلاعات کافی نسبت به عوامل موثر در کارکرد گیربکس را در نظر بگیریم. در هنگام انتخاب یک گیربکس، تعدادی از ضرایب وجود دارد که می تواند در سایز نهایی گیربکس تاثیر گذار باشد اطلاعات موجود در انتخاب ویژگی های گیربکس و اطلاعات فنی، جزییات این ضرائب را برای استفاده در فرآیند انتخاب فراهم می گند.
روش انتخاب گیربکس
 
عوامل موثر در انتخاب گیربکس، الکترو گیربکس:
1.    نوع ماشینی که گیربکس برای آن انتخاب شده است.
2.    دمای محیط
3.    شرایط محیط (گرد و خاکی بودن، رطوبتی بودن، یخ زدگی، استوایی و ...)
4.    موتور محرک (نوع و مشخصات)
5.    نوع انتقال بین موتور گیربکس (مستقیم، از طریق کوپلینگ کلاچ، واریاتور)
6.    آرایش محور ها
7.    مقدار بار شعاعی ویا پیشران و علل آن.

اطلاعات اختصاصی
1.    سرعت ورودی گیربکس (rpm)
2.    سرعت خروجی گیربکس ( rpm)
3.    پیکر بندی گیربکس
4.    گشتاورخروجی مورد نیاز(N.m)
5.    ساعت کارکرد در روز
6.    نسبت تبدیل ( i)
7.    توان ورودی  (KW1 – HP1)
8.    توان خروجی (KW2 - HP2)
9.    دور ورودی (n1)
10.    دور خروجی (n2)
11.    روش انتقال
12.    دمای محیط کار
13.    ضریب کار (s.f)
14.    دوره کار (Running Time %)
15.    بازنده گیربکس (dη)
16.    توان ورودی مرجع (الکترو موتور
17.    برنامه گیربکس
18.    تعدادشروع( استارت ) در ساعت
توان ورودی HP1 – KW1
توان هایی که در کاتالوگ ذکر شده است، توان ورودی گیربکس هستند و توان خروجی به روش زیر محاسبه می گردد.
KW2(HP2) =KW1(HP1) * dη

ضریب کار:
به دلیل اینکه گیربکس ها تحت بار متغیر کار می کنند بهتر است در هنگام انتخاب گیربکس ضریب کار (s.d) مناسب باشد. این ضریب به ما این امکان را می دهد گیربکس با مشخصات مناسب برای کار مورد نیاز انتخاب نماییم.
جدول ضرایب کاری که می بایست در هنگام انتخاب گیربکس در نظر گرفت:

جدول انتخاب گیربکس
 
گشتاور خروجی:
مقادیرM2  که در کاتالوگ مشخص شده اند واقعی می باشند، زیرا بازده گیربکس را در محاسبه آنها درنظر گرفته ایم، این مقادیر باید مساوی یا بیشتر از گشتاور نیروی مورد نیاز برای کار ماشین باشد.
برای انتخاب گیربکس به موارد زیر توجه می نماییم:

محاسبه داده ها:
1.    محاسبه نسبت تبدیل
INPUT SPEED / OUT PUT SPEED
بطور نمونه: 2= 500/1000 که نشاندهنده کاهشی بودن گیربکس می باشد.
2.    محاسبه گشتاور خروجی تصحیح شده:
Required Output Torque  * F1 * F2 * F3
در زمانیکه بیش از 2 شافت خروجی وجود دارد گشتاور خروجی مورد نیاز برای گیربگس، مجموع تک تک گشتارهای خروجی شافت های خروجی می باشد.
187.5 = 1.00 *1.00 * 1.25 * 150
3.    محاسبه توان خروجی تصحیح شده:
Required Output Torque* Output Speed / 9550
(187.5 * 500) = 9.82kw
4. محاسبه توان ورودی:
Output power / Efficiency
( بازدهی گیربکس بین 95% و 98% بعد از راه اندازی اولیه)
9.82 / 0.98 = 10.02kw

انتخاب ضرایب طراحی:
ضریب بار
با استفاده از اطلاعات مشخص شده شماره های 5،16 و 17 در اطلاعات اختصاصی بالا ضریب باراز جدول زیر انتخاب می شود.
جدول انتخاب گیربکس

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

ضریب حد حرارتی – چرخه کار (duty cycle)

با استفاده از اطلاعات مشخص شده شماره 14 اطلاعات اختصاصی حد حرارتی، چرخه کار، ضریب از جدول زیر انتخاب می شود.
  20      40        60        80        100             Duty Cycle per Hour (%)
2.00     1.75     1.50     1.25     1.00              Thermal Limit factor

ضریب حد حرارتی – دمای محیط
  50        40         30         20         10          Ambient Temperature
 0.62     0.75      0.87       1.00      1.20        Thermal Limit Factor
تاریخ درج: 1396/02/10
  • ShahBaz

نصب فونت فارسی

ShahBaz | جمعه, ۸ دی ۱۳۹۶، ۱۱:۰۶ ق.ظ

روشهای نصب فونت فارسی در لینوکس

یکی از روش‌های نصب فونت فارسی در لینوکس توسط فایل‌های فونت استفاده شده در ویندوز هستش بدین صورت که شما در مسیر home خود یک دایرکتوری با نام fonts. ایجاد کرده و تمامی فونت‌هایی که می‌خواهید در لینوکس به آن‌ها دسترسی داشته باشید را در این قسمت قرار می‌دهید.

برای این کار از دستورات زیر به ترتیب استفاده کنید.


1 – cd ~
2 – mkdir .fonts


روش دوم نصب فونت در لینوکس

در این روش ما از طریق git اقدام به نصب فونت فارسی در لینوکس می‌کنیم، برای این کار دستورات زیر را در سیستم‌عامل اوبونتو خود وارد نمایید.


sudo apt install git
git clone https://github.com/fzerorubigd/persian-fonts-linux.git
cd persian-fonts-linux/
./farsifonts.sh


بعد از واردکردن دستورات بالا با صفحه‌ای همانند عکس زیر مواجه خواهید شد که می‌توانید قلم موردنظر خود را انتخاب کنید، چنانچه بخواهید تمامی قلم‌ها برای شما نصب شود می‌توانید با واردکردن عدد 277 به معنی All همه فونت‌ها را نصب نمایید.

آموزش نصب فونت فارسی در لینوکس

در بسیاری از موارد، روش‌های بالا ممکن است برای شما راهگشا نباشد برای همین میتوانید از روش آخر که تقریباً در تمامی موارد بدون هیچ مشکلی کار خواهد کرد و فونت فارسی به درستی بر روی لینوکس شما رندر خواهد شد استفاده کنید.


روش سوم

ابتدا با دسترسی روت دستور زیر را در محیط خط فرمان لینوکس خود وارد کنید.

  • gksu nautilus /usr/share/fonts/truetype



این یک دایرکتوری سیستمی بوده و فونت‌هایی که در این مسیر قرار بگیرند برای تمامی کاربران قابل‌دسترس خواهند بود.

حال یک دایرکتوری در این مسیر ایجاد کرده و تمامی فونت‌های موردنظر خود را در آن قرار دهید.

  • Mkdir fonts



حالا برای اعمال تغییرات فونت فارسی در لینوکس دستور زیر را جهت Rebuild وارد نمایید.

  • sudo fc-cache -f -v



در برخی از مواقع اگر مشاهده کردید که تغییرات هنوز اعمال نشده یک‌بار از سیستم Logout کنید و دوباره Login کنید تا مشکل برطرف شود.

در مواردی هم که باز مشاهده کردید که مرورگر شما به درستی فونت‌های فارسی را پشتیبانی نمی‌کند می‌توانید توسط مخزن اوبونتو و دستور apt اقدام به نصب پکیج msttcorefonts نمایید.

  • Apt install msttcorefonts

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

  • ShahBaz

رفع خرابی پاور سویچینگ ال ای دی

ShahBaz | چهارشنبه, ۶ دی ۱۳۹۶، ۰۹:۰۱ ب.ظ

در هنگام متصل بودن بار به پاور، پاور خروجی ندارد و لامپ خروجی پاور خاموش هست. صدای وز وز هم از پاور به گوش میرسد. فن پاور کار میکند.

 وقتی بار برداشته شود، لامپ خروجی پاور روشن می شود ولی همچنان وز وز به گوش میرسد.

راه حل: تعویض خازن 50ولت 47 میکرو فاراد الکترولیتی.(سمتی که 2 خازن بزرگ قرار دارد. نزدیک ای سی)

تقویت لحیم دو خازن بزرگ 250 ولت 470 میکرو فاراد

تعویض یک ترانزیستور قدرت (D13009K) نزدیک به خازن های بزرگ یا شاید تقویت لحیم

  • ShahBaz

راه اندازی سرو موتور با AVR

ShahBaz | يكشنبه, ۳ دی ۱۳۹۶، ۱۰:۲۶ ب.ظ

راه اندازی سرو موتور با AVR

در این پروژه با استفاده از میکروکنترلر AVR Atmega32 و LCD متنی سروموتور SG90 را راه اندازی نموده ایم. این پروژه به زبان C و در کامپایلر CodeVision AVR نوشته شده است. سروو موتور SG90 که در این پروژه استفاده شده است یک سرو موتور کوچک است که تنها ۹ گرم وزن دارد. این سرو موتور ، یکی از سروو موتور های اقتصادی موجود در بازار است که با قیمتی کمتر از ۱۰ هزارتومان ( بین ۲ الی ۳ دلار ) در بازار قابل تهیه است. از این سرو موتور به دلیل وزن پایینش در ساخت هواپیما های مدل استفاده می شود. البته از این سرو موتور برای کارهایی که نیاز به دقت زیاد و قدرت بالا دارند نمی توان استفاده نمود.

راه اندازی سرو موتور SG90

پالس استاندارد سروو موتور ها دارای دیوتی سایکل بین ۱ الی ۲ میلی ثانیه در دوره ۲۰ میلی ثانیه است ( فرکانس ۵۰ هرتز ) اما در عمل سروو موتور SG90 با پالس ۷۶۰ میکرو ثانیه در موقعیت ۰ و با پالس ۲۵۶۰ میکرو ثانیه در موقعیت MAX قرار می گرفت. اعداد موجود در کد اعداد استاندارد هستند ، اما اعداد عملی برای SG90 در ادامه همان خط از برنامه ب صورت کامنت نوشته شده است.

در این پروژه از Timer1 میکرو کنترلر ATmega32 که یک تایمر ۱۶ بیتی است برای ایجاد PWM در مد phase and frequency correct pwm mode استفاده شده است. فرکانس این تایمر ۱ مگاهرتز در نظر گرفته شده و مقدار بالای شمارش ( ICR1 ) برابر با ۱۰٫۰۰۰ در نظر گرفته شده است. اما شاید بخواهید بدانید این اعداد چگونه انتخاب شده اند ؟! این اعداد با توجه به فرمول زیر که از دیتاشیت ATmega32 استخراج شده است محاسبه شده اند. همانطور که می دانید فرکانس استاندارد کنترل سرو موتور ۵۰ هرتز است و فرکانس میکرو را بر روی ۸ مگاهرتز تنظیم نموده ایم و با در نظر گرفتن prescaler 8 ( فرکانس PWM را ۱ مگاهرتز در نظرگرفتیم ، در نتیجه N یا ضریب تقسیم فرکانس اصلی میکرو برابر ۸ خواهد بود ) بنا بر این باید با استفاده از فرمول زیر مقدار TOP که همان ICR1 است را به دست آوریم :

این مطلب را از دست ندهید  راه اندازی ماژول WiFi ESP8266 (قسمت دوم)

۵۰=۸٫۰۰۰٫۰۰۰/(۲*۸*TOP) => 50=8.000.000/(16*TOP) => TOP=10.000

 

فرمول محاسبه فرکانس PWM

با انجام این کار ما یک تایمر ۲۰ میلی ثانیه ای خواهیم داشت که در ۲۰ میلی ثانیه از ۰ تا ۱۰٫۰۰۰ را می شمارد ، بنابراین هر واحد شمارش این تایمر ، ۲ میکرو ثانیه زمان خواهد برد.

همانطور که می دانید برای مشخص کردن Duty Cycle خروجی OC1A ( پورت D5 ) از رجیستر OCR1A استفاده می نماییم. بر اساس توضیحات فوق هر یک واحد شمارش ۲ میکرو ثانیه زمان خواهد برد بنابر این اگر قصد داریم دیوتی سایکل ۱۰۰۰ میکرو ثانیه ( ۱ میلی ثانیه ) داشته باشیم کافیست OCR1A را برابر ۵۰۰ قرار دهیم. در صورتی که OCR1A را برابر ۷۵۰ قرار دهیم دیوتی سایکل ۱٫۵ میلی ثانیه خواهد بود.

با تعیین دیوتی سایکل بین ۱ میلی ثانیه و ۲ میلی ثانیه می توانید موقعیت سرو را تعیین کنید. به فرض مثال ۱ میلی ثانیه زاویه ۰ و ۲ میلی ثانیه زاویه ۱۸۰ ( برای یک سروو موتور ۱۸۰ درجه ) بنا بر این ۱۸۰ درجه در ۱۰۰۰ میکرو ثانیه مقدار دهی می شوند بنا بر این برای هر درجه باید ۵٫۵ میکرو ثانیه به دیوتی سایکل اضافه نمایید بدین سان با اعمال دیوتی سایکل ۱۰۵۵ میکرو ثانیه ای ، سرو در زاویه ۱۰ درجه قرار می گیرد و با اعمال دیوتی سایکل ۱۳۳۳ در موقعیت ۶۰ درجه قرار خواهد گرفت.

راه اندازی سرو موتور با AVR

دانلود برنامه و شبیه سازی راه اندازی سرو موتور با AVR : 


دانلود فایل با لینک مستقیم

  • ShahBaz

PWM چیست

ShahBaz | يكشنبه, ۳ دی ۱۳۹۶، ۱۰:۰۸ ب.ظ

PWM چیست؟!

 

در بسیاری از موارد، ما نیاز به کنترل ولتاژ بر روی پایه‌های خروجی میکروکنترلر را داریم. مثلاً اگر بخواهیم سرعت موتور را کنترل کنیم، باید ولتاژی که بر روی موتور اعمال می‌شود را کنترل کرد. در حقیقت سرعت موتور تقریباًً تابع مستقیمی از ولتاژی است که بر روی آن اعمال می‌شود. یعنی اگر ولتاژ کاریِ موتوری (ولتاژ استاندارد برای فعال سازی موتور که بر روی بدنه‌ی آن نوشته می‌شود) 12 ولت باشد، با اعمال ولتاژ 6 ولت روی آن، می‌توانید سرعت چرخش آن(rpm) را حدوداً به نصف کاهش دهید.
کنترل سرعت ربات، در همه‌ی سطوح رباتیک اهمیت بسیار زیادی دارد، از ربات‌های مسیریاب ساده گرفته تا ربات‌های فوتبالیست. ما تا کنون یاد گرفته‌ایم که چگونه می‌توان به موتور دستور حرکت یا توقف داد، اما راهی برای کنترل سرعت موتور یاد نگرفته‌ایم.
یادآوری
همانطور که می‌دانید سطح ولتاژ پایه‌های خروجی میکروکنترلر منطقی است، یعنی یک پایه‌ای که برای کنترل موتور ربات استفاده می‌شود فقط می‌تواند 0 یا 1 باشد. ما 2 پایه از میکروکنترلر را به حرکت ربات اختصاص می‌دهیم، برای صدور دستور حرکت، باید یک پایه را 0 و پایه‌ی دیگر را 1 کنیم، در این حالت بین 2 پایه‌ی موتور اختلاف پتانسیل برقرار می‌شود و حرکت می‌کند. اگر هم بخواهیم موتور معکوس بچرخد، باید پایه‌ای که 1 بود 0 ، و پایه‌ای که 0 بود را 1 کنیم؛ و برای توقف موتور، باید هر دو پایه را 0 یا هر دو پایه را 1 کنیم (تا بین 2 پایه‌ی موتور اختلاف پتانسیل 0 ولت باشد). در نتیجه در حالت عادی ما فقط 2 فرمان "حرکت" و "توقف" را می‌توانیم به موتورها بدهیم، و ما هیچ کنترلی بر روی سرعت موتور نداریم.
PWM تکنیکی است که به کمک آن می‌توانیم ولتاژ پایه‌های خروجی میکروکنترلر، و در نتیجه سرعت موتور یا سایر قطعات جانبی که به میکروکنترلر متصل می‌شود را کنترل کنیم.

PWM مخفف واژه‌ی Pulse Width Modulation و به معنای "مدولاسیون پهنای پالس" است. همانطور که گفتیم PWM تکنیکی برای کنترل ولتاژِ پایه‌ی خروجی است. حال ببینیم چگونه با این تکنیک می‌توان ولتاژ خروجی را کنترل کرد.
می‌دانیم که ولتاژ در پایه‌های خروجی میکروکنترلر یا 0 است یا 5 ولت، اما برای کنترل سرعت موتور، باید بتوانیم حداقل ولتاژ یکی از پایه‌ها را بین 0 تا 5 تغییر دهیم. PWM روشی است تا ما بتوانیم با استفاده از همین پایه‌ی خروجی معمولی، به نوعی ولتاژ را بین 0 تا 5 ولت تغییر دهیم.
در این روش، ما با سرعت بالایی سطح ولتاژ خروجی را 0 و بلافاصله 1 می‌کنیم(مثلاً هزار بار در ثانیه)، نمودار ولتاژ خروجی بر حسب زمان به شکل زیر می‌شود.

 

نمودار بالا ولتاژ خروجی این پایه بر حسب زمان است.

 


در شکل بالا جمع 2 بازه‌ای که با فلش‌های 2طرفه نشان داده شده است، (به عنوان مثال) 10 میکرو ثانیه است. که 5میکرو ثانیه خروجی 1 و سپس 5میکرو ثانیه 0 می‌شود. اما همانطور که گفته شد، این عمل هزاران بار در ثانیه تکرار می‌شود، اما آیا موتور نیز به همین تعداد در ثانیه روشن و خاموش می‌شود؟
جواب منفیست، اتفاقی که روی می‌دهد این است که موتور، این موج را در درون خود به نوعی میانگین گیری می‌کند و در حقیقت آنرا به شکل زیر می بیند:


یعنی در واقع موتور این موج را به صورت یک ولتاژ 2.5 ولت معمولی دریافت می‌کند.
به همین ترتیب می‌توان هر ولتاژی بین 0 تا 5 ولت را بر روی خروجی‌ مورد نظر ایجاد کرد. اگر بخواهیم ولتاژی بالاتر از 2.5 ولت داشته باشیم، باید طول بازه‌های زمانی‌ای که خروجی 1 است را نسبت به بازه‌هایی که خروجی 0 است بیشتر کنیم. به عنوان مثال برای ایجاد ولتاژ 2.5 ولت، باید 5 میکرو ثانیه سطح ولتاژ خروجی 1 باشد، سپس 5 میکرو ثانیه سطح ولتاژ 0 شود تا موجی به شکل بالا ایجاد شود.
یا به عنوان مثالی دیگر، اگر بخواهیم در خروجی ولتاژ 4 ولت داشته باشیم، باید باید 8 میکرو ثانیه سطح ولتاژ خروجی 1 باشد، سپس 2 میکرو ثانیه سطح ولتاژ 0 شود، تا ولتاژ پایه‌ی خروجی مورد نظر 4 ولت باشد.
در حقیقت ولتاژ خروجی از رابطه‌ی ساده‌ی زیر به دست می‌اید:

(طول کل بازه)  / ( طول بازه‌ای که خروجی 1 است)

 

پس طبق رابطه‌ی بالا،برای ایجاد ولتاژ 4 ولت، می‌توان به جای استفاده از بازه‌های 8 و 2 میکرو ثانیه‌ای، از بازه‌های 4 و 1 میکرو‌ ثانیه‌ای استفاده کرد. (یعنی 4میکرو ثانیه 5ولت، 1 میکرو ثانیه 0 ولت)

زیرا:   2÷ 8 = 1÷4

نمودار ولتاژ‌های 4 ولت و 1 ولت در زیر نشان داده شده است:

 

  

نمودار نحوه‌ی تولید ولتاژ 4 ولت با تکنیک PWM. 

 

 

 

 

 نمودار نحوه‌ی تولید ولتاژ 1 ولت با تکنیک PWM.

 
حال ببینیم چگونه می‌توان برنامه‌ای نوشت تا بر روی پایه‌ای دلخواه از میکروکنترلر PWM ی برای ولتاژ 4 ولت ایجاد کرد.
هر دستوری که بر روی خروجی‌های میکروکنترلر قرار می‌گیرد، تا زمانی که دستور بعدی، خروجی را تغییر ندهد، آن خروجی تغییری نخواهد کرد. یعنی مثلاً زمانی که پایه‌ای را 1 می‌کنیم، تا زمانیکه با دستور دیگری آن پایه را 0 کنیم، مقدار خروجی آن پایه‌ 1 خواهد ماند. به این عمل اصطلاحاً Latch کردن می‌گویند. میکروکنترلر همواره اطلاعاتی که بر روی خروجی قرار می‌دهد را Latch می‌کند و تا زمانیکه اطلاعات جدید بر روی پایه قرار نگیرد، اطلاعات قبلی را تغییر نمی‌دهد.
در نتیجه، مثلاً اگر می‌خواهیم پایه‌ای را 5 میکروثانیه 1 وسپس 0 کنیم، کافیست پایه‌ی مورد نظر را 1 کنیم و 5میلی ثانیه در برنامه تاخیر ایجاد کنیم و سپس پایه‌ی مورد نظر را 0 کنیم.
پس وقتی می خواهیم مثلاَ بر روی پایه‌ی B.4 ، یک PWM برای ولتاژ 2.5 ولت ایجاد کنیم، باید به شکل زیر عمل کنیم.

 



while(1)
{
PORTB.4=1;
5 میکرو ثانیه تاخیر
PORTB.4=0;
5 میکرو ثانیه تاخیر
}


در بالا یک حلقه‌ی بی‌نهایت تعریف شده است که بر روی پایه‌یB.4، یک PWM برای 2.5 ولت ایجاد می‌کند.

 

مبحث کدویژن، وقفه و PWM :

ابتدا با توابعی که برای ایجاد وقفه در اجرای دستورات برنامه توسط CodeVision برای کاربران در نظر گرفته شده آشنا می‌شویم.
همان‌طور که در میحث پیش دیدیم، در قسمت‌هایی از برنامه ممکن است نیاز پیدا کنیم تا برای لحظاتی روند اجرای دستورات را متوقف کنیم. CodeVision برای این کار توابعی را از پیش تنظیم کرده است. (در مورد مبحث «توابع» در زبان C در آینده مفصل توضیح خواهیم داد.)

delay :
برای ایجاد تاخیر در روند اجرای دستورات، CodeVision دو تابع زیر را در اختیار ما قرار داده است.

delay_ms( );
delay_us( );


 تابع ()delay_ms برای ایجاد تاخیر‌هایی در حد میلی ثانیه به کار می‌رود. در داخل پرانتز، یک عدد صحیح مثبت می‌نویسیم که نشان دهنده‌ی اندازه‌ی تاخیر مورد نیز ما بر حسب میلی ثانیه است. به بیان ساده‌تر، مثلاً اگر داخل پرانتز عدد 100 را بنویسیم، روند اجرای برنامه به اندازه‌ی 100 میلی ثانیه در همان خط متوقف خواهد شد.
تابع ()delay_us برای ایجاد تاخیر‌هایی در حد میکروثانیه به کار می‌رود. نحوه‌ی استفاده از آن دقیقاً مانند ()delay_ms است.
به عنوان یک مثال عملی،همان برنامه‌ی ایجاد PWM 2.5 ولت را با استفاده از توابع delay بازنویسی می‌کنیم.




while(1)
{
PORTB.4=1;
delay_ms(5);   // 5 milliseconds delay
PORTB.4=0;
delay_ms(5);    //5 milliseconds delay
}


 
تنها نکته‌ی بسیار مهم در استفاده از توابع delay اضافه کردن هِدِرفایل Header file  باعنوان delay.h به برنامه است.( در مورد هدر فایل‌ها هم در آینده توضیح خواهیم داد، اما در این مبحث هیچ توضیحی در مورد آن نمی‌دهیم تا از بحث اصلی یعنی PWM منحرف نشویم.) برای این کار، جمله

 

#include <mega16.h> 

 

 ‌که اولین جمله‌ی برنامه‌ی شما است را پیدا کنید. (این جمله را CodeWizard در برنامه‌ی شما نوشته است). حال کافیست این جمله را درست زیر ان تایپ کنید:
دقت کنید که این دستور نیازی به « ; » ندارد !!
با آموختن تابع delay، دیگر شما می‌توانید هر ولتاژی را که می‌خواهید بر روی پایه‌های خروجی ایجاد کنید. البته دوستان دقت داشته باشند که ولتاژی که با تکنیک PWM شبیه سازی می‌شوند، در حقیقت ولتاژ خاصی نیستند و فقط شبیه سازی شده‌ی ولتاژهای مختلف هستند. هرچند که در راه‌اندازی موتورها این تکنیک بسیار کارآمد است، اما باید دقت نظر لازم را در استفاده از این تکنیک در سایر موارد را داشته باشید.
همانطور که می‌دانید موتور‌های متعارفی که برای ساخت ربات‌ها استفاده می‌شود،ممکن است ولتاژ‌های کاری مختلفی داشته باشند (مثلاً 12ولت، 24 ولت، 6 ولت و ...) و برای راه‌اندازی آن‌ها باید از درایور‌های موتور مثل L298 استفاده ‌کنیم.  سوالی که ممکن است پیش آید این است که وقتی ما میکروکنترلر را به درایور‌های موتور(مثل L298) وصل می‌کنیم و از تکنیک PWM برای کنترل سرعت موتور استفاده می‌کنیم، چه وضعیتی پیش می‌آید؟ مثلاً وقتی ما PWM مربوط به ولتاژ 2.5 ولت را تولید می‌کنیم، درایور ما چه عکس العملی نشان می‌دهد؟ آیا ولتاژ 2.5 ولت بر روی پایه‌های موتور قرار می‌گیرد؟
برای پاسخ دادن به این سوال باید به ساختار PWM دقت کنیم، ما وقتی PWM مربوط  به 2.5 ولت را تولید می‌کنیم، در حقیقت سطح ولتاژ خروجی را با فواصل زمانی برابر 0 و 1 می‌کنیم، پس اگر این خروجی را، به ورودی L298 وصل کنیم(مثلاً پایه‌ی 7)، L298 نیز موتور را با همین الگو ‌کنترل می‌کند و ولتاژی که به موتور می‌دهد را 0 و 1  می‌کند. و همانطور که می‌دانید، L298 هر ولتاژی که بر روی پایه‌‌ی شماره‌ی 4 آن قرار گرفته باشد را بر روی موتور قرار می‌دهد(اگر ولتاژ کاری موتور 12 ولت باشد، باید این پایه به 12 ولت متصل شود) . پس جواب سوال بالا منفیست!!!  وقتی ما PWM مربوط به 2.5 ولت را تولید می‌کنیم، در حقیقت سطح ولتاژ خروجی در 50 درصد زمان 1 و بقیه‌ی زمان 0 است. پس اگر همان طور که در بالا اشاره شد، این PWM به درایوری مثل L298 داده شود، و ولتاژ پایه‌ی 4 ِ آن 12ولت باشد، درایور، ولتاژ 6 ولت را به موتور می‌دهد. در نتیجه اهمیتی ندارد چه ولتاژی بر روی پایه‌ی 4 ِ L298 قرار گرفته باشد، وقتی که ما PWM مربوط به 2.5 ولت را تولید می‌کنیم، درایور ولتاژی که به موتور می‌دهد را 50 درصد می‌کند. در نتیجه بهتر است از این به بعد به جای آن که بگوییم PWM مربوط به 2.5 ولت، بگوییم PWMااا50 درصد. یا به جای PWM ِمربوط به 1 ولت، بگوییم PWMااا20 درصد

PWM در میکروکنترلر‌های AVR :

انجام تنظیمات اولیه برای استفاده از PWM برای راه اندازی موتور درمیکروکنترلر‌های AVR کمی پیچیده است، اما در اینجا هم CodeWizard به کمک ما آمده است و کار را کمی ساده‌تر کرده است. ما در ادامه مبحث، تنظیمات CodeWizard را بدون توضیح مطرح می‌نماییم، زیرا توضیح هر بخش از آن نیازمند مقدمات مفصلی است و تاثیر چندانی هم در روند کار ما ندارد، اما به دوستانی که می‌خواهند میکروکنترلر را کاملاً حرفه‌ای دنبال کنند، پیشنهاد می‌کنم از منابعی که قبلاً معرفی شده است، مطالب را تکمیل کنند.
به هر حال دوستان عزیز با انجام این تنظیمات اولیه‌ی مختصر در CodeWizard، می‌توانند از الگویی به مراتب ساده‌تر از آنچه تا به حال آموخته‌ایم، برای ایجاد PWM برای هدایت موتورهای ربات استفاده نمایند.

در میکروکنترلر‌های خانواده‌ی AVR، نیازی نیست در هربار استفاده از PWM ، چندین خط برنامه بنویسیم.  در ATmega16 چهارپایه‌ی مشخص از آی سی به این موضوع اختصاص داده شده است. یعنی این چهارپایه علاوه بر کاربرد‌های معمولی خود، این قابلیت را دارند که در مواقع لزوم برای تولید PWM استفاده شوند.
حال سوال اینجاست که این چهارپایه چه تفاوتی با بقیه‌ی پایه‌های خروجی آی‌سی دارند که آن‌ها را از سایر پایه‌های خروجی میکروکنترلر متمایز می‌سازد؟
برای این چهارپایه نیازی به اجرای الگویی که تا به حال برای ایجاد PWM فراگرفته‌اید نیست. در این روش، فقط  شما باید یک عدد صحیح بین 0 تا 255 انتخاب کنید، و طبق الگوی زیر آن را در برنامه‌ی خود بنویسید.

 

 

یک عدد صحیح بین 0 تا 255 = نام رجیستر مربوطه‌  ;

 


این عدد، بیانگر توان PWM شماست، و  شما توان PWM ِ مورد نیاز خود را با این عدد مشخص می‌کنید. که 255 بالاترین توان و مربوط بهPWMااا100 درصداست، و  0 پایین‌ترین توان و مربوط به PWMااا0 درصد است.
به عنوان مثال اگر این عدد را  128 قرار دهید، همان PWMااا50 درصد را ایجاد کرده‌اید. یا مثلا اگر این عدد 51 باشد، PWMااا20 درصد بر روی پایه قرار داده‌اید.

رجیستر‌های مربوط به این 4 پایه :
همانطور که می‌دانید، برای پایه‌هایی که در CodeWizard به صورت خروجی تعریف شده‌اند، رجیستری به نام «PORTx» وجود دارد که هر مقداری در این رجیستر قرار داده ‌شود، مقدار پایه‌های خروجی متناظر با آن رجیستر را مشخص می‌کند.
در این مبحث با 4 رجیستر دیگر آشنا می‌شویم، که وقتی تنظیمات مربوط به PWM ِ موتور در CodeWizard را انجام  دهیم، هر مقداری که در‌ آن‌ها ریخته شود، توان PWM پایه‌ی متناظر را مشخص می‌کنند.
این رجیستر‌ها OCR0، OCR1AL، OCR1BL و OCR2 نام دارند که به ترتیب، متناظر پایه‌های PB.3، PD.5، PD.4  و PD.7‌ هستند.
پس مثلاً اگر در بخشی از برنامه‌ی خود بنویسیم :

 

OCR0=127;


 در حقیقت بر روی پایه‌ی PB.3 میکروکنترلر، PWMااا50-درصد به وجود آورده‌ایم.

به مثال‌های دیگری توجه کنید: (توضیح هر دستور در جلوی دستور و  بعد از // آورده شده است)

 

 

OCR1AL=51; // 20% Duty Cycle on PD.5
OCR1BL=255; //100% Duty Cycle on PD.4
OCR2=0;  //0% Duty Cycle on PD.7

 


در ادامه این مبحث، در مورد نحوه‌ی انجام تنظیمات اولیه‌ جهت تولید PWM در CodeWizard را توضیح خواهیم داد....


همانطور که در مباحث قبلی هم متذکر شدیم، در اینجا مجال نیست تا تمام مباحث مربوط به PWM و تایمرها را باز کنیم و مفصل به آن‌ها بپردازیم، به همین خاطر در این بخش قسمتی از تنظیمات در CodeWizard را بدون توضیح آموزش می‌دهیم.
برای انجام تنظیمات به کمک CodeWizard،پس از انجام تنظیمات سایر لبه‌ها (مانند Ports، Chip و .... ) در CodeWizard، لبه‌ی Timers را باز کنید.
 همانطور که می‌بینید میکروکنترلر ATmega16 دارای 3 تایمر مجزا است و ما برای تولید PWM باید از این تایمرها استفاده کنیم. تایمر‌ها کاربرد‌ها‌ی متعددی دارند، و یکی از مهم‌ترین مباحث در میکروکنترلر هستند، ما هم  در مورد تایمر‌ها در جلسات آینده مفصل توضیح خواهیم داد. اما در این مبحث فقط استفاده از تایمر‌ها را برای ایجاد PWM برای کنترل موتور‌های ربات استفاده می‌کنیم.



Timer0
 Timer0 مربوط به رجیستر OCR0 است و باید به شکل زیر تنظیم شود:

 



نکته‌ای که در مورد تنظیم هر 3 تایمر باید رعایت شود، این است که در بخش "Clock Value" باید پایین‌ترین فرکانس را انتخاب کنید. در این مورد توضیح مختصری می‌دهم، ولی اگر عزیزان این بند را متوجه نشوند اهمیت زیادی ندارد: اندازه‌ی فرکانسی  که انتخاب می‌کنید در این بخش، در حکم اندازه‌ی همان Delayهایی است که برای تولید PWM به صورت عادی (که در ابتدای مبحث قبل توضیح دادیم) استفاده می‌کنیم. یعنی در حقیقت طول موج را در نمودار ولتاژ بر زمان تعیین می‌کند. هر چه فرکانس بالاتری را انتخاب کنید، طول موج کمتر می‌شود. در عمل دیده شده که هر چه فرکانس پایین‌تر باشد و در نتیجه طول موج بیشتر باشد، موتور‌ها بهتر هدایت می‌شوند. به همین خاطر در بالا گفته شد که دوستان پایین‌ترین فرکانس را برای "Clock Value" انتخاب کنند.

Timer1
 تایمر1 باید به شکل زیر تنظیم شود. دقت کنید که ممکن است در بخش Clock Value شما فرکانسی که در شکل زیر نمایش داده شده است را در گزینه‌ها نداشته باشید، ولی همانطور که گفته شد فقط مهم این است که شما پایین‌ترین فرکانس را انتخاب کنید.

 

همانطور که می‌بینید، تایمر1 دارای دو خروجی مجزا است که رجیستر‌های مربوط به آن‌ها OCR1AL و OCR1BL هستند.
Timer2
 تایمر2 میز به شکل زیر تنظیم می‌شود و مانند تایمر0 فقط یک خروجی دارد.



Watchdog
  یا سگ نگهبان (Watch Dog)  نیز یکی از مباحث مربوط به تایمر‌هاست که در ادامه بحث به آن خواهیم پرداخت.

حال که همه‌ی تنظیمات لازم را در CodeWizard انجام داده‌اید، "Generate, Save and Exit" انتخاب کنید و وارد فضای برنامه نویسی شوید.

نکته‌ی بسیار مهم:
برای کنترل هر موتور، علاوه بر یک پایه‌ی PWM، یک خروجی معمولی نیز لازم داریم تا بتوانیم به وسیله‌ی این دو پایه و به کمک درایور موتور، اختلاف پتانسیل مورد نظر را بر روی دو پایه‌ی موتور برقرار کنیم. این 2 پایه را به دو پایه‌ی ورودی L298 متصل می‌کنیم و دو پایه‌ی موتور را نیز، به دو پایه‌ی خروجی  L298 متصل می‌کنیم. حال می‌توانیم موتور را به وسیله‌ی میکروکنترلر با سرعت دلخواه کنترل کنیم. به عنوان مثال اگر بخواهیم موتور ما تقریباً با سرعت نصف بچرخد، و پایه‌های PD.6 و PD.7 (مربوط به رجیستر OCR2) را به L298 متصل کرده باشیم،برنامه‌ی زیر را باید بنویسیم:

 

OCR2=127;
PORTD.6=0;

و اگر بخواهیم موتور ما با همین سرعت و در جهت معکوس بچرخد، می‌نویسیم:

OCR2=127;
PORTD.6=1;

 

برای درک این موضوع دقت کنید که در این حالت چه ولتاژی توسط L298 بر روی موتورها قرار داده می‌شود. همانطور که می‌دانید، سرعت و جهت چرخش موتور وابسته به اختلاف ولتاژی است که بر روی پایه‌های موتور قرار داده می‌شود.
 
تا به اینجا مباحث پایه‌ای در میکروکنترلر‌های AVR مطرح شده است و همین آموخته‌های دوستان، نیاز‌های اولیه‌ی شما عزیزان را برای ساخت ربات‌های نسبتاً حرفه‌ای برطرف می‌سازد.

یکی از مهمترین فواید استفاده از میکروکنترلر در ساخت ربات‌های مسیریاب، استفاده از قابلیت PWM برای هدایت موتور‌های ربات است. اما به چه صورت از PWM استفاده می‌کنیم؟

 



به شکل بالا نگاه کنید، در همانطور که می دانید در این ربات ها  3 سنسور هر طرف را با همدیگر  ANDمنطقی می‌کنیم و اگر هر یک از این 3 سنسور خط را تشخیص داد، موتور همان سمت را متوقف می‌کنیم تا به این ترتیب ربات خط را  تعقیب کند.
اما در ربات‌های مسیریاب میکروکنترلر دار، ما می‌توانیم برای هر سنسور، به طور مجزا دستوری به موتور بدهیم. برای درک این موضوع مجدد به شکل بالا نگاه کنید، این نمای کلی یک ربات از زیر است. سنسور‌های آن را به ترتیب از چپ به راست، از 7 تا 1 شماره گذاری می‌کنیم.
همانطور که به خاط دارید در ربات‌های بدون میکروکنترلر، تفاوتی نداشت که سنسور 1 یا 2 یا 3 کدامیک خط را بیابند، هر کدام خط را تشخیص می‌داد، موتور سمت چپ خاموش می‌شد. اما در ربات‌های میکروکنترلر دار، ما می‌توانیم تعیین کنیم که مثلاً اگر سنسور شماره‌ی 3 خط را دید، موتور سمت چپ به طور کامل متوقف نشود، بلکه سرعت آن به نصف کاهش پیدا کند. این کار به نظر هم منطقی می‌رسد، زیرا سنسور شماره‌ی 3 و 5 تا خط فاصله‌ی کمی دارند و نیاز نیست وقتی خط را تشخیص می‌دهند به طور کامل موتور متوقف شود، بلکه فقط کافیست سرعت موتور کمی کاهش پیدا کند تا ربات به تدریج به روی خط باز گردد. این عمل باعث می‌شود حرکت ربات نرم‌تر و دقیق‌تر بشود و در مجموع سرعت ربات بالاتر برود.
حال اگر سنسور شماره‌ی 2 خط را ببیند، یعنی شرایط کمی خطرناک‌تر شده و ربات ممکن است از خط خارج شود، پس می‌توانیم در اینجا به موتور دستور توقف کامل را بدهیم تا ربات با سرعت بیشتری به مسیر مسابقه بازگردد. و در نهایت اگر سنسور شماره‌ی 1 خط را ببیند، یعنی ربات در آستانه‌ی خروج از مسیر مسابقه قرار گرفته است و باید با حداکثر توان ربات را به مسیر مسابقه بازگرداند. برای این کار به موتور سمت چپ دستور باز گشت به عقب را می‌دهیم. این کار بیشترین سرعت ممکن برای چرخش ربات را فراهم می‌سازد و ربات با سرعت زیادی به زمینه مسابقه باز می‌گردد.
در زیر بخشی از برنامه‌ی یک ربات مسیریاب پیشرفته، که فقط برای سنسور‌های سمت چپ و طبق توضیحات بالا نوشته شده است را می‌بینید. همانطور که می‌دانید ما نیاز به 3 پایه به عنوان ورودی برای دریافت وضعیت سنسورهای سمت چپ، و یک پایه‌ی خروجی و یک PWM برای کنترل موتور سمت چپ داریم که به ترتیب زیر هستند:
PA.0 برای سنسور شماره‌ی 1
PA.1 برای سنسور شماره‌ی 2
PA.2 برای سنسور شماره‌ی 3
PD.6 و OCR2 برای کنترل موتور چپ
PD.3 و OCR1BL برای کنترل موتور راست
حالا به برنامه دقت کنید:

 

 

 

(if (PINA.0==0
{
PORTD.6=0;
OCR2=127;

PORTD.3=0;
OCR1BL=255;
}


(if (PINA.1==0
{
PORTD.6=0
OCR2=0

PORTD.3=0;
OCR1BL=255;
}


(if (PINA.2==0
{
PORTD.6=1;
OCR2=0;

PORTD.3=0;
OCR1BL=255 ;  //end

 

{


به همین منوال باید برای سنسور‌های سمت راست هم برنامه را ادامه دهید. دقت کنید که باید حتماً قبل از نوشتن برنامه، از داخل CodeWizard، تنظیمات اولیه را انجام دهید.
اگر این سنسور  خط را تشخیص دهد، بیانگر این است که ربات در وضعیت مناسبی نسبت به خط قرار دارد و هر 2 موتور با تمام توان به سمت جلو حرکت می‌کنند. اگر  پایه‌ی PA.3 را نیز به سنسور وسط اختصاص دهیم، برای این سنسور نیز داریم:




 

(if (PINA.3==0
{
PORTD.6=0;
OCR2=255;

PORTD.3=0;
OCR1BL=255;
}

  • ShahBaz