اموزش ربات سازی
ساعت ٢:٤٠ ‎ب.ظ روز ۱۳۸٧/۳/٤  

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

 

روی ادامه مطلب کلیک کنید


سلام دوستان.

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

 

امروز می خواهیم برنامه ای بنویسیم که بوسیله اون بشه استپر موتورهامون رو راه اندازی کنیم (عین همین روش رو باید در برنامه اصلی ربات استفاده کنیم) :

 

 

 

$crystal = 1000000

$regfile = "m32def.dat"

 

Config Portb = Output

Config Portc = Output

 

Dim A As Byte

Dim B As Byte

 

B = &B10001000

A = &B10001000

 

Do

  Rotate A , Left

  Portb = A

 

  Rotate B , Right

  Portc = B

 

  Waitms 15

Loop

 

End

 

خوب حالا خط به خط تحلیل می کنیم. البته خوب یادمه توضیحات کاملی رو در مورد کدهای استفاده شده در چهار خط اول در پست های "آموزش ساخت ربات (میکرو کنترلر 1 - 2 - 3 - 4) دادم. پس اگه یادتون رفته بهشون دوباره سر بزنید.

 

 

Dim A As Byte

Dim B As Byte

 

کلا در زبان های خانواده بیسیک که کامپایلر BASCOM هم از اون استفاده می کنه، از کلمات Dim و as به صورت Dim varname as type برای تعریف متغیر استفاده می شه، که varname نام متغیر و type نوع متغیر هستش. در اینجا دو متغیر به نامهای A و B با نوع Byte معرفی شدن (هر بایت از ? بیت تشکیل شده)

 

 

B = &B10001000

A = &B10001000

استفاده از " مقدار = نام متغیر " که برای همه قابل درکه (یعنی یک مقدار رو داخل متغیر بریزیم) اما در اینجا بجای مقدار از &B10001000 استفاده شده. برای قرار دادن مقادیر به صورت باینری در یک متغیر (در این زبان) باید مقدار باینری رو بعد از B& بنویسم. در اینجا، هم در A و هم در B مقدار باینری ???????? معادل دهدهی ??? رو قرار دادیم. که دلیلش رو توضیح خواهم داد.

 

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

Do

  'some code

Loop

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

راستی یادتونه که در بیسیک هر متنی که بعد از علامت " ' " قرار میگیره به عنوان توضیحات محصوب میشه. شما میتونید در قسمتهای مختلف کدتون از توضیحات استفاده کنید تا اگر کدتون طولانی شد یا اون رو به بقیه دادید در فهمش دچار مشکل نشید.

 

 

 

Rotate A , Left

 

شاید ندونید که در بیسیک (وبعضی زبانهای دیگه) میشه از توابع و رویه ها بدون حضور پرانتز استفاده کرد! در این کد هم در واقع Rotate یک دستور یا رویه هستش که در اینجا ? مقدار ورودی A و Left رو به اون دادیم که بعد از توضیح کار این دستور دلیل استفاده ازا ین ? مقدار رو به عنوان ورودی خواهم گفت. از تابع برای چرخاندن تمام بیتهای یک متغیر به سمت راست یا چپ استفاده میشه...  خوب یادتون هست که A رو به عنوان یک متغیر از نوع بایت معرفی کردیم و اون رو برابر با مقدار دودویی B???????? (یا معادل دهدهی ???) قرار دادیم. پارامتر اول این دستور نام متغیر برای چرخاندن بیتهاش هست و پارامتر دوم یک مقدار LEFT یا RIGHT هستش به معنی چرخش بیتها به سمت چپ یا راست، هستش. در اینجا دستور Rotate باعث چرخش بیتهای A به سمت چپ و تبدیل مقدار اون به B0010001 (معادل دهدهی ??) میشه. اگر توجه کنید می بینید که با استفاده از این دستور هیچ بیتی از بین نمیره! بلکه همه بیتها به چپ یا راست می چرخن. دلیل این کار رو در توضیح کد پایین ملاحضه کنید.

 

 

Portb = A

