میکروکنترلر چیست (قسمت اول)
یک میکروکنترلر یک دستگاه محاسباتی است که قادر به اجرای یک برنامه می باشد (یعنی یک توالی از دستورالعمل ها) و اغلب به عنوان "مغز" و یا "مرکز کنترل" نامیده می شود، زیرا معمولا مسئول تمام محاسبات، تصمیم گیری ها و ارتباطات است. در این آموزش با این سیستم کاملا آشنا میشویم.
برای ارتباط برقرار کردن با دنیای بیرون، یک میکروکنترلر دارای یک سری پین ها (اتصالات سیگنال الکتریکی) است که می تواند از طریق دستورالعمل های برنامه نویسی به HIGH(1/ON) و یا LOW(0/OFF) تبدیل شود. این پین ها همچنین می توانند برای خواندن سیگنال های الکتریکی (که از سنسورها ویا دیگر دستگاه ها می آیند) استفاده شوند و بگویند که آیا آنها HIGH و یا Low هستند.
اکثر میکروکنترلرهای مدرن همچنین می توانند سیگنال های ولتاژ آنالوگ (یعنی سیگنال هایی که به جای فقط دو حالت تعریف شده، محدوده وسیعی از مقادیر این بین را دارا هستند) را از طریق مبدل آنالوگ به دیجیتال (ADC) اندازه گیری کنند. با استفاده از ADC، یک میکروکنترلر می تواند یک مقدار عددی را برای یک ولتاژ آنالوگ تعیین کند که هیچکدام از مقادیر HIGH یا LOW نیستند.
یک میکروکنترلر چه کاری انجام میدهد؟
با وجود اینکه در نگاه اول بنظر میرسد میکروکنترلرها محدود هستند، اقدامات بسیار پیچیده ای را میتوان با هوشمندانه تنظیم کردن پین های HIGH و LOW انجام داد. با این وجود، ایجاد الگوریتم های بسیار پیچیده (مانند پردازش پیشرفته دید و رفتار هوشمند) و یا برنامه های بسیار بزرگ می تواند به دلیل منابع ذاتی و محدودیت های سرعتی آن، برای یک میکروکنترلر غیر ممکن باشد.
برای مثال، برای چشمک زدن یک لامپ، میتوان یک تکرار را طوری برنامه ریزی کرد که در آن میکروکنترلرها زمانی یک پین را HIGH کند، لحظه ای منتظر بماند و سپس تبدیل به LOW کند، لحظه ای منتظر بماند و دوباره شروع شود. لامپ به پین متصل می شود و در نهایت بطور نامحدود چشمک می زند.
بطور مشابه، میکروکنترلرها می توانند برای کنترل سایر دستگاه های الکتریکی مانند عملگرها یا موتورهای الکتریکی (زمانی که به کنترل کننده های موتور متصل می شوند)، دستگاه های ذخیره سازی( مانند کارت های SD)، وای فای و بلوتوث و غیره مورد استفاده قرار گیرند. به عنوان یک نتیجه از این تطبیق باورنکردنی، میکروکنترلرها را میتوان در محصولات روزمره یافت. تقریبا همه وسایل خانگی و یا الکترونیکی حداقل از یک (معمولا بیشتر) میکروکنترلر استفاده می کنند. برای مثال دستگاه های تلویزیون، ماشین لباسشویی، کنترل از راه دور، تلفن، ساعت، اجاق های مایکروویو و در حال حاضر ربات ها نیز برای کار به این دستگاه های کوچک نیاز دارند.
برخلاف میکروپروسسورها (مثلا CPU در رایانه های شخصی) یک میکروکنترلر به لوازم جانبی مانند RAM خارجی و یا دستگاه های ذخیره سازی برای عمل کردن نیاز ندارد. این به این معنی است که، اگرچه میکروکنترلر ها می توانند کمتر از همتایان PC خود قدرتمند باشند، توسعه مدار ها و مخصولات مبتنی بر میکروکنترلر بسیار ساده تر و ارزانتر است زیرا اجزای سخت افزاری اضافی بسیار کمی مورد نیاز است.
بسیار مهم است که توجه داشته باشیم که یک میکروکنترلر میتواند تنها مقدار بسیار کمی از قدرت الکتریکی را از طریق پین های خود تولید کند، این به این معنی است که یک میکروکنترلر عمومی احتمالا قادر نخواهد بود که به طور مستقیم موتور های الکتریکی، سلونوئید ها، لامپ های بزرگ و یا هر بار بزرگ دیگری را تغذیه کند. تلاش برای انجام این کار ممکن است حتی باعث آسیب فیزیکی به میکروکنترلر شود.
ویژگی های تخصصیتر میکروکنترلر چیست؟
سخت افزار ویژه ای درون میکروکنترلر ها تعبیه شده است، به این معنی که این دستگاه ها می توانند بیشتر از یک I/o دیجیتال معمولی، محاسبات پایه، ریاضیات پایه و تصمیم گیری عمل کنند. بسیاری از میکروکنترلر ها به راحتی پروتکل های ارتباطی محبوبی مانند UART(serial),SPI و 12Cرا پشتیبانی می کنند. این ویژگی هنگام برقراری ارتباط با دستگاه های دیگر مانند رایانه ها، سنسور های پیشرفته و یا دیگر میکروکنترلرها بسیار مفید است. اگرچه میتوان این پروتکل ها را به صورت دستی اجرا کرد، اما همیشه خوب است که یک برنامه ساخته شده وجود داشته باشد که به همه جزئیات توجه کند. این اجازه میدهد تا میکروکنترلر بر روی دیگر کارها تمرکز کند و اجازه یک برنامه تمیزتر را میدهد.
مبدل های آنالوگ به دیجیتال(ADC) برای تبدیل سیگنال های ولتاژ آنالوگ به یک عدد دیجیتال متناسب با بزرگی ولتاژ استفاده می شوند، سپس این عدد میتواند در برنامه ای در میکروکنترلر مورد استفاده قرار بگیرد. به منظور تولید یک مقدار متوسط از تغذیه های مختلف از HIGH و LOW، برخی از میکروکنترلر ها قادرند از مدولاسیون پهنای پالس (PWM) استفاده کنند. برای مثال، این روش به آهستگی کم کردن روشنایی یک LED را ممکن می سازد.
در نهایت، برخی از میکروکنترلرها یک تنظیم کننده ولتاژ را در بردهای توسعه خود ادغام می کنند. این نسبتا منظقی است زیرا اجازه میدهد تا میکروکنترلر توسط محدوده وسیعی از ولتاژها تغذیه شود و نیازی نیست که شما یک ولتاژ دقیق کاری را فراهم کنید. این همچنین موجب راحتی سنسورهای تغذیه و دیگر لوازم جانبی بدون نیاز به یک منبع تغذیه تنظیم کننده خارجی می شود.
آنالوگ یا دیجیتال؟
در زیر دو مثال آورده شده است که نشان می دهد چه زمانی از یک پین دیجیتال یا آنالوگ استفاده کنیم:
دیجیتال
یک سیگنال دیجیتال برای ارزیابی وضعیت باینری سوئیچ استفاده می شود. همانطور که در تصویر زیر نشان داده شده است (در سمت چپ برد بورد) یک دکمه فشاری و یا کلید لحظه ای زمانی که فشرده می شود یک مدار را می بندد، و اجازه میدهد تا جریان جاری شود (یک مقاومت pull-up نیز نشان داده شده است). یک پین دیجیتال (از طریق یک سیم سبز در تصویر) به این مدار متصل شده است قادراست هرکدام از LOW یا 0 (به این معنی که در این مورد ولتاژ پین در محدوده LOW، 0 ولت است) یا یک HIGH ( به این معنی که دکمه فشرده شده است و در این مورد ولتاژ در محدوده HIGH، 5 ولت است) را برگرداند.
آنالوگ:
یک مقاومت متغیر یا پتانسیومتر (همانطور که در سمت راست برد زیر نشان داده شده است) برای فراهم کردن یک سیگنال الکتریکی آنالوگ متناسب با یک چرخش (مانند دکمه صدا روی یک استریو) مورد استفاده قرار میگیرد. همانطور که در زیر نشان داده شده است، هنگامی که یک پتانسیومتر به یک منبع 5 ولت متصل می شود، خروجی متناسب با زاویه چرخش بین 0 و 5 ولت متغیر است. ADC روی یک میکروکنترلر ولتاژ را تفسیر میکند و آن را به یک مقدار عددی تبدیل میکند. به عنوان مثال، یک ADC 10 بیتی، 0 ولت را یه مقدار "0"، 2.5 ولت را به "512" و 5 ولت را یه "1023" تبدیل می کند. بنابراین، اگر شک دارید که دستگاهی که قصد اتصال آن را دارید مقادیر را متناسب با چیز دیگری ارائه می کند (مثلا، دما، نیرو، موقعیت) احتمالا شما به یک پین آنالوگ نیاز دارید.
برنامهنویسی
ترس از برنامه نویسی میکروکنترلر از مد افتاده است! برخلاف "روزهای گذشته" که چشمک زن کردن یک لامپ دانش پیشرفته ای از میکروکنترلر ها و چندین خط کدنویسی (بدون اشاره به کابل های سری یا موازی متصل به بردهای توسعه بزرگ) را می طلبید، برنامه نویسی میکروکنترلر به لطف محیط های توسعه ادغامی مدرن (IDE: Integrated Development Environment) بسیار ساده شده است که از زبان های به روز دنیا استفاده می کند، کتابخابخانه های کاملا سازمان یافته داردکه به آسانی اکثر عمل های معمول (حتی غیر معمول) را پوشش می دهد و نمونه های آماده کد برای اینکه مبتدیان به آسانی بتوانند برنامه نویسی میکروکنترلر را شروع کنند.
امروزه میکروکنترلرها میتوانند به زبان های سطح بالای مختلفی مانندC,C++,C#, processing, Java, Python, Net و Basic برنامه نویسی شوند. البته همیشه میتوانید آنها را در Assembler برنامه نویسی کنید اما این برتری برای کاربران پیشرفته تر و با نیاز های بسیار خاص تر رزرو شده است. به این معنی که هر فردی باید یک زبان برنامه نویسی که با سلیقه آن مناسب بوده و تجربه برنامه نویسی با آن را دارد را بیابد.
IDE ها حتی ساده تر می شوند زیرا تولید کنندگان محیط برنامه نویسی گرافیکی را ایجاد می کنند. دنباله هایی که به چندین خط کد نیاز دارند به یک تصویر کاهش می یابند که به تصویر دیگری متصل می شود تا کد را ایجاد کند. به عنوان مثال، یک تصویر میتواند نشان دهنده کنترل یک موتور باشد و کاربر تنها نیاز دارد آن را در جهت مخصوصی که میخواهد و rpm مشخص قرار دهد.
در قسمت سخت افزاری، بردهای توسعه میکروکنترلرها راحتتر و در گذر زمان استفاده از آن ها آسانتر می شود. این بردها معمولا پین های مفید میکروکنترلر را بیرون می کشد و آنها را برای دسترسی سریع prototyping مدار آسانتر می کند. آن ها همچنین رابط USB تغذیه آسان و برنامه نویسی مناسب را برای اتصال صحیح به هر رایانه مدرن دیگری فراهم آورده اند.
برای کسانی که با این اصطلاح آشنایی ندارند، یک برد توسعه، یک برد مدار است که یک چیپ میکروکنترلر را با تمام الکترونیک مورد نیاز پشتیبانی (مانند تنظیم کننده ولتاژ، نوسانگرها، مقاومت های محدود کننده جرایان و اتصالات USB) مورد نیاز برای عمل کردن، فراهم می کند. اگر شما قصد ندارید که مدار پشتیبانی خود را طراحی کنید، خریدن یک برد توسعه بر خرید یک چیپ میکروکنترلر تنها ارجحیت دارد. در قسمت دوم این آموزش “میکروکنترلر چیست (قسمت دوم)” با علت اینکه چرا به میکروکنترلر نیاز داریم بیشتر آشنا میشوید.