میکروکنترلر چیست؟ واژۀ Microcontroller در لغت از دو واژۀ میکرو به معنی ریز و کوچک و کنترلر به معنی کنترل کننده یا کنترل گر تشکیل شده است. که به معنای ریز کنترل کننده یا ریز کنترل گر یا کنترل کنندۀ کوچک است. میکروکنترلر در اصطلاح به معنای یک قطعۀ الکترونیکی کوچک قابل برنامه ریزی یا به عبارت دیگر یک کامپیوتر کوچک است. که اجزای مختلف یک کامپیوتر را در ابعاد کوچک در خود جای داده است. از این اجزا برای اجرای یک برنامه استفاده می کند. یعنی میکروکنترلر یک قطعۀ الکترونیکی کوچک است که در آن CPU، حافظه ها (مثل FLASH و RAM و EEPROM)، ورودی/خروجی ها و … قرار گرفته اند.
میکروکنترلر را با MCU که مخفف Micro Controller Unit است نیز می شناسند. البته فعالان این صنعت به میکروکنترلر به اختصار میکرو نیز می گویند. میکروکنترلر یک آی سی VLSI (Very Large Scale Integration – ادغام در مقیاس بسیار بزرگ) است. به این معنی که واحدهای داخلی گفته شده در میکروکنترلر (CPU و FLASH و …) در یک تراشه در کنار هم قرار گرفته اند. گاهی به میکروکنترلر، کامپیوتر در یک تراشه (Computer on a chip یا Single-chip Computer) نیز گفته می شود. چرا که میکروکنترلرها همۀ واحدهای اصلی یک کامپیوتر را در ابعاد کوچکتر در خود جای داده اند و عملکردی بسیار شبیه یک کامپیوتر دارند. میکروکنترلرها نیز مانند کامپیوترها ورودی، پردازش و خروجی دارند.
ویدئوی 1 – میکروکنترلر چیست و چه می کند؟
میکروکنترلر چگونه کار میکند؟
بطور کلی یک برنامه توسط ما در کامپیوتر نوشته می شود و با این برنامه با روشی روی حافظۀ FLASH میکروکنترلر برنامه ریزی می شود. CPU در میکروکنترلر این برنامه را خوانده و اجرا می کند. نتیجۀ این برنامه بر روی پایه های میکروکنترلر قرار می گیرد. ما با اتصال پایه های میکروکنترلر به LCD و صفحه کلید و سنسورهای مختلف و … ، خروجی برنامه ای که برای میکروکنترلر نوشته شده را در عمل می بینیم. به عبارتی ما با میکروکنترلرها می توانیم یک دستگاه الکترونیکی بسازیم. دستگاهی که اجزای مختلفی دارد که به میکروکنترلر متصل شده اند و همچنین عملکردی دارد که برای آن کدنویسی شده است.
توجه: درصورتی که در شروع دنیای میکروکنترلرها هستید و نمی دانید که میکروکنترلر چیست و یا آشنایی کاملی ندارید، لطفا این تاپیک را از ابتدا بخوانید و از بخشی را جا نگذارید. چرا که در این نوشته از لغات بسیاری استفاده شده که امکان دارد برای شما آشنا نباشند. ما سعی کرده ایم از هر عبارتی که استفاده می کنیم آن را در همین نوشته معرفی کنیم. پس اگر قصد دارید که واقعا متوجه دنیای میکروکنترلرها شوید، چیزی را از قلم نیندازید و متن را بطور کامل و از ابتدا به انتها مطالعه بفرمایید. همچنین بخصوص درمورد این نوشتۀ خاص باتوجه به اهمیت آن، هر سوالی وجود داشت در قسمت نظرات این نوشته مطرح بفرمایید.
نامگذاری میکروکنترلر
نامگذاری میکروکنترلر (MCU) مانند دیگر ICها ترکیبی از حروف انگلیسی و عدد و گاهی علامت دش (-) و Space است. شرکت های مختلف از الگوهای مختلفی برای این نامگذاری استفاده می کنند. حتی الگوی نام گذاری بین خانواده های مختلف میکروکنترلرهای یک شرکت می تواند متفاوت باشد. مثلا نام یک میکروکنترلر شرکت ST، میکروکنترلر STM32F407VET6 است. که حرف STM ابتدای نام آن شرکت است. عدد 32 به معنی 32بیتی بودن است.معنی مابقی اعداد و حروف در میکروکنترلرهای STM32 این شرکت را در تصویر زیر می توانید ببینید. شرکت ها و خانواده های دیگر میکروکنترلرها نیز نام گذاری های مربوط به خود را دارند.
تصویر 1 – اصول نامگذاری میکروکنترلرهای STM32
کاربرد میکروکنترلر چیست؟
در اکثر سیستم های الکترونیکی که امروزه شما در خانه، محل کار، دانشگاه، صنایع مختلف از جمله صنایع دفاعی، رباتیک، پزشکی، خودروسازی، لوازم خانگی، صنایع کشاورزی، خانه های هوشمند و بطور کلی هر آنچه مربوط به هوشمندسازی می شود، سیستم های ناوبری، صنعت آسانسور و اکثر صنایع دیگر می بینید به احتمال بسیار زیاد حداقل یک میکروکنترلر وجود دارد. در خودروهای امروی 10 ها میکروکنترلر وجود دارد. می توان گفت اگر یک دستگاه کارهایی مانند اندازه گیری، ذخیره سازی، محاسبه، کنترل و نمایش اطلاعات را انجام می دهد، احتمال بسیار زیاد آن دستگاه دارای میکروکنترلر است. امروزه میکروکنترلر کاربردهای بی شماری دارد.
تصویر 2 – کاربردهای میکروکنترلر
امبدد سیستم چیست؟
میکروکنترلر (MCU) به همراه مدارات وابسته به آنها اغلب در پشت پردۀ یک سیستم الکترونیکی درحال فعالیت هستند. مثل یک دستگاه عابربانک که در پشت آن یک میکروکنترلر فعالیت می کند. به چنین سیستم هایی کنترل کنندۀ تعبیه شده یا سیستم نهفته (Embedded Controller یا Embedded System) نیز گفته می شود. به بیان دیگر امبدد سیستم ها رایانههایی هستند که برای کنترل یک سامانه بزرگ و مشخص طراحی شدهاند و مخصوصاً در زمانهایی که محدودیتهایی در مورد پردازش همزمان وجود دارد به کار میروند. سیستم های نهفته معمولاً به عنوان بخشی از یک سامانه بزرگ که اغلب دارای سختافزارها و بخشهای مکانیک مختلفی است تعبیه میشود. در نتیجه محصولاتی بررسی شده در قسمت کاربرد میکروکنترلر که با میکروکنترلرها ساخته می شود و در تعریفی که ارائه شد می گنجد، یک امبدد سیستم هستند.
تاریخچه میکروکنترلر
اختراع میکروکنترلر (اولین کامپیوتر کوچک در یک تراشه) به سال 1971 میلادی بر می گردد. یک مهندس از شرکت Texas Instruments به نام Gary Boone موفق به ساخت اولین میکروکنترلر شد. نام آن TMS1802NC و دارای 128 بیت RAM و 3000 بیت ROM بود. TMS1802NC قابلیت استفاده در ساخت یک ماشین حساب را داشت. شرکت TI در سالهای 1972 تا 1974 میکروکنترلرهای TMS100 را در محصولات محاسباتی خود استفاده می کرد. TIدر سال 1974 سری TMS1000 را وارد بازار کرد و تا سال 1983 تعداد 100 میلیون از میکروکنترلرهای TMS1000 را فروخت. لازم به ذکر است میکروکنترلرهای TMS100 و TMS1000 دارای پردازندۀ 4 بیتی بودند (در ادامه با این مفهوم بیشتر آشنا می شویم.). حدودا در سال 1973 شرکت اینتل نیز علاوه بر ساخت میکروپروسسور، به ساخت میکروکنترلر پرداخت. میکروکنترلر 8048 از سری MCS-48 که در سال 1976 منتشر شد اولین میکروکنترلر اینتل بود. میکروکنترلر محبوب و پر استفادۀ 8051 توسط اینتل در سال 1980 معرفی شد و امروزه می بینیم که هنوز هم در برخی صنایع استفاده می شود. امروزه شرکت های متعددی میکروکنترلر می سازند. میکروکنترلرهای امروزی از لحاظ معماری، توان مصرفی، ولتاژ و فرکانس کاری، مقدار حافظه و امکانات سخت افزاری نسبت به میکروکنترلرهای ساخته شده در دهۀ 70 قرن بیستم میلادی پیشرفت های بسیار چشمگیری داشته اند.
Silicon Motion | Intel | Altera |
Sony | Lattice Semiconductor | Analog Devices |
Spansion | Microchip Technology | Atmel |
STMicroelectronics | National Semiconductor | Cypress Semiconductor |
Texas Instruments | NEC | Maxim Integrated |
Toshiba | NXP Semiconductors | ELAN Microelectronics Corp |
Ubicom | Nuvoton Technology | EPSON Semiconductor |
Xemics | Panasonic | Espressif Systems |
Xilinkx | Parallax | Freescale Semiconductor |
XMOS | Rabbit Semiconductor | Fujitsu |
ZiLOG | Renesas Electronics | Holtek |
Rockwell | Hyperstone | |
Silicon Laboratories | Infineon |
جدول 1 – لیست تولید کنندگان میکروکنترلرهای رایج در دنیا
میکروکنترلرهای پر استفاده در ایران
در ایران میکروکنترلرهای STM32 و STM8 ساخت شرکت ST، AVR ساخت شرکت Atmel، LPC ساخت شرکت NXP و PIC ساخت شرکت Microchip استفاده های فراوان دارد. در این بین میکروکنترلرهای STM32 امروزه (سال 1401) میکروکنترلرهای STM در ایران بیشتر استفاده می شوند.
میکروکنترلر ARM
در واقع میکروکنترلری به نام ARM وجود ندارد. واژۀ ARM از نام شرکت ARM Holdings مخفف (Advanced RISC Machine) می آید. این شرکت سازندۀ میکروکنترلر نیست. شرکت ARM پردازنده هایی (CPU هایی) با معماری اختصاصی خودش ( که معماری ARM نام دارد) طراحی می کند. بسیاری از شرکت های سازندۀ میکروکنترلر (مثل شرکت ST یا NXP)، معماری CPU استفاده شده در میکروکنترلر خود را از شرکت ARM تهیه می کنند. میکروکنترلر ARM اصطلاحاً (و می توان گفت به اشتباه) به میکروکنترلرهایی گفته می شود که در ساخت پردازندۀ آنها از معماری ARM استفاده شده است.
تفاوت میکروکنترلر با میکروپروسسور و میکرو کامپیوتر
بیان این تفاوت برخی از سوالات ذهنی افراد در شروع دنیای میکروکنترلرها را پاسخ می دهد:
میکروپروسسور چیست؟
میکروپروسسور (Microprocessor) یا CPU یا پردازنده، هستۀ پردازندۀ یک سیستم دیجیتال است که تمام عملیات محاسباتی و منطقی روی داده ها و عملیات تصمیم گیری توسط این بخش انجام می شود. میکروپروسسور همان CPU است که به صورت یک مدار مجتمع (IC) عرضه می شود. کمپانی های متعددی میکروپروسسور می سازند از جمله آنها می توان به AMD و IBM و Intel و Philips و NEC و Motorola و HP و Atmel و Sharp و Sony و Zilog و Tesla اشاره کرد. همچنین از تأثیرگذارترین میکروپروسسورها نیز می توان به Intel 4004، Intel 8080، Z80، Motorola 68000، Intel Pentium اشاره کرد. میکروپروسسورهای شرکت ARM مثل سری Cortex-M3 یا Cortex-M4 یا Cortex-M7 در بسیاری از میکروکنترلرهای STM32 یا NXP که امروزه استفاده می کنیم استفاده شده اند.
میکرو کامپیوتر چیست؟
میکرو کامپیوتر (Microcomputer) از یک CPU (میکروپروسسور) و بلوک های دیگر از جمله ورودی/خروجی ها، حافظه ها، ADCها، DACها و … روی یک برد مدار چاپی (PCB) ساخته شده است. میکرو کامپیوتر شامل یک برد الکترونیکی است که روی آن آیسی CPU، آیسی FLASH و آیسی های دیگر است. به عبارتی میکرو کامپیوتر مثل یک مادربرد کوچک در یک کامپیوتر است. مثلا بردهای معروف رزبری پای ، بیگل بن و … یک میکروکامپیوتر هستند.
میکروکنترلر چیست؟
میکروکنترلر از میکرو کامپیوتر هم کوچک تر است. گفتیم که میکرو کامپیوتر شامل یک برد الکترونیکی است که روی آن یک آیسی CPU، یک آیسی FLASH و آیسی های دیگر است. اما میکروکنترلر کلا یک آیسی است. داخل این آیسی هم CPU وجود دارد و هم FLASH و هم … . اما به مقدار کمتر و با توان پایینتر. پس تفاوت میکروکنترلر و میکروپروسسور را متوجه شدیم. میکروپروسسور همان CPU است و بخشی از یک میکروکنترلر است. همچنین تفاوت میکروکنترلر و میکروکامپیوتر را نیز متوجه شدیم. میکروکامپیوتر یک برد الکترونیکی است که یک IC مجزای CPU، یک آیسی مجزای FLASH و … دارد. اما میکروکنترلر بسیاری از این اجزایی که یک میکروکامپیوتر بصورت آیسی های مجزا دارد را در خودش دارد. البته برای میکروکنترلر هم برد الکترونیکی طراحی می شود (آموزش طراحی برد مدار چاپی یوبرد) ، در این برد طراحی شده، قطعات دیگری که قرار هست به میکروکنترلر متصل شود هم وجود دارد. میکروکنترلر و قطعات دیگر بر روی این این برد الکترونیکی لحیم کاری می شود و یک محصول الکترونیکی را می سازند. (آموزش لحیم کاری قطعات الکترونیکی یوبرد).
از جمله میکروکنترلرهای نام آشنا می توان موارد زیر را نام برد:
- میکروکنترلرهای AVRساخت شرکت Atmelمثل ATmega32، ATmega16، ATmega128، ATtiny13، ATtiny26؛
- میکروکنترلرهای LPCساخت شرکت NXPمانند LPC1768 و LPC1788؛
- میکروکنترلرهای STM32ساخت شرکت STمانند سری STM32F1 و STM32F4؛
- میکروکنترلرهای PICساخت شرکت Microchipمثل PIC18F2680، PIC16F877 و PIC16F874.
تصویر 3 –تفاوت میکروپروسسور و میکروکامپیوتر و میکروکنترلر
رجیستر چیست؟
در میکروکنترلر یک سری حافظه ها وجود دارد که مقداری که در آنها قرار می گیرد، تنظیماتی برای راه اندازی و کار با واحدهای داخلی است. با مقدار دهی به بیت های این رجیسترها، واحد مورد نظر فعال (و یا غیر فعال) می شود. تنظیماتی که برای آن واحد تعریف شده می شود و … . به این حافظه ها رجیستر گفته می شود. معمولاً برای هر واحد تعدادی رجیستر وجود دارد و این رجیستر در جای معینی از حافظه قرار دارد. رجیسترها در طول برنامه قابل مقدار دهی و تغییر هستند.
میکروکنترلر 8 به چه معناست؟
وقتی می گویند یک میکروکنترلر 8 بیتی است یعنی:
- خانه های حافظه های آن 8 بیت 8 بیت دسته بندی شده اند.
- CPU آن عملیات ریاضی را برای داده های 8 بیتی انجام می دهد.
- رجیسترهای آن 8 بیتی هستند. یعنی رجیسترها 8 بیت 8 بیت تقسیم بندی شده اند. البته موارد خلاف این نیز وجود دارد. مثلا امکان دارد یک میکروکنترلر 32 بیتی باشد ولی رجیسترهای آن 16 بیتی باشد.
- Data Busآن 8 بیتی است. به زبان ساده یعنی مسیری که دیتاها روی آن منتقل می شوند یک مسیر با 8 عدد سیم است. درنتیجه دیتاها 8 بیت 8 بیت به مقصد منتقل می شوند.
ویرایشگر کد
یک سری نرم افزارها به عنوان محیطی برای نوشتن و ویرایش کد یا به عبارتی برای کدنویسی وجود دارد. این نرم افزارها محیطی کاربرپسند و با امکانات مختلف برای راحتی کدنویس فراهم کرده اند. نرم افزارهای بسیاری وجود دارد. مثلا Visual Studio و Notepad++ و … . برخی مواقع این ویرایشگر کدها، خود جزئی از یک نرم افزار دیگر به نام IDE هستند که در ادامه با IDE بیشتر آشنا می شویم.
IDE برای میکروکنترلر
نرم افزارهایی تحت عنوان IDE (مخفف Integrated Development Environment به معنی محیط توسعۀ یکپارچه) وجود دارند که شامل محیط کدنویسی (ویرایشگر کد)، کامپایلر، نرم افزار پروگرامر (در ادامه با کامپایلر و پروگرامر بیشتر آشنا می شویم.) و ابزارهایی برای توسعۀ نرم افزار میکروکنترلر هستند. یعنی بخش زیادی از نرم افزارهای مورد نیاز برای کار کردن با یک میکروکنترلر را در خود جای داده اند. نرم افزارهایی از جمله:
کامپایلر چیست؟
میکروکنترلر برای کار کردن نیاز به کد ماشین یا کد هگز یا کدی متشل از صفر و یک دارند. از این رو نرم افزارهایی وجود دارد که برنامۀ نوشته شده به زبان های برنامه نویسی مثلا C را به کد هگز تبدیل می کنند. به این نرم افزارها کامپایلر (Compiler) گفته می شود. از جمله کامپایلرهای میکروکنترلرها می توان به کامپایلر WinAVR، کامپایلر GCC و کامپایلر ARMCC اشاره کرد.
پروگرامر چیست؟
پروگرامر (Programmer) یک سخت افزار است که از یک طرف به کامپیوتر و از طرف دیگر به میکروکنترلر متصل می شود. کاربر با اجرای یک نرم افزار که مربوط به پروگرامر است، کدهای هگز برنامۀ نوشته شده را به حافظۀ میکروکنترلر منتقل می کند. به این عمل اصطلاحاً پروگرام کردن گفته می شود. پروگرامرها انواع و اقسام مختلف دارند. برخی از آنها صرفا برای برخی میکروکنترلرهای یک شرکت خاص ساخته شده اند(مثلا ST-LINK برای میکروکنترلرهای STM32 و STM8). برخی دیگر میکروکنترلرهای شرکت های بسیاری را پوشش می دهند (مثل J-Link). همچنین برخی از آنها قابلیت Debugger را نیز دارند که در ادامه با این قابلیت بیشتر آشنا می شویم. در این قسمت به طور مختصر چند پروگرامر را معرفی می کنیم:
- پروگرامر STLINK: پروگرامر و دیباگر میکروکنترلرهای STM32 و STM8 شرکت ST است.
- پروگرامر J-Link: پروگرامر و دیباگر ساخت شرکت SEGGER برای میکروکنترلرهای شرکتهای مختلف از جمله ST و NXP و … است.
- پروگرامر USBASP: این پروگرامر یکی از پروگرامرهای ساده برای میکروکنترلرهای AVR است.
- پروگرامر STK500: یک پروگرامر برای میکروکنترلرهای AVR است.
- پروگرامر MK2: پروگرامر برای میکروکنترلرهای AVR است.
- پروگرامر LPC-LINK2: پروگرامر و دیباگر میکروکنترلرهای شرکت NXP است.
تصویر 4 – پروگرام کردن میکروکنترلر
پروگرامرها نیاز به یک نرم افزار هم دارند. که هر پروگرامر، نرم افزار خود را دارد. همچنین در IDE های مختلف گزینه هایی وجود دارد که با استفاده از آنها عملیات پروگرام انجام می شود. به عبارتی نرم افزار برخی پروگرامرها در داخل برخی IDE ها نیز پیاده سازی شده است.
دیباگر چیست؟
عبارت Debugger در لغت به معنی اشکال زدا است. نرم افزارهای Debugger برای خطایابی و بررسی رفتار میکروکنترلری که پروگرام شده، استفاده می شود. به عبارتی ما وقتی کدهای خود را می نویسیم و آن را به هگز تبدیل کرده و پروگرام می کنیم، امکان دارد نیاز داشته باشیم که این کد را خط به خط از روی میکروکنترلر بررسی کنیم که ببینیم عملکرد آن واقعا در عمل چطور است. امکان دارد مشکلی وجود داشته باشد و ما بخواهیم با این بررسی ببینیم که مشکل از کجاست. نرم افزارهای Debugger عموماً در IDEها هستند. برای مثال در نرم افزار Atmel Studio، نرم افزار Keil، STM32CubeIDE و نرم افزارهای دیگر، امکان دیباگ کردن برنامۀ نوشته شده وجود دارد. برای Debug کردن، باید میکروکنترلر توسط سخت افزار Debugger به کامپیوتر متصل شود و با نرم افزارهای Debugger عمل اشکال زدایی انجام شود. یعنی میکروکنترلر که با سخت افزار Debugger به کامپیوتر متصل است، برنامه ای را که در حافظۀ خود دارد، اجرا می کند و کاربر با استفاده از نرم افزار Debugger به Debug کردن می پردازد. اکثر Debugger ها قابلیت این را دارند که Debug کردن برنامه را بدون اتصال میکروکنترلر به کامپیوتر انجام دهند. که به این عمل شبیه سازی گفته می شود. معمولا سخت افزار Debugger ها با سخت افزار Programmer ها مشترک است. یعنی یک سخت افزار وجود دارد که با استفاده از آن هم می توان پرگرام و هم دیباگ انجام داد.
تصویر 5 – دیباگ در نرم افزار Keil
نرم افزارهای شبیه ساز برای میکروکنترلر
منظور از شبیه سازی، دیدن نتیجۀ کد نوشته شده بدون آنکه آن را واقعا در عمل روی میکروکنترلر برنامه ریزی کنیم است. به عبارتی نتیجۀ کد خود را در یک محیط کامپیوتری ببینیم. به این منظور درحال حاضر دو روش وجود دارد.
نرم افزار پروتئوس
نرم افزار پروتئوس یک نرم افزار شبیه سازی در دنیای الکترونیک است. صرفا برای شبیه سازی کد نوشته شده برای میکروکنترلرها نیست. این نرم افزار یک محیط دارد که شما قطعات مختلف پروژۀ خود را در آن محیط قرار می دهید. مثلا منبع تغذیه، میکروکنترلر، نمایشگر، کیپد و … . به تنظیمات میکروکنترلر می روید و کد هگز خود را برای آن انتخاب می کنید. برنامه را اجزا می کنید و می بینید که رفتار کد شما در این محیط شبیه ساز چطور است. نرم افزار پروتئوس تعدادی از میکروکنترلرهای AVR، Microchip،NXP ، ST و … را پشتیبانی می کند.
تصویر 6 –شبیه سازی یک پروژۀ میکروکنترلر در نرم افزار Proteus
شبیه سازهای داخلی IDE ها
در برخی IDEها مانند Keil و Atmel Studio نرم افزار شبیه سازی به صورت یکپارچه وجود دارد. پیش تر در این مورد در قسمت Debugger صحبت کردیم. در اینجا تفاوت شبیه سازی با Debug کردن را بیان می کنیم. در Debug کردن، کاربر با استفاده از سخت افزار Debugger، میکروکنترلر را به کامپیوتر متصل می کند و با استفاده از نرم افزار Debugger به مشاهدۀ عملی نتایج برنامۀ نوشته شده می پردازد. اما در شبیه سازی، کاربر در درون نرم افزار و بدون اینکه در عمل به میکروکنترلر وصل شود، به مشاهدۀ تغییرات وضعیت رجیسترها و گاهی مشاهدۀ سیگنال های خروجی می پردازد. در واقع تفاوت شبیه سازی با Debug کردن، وجود یا عدم وجود سخت افزار است. می توان گفت شبیه سازی نیز نوعی Debug کردن برنامۀ نوشته شده به صورت نرم افزاری است.
نرم افزارهای تولید کنندۀ کد برای میکروکنترلر
این نرم افزارها که معمولاً با نام Wizard خوانده می شوند، این قابلیت را ایجاد کرده اند که با استفاده از تیک زدن و انتخاب یک سری موارد، کدهای راه اندازی اولیۀ میکروکنترلر تولید شود. مثلا واحد TIMER یا موارد دیگر راه اندازی می شوند. دیگر نیاز نیست که ما خودمان این راه اندازی را انجام دهیم. ما کدهای دیگری که نیاز داریم را می نویسیم. نمونه ای از این نرم افزارها، ابزار Codewizard در نرم افزار CodevisionAVR برای میکروکنترلرهای AVR، نرم افزار ARMWizard برای طیفی از میکروکنترلرهای ARM و نرم افزار STM32CubeMX برای میکروکنترلرهای STM32 است.
تصویر 7 –محیط نرم افزار STM32CubeMX
انواع حافظه در میکروکنترلر
ما بطور کلی در میکروکنترلر دو نوع دیتا داریم که باید آنها را ذخیره کنیم و آنها را بخوانیم. اول کدهایی است که برای پروژۀ خود نوشته ایم که واضح است و نیاز به توضیح ندارد. و دوم آن دیتایی است که در طول پروژه بوجود می آید. به این نوع دیتا، دیتای زمان اجرای برنامه نیز گفته می شود. به زبان ساده، وقتی ما سیستم خود را ساختیم و راه اندازی کردیم، و دستگاه شروع به عملکرد خود کرد، یک سری دیتاها در میکروکنترلر بوجود می آیند. به آنها دیتای زمان اجرا گفته می شوند. به عنوان مثال در سیستمی که دارای یک صفحه کلید است، وقتی کاربر کلید 1 را فشار می دهد، دیتای 1 بوجود می آید. قبل از اینکه کاربر کلیدی را بزند این دیتا وجود نداشته و در زمانی که دستگاه درحال کار بوده بوجود آمده است. یا خروجی یک سنسور که به میکروکنترلر وصل شده و دیتایی را برای آن ارسال می کند یک دیتایی است که در طول پروژه بوجود می آید. در میکروکنترلرها دو نوع حافظه برای ذخیرۀ این دو نوع دیتا وجود دارد که در ادامه بررسی می کنیم:
حافظۀ برنامه (Program Memory)
برنامۀ نوشته شده توسط کاربر باید در حافظۀ میکروکنترلر ذخیره شده و با قطع و وصل برق از بین نرود. درنتیجه به یک حافظۀ غیر فرار (حافظه ای که با قطع و وصل برق از بین نرود.) برای ذخیره سازی کدهای نوشتۀ شدۀ خود نیاز داریم. حافظه های غیر فرار انواع مختلفی دارد. که هریک ویژگی های مختلفی دارند و درنتیجه با اهداف مختلف در کاربردهای مختلف استفاده می شود. معمولا در میکروکنترلرها از حافظۀ غیر فرار FLASH به عنوان حافظۀ برنامه استفاده می شود. همچنین در حافظۀ غیرفرار علاوه بر برنامۀ نوشته شده توسط کاربر، برنامۀ Boot نیز ذخیره می شود. که مورد بحث آموزش های پیشرفتۀ میکروکنترلرهاست و مورد بحث این نوشته نیست.
حافظۀ داده (Data Memory)
دیتای زمان اجرای برنامه را نیز می توان به دو دسته تقسیم کرد.
- دستۀ اول دیتاهایی هستند که نیاز نیست با قطع و وصل برق مقدار آنها حفظ شود. مثلا دیتای یک سنسور در حالت عادی با قطع و وصل برق حفظ نمی شود. چرا که وقتی برق مجددا وصل شود، دیتای جدید از سنسور خوانده می شود. در میکروکنترلرها برای ذخیره کردن چنین متغیرهایی از حافظه های SRAM استفاده می شود. داده های موقت کاربر و همچنین رجیسترها، در این حافظه قرار می گیرند. دیتاهای درون SRAM با قطع و وصل برق از بین می روند.
- دستۀ دوم، دیتاهایی هستند که در طول اجرای برنامه بوجود می آیند اما نباید با قطع و وصل برق مقدار آنها از بین برود. مثلا در یک سیستم که صفحه کلید دارد و هر کاربر برای خود یک رمز در دستگاه ثبت می کند، نباید رمز کاربران با قطع و وصل برق از بین برود. رمز کاربر دیتایی بوده که در طول اجرای برنامه بوجود آمده ولی نباید با قطع برق از بین برود. در دنیای میکروکنترلرها معمولا برای ذخیرۀ چنین دیتاهایی از حافظۀ EEPROM استفاده می شود. حافظۀ EEPROMدر همۀ میکروکنترلرها به صورت داخلی وجود ندارد. برای چنین میکروکنترلرهایی در صورت نیاز از حافظۀ EEPROM خارجی استفاده می شود.
توجه شود که بحث انواع حافظه بسیار گسترده است. هدف ما در این نوشته معرفی پر استفاده ترین انواع حافظۀ مورد استفاده در دنیای میکروکنترلرها بود.
واحدهای داخلی میکروکنترلر
میکروکنترلر درون خود علاوه بر CPU و حافظه ها، واحدهای دیگری نیز دارند. عموماً میکروکنترلرها دارای واحدهای زیر هستند. همۀ واحدهای زیر به صورت یکجا ممکن است در میکروکنترلرها وجود نداشته باشند. همچنین ممکن است در میکروکنترلرهای متفاوت، نام های متفاوتی برای برخی واحدها وجود داشته باشد. یا معماری میکروکنترلرهای مختلف متفاوت باشد. از طرفی واحدهای بسیار جدیدی وجود دارد که در برخی میکروکنترلرها وجود دارد و در این قسمت ذکر نشده است.
- پردازنده یا CPU؛
- حافظۀ RAM؛
- حافظۀ Flash؛
- حافظۀ EEPROM؛
- واحد تولید کلاک؛
- پورت های ورودی/خروجی یا همان پورت های I/O؛
- واحدهای تایمر/کانتر؛
- تایمر Watchdog؛
- تایمر System tick یا تایمر SYSTICK؛
- واحدهای وقفۀ خارجی؛
- مبدل آنالوگ به دیجیتال (ADC)؛
- مبدل دیجیتال به آنالوگ (DAC)؛
- واحد PGA؛
- پروتکل ارتباطی USART یا UART؛
- پروتکل ارتباطی I2C یا TWI؛
- پروتکل ارتباطی SPI؛
- پروتکل ارتباطی I2S؛
- پروتکل S/PDIF؛
- پروتکل ارتباطی JTAG؛
- پروتکل ارتباطی CAN؛
- مدار Reset؛
- مقایسه کننده آنالوگ؛
- واحد DMA؛ یا DMA Controller
- واحد Ethernet؛
- واحد USB؛
- واحدهای PWM؛
- واحد RTC (Real Time Clock)؛
- واحد Display Controller؛
- واحد کنترل HDMI-CEC؛
- واحد SAI، رابط صوتی سریال؛
تصویر 8 – برخی از اجزای داخلی میکروکنترلر
پایه های میکروکنترلر
هر میکروکنترلر برای ارتباط با دنیای خارج نیاز به تعدادی پایه دارد. میکروکنترلر با انواع و اقسام تعداد پایه و آرایش قرار گیری پایه ها وجود دارد. به عبارتی انواع پکیج قطعه برای میکروکنترلرها وجود دارد. از پکیج های میکروکنترلرهای امروزی پر استفاده می توان پکیج های LQFP و در تعداد پایه های 48 پایه و 100 پایه را نام برد. البته که میکروکنترلرهای با تعداد پایۀ بیشتر و کمتر و پکیج های در اشکال دیگر نیز استفاده می شود. مثلا میکروکنترلر STM32F746NGH دارای پکیج TFBGA216 با 216 پایه است. ما از این میکروکنترلر در آموزش TFT LCD با TouchGFX و STM32 یوبرد استفاده کرده ایم.
نماد قطعات الکترونیکی سازندگان نقشه شماتیک
ویدئوی 2 – معرفی پکیج قطعات الکترونیکی
فرکانس کلاک میکروکنترلر
سیگنال کلاک یک پالس مربعی است. این پالس مربعی با یک فرکانسی صفر و یک می شود. پردازندۀ میکروکنترلر دستورات خود را با لبه های بالا روندۀ این پالس کلاک انجام می دهند. هر میکروکنترلر نیاز به یک سیگنال کلاک دارد که با لبه های بالاروندۀ این پالس کلاک شروع به انجام کارها بکند. منظور از فرکانس کلاک در اینجا فرکانس کلاکی است که به CPU داده می شود. فرکانس کلاک یکی از فاکتورهای سرعت پردازش میکروکنترلرها است. منبع این سیگنال کلاک در بسیاری از میکروکنترلرها یک کریستال است. در میکروکنترلرها منبع کلاک می تواند از راه های مختلف مثل «اسیلاتور RC کالیبره شدۀ داخلی»، «اسیلاتور داخلی با مدار RC خارجی»، «اسیلاتور داخلی با کریستال خارجی» یا … باشد. فرکانس کلاک در هر میکروکنترلر با توجه به دیتاشیت آن در محدوده های مشخصی است. در برخی میکروکنترلرها نیز یک واحد PLL داخلی وجود دارد که فرکانس کریستال متصل شده به میکروکنترلر را در اعدادی ضرب می کند. واحدهای مختلف در میکروکنترلر می توانند فرکانس های مختلفی داشته باشند که این فرکانس حاصل ضرب و تقسیمی از فرکانس CPU است. فرکانس کلاک میکروکنترلرهای امروزی نسبت به میکروکنترلرهای گذشته بالاتر است و میکروکنترلرها در آینده از فرکانس کلاک بالاتری نسبت به فرکانس کلاک میکروکنترلرهای امروزی بهره مند خواهند شد. برای مثال فرکانس کلاک ATmega64A تا 16 مگاهرتز، میکروکنترلر STM32H7A3LI تا 280 مگاهرتز، میکروکنترلر STM32H753XI تا 480 مگاهرتز، میکروکنترلر STM32G031K8 تا 64 مگاهرتز می تواند باشد.
ولتاژ کاری میکروکنترلر
منظور از ولتاژ کاری میکروکنترلر، ولتاژ تغذیه ای است که باید به آن داد و آن را روشن کرد. محدودۀ این ولتاژ در میکروکنترلرها در دیتاشیت آنها ذکر شده است. برای مثال محدودۀ ولتاژ کاری ATmega128A برابر 2.7 ولت تا 5.5 ولت، میکروکنترلر LPC1768 برابر 2.4 ولت تا 3.6 و میکروکنترلر STM32H753XI ولتاژ کاری بین 1.62 ولت تا 3.6 ولت است.
توان مصرفی میکروکنترلر
میکروکنترلر نیز مانند سایر المان های الکترونیکی هنگام کار کردن مقداری توان مصرف می کند. توان مصرفی میکروکنترلرها ممکن است در دیتاشیت آنها ذکر نشود. توان مصرفی میکروکنترلرها در شرایط مختلف متفاوت است. این شرایط مختلف به این بستگی دارد که کدام یک از واحدهای داخلی میکروکنترلر فعال شده باشد. مثلاً آیا از پورت های I/O برای درایو کردن المانی خارجی جریانی کشیده می شود یا خیر؟ اگر جریانی کشیده می شود، از چند پایۀ پورت I/O جریان کشیده می شود؟ عوامل موثر دیگر بر توان مصرفی میکروکنترلرها عبارتند از: دما، فرکانس کلاک، ولتاژ کاری، مقدار استفاده از حافظه، زمان اجرای برنامه و دستورات، دسترسی به حافظۀ خارجی و … . برای مثال STM32H753XI در حالت کم مصرف 4 میکرو آمپر و به صورت معمول به ازای هر مگاهرتز 270 میکرو آمپر جریان کشی دارد (یعنی 270uAPMHz). همچنین ATmega128L در مد Active با فرکانس کاری 8 مگاهرتز و ولتاژ تغذیۀ 5 ولت، 17 میلی آمپر جریان کشی دارد. میکروکنترلر LPC1768 نیز هنگامی که ولتاژ تغذیۀ آن 3.3 ولت است، در فرکانس کلاک 120 مگاهرتز، جریانی برابر 51 میلی آمپر می کشد.
مدهای Sleep در میکروکنترلر
یکی از امکانات مهم هر میکروکنترلر وجود مدهای Sleep در آن است. مدهای Sleep برای بهینه کردن مصرف توان استفاده می شود. همچنین با وجود مدهای Sleep، میکروکنترلر می توانند به مدت طولانی تر مورد استفاده قرار گیرد. یعنی عمر میکروکنترلر وقتی که از مدهای Sleep استفاده می شود، نسبت به حالتی که استفاده نمی شود، بیشتر می شود. مفهموم و نام مدهای Sleep در میکروکنترلرهای مختلف، متفاوت است. برای مثال در میکروکنترلرهای AVR مدهای Sleep با نام های Idle و Power-Down و Power Save و Standby و … است. در میکروکنترلرهای STM32F1 نام های Sleep و Stop و Standby برای مدهای Low Power در نظر گرفته شده است. همچنین میکروکنترلرهایی وجود دارند که کلاً توان مصرفی خیلی کمی دارند. برای مثال STM32L522QC در حالت Low Power جریانی برابر 0.02 میکرو آمپر و در حالت نرمال به ازای هر مگاهرتز جریان 96 میکروآمپر می کشد. همچنین میکروکنترلرهایی برای کاربردهایی مثل TPMS (سیستم مانیتور فشار لاستیک خودرو – Tire Pressure Monitoring System) وجود دارد که توان مصرفی آنها بسیار کم است. برای مثال میکروکنترلر NXP FXTH871x7 برای کاربرد TPMS است.
فیوزبیت چیست؟
فیوزبیت ها در میکروکنترلر فقط در میکروکنترلرهای AVR مشاهده شده اند و در اکثر میکروکنترلرهای امروزی فیوزبیت وجود ندارد. در میکروکنترلرهای AVR بخشی از حافظۀ Flash به فیوزبیت ها اختصاص داده شده است. فیوزبیت ها در میکروکنترلرهای AVR با مقدار صفر فعال و با مقدار 1 غیر فعال می شوند. در میکروکنترلرهایی که فیوزبیت دارند، برخی تنظیمات صرفا با استفاده از فیوزبیت ها انجام می شود. تنظیماتی از قبیل انتخاب منبع کلاک، محدودۀ فرکانس کلاک، تنظیمات مربوط به پاک شدن یا نشدن حافظۀ EEPROM داخلی هنگام پروگرام، مقدار حافظه ای که به برنامۀ Boot اختصاص می یابد و … با مقدار دهی به فیوزبیت ها انجام می شود. فیوزبیت ها در هنگام پروگرام کردن مقدار دهی می شوند و مقدار آنها در طول اجرای برنامه تغییر نخواهد کرد.
ریست در میکروکنترلر
می توان گفت همۀ میکروکنترلرها یک پایه به نام Reset یا RST دارند که با صفر (یا یک) شدن آن پایه، میکروکنترلر از ابتدا شروع به اجرای برنامه ها می کند و اصطلاحاً Reset می شود. این ریست را ریست سخت افزاری می نامیم. البته تنها راه ریست شدن میکروکنترلر، ریست سخت افزاری نیست. منابع و روش های مختلفی برای ریست میکروکنترلر وجود دارد. برای مثال در میکروکنترلرهای STM32F1، ریست نرم افزاری نیز وجود دارد که WWDG Reset و Power Reset و Software Reset از این جمله اند.
زبان برنامه نویسی میکروکنترلر
برای برنامه نویسی میکروکنترلر زبان های برنامه نویسی C، زبان برنامه نویسی C++، برنامه نویسی Assembly، زبان برنامه نویسی Basic و … استفاده می شود.
مناسب ترین یا بهتر است بگوییم زبان های اصلی برای برنامه نویسی میکروکنترلر، زبان های برنامه نویسی C و C++ هستند. در سراسر دنیا، C و C++ به طور گسترده برای برنامه نویسی میکروکنترلرها به کار می روند. این دو زبان با توجه به ویژگی هایی که دارند، برای میکروکنترلرها مناسب تر از زبان های برنامه نویسی دیگر هستند. همچنین استانداردهای برنامه نویسی برای این زبان های برنامه نویسی در دنیا تدوین شده است. از جمله استاندارد MISRA C که برای زبان C است. همچنین امروزه اغلب آموزش های میکروکنترلر نیز با زبان C هستند و در این آموزش ها، لازم است که مخاطبان با زبان C آشنا باشند. اگر افراد شرکت کننده در آموزش های میکروکنترلر با برنامه نویسی و با زبان مورد بحث آن آموزش به حد کافی آشنایی نداشته باشند، حتماً در درک صحیح موضوعات مورد بحث آموزش، برای آنها مشکلاتی به وجود خواهد آمد. پس اگر بین انتخاب زبان برنامه نویسی برای دنیای میکروکنترلرها تردید دارید، بدانید که بطور قطع بهترین انتخاب زبان C در شروع است. در ادامه می توانید زبان C++ را نیز آموزش ببینید.
آموزش زبان C میکروکنترلرها یوبرد
آموزش زبان C++ میکروکنترلرها یوبرد
برد توسعه میکروکنترلر
بردهای توسعۀ مبتنی بر میکروکنترلر یک سری بردها هستند که روی آنها یک میکروکنترلر قرار گرفته است. برخی پایه های این میکروکنترلر به تجهیزات مختلف روی این بردها متصل شده است. همچنین برخی پایه های میکروکنترلر با استفاده از پین هدر به خارج از برد هدایت شده و در دسترس کاربر قرار گرفته اند. به بردهای توسعه، بردهای آموزشی نیز گفته می شود. هدف از بردهای توسعه، فارغ کردن کاربر از درگیری های سخت افزاری است. با وجود برد توسعه شما نیاز نیست که خودتان، برد مدار چاپی طراحی کنید، لحیم کاری کنید و … . درصورتی که قصد داشته باشیم که صرفا درگیر کار با کدنویسی میکروکنترلر شویم و قصد درگیری با سخت افزار را نداشته باشیم، می توانیم از بردهای توسعه استفاده کنیم. در بسیاری از موارد استفاده از برد توسعه پیشنهاد می شود. در زمان راه اندازی یک پروژه حتی اگر حرفه ای هستید پیشنهاد می شود در شروع کار حتما از برد توسعه استفاده کنید وقتی نرم افزار پروژه به جای مطلوبی رسید، می توانید خودتان سخت افزار طراحی کنید. اما طراحی سخت افزار در شروع پروژه معمولا زمان پروژه را طولانی می کند. همچنین برای شروع آموختن دنیای میکروکنترلرها پیشنهاد می شود که حتما از برد توسعه استفاده کنید. می توان گفت همۀ شرکت هایی که میکروکنترلر می سازند، برای میکروکنترلرهای خود بردهای توسعه نیز می سازند. برای مثال برد توسعه STM32F3DISCOVERY برای میکروکنترلر STM32F303VC توسط شرکت ST ساخته شده است. همچنین گاهی شرکت های دیگر (به جر شرکت های تولید کنندۀ میکروکنترلر) نیز برای میکروکنترلرها برد توسعه می سازند. مثلا موسسۀ ARDUINO که بردهای توسعۀ مبتنی بر میکروکنترلر، نرم افزار IDE برای میکروکنترلر و … را می سازد.
تصویر 21 – بردهای توسعۀ یوبرد
کتابخانه های موجود برای میکروکنترلر
با توجه به گسترده شدن امکانات میکروکنترلرها و همچنین ادوات جانبی آنها نظیر نمایشگرها، سنسورها، درایورهای موتورهای الکتریکی، ماژول های ارتباط Wireless و … و همچنین پر استفاده بودن این ادوات جانبی، کتابخانه هایی برای راه اندازی و استفاده از این ادوات جانبی برای میکروکنترلرها به زبان های مختلف برنامه نویسی ایجاد شده است. بطور مثال نرم افزار STM32CubeMX کتابخانه هایی برای راه اندازی امکانات مختلف میکروکنترلرهای STM32 ایجاد می کند. یا در نرم افزار کدویژن کتابخانه هایی برای راه اندازی LCDهای کاراکتری و LCDهای گرافیکی، آی سی DS1307 و … برای میکروکنترلرهای AVR وجود دارد. خیلی از این کتابخانه ها مختص نرم افزار و یا میکروکنترلر خاصی نیستند و می توانند برای گسترۀ وسیعی از میکروکنترلرها استفاده شوند. یا اصطلاحا قابل حمل هستند. درصورتی که با کتابخانه ها در برنامه نویسی آشنا نیستید، در آموزش های برنامه نویسی که پیش نیاز آموزش میکروکنترلر هاست، با کتابخانه ها آشنا خواهید شد.
انتخاب میکروکنترلر مناسب برای پروژه ها
در بسیاری از پروژه های الکترونیکی که قرار است مطابق برنامه ای خاص، روند خاصی از عملیات اجرا و انجام شود، می توان از میکروکنترلر استفاده کرد. حال سوال این است که از چه میکروکنترلری باید استفاده کنیم؟ برای پاسخ به این سوال را باید از چند جنبه بررسی کنیم و به نتیجه برسیم. از جمله موارد زیر:
- جنبۀ فنی: سرعت انجام دستورات، مشخصات شکل موج های خروجی میکروکنترلر (مثلاً خروجی تایمرها)، توان مصرفی میکروکنترلر، ولتاژ کاری میکروکنترلر، فرکانس کاری میکروکنترلر، تعداد پورت های I/O میکروکنترلر، پروتکل های ارتباطی میکروکنترلر، ابعاد و پکیج میکروکنترلر، مقدار حافظۀ برنامه و دادۀ میکروکنترلر و دیگر مشخصات فنی میکروکنترلرها می توانند تعیین کنندۀ نوع میکروکنترلر مورد استفاده در پروژه ها باشند.
- سیاست های پروژه: مدت زمان انجام پروژه و قیمت تمام شدۀ محصول نهایی و … .
- سیاست های شرکت: حتی الامکان یکپارچه بودن میکروکنترلر استفاده شده در محصولات مختلف یک شرکت، توان تامین آن توسط تامین کنندگان شرکت و … .
در این نوشته هدفمان پاسخ به این سوال بود که میکروکنترلر چیست؟ قبل از شروع جدی دنیای میکروکنترلر یا هر زمینۀ تخصصی دیگر در دنیای الکترونیک، پیشنهاد می کنم حتما مطالب زیر ببینید:
سلام جناب مهندس. خیلی عالی بود. فقط یه سوال. فرمودید "هنگامی که شرکت اینتل در حال اختراع اولین میکروپروسسور دنیا بود، یک مهندس از شرکت Texas Instruments به نام Gary Boone موفق به ساخت اولین میکروکنترلر شد."
سوالم اینه که خود میکروکنترلر cpu داره. مخترع میکروکنترلر حتما قبلش یه cpu بوده که بخواد اونو تو میکروکنترلر به کار ببره دیگه. بعد فرمودید که میکروپروسسور همون cpuعه. یعنی مخترع میکروکنترلر خودش cpu هم ساخته و توی میکروکنترلر قرار داده؟ ممنون
سلام. خواهش میکنم. این جمله درسته: “هنگامی که شرکت اینتل در حال اختراع اولین میکروپروسسور تک تراشه ای دنیا بود، یک مهندس از شرکت Texas Instruments به نام Gary Boone موفق به ساخت اولین میکروکنترلر شد.”
قبلش cpu بوده. متن هم در آینده اصلاح میشه. ممنون از دقت شما.
باعرض سلام وادب.بسیار ممنون وسپاسگزارم.واقعا عالی بودنمیدونم باچه کلمات وجملاتی تشکر کنم.ولی هرجا باشید آرزوی سلامتی و سربلندی برایتان رادارم
سلام دوست عزیز. خواهش میکنم. زنده باشید. ممنون از دعای خیرتون. موفق و پیروز باشید
باعرض سلام و خسته نباشید محمد جواد زرگر هستم و ۱۳ سالم است
از برنامه ی شما کمال تشکر را دارم خیلی عالی بود
درود بر جناب زرگر. ممنون از نظرتون. موفق و پیروز باشید
عالی و کامل بی نهایت متشکرم مهندس
خیلی ممنون. لطف دارید. خواهش میکنم
با سلام: بسیار خوب و مفید
سلام. خیلی ممنون. نظر لطف شماست
با سلام. ممنون از اطلاعات شما. بسیار عالی و کاربردی
سلام. سپاسگزارم از مطالعه تون. خیلی لطف دارید
زنده باد.
مفید بود.
سلام خیلی ممنون. لطف دارید.
خیلی عالی بود.ممنون
خواهش میکنم. لطف دارید
باسلام خدمت شما مهندس گرامی که واقعا زحمت کشیدید این اطلاعات مفید رو که حتی برخی از استادای دانشگاه هم در موردش چیزی بلد نیستن رو برامون به زبان ساده و کاملا قابل فهم توضیح دادید
من معمولا تو هیچ سایتی نظر نمیدم ولی سایت شما از اون سایتاییه که باید با افتخار نظر عالی بهش داد و خدا قوت گفت به نویسندش که اینقدر با جزعیات اطلاعات رو طبقه بندی شده و جامع قرار داده خدا حفظت کنه مهندس معلومه از اون مهندسای واقعی هستید بسیار بسیار سپاس
سلام. خیلی ممنون. زنده باشید. نظر لطف شماست. باعث افتخار ماست که بتونیم دانشمون رو ارائه کنیم. ممنون از این که نظرتون رو بیان کردید.