در این فصل معماری و ساختار سختافزاری بردهای آردوینو و قطعات موجود در این بردها مورد بررسی قرار میگیرد. برای انجام این بررسیها برد آردوینو UNO که از پرکاربردترین و رایج ترین بردهای خانواده آردوینو میباشد استفاده میشود. شکل زیر نمونه ای از این برد را نشان میدهد.
سختافزار بردهای آردوینو
شکل زیر نقشه شماتیک و سختافزاری برد Arduino و بخشهای مختلف آن را نشان میدهد. همانطور که از شکل دیده میشود سه بخش اصلی در سختافزار وجود دارد،
- میکروکنترلر (Microcontroller)
- تغذیه (Power Supply)
- پل یو اس بی (USB Bridge)
نقشهشماتیک برد Arduino UNO و بخشهای مختلف آن UNO
در ادامه هر یک از این بخشها مورد بررسی قرار خواهد گرفت.
میکروکنترلر
اولین مطلبی که باید به آن توجه داشت این است که بردهای آردوینو دارای یک میکروکنترلر هستند که نقش اجرای دستورات را بر عهده دارد. در واقع برنامه های نوشته شده توسط کاربر در محیط برنامه نویسی Arduino IDE پس از ترجمه، روی حافظه FLASH این میکروکنترلر برنامه ریزی شده و پس از آن میکروکنترلر خطوط برنامه را خوانده و اجرا مینماید.بنابراين، از این پس نباید گفته شود که آردوینو یک میکروکنترلر است. بلکه در واقع میکروکنترلر، یکی از قسمتهای تشکیل دهندة یک برد آردوینو میباشد. میکروکنترلر ATMEGA328، میکروکنترلری است که در بردهای Arduino UNO به عنوان کنترولر اصلی مورد استفاده قرار میگیرد. شکل 2-3 بلوک دیاگرام و معماری داخلی این میکروکنترلر را نشان میدهد. ATMEGA328 یک میکروکنترلر 8 بیتی CMOS با مصرف توان کم و بر مبنای معماری RISC[1] پیشرفته و از خانوادة میکروکنترلرهای AVR میباشد. با اجرای دستورالعملها در یک پالس ساعت راندمان اجرای دستورات در ATMEGA32 به 1MIPS میرسد.
هسته پردازنده در میکروکنترلرهای AVR
اصلی ترین کار پردازنده تضمین اجرای صحیح دستور العملها میباشد، بنابراین پردازنده باید بتواند دسترسی لازم به حافظه ها، انجام محاسبات، کنترل قطعات جانبی و راه اندازی وقفه ها را داشته باشد. شکل زیر بلوک دیاگرام معماری پردازنده یک میکروکنترلر AVR را نشان میدهد.
معماری داخلی میکروکنترلر 8 بیتی ATMEGA328
برای رسیدن به حداکثر کارایی و انجام عمليات موازی، AVRها از معماریهاروارد[2] استفاده میکنند. در این معماری برای داده ها و برنامه ها، حافظه ها و گذرگاه های جداگانه در نظر گرفته میشود. دستورالعملها در حافظه برنامه با یک مرحله خط لوله موازی انجام میشود. هنگامیکه یک دستور العمل در مرحله اجرا قرار دارد، دستورالعمل های بعدی در مرحله پیش برداشت از حافظه برنامه میباشد. این مفهوم، این امکان را فراهم میآورد که دستورات در هر سیکل ساعت اجرا شوند.
حافظه ها در میکروکنترلرها AVR
در معماری میکروکنترلرهای AVR دو فضای حافظه اصلی وجود دارد، فضای حافظة داده و فضای حافظه برنامه، در میکروکنترلرهای AVR، حافظه EEPROM نیز برای ذخیرة داده ها در نظر گرفته شده است.
حافظه برنامه FLASH با قابلیت برنامه ریزی مکرر و روی تراشه میکروکنترلر
ATMEGA328 دارای 32 کیلو بایت حافظه FLASH با قابلیت برنامه ریزی مکرر و روی تراشه، برای ذخیرة برنامه های کاربر میباشد. از آنجائیکه دستور العمل های میکروکنترلرهای AVR، 16 یا 32 بیتی میباشند، ساختار حافظه FLASH به صورت 16 × K16 سازماندهی میشود. برای ایجاد امنیت در نرمافزار، حافظه برنامه FLASH به دو بخش تقسیم میشود، بخش Boot Loader و Application Program.شکل زیر نقشه حافظه برنامه در میکروکنترلر ATMEGA328 را نشان میدهد.
بخش BootLoader
BootLoader، مکانیزمیرا برای خواندن و نوشتن کدهای برنامه توسط خود میکروکنترلر فراهم میآورد. این قابلیت، امکان بروز رسانی نرمافزار تحت کنترل میکروکنترلر را به کمک یک برنامه Boot Loader موجود در حافظه Flash فراهم میکند. برنامه Boot Loader میتواند با بکارگیری هر واسط ارتباطی ممکن و پروتکلهای مربوط به آن، کدهایی را از حافظه Flash بخواند و یا کدهایی را روی آن بنویسید. این برنامه میتواند کل حافظة Flash که شامل حافظه Boot Loader نیز میشود را بازنویسی کند. بنابراین Boot Loader میتواند خودش را نیز تغییر دهد و حتی در صورتی که در آینده نیازی به آن نباشد میتواند، خودش را از حافظه پاک نماید. اندازة حافظه Boot Loader با استفاده از فیوزبیتهای موجود در میکروکنترلر قابل تنظیم است.
حافظه داده SRAM
میکروکنترلر ATMEGA328 دارای 2 کیلو بایت حافظه SRAM میباشد.از حافظه SRAM برای ذخیرة متغیرهای تعریف شده توسط کاربر در برنامه، در هنگام اجرای برنامه کاربردی استفاده میشود.محتویات این حافظه برخلاف حافظه Flash که برنامة کاربر در آن قرار دارد با قطع برق پاک میشود.
حافظه EEPROM
میکروکنترلر ATMEGA328 دارای 1 کیلو بایت حافظه EEPROM میباشد. این حافظه در یک فضای داده جداگانه سازماندهی میشود که در آن میتوان بایتها را به صورت جداگانه نوشت و خواند.همانند حافظه FLASH اطلاعات موجود در این حافظه با قطعبرق پاک نمیشود.
تغذیه
ولتاژ کاری میکروکنترلر ATMEGA32 از 1/8 ولت تا 5/5 ولت میباشد. نکته ای که در این قسمت باید به آن توجه داشت، فرکانس کاری میکروکنترلر در هر ولتاژ کاری میباشد.به عنوان مثال در صورتی که بخواهیم میکروکنترلربا فرکانس کاری حداکثر خود، یعنی 20 مگاهرتز کار کند، حداقل ولتاژ 4/5 باید به عنوان تغذیه ورودی به میکروکنترلر داده شود.
پایه های ورودی، خروجی
میکروکنترلر ATMEGA328 دارای 3 پورت با نامهای PORTB، PORTC و PORTD میباشد.تمام پایه های این پورتها میتوانند به عنوان یک ورودی- خروجی دیجیتال همه منظوره، یا کاربری خاص دیگری که در برگة اطلاعاتی میکروکنترلر به آن اشاره شده است مورد استفاده قرار گیرند. به عنوان مثال پایه های 0 تا 5 از PORTC میتوانند بجای ورودی-خروجی دیجیتال، به عنوان ورودی مبدل آنالوگ به دیجیتال (ADC) تعریف شوند. پایه هایی نیز در میکروکنترلر وجود دارند که میتوانند به صورت خروجی PWM پیکربندی شوند. این پایه ها در بردهای آردوینو با علامت “~” مشخص شده اند.
ورودیهای آنالوگ
میکروکنترلر ATMEGA328 دارای مبدل آنالوگ به دیجیتال 6 کاناله ، 10 بیتی میباشد که ورودیهای آنها پایه های صفر تا 5 از PORTC میباشد. این پایه ها به هدر [3]آنالوگ روی برد آردوینو متصل شده اند.
اشتباهی که در این قسمت از برد ممکن است بوجود آید این است که هدر در نظر گرفته شده در برد با عنوان هدر آنالوگ فقط برای ورودیهای آنالوگ میباشد، در صورتی که میتوان از این پایه ها هم به عنوان ورودی آنالوگ و هم به عنوان یک ورودی، خروجی دیجیتال استفاده نمود.
واسط UART
واسط UART یک واسط سریال میباشد. میکروکنترلر ATMEGA328 دارای یک واسط UART میباشد. پایه های RX و TX واسط UART، به مدار مبدل USB به UART متصل شده اند. همچنین این پایه ها به پایه صفر و پایه یک از هدر دیجیتال نیز متصل شده اند.
واسط SPI
واسط SPI یک واسط سریال دیگر میباشد. میکروکنترلر ATMEGA328 دارای یک ماژول SPI میباشد. علاوه بر اینکه میتوان از پایه های این ماژول به عنوان واسط SPI استفاده کرد، میتوان از آن برای برنامه ریزی میکروکنترلر، توسط یک برنامه ریز مستقل نیز استفاده نمود. پایه های مربوط به این واسط در هدر دو ردیفه ای که نزدیک به میکروکنترلر است در دسترس میباشد. همچنین پایه های مربوط به این واسط در هدر دیجیتال نیز در دسترس است.
جدول 2-1. شماره پایه و نام پایه های واسط SPI در برد آردوینو UNO
شماره پايه | نام پايه |
11 | MOSI |
12 | MISO |
13 | SCK |
واسط TWI
واسط I2C یا واسط TWO WIRE، واسطی است که از دو سیم تشکیل شده است، داده سریال و پالس ساعت که نام این پایه ها SCL و SDA میباشند. این پایه ها در برد Arduino UNO در 2 پایه آخر هدر دیجیتال و پایه های 4 و 5 هدر آنالوگ در دسترس میباشند.
سایر امکانات
شکل 2-8. مدار قسمت تغذیهبرد آردوینو UNO |
همانند سایر میکروکنترلرها، علاوه بر مواردی که در بخشهای قبل به آن اشاره شد امکانات گسترده تری دیگری نظیر، تایمرها، کانترها، مقایسه کننده ها، مدهای کاهش توان و. .. در این میکروکنترلر تعبیه شده اند که در صورت نیاز میتوان با مراجعه به برگه های اطلاعاتی میکروکنترلر و مثالهای متعددی که در بخش های بعد آورده خواهد شد، از آنها استفاده نمود.
2-Reduced Instruction Set Computer
[3] Header