یادتون هست که پورت b رو به عنوان خروجی معرفی کردیم در این مرحله مقدار خروجی اون رو مشخص می کنیم. دونستیم که هر پورت دارای ? پین هست که میشه با اونها مثل ? بیت یا در کل با یک پورت مثل یک بایت رفتار کرد. در اینجا هم پورت بی رو مساوی متغیر A که اون هم از نوع بایت هست قرار می دیم. چون متغیر A حاوی مقدار B00010001 بود بنابراین پینهای شماره ?،2،?،?،? و ? پورت، صفر و پینهای شماره ? و ? ، یک خواهند شد.

در دوخط بعد نیز اتفاقات بالا عینا برای متغیر B و پورت سی اتفاق میافتد. اما در خط بعد داریم:

 

 

 

Waitms 15

Waitms هم یک دستور یا رویه می باشد که به اندازه مقدار ورودی اش برحسب میلی ثانیه در اجرای برنامه وقفه ایجاد خواهد کرد. مقدار ?? برای تاخیر ?? میلی ثانیه ای در این کد است.

 

در خطهای بعد هم Loop که نماد پایان حلقه و End که قبلا گفتیم نماد پایان برنامه می باشد را داریم اما ببینیم کدهای داخل حلقه چه عملی را انجام می دهند و علت استفاده از انها چیست؟

 

طبق جدولهای پست شماره 19 دیدم که چه بیتهایی را باید پشت سر هم به سیمهای موتور القا کنیم با کمی تامل در کد بالا هم میبینیم که با چرخاندن بیتهای دو متغیر A و B در واقع مدل یک بیتی راه اندازی موتورهای پله ای را شبیه سازی کرده ایم. شما می توانید با وصل کردن ? پین اول پورت b و c به آیسی درایور همانند شکل پست شماره 20 باعث چرخش موتور متصل به پورت b در خلاف جهت ساعت و موتور متصل به پورت c در جهت ساعتگرد شوید.

همچنین با کم کردن مقدار تاخیر در دستور Waitms می توانید باعث افزایش سرعت چرخش شوید. البته توجه کنید این تاخیر را تا حدی معینی می توان کم کرد (? یا ? میلی ثانیه) و کم کردن بیش از حد آن به دلیل گشتاور مشخص موتور نتنها باعث افزایش سرعت نمی شود بلکه مانع از استارت موتور و در نتیجه چرخش آن خواهد شد.

 

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

 

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

 

 

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

 

 

 

$crystal = 1000000

$regfile = "m32def.dat"

 

Config Pinc.0 = Input

Config Pinc.1 = Output

 

Dim Sensor As Byte

 

Do

   Sensor = Pinc.0

   If Sensor = 1 Then

      Pinc.1 = 1

   Else

      Pinc.1 = 0

   End If

Loop

 

End

 

کارکرد این کد:  همونطور که گفتم در این کد قصد داریم از پینهای میکرو به عنوان ورودی ? یا ? استفاده کنیم و بر اساس ? یا ? بودن اون نتیجه گیری کنیم. شما باید سر خروجی یکی از سنسورهاتون رو که مدارش رو در پست شماره 14 و 15 گذاشتم به واسطه یک مقاومت قرمز-قرمز-نارنجی، به پین ? از پورت C میکرو تون وصل کنید سپس سر کاتد یک LED ساده رو (پایه کوتاهه کاتد و بلنده آند هستش) بواسطه یک مقاومت نارنجی-نارنجی-نارنجی به پین ? از پورت C میکرو و سر آند اون رو مستقیما به ? ولت وصل کنید تا بتونیم به این طریق ورودی و خروجی های این برنامه رو شبیه سازی کنیم.

 

 

 

Config Pinc.0 = Input

Config Pinc.1 = Output

گفتیم که از Config PortX = Input/Output برای پیکربندی پورت به عنوان ورودی یا خروجی استفاده می کنیم. اما می توانیم هر کدام از پینهای یک پورت را هم به صورت جدا گانه به عنوان ورودی یا خروجی پیکربندی کنیم. فرمت کلی آن به صورت Config PinX.Y = Input/Output هستش و نمونه اون رو هم که در کد بالا ملاحضه می کنید. در اینجا پین ? از پورت C به عنوان ورودی و پین ? از همان پورت خروجی معرفی شده. ما سنسورمان را به پین ? که  ورودی است وصل کردیم و LED  رو هم به پین ? که خروجی است وصل نمودیم.

 

 

Dim Sensor as Bit

Do

 Sensor = Pinc.0

 ...

Loop

 

در پست قبل گفتم از کلمه Dim برای معرفی متغییر استفاده میشه در اینجا متغیر Sensor از نوع Bit معرفی شده (بیت فقط می تواند ? یا ? باشد). کاربرد حلقه Do...Loop رو هم در پست قبل گفتم. اما کد میانی در واقع مقدار گرفته شده از Pinc.0 که به سنسور متصل است را در متغیر Sensor قرار می دهد. اگر جسم سفیدی مقابل پک سنسورها قرار دهیم این مقدار ? و اگر جسم تیره استفاده کنیم این مقدار ? خواهد بود. درست مثل حالتی که خط سیاهی روی زمینه سفید داریم (یاد مسابقات رباتیک افتادم )

 

   If Sensor = 1 Then

      Pinc.1 = 1

   Else

      Pinc.1 = 0

   End If

در بیسیک با استفاده از IF (expression) Then عبارات شرطی درست می کنیم که Expression همان شرت ماست. در اینجا می گوییم اگر Sensor مساوی ? بود یعنی جسم سیاهی مقابل سنسورمان بود کد بعد از Then را که Pinc.1=1 است را اجرا کن! این کد در واقع مقدار ? را به پین ? از پورت C میکرو ارسال می کند. در واقع این کار باعث خاموش شدن LED متصل به این پین می شود. کلمه Else نیز از موارد اختیاری عبارت شرطی است بدین معنا که اگر شرط برقرار نبود کد بعد از Else را اجرا کن. در این شرط ? بودن متغییر سنسور بررسی می شد، اگر یک نبود (یعنی ? بود) کد Pinc.1=0 اجرا می شود. اینکار باعث روشن شدن LED ما خواهد شد.

 

امیدوارم میکروتون رو با این کد پروگرام کنید و از نتیجه حاصله هرچند پیش پا افتاده لذت ببرید! (من که  هنوزشم خیلی لذت می برم). نمی دونم چطور توضیح میدم! خوب یا بد؟ لطفا بهم بگید که اصلا متوجه میشید و استفاده می کنید یا نه؟ منتظر نظر شما هستم. پس تا پست بعد خدانگهدار

 

 

بچه ها سلام. اگر یکم تاخیر می کنم ببخشید! آخه دارم رو یه سیستم "معرفی کتاب جدید" برا وبلاگ کار می کنم، فکر کنم چیز قشنگی بشه و بزودی همین کنار ملاحضه اش خواهید کرد :).

اما از امروز می خوایم مباحث مربوط به میکرو کنترلر رو شروع کنیم. اگر از ابتدا با من همراه بودید یا اینکه مقالات قبل رو دنبال می کردید حتما یادتونه که چندتا پست اول مقدمات برنامه نویسی به زبان BASCOM برای میکروی AVR رو گفتم (اگر هم یادتون نیست لینکشون همین سمت راسته!). مدار ایجاد ولتاژ مناسب کار میکرو (?ولت) با استفاده از رگولاتور رو هم که تو پست قبل به همراه لینک دانلود کامپایلر BASCOM-AVR گذاشتم (کرکش رو هم امروز آوردم ). بنابراین این جلسه می خوام نحوه ساخت پروگرمر برای میکروهای AVR رو آموزش بدم تا براحتی بتونید کدهایی که من میگم یا خودتون دارید رو روی میکرو بار کنید و بتونید به صورت کاملا عملی کار رو تجربه کنید...

 

 

ساخت پروگرمر STK200\300:

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

 

یک عدد سوکت ?? پین، پورت Parallel یا موازی کامپوتر (از نوع نر)

یک عدد قاب سوکت ذکر شده در صورت تمایل

چند رشته سیم. البته پیشنهاد می کنم از سیم های فلت ?? تایی استفاده کنید.

یک عدد پایه محافظ میکرو ?? پایه

یک عدد میکروکنترلر AVR. پیشنهاد من از نوع ATmega32L/32 هستش.

سایر موارد لازم مثل هویه، سیم قلع، فیبرمدار و....

شکل مقابل پین های سوکت پورت موازی رو با به صورت شماره گذاری از پین ? تا ?? و نحوه اتصال پینهای اون به پایه های میکرو نشون میده. توضیح استفاده هرکدوم از این پینها خارج از بحث ماست فقط بدونید که پینهای ??تا?? باید به زمین وصل بشن و پین ?-? هم مربوط به ? بیت موازی هستند.

 

تصویر پایه های میکروی AVR به همراه اسمشون رو قبلا در پست 13 گذاشتم، ببینیدش که در درک شکل بالا خیلی کمکتون می کنه.. با این حال به علت اهمیت بازم میگم:  پینهای شماره ??الی?? سوکت رو بهم و سپس به GND میکرو که پایه شماره ?? اون هست وصل کنید و بعد پایه شماره ?? میکرو رو هم به سر منفی منبع وصل کنید به همین ترتیب، پین شماره ?? سوکت به MISO یا پایه ? میکرو، پین شماره ? سوکت به RESET یا پایه ? میکرو، پین شماره ? سوکت به MOSI یا پایه ? میکرو، پین شماره ? سوکت به SCK یا پایه ? میکرو وصل کنید و در آخر VCC یا پایه ?? میکرو رو هم به سر مثبت منبع وصل کنید.   بخش سخت افزاری پروگرمر شما به همین سادگی آماده شد.

 

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

 

BASCOM-AVR > Options > Programmer >> Programmer = STK200\300 Programmer

 

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

 

اینم لینک دانلود کرک های برنامه BASCOM-AVR که سری پیش گذاشته بودم:

 

کرک نسخه 1.11.7.3 (32 Clicks)

کرک نسخه 1.11.7.4 (35 Clicks

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

 

 

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

 

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

 

کنترل موتور DC:

حالا اگر بخوایم بریم سر اصل مطلب باید بپردازیم به نحوه کنترل این نوع موتور. می دونم همه دیدید که موتورهای DC (یا آرمیچر خودمون) دارای دو سر هستند که اگر یکی رو به قطب + و دیگری رو به - باطری وصل کنیم باعث چرخش موتور در یک جهت می شیم و اگر جای سیم ها رو عوض کنیم موتور در جهت معکوس خواهد چرخید.

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

 

 

 

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

 

Config Pind.0 = Output                                  'Left Motor

Config Pind.1 = Output                                  'right motor

Config Pinc.0 = Input                                   'left sensor

Config Pinc.1 = Input                                   'right sensor

Lm Alias Portd.0

Rm Alias Portd.1

Dim Ls As Bit

Dim Rs As Bit

Do

   Ls = Pinc.0

   Rs = Pinc.1

   If Ls = 1 And Rs = 0 Then

      Rm = 1

      Lm = 0

   End If

   If Ls = 0 And Rs = 1 Then

      Rm = 0

      Lm = 1

   End If

   If Ls = 0 And Rs = 0 Then

      Rm = 1

      Lm = 1

   End If

Loop

End

البته می دونم این مقاله خیلی هم یونیک (منظور باحال بید) و در سطح مقالات قبلی نیست، اما درواقع به عنوان مقدمه ای برای مقاله بعدیم که معرفی و آموزش نحوه استفاده از یکی از پیشرفته ترین و محبوبترین درایور های موتور DC هست لازم بود. به علاوه اینکه خیلی ها هم میگن چون ما الکترونیک کار نکردیم برای درک بهتر مطالب الکتریکی، بیشتر توضیح بده. بنابراین امیدوارم حداقل این دوستان استفاده کرده باشن. راستی حتما چندتا پست بعدی رو دنبال کنید که قول میدم ضرر نکنید! پس تا

 

سلام دوباره به همه دوستان دوست داشتنی و کامنت نذار خودم  !

 

 

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

 

مطالب پایه و حتی تکراری رو در مقاله قبلی راجع به موتورهای DC به عنوان پیش زمینه ای برای معرفی درایور محبوب و جادویی این نوع موتور ذکر کردم. اما دلیل استفاده نکردن از همون درایور ULN2803 و مدارهای دیگه ای شبیه اون، اینه که ما در کنترل موتورمون به قابلیت هایی همچون حرکت به عقب و جلو، کنترل سرعت، کنترل جریان و توقف آنی موتور احتیاج داریم و این نیازهارو درایور مورد نظر ما یعنی L298 براحتی تامین کی کنه. L298 یک آیسی پل-H دوتایی ( DUAL H-Bridge) دارای ?? پایه هستش که همونطور که گفتم قادره وظایفی چون چرخش موتور به عقب و جلو، کنترل سرعت، کنترل جریان و توقف آنی موتور رو برای ما انجام بده. ولی قبل از معرفی بیشتر این آیسی می خوام یکم در مورد واژه ای که برای معرفی این آیسی استفاده کردم یعنی H-Bridge توضیح بدم:

 

تئوری H-Bridge:

شکل زیر شماتیک ساده ای از مدار پل-اچ به همراه جدول صحت آن نمایش می دهه. برای راه انداختن یک موتور ما باید به آن ولتاژ بدهیم، در این مدار ما این کار را با استفاده از چند ترانزیستور NPN به شرح زیر انجام می دهیم (اگر اطلاعات لازم راجع به ترانزیستور ندارید به این مقاله از وبلاگ دخترا یه نگاه بندازید). با توجه به جدول صحت در می یابیم که برای چرخش یک موتور به سمت جلو (توجه کنید که جهت چرخش جلو و عقب موتور در اینجا فقط نمادهایی برای توضیح هستند. اگرنه ای جهت ها بستگی به نحوه قرار گیری و... موتور شما دارد) بایستی Q1 و Q2 روشن شوند. این کار سر مثبت باتری را به سمت چپ موتور (از طریق Q1) و سر منفی باطری را به طرف دیگر موتور (از طریق Q4) اتصال می دهد.

برای چرخش موتور در جهت مخالف باید ترانزیستورهای قبلی را خاموش کرده و Q2 و Q3 را روشن کنیم. حالا سر مثبت باتری به سمت راست موتور (از طریق Q3) و سمت چپ باطری به سر منفی باطری (از طریق Q2) اتصال داده می شود. در این حالت ما قطبیت باطری را معکوس کرده و باعث چرخش موتور در سمت مخالف خواهیم شد.

 

 

 

می بینید هر بار که موتور روشن می شود دوتا از ترانزیستورها هم در حال گذردهی جریان هستند. هر ترانزیستور در حدود 0.7 ولت افت ولتاژ دارد (علت را می توانید در مقاله بالا بخوانید). پس ولتاژی که از طریق دوترانزیستور به موتور می رسد 1,4 ولت کمتر از ولتاژ منبع می باشد. بدین معنی که اگر شما یک موتور ?? ولت دارید برای اینکه از حداکثر توان آن (در ?? ولت) استفاده کنید باید از یک منبع 13,4 ولتی استفاده کنید.

همچنین توجه کنید که اگر دو ترانزیستور Q1 و Q2 (یا Q3 و Q4) همزمان روشن باشند شما باعث ایجاد اتصال کوتاه در دو سر باطری می شوید اما آیسی L298 دارای منطق داخلی هست که از وقوع این اتفاق جلوگیری می کند.

 

خوب حالا فهمیدیم کلمات "DUAL H-Bridge" که برای معرفی L298 بکار می رود بدین معنا هست که این آیسی حاوی دوعدد پل-اچ برای کنترل ? موتور می باشد. تصویر این آیسی را در شکل مقابل مشاهده می کنید.

این آیسی در حال حاضر در میان ربات سازان محبوبیت زیادی داره و در بازار ایران با قیمتی در حدود ???? تا ???? عرضه میشه (من ???? خریدم :)). در جلسه آینده توضیحات بیشتری راجع به قابلیت ها، نقشه مدارات و طریقه استفاده و... این آیسی خواهم داد.

 

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

 

   

 

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

 

 

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

 

در پست قبلی بطور مفصل درباره سیستم درونی درایور L298 (سیستم پل-اچ) شرح دادم، و این جلسه قصد دارم به توضیح کاربرد تک تک پایه های این آیسی بپردازم.

خوب، فهمیدیم که برای کنترل چپگرد و راستگرد یه موتور DC به مدار پل-اچ احتیاج داریم که این مدار دارای دو ورودی و دو خروجی -که به موتورها وصل میشن- هستش (این مدار رو میتونید در پست قبل مشاهده کنید). و از اونجایی هم که آیسی L298 یک DUAL H-BRIDGE هستش، یعنی دارای دو مدار پل-اچ در کنارهم برای کنترل ? موتور هستش، دست کم باید ? پایه داشته باشه (? + ? = ?). اما این آیسی همونطور که گفتم ?? پایه هست که پایه های اضافی قابلیتهای جالبی رو برای ما فراهم می کنه که حالا از روی شکل توضیح بیشتری میدم.

 

INPUT 1,2,3,4:

این چهار پایه دقیقا همون چهار ورودی پل-اچ هایی هستند که در بالا بهشون اشاره کردم. درواقع INPUT 1,2 مربوط به پل-اچ اول و INPUT 3,4 مربوط به پل-اچ دوم هستند.

 

OUTPUT 1,2,3,4:

این چهار پایه هم توضیحی مثل بالا دارند با این تفاوت که اینها خروجی های پل-اچ هستند و درواقع به موتورها وصل میشن.

 

ENABLE A,B:

این دو پایه که هرکدوم مربوط به یک موتور هستند برای فعال یا غیر فعال کردن مدار مربوط به خودشون بکار می روند. با ارسال صفر منطقی به این پایه ها مدار پل-اچ داخلی آیسی مربوط به هرکدوم از موتورها به وضعیت کم مصرف میره و درواقع تحریک INPUT های اون پل بی اثر خواهد بود. البته از این پایه ها برای کنترل سرعت موتورها هم استفاده میشه که در مباحث پیشرفته تر به اون اشاره خواهم کرد.

 

GND:

این پایه هم که همونطور از اسمش پیداست باید به سرمنفی یا زمین منبع تغذیه تون وصل بشه.

 

Logic Supply Voltage Vss:

این پایه هم درواقع مربوط به تغذیه منطقی آیسی هست که باید به سر مثبت منبعی در رنج ?.? تا ماکسیمم ? ولت وصل بشه (البته مقدار پیشنهادی خروجی ? ولت یک رگولاتور هستش)

 

Supply Voltage Vs:

این پایه هم باید به سرمثبت از منبع تغذیه جداگانه ای که برای تغذیه موتورها در نظر گرفتید وصل بشه. این ولتاژ میتونه در رنج +?.? تا ماکسیمم ?? ولت قرار داشته باشه که بسته به نوع موتورتون این ولتاژ تعیین میشود، فقط به مقدار ماکسیمم یعنی ?? ولت توجه کنید.

 

Current Sensing A,B:

با قرار دادن یک مقاومت میان این پایه ها و سر زمین منبع تغذیه تون می تونید آمپراژ مورد استفاده هر موتور رو تنظیم کنید. این مقدار با استفاده از فرمول Vs/R که R مقدار مقاومت است، بدست میاد. بعدا توضیح بیشتر خواهم داد که حداکثر آمپراژ مصرفی توسط هر موتور، هنگام استفاده از این آیسی در حالت عادی نباید بیشتر از ? آمپر باشه. پس با استفاده از این قابلیت می تونید در صورت نیاز این آمپراژ رو تغییر بدید. البته اگر موتوری دارید که کمتر از ? آمپر مصرف داره میتونید این ? پایه رو مستقیم به سر منفی وصل کنید.

 

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

 

در جلسه آینده مدار کاملی رو از این آیسی برای کنترل موتور DC به همراه مسائل تکمیلی راجع به این آییسی خواهیم داشت پس تا پست بعد خدانگهدار.

 

 

 


کلمات کلیدی: موتور ،روبات ،bascom