علوم الحاسب

تعرّف على المتحكمات الصغرية Microcontrollers

نعيش اليوم في عالمٍ أصبحت الأجهزة الإلكترونية جزءًا أساسيًا منه، وفي حين أن تفاعلنا مع الإلكترونيات قد يبدو محصورًا بالحواسيب الشخصية، الحواسيب اللوحية والهواتف الذكية، إلا أن هنالك عناصر أخرى تلعب دورًا هامًا بحياتنا على الرّغم من أننا قد لا نشاهدها بالعين المجرّدة أو حتى نشعر حتى بتأثيرها. الحديث هنا هو عن المُتحكمات الصغرية Microcontroller (أو المتحكمات الدقيقة) التي تشكل العمود الفقريّ للأنظمة المدمجة والعديد من الأجهزة والتقنيات التي نستخدمها بشكلٍ يوميّ ولا نعرف فعليًا كيف تعمل وكيف تقوم بتنفيذ مهامها.

عبر هذا المقال سيتم تسليط الضوء على المتحكمات الصغرية، بنيتها، تطورها، العلاقة بينها وبين المعالجات الصغرية والأنظمة الحاسوبية، أهم خصائصها ومميزاتها بالإضافة لأشهر المتحكمات الصغرية المتوفرة في الوقت الرّاهن والشركات المصنعة لها.

مقدمة تعريفية في المتحكمات الصغرية

المتحكم الصغري عبارة عن شريحة إلكترونية مُتكاملة يمكن النظر إليها على أنها حاسوب صغير، وهذا يعني أن المتحكم الصغري يحتوي على كافة العناصر الأساسية للنظام الحاسوبيّ: وحدة معالجة مركزية CPU، ذواكر Memory Units، وحدات إدخال وإخراج البيانات I/O Units، بالإضافة لطرفياتٍ أخرى تقدّم وظائف متنوعة للمتحكم الصغرية.

تُعتبر المتحكمات الصغرية شبيهةً جدًا بالأنظمة المدمجة على شريحة SoC: System-on-Chip، إلا أن الأنظمة المدمجة على شريحة تعتبر أكثر شموليةً، حيث تحتوي الكثير من هذه الأنظمة على متحكمٍ صغريّ ضمنها بالإضافة لوحداتٍ وطرفياتٍ أخرى تساعد على القيام بمهام أكثر تعقيدًا. كمثال على الأنظمة المدمجة ضمن شريحة هو شرائح المعالجة الخاصة بالهواتف الذكية.

الاستخدام الأساسيّ للمتحكمات الصغرية هو في الأجهزة والمنتجات المُتحكم بها تلقائيًا، أي التي لا يتطلب عملها وجود تحكمٍ مباشر من المستخدم، بل تعمل من تلقاء نفسها اعتمادًا على برنامجها أو نظام التشغيل المزودة به. الأمثلة على مثل هكذا أجهزة ومنتجات هي ما يعرف اختصارًا بالـ “الأنظمة المدمجة Embedded Systems”، مثل أنظمة التحكم الإلكترونية في محركات السيارات والطائرات، الأنظمة الإلكترونية المشغلة للأجهزة الطبية المزروعة، الأنظمة الإلكترونية في الأجهزة الطبية المحمولة ذات استهلاك الطاقة المنخفض، الأنظمة الإلكترونية المستخدمة في تطبيقات قياس الحرارة، الرطوبة، قراءة المعلومات البيومترية (بصمة اليد، بصمة العين…).

لمحة تاريخية حول تطور المتحكمات الصغرية

في بداية سبعينيات القرن الماضي، أعلنت شركة إنتل الأمريكية عن تصنيع أول معالجٍ صغريّ في التاريخ، وهو المعالج Intel-4004 الذي يعتمد على بنية 4-بت، وتم إطلاقه بشكلٍ رسميّ للاستخدام التجاريّ سنة 1972. بعد ذلك عادت إنتل من جديد لتطلق أول معالج ببنية 8-بت وهو المعالج Intel-8008 ثم أتبعته بالمعالج Intel-8080. اعتبرت هذه الأحداث ثورةً تقنية في ذلك الوقت إذ أنها فتحت الباب أمام إمكانية تصغير حجم الحواسيب بشكلٍ كبير واستثمار تقنية أنصاف النواقل لتصنيع داراتٍ إلكترونية قادرة على أداء المهام الحسابية المعقدة.

على الرّغم من أهمية الإعلان عن أول معالجٍ صغريّ، لم يكن من السهل بذلك الوقت استخدامه على نطاقٍ واسع في التطبيقات التجارية نظرًا للكلفة المرتفعة الذي رافقته، حيث أن تصميم النظام الحاسوبيّ الكامل سيتطلب وجود ذواكر ووحدات تخزين وغيرها من الطرفيات الضرورية، وبالتالي فإن كلفة تصميم النظام الحاسوبيّ ككل وصلت بذلك الوقت لعدة مئات من الدولارات، وهو رقمٌ مرتفع جدًا عند أخذ قيم صرف العملات في فترة السبعينيات.

بذلك الوقت، وأثناء انشغال إنتل بمعالجاتها الصغرية، عمل إثنان من مهندسي شركة “تكساس إنسترومنت Texas Instruments” على تصنيع شريحةٍ إلكترونية تتضمن وحدة معالجة مركزية بالإضافة لذاكرة وصول عشوائي RAM وذاكرة قراءة ROM بالإضافة لوحدات دخلٍ وخرج I/O Units، وكانت النتيجة هي الإعلان عن المتحكم الصغريّ TMS1000 الذي أصبح متوفرًا بشكلٍ تجاريّ عام 1974، ويتم اعتباره اليوم من قبل الكثيرين على أنه أول متحكم صغريّ تم تصنيعه على الإطلاق.

المتحكم الصغريّ TMS1000 من شركة Texas Instruments. يعتبر أول متحكم صغري تم تصنيعه في العالم.

بعد ذلك، بدأت عجلة تطور المتحكمات الصغرية تأخذ منحى متسارع، إذ قامت إنتل بإطلاق أول متحكماتها الصغرية عام 1976 وهو Intel-8048 ثم قامت عام 1980 بإطلاق عائلة المتحكمات الصغرية Intel MCS-51 المعروفة تجاريًا باسمها الشهير 8051، والتي أتت ببنية 8-بت مع العديد من الطرفيات الهامة في مجال الأنظمة المدمجة مثل وحدتي توقيت Timers، أربع مسجلات عامة الاستخدام General Purpose Registers بالإضافة لاعتماده على معمارية فون-نيومان المعدلة التي تحتوي على مساحة منفصلة من الذاكرة لتخزين تعليمات البرامج والبيانات. تمكنت إنتل من تحقيق نجاحٍ ضخم عبر عائلة المتحكمات الصغرية 8051 خصوصًا خلال فترة الثمانينات والتسعينات.

بحلول منتصف ثمانينات القرن الماضي، بدأت شركات أخرى تدخل على المنافسة في مجال تصنيع المتحكمات الصغرية، خصوصًا شركة أتمل Atmel التي أطلقت متحكمها الصغري At89C51 المعتمد على بنية 8051 من إنتل مع تضمينه بذاكرة وميضية (فلاش) وذلك عام 1985، وتبعتها شركة Microchip بنفس العام لتطلق متحكمها الصغريّ PIC16C64 بنفس العام، وكذلك موتورولا التي أطلقت أول متحكم صغري مزود بوحدة تبديل تشابهي-رقمي ADC بنفس العام وهو Motorola 68HC11.

في سياقٍ منفصل، قامت شركة Acron البريطانية بالإعلان عن بنية ARM الشهيرة لأول مرة عام 1985، والتي تعتمد على معمارية RISC التي توّفر استهلاكًا أقل للطاقة بفضل اعتمادها على عددٍ أقل من التعليمات وذلك بالمقارنة مع معمارية CISC. في البداية، كان الاسم ARM يعني Acron RISC Machines وما لبث لاحقًا أن تحول إلى Advanced RISC Machines عندما تم تأسيس شركة ARM Holdings المسؤولة عن تصميم بنى ARM للمتحكمات الصغرية والأنظمة المدمجة ضمن شريحة SoC.

استمرت هيمنة المتحكمات الصغرية المعتمدة على بنية 8051 حتى حلول تسعينات القرن الماضي، والتي اعتمدت بمعظمها على نوعين من ذواكر القراءة: EPROM التي يمكن محو محتواها عبر تعريضها للأشعة فوق البنفسجية أو PROM وهي ذواكر القراءة فقط القابلة للبرمجة مرة واحدة. بحلول عام 1993 حدث تطورٌ تقنيّ بالغ في مجال ذواكر القراءة فقط وهو الإعلان عن ذواكر القراءة القابلة لمحي محتواها كهربائيًا، أو اختصارًا EEPROM، وهنا سارعت شركة Microchip لتطلق أول متحكم صغريّ يمتلك ذاكرة من هذا النوع وهو PIC16C84. كانت الخطوة التالية المهمة هي قيام شركة Atmel بإطلاق بنيتها الشهيرة AVR عام 1996 التي تعتمد أيضًا على معمارية RISC وهيكلية هارفارد، وأصبحت المتحكمات الصغرية من عائلة AVR وعائلة PIC الأكثر شهرةً واستخدامًا في معظم التطبيقات، وبقيت المتحكمات المعتمدة على دقة 8-بت هي الأكثر انتشارًا واستخدامًا في الأسواق.

مع بداية القرن الجديد، بدأ الاهتمام باستخدام متحكمات صغرية ذات دقة 16-بت و32-بت يتزايد، وبدأت شركات أخرى تدخل على خط المنافسة مثل NXP بسلسلة متحكمات LPC و STMicroelectronics بسلستها الشهيرة STM32 و شركة Infineon بسلسلة متحكمات XMC، وفي عام 2011 تجاوزت مبيعات متحكمات 16-بت مثيلاتها من متحكمات 8-بت، وفي وقتنا الرّاهن، أصبحت متحكمات 32-بت المعتمدة على بينة ARM Cortex-M هي الأكثر تفضيلًا في العديد من تطبيقات واستخدامات المتحكمات الصغرية، خصوصًا في المجال الصناعي. لا تزال متحكمات 8-بت ذات شعبيةٍ كبيرة وانتشارٍ واسع في التطبيقات التي لا تتطلب أداءً متقدمًا أو وجود طرفياتٍ قادرة على تنفيذ عملياتٍ معقدة (مثل معالج الإشارة الرقميّ DSP أو وحدة حساب الفاصلة العائمة FPU).

تعتبر المتحكمات المعتمدة على بنية ARM Cortex-M من الأكثر استخدامًا وانتشارًا في مجال المتحكمات بدقة 32-بت في الوقت الراهن.

المخطط الصندوقي العام لبنية المتحكمات الصغرية

بعد قراءة اللمحة التاريخية الخاصة بالمتحكمات الصغرية، سندرك أنه يتواجد الكثير من عائلات وسلاسل المتحكمات التي تقوم بإنتاجها شركات مختلفة باعتمادٍ على معمارياتٍ وبنى مختلفة، وعلى الرّغم من ذلك، فإنه يمكن تقسيم الوحدات الأساسية التي يتألف منها المتحكم الصغريّ إلى ما يلي:

  • وحدة المعالجة المركزية CPU
  • ذاكرة الوصول العشوائي RAM
  • ذاكرة القراءة فقط وتخزين التعليمات ROM
  • مسجلات خاصة Special Registers
  • نظام النواقل Bus-System
  • منافذ الدخل والخرج I/O Pins
  • طرفيات مساعدة أخرى

بالنسبة للطرفيات الأخرى مثل وحدة التبديل التشابهي الرقميّ ADC، أو المؤقتات Timers، أو وحدات الاتصال التسلسليّ مثل UART, SPI, I2C أو وحدات المعالجة المتقدمة مثل وحدة المعالجة باستخدام الفاصلة العائمة FPU، فإنها جميعًا مختلفة ومتباينة بين عوائل وأنواع المتحكمات، حيث قد تتواجد جميعها في بعض الأنواع، وقد يتواجد بعضها، وقد تتواجد بكمياتٍ مختلفة، بمعنى أننا قد نجد مؤقت أو مؤقتين أو حتى ثلاث مؤقتات، وقد نجد دعمًا لمعيار واحد من معايير الاتصال التسلسليّ أو لاثنين منها أو لجميعها وهكذا. ما يهم هنا معرفته هو أن اختيار المتحكم الصغريّ بحسب الطرفيات التي يتضمنها يتبع لطبيعة التطبيق والاستخدام المخصص لأجله.

بالعودة للوحدات الأساسية التي يتكون منها المتحكم الصغريّ، فإنه يمكن شرحها وتوضيح وظيفتها كما يلي:

وحدة المعالجة المركزية CPU: من حيث المبدأ، وحدة المعالجة المركزية داخل المتحكم الصغريّ تقوم بنفس مهام وحدة المعالجة المركزية المستخدمة في الحواسيب الشخصية كما أنها تتألف من المكونين الأساسيين نفسهما: وحدة الحساب والمنطق ALU ووحدة التحكم Control Unit. بكل الأحوال، المعالج الموجود داخل شريحة المتحكم الصغريّ ليس نفس المعالج المستخدم في الحواسيب الشخصية: تردد عمل المعالج في المتحكمات الصغرية أقل بكثير (من رتبة كيلوهرتز في متحكمات 8-بت). معمارية المعالج في المتحكمات الصغرية محسنة لضمان أقل استهلاك ممكن للطاقة وذلك على حساب قدرتها على إجراء العمليات الحسابية المعقدة على الرّغم من تضمينها مؤخرًا بوحدات تساعد على تنفيذ مهام معقدة (مثل وحدة الحساب بالفاصلة العائمة FPU أو معالج الإشارة الرقميّ DSP ووحدات حماية وإدارة الذاكرة).

ذاكرة الوصول العشوائيّ RAM: تقوم ذاكرة الوصول العشوائيّ بتخزين البيانات والمعلومات ذات الاستخدام المؤقت أثناء عمل البرنامج وتحتفظ هذه الذاكرة بالبيانات طوال فترة عمل البرنامج، ولكن وفي حال انقطاعٍ مفاجئ للتغذية الكهربائية، فإنها ستفقد البيانات بشكلٍ فوريّ، ولهذا تعرف بأنها ذاكرة “متطايرة Volatile”. تعتمد الكثير من المتحكمات الصغرية على ذاكرة وصول عشوائي ستاتيكية SRAM التي تؤمن سرعة عمل عالية جدًا مع استهلاك طاقة منخفض جدًا (بالمقارنة مع DRAM) إلا أنها تشغل حيزًا فيزيائيًا كبيرًا، حيث تتألف خلية الذاكرة الواحدة بأبسط أشكالها من 6 ترانزستورات بالمقارنة مع ترانزستور واحد لخلايا DRAM، ولذلك فإن حجم هذه الذواكر في المتحكمات الصغرية قليل ومن رتبة الكيلوبايت. تتألف ذواكر الوصول العشوائيّ من عددٍ كبيرٍ من المسجلات Registers التي تبلغ سعة كل منها دقة المتحكم الصغري، فلو كان لدينا متحكم بدقة 8-بت فهذا يعني أن مسجلات ذاكرة الوصول العشوائيّ بدقة 8-بت، ويتم تنظيم الذاكرة على شكل مصفوفة من المسجلات وهي تكتب على هذا النحو: ذاكرة بسعة 256×8 يعني أنها تحوي 256 مسجل كل منها بسعة 8-بت.

ذاكرة القراءة فقط ROM: تقوم هذه الذاكرة بحفظ المعلومات بشكلٍ يضمن بقائها حتى بحالة انقطاع التغذية الكهربائية. هذه المعلومات هي التعليمات الأساسية التي يحتاجها المتحكم الصغريّ أثناء عمله بالإضافة لمساحة ذاكرة أخرى مخصصة لحفظ الكود البرمجيّ الذي يتم تنفيذه أثناء عمل المتحكم. أكثر أنماط ذواكر القراءة فقط المستخدمة في المتحكمات الصغرية هي الذواكر الوميضية Flash. بالإضافة إلى ذلك، تتضمن المتحكمات الصغرية وحدات تخزين قابلة للبرمجة من نوع EEPROM يمكن استخدامها بشكلٍ إضافيّ لتخزين وحفظ معلومات أخرى.

المُسجلات Registers: بالإضافة لذاكرة الوصول العشوائيّ وذاكرة القراءة فقط، يعتمد المعالج الموجود ضمن شريحة المتحكم الصغريّ على عددٍ من المسجلات المخصصة لتنفيذ مهماتٍ محددة أثناء عمل البرنامج، وأشهر مثال على هذه المسجلات الخاصة هو عداد البرنامج Program Counter الذي يقوم بتخزين عنوان التعليمة التالية التي يتوجب على المعالج أن يقوم بتنفيذها، وللتوضيح، فإننا نعلم الآن أن ذاكرة القراءة فقط تحتفظ بالكود بالبرمجيّ الذي يخبر المعالج ما الذي يجب أن يقوم به، ولكن المعالج لا يعلم بالضبط مكان وجود هذه التعليمات ضمن الذاكرة (تحديدًا “عنوان” التعليمات)، ووظيفة عداد البرنامج هو إخبار المعالج بـ “عنوان” التعليمة المحفوظة في ذاكرة القراءة فقط كي يقوم بالذهاب إليها ومن ثم تنفيذها.

نظام النواقل System Bus: الناقل Bus ليس إلا سلك توصيل فيزيائيّ بين الوحدات المختلفة التي تشكل شريحة المتحكم الصغريّ، وهو يؤمن نقل البيانات والأوامر من مكانٍ إلى آخر. هنالك ثلاثة نواقل أساسية: ناقل البيانات Data-Bus، ناقل الأوامر Control-Bus وناقل العناوين Address-Bus. كل نوع من هذه الأنواع مختص بنقل نمطٍ معينٍ من البيانات، فناقل العناوين مهمته جلب مكان توضع البيانات والتعليمات البرمجية، بينما يقوم ناقل البيانات بجلب البيانات والمعلومات نفسها، وأخيرًا يقوم ناقل التحكم بنقل أوامر محددة، مثل قيام المعالج بإرسال طلب استعلام لقراءة/كتابة جزء محدد من الذاكرة. بشكلٍ أساسيّ، تحدد سعة ناقل العناوين الحجم الأقصى لذاكرة الوصول العشوائيّ التي يستطيع المعالج التعامل معها، أو ما يعرف بـ “مساحة العنونة Addressing Space”.

منافذ الدخل والخرج I/O Pins: تقوم منافذ الدخل والخرج بالسماح لدخول البيانات والمعلومات من وإلى المعالج ضمن شريحة المتحكم الصغريّ. يتم تقسيم هذه المنافذ على شكل “بوابات Ports” حيث تتضمن كل بوابة عددًا محددًا من المغارز Pins، ويتم تخصيص مسجل محدد يمكن عبره التحكم بطبيعة البوابة، سواء كانت دخل أو خرج ونوعية الإشارات الكهربائية التي يمكن استقبالها عبر هذه البوابة.

إلى هنا تكون انتهت الوحدات والأجزاء الأساسية التي توجد داخل شريحة المتحكم الصغريّ. بكل الأحوال، تتضمن المتحكمات الصغرية طرفياتٍ ووحدات أخرى ذات مهام ووظائف محددة، وأشهر هذه الطرفيات:

المبدل التشابهي-الرقمي Analog-Digital-Converter: وظيفة هذه الوحدة هي تحويل إشارة الحهد الكهربائيّ التشابهية التي تدخل المتحكم الصغريّ عبر أحد مغارزه إلى ترميزٍ رقميّ يمكن التعامل معه من قبل المتحكم.

المبدل الرقمي-التشابهي Digital-Analog-Converter: تقوم هذه الوحدة بتحويل البيانات الرّقمية داخل المتحكم الصغري إلى شكلٍ تشابهيّ يمثل نتيجة المعالجة التي تم إجراؤها. كمثال، تتطلب عملية تعديل الصوت تحويله أولًا لشكلٍ رقميّ (عبر وحدة ADC) ومن ثم يقوم المعالج بتعديله وفقًا للتعليمات البرمجية المحفوظة في ذاكرة القراءة فقط، ومن أجل إرسال الصوت المُعالج وعرضه بشكلٍ مفهومٍ بالنسبة لنا يتم استخدام وحدة المبدل الرقمي-التشابهي التي يمكن ربطها مع جهازٍ عرض مناسب مثل مكبر صوتي.

المؤقتات Timers: توّفر المؤقتات الزمنية وسيلةً لتوليد فترات زمنية محددة تستخدم لأجل معرفة حصول حدثٍ ما خلال زمنٍ ما (مثل قياس عدد نبضات القلب خلال دقيقةٍ واحدة) أو لأجل معرفة الزمن اللازم لتنفيذ أمرٍ محدد. فضلًا عن ذلك، تستخدم المؤقتات بشكلٍ كبير في توليد إشارات تعديل عرض النبضة PWM المستخدمة على مجالٍ كبير في تطبيقات التحكم، خصوصًا التحكم بسرعة المحرّكات.

وحدات الاتصال التسلسليّ Serial-Interface: هنالك ضرورة في الكثير من التطبيقات لتبادل المعلومات بين المتحكم وأجهزةٍ أخرى محيطة به (قد تكون متحكمًا آخر)، ولهذا السبب تم تصميم العديد من معايير الاتصال التسلسلي وتخصيص مغارز Pins محددة كي تتولى عملية إدخال وإخراج البيانات بحسب أحد معايير الاتصال. أشهر معايير الاتصال التسلسليّ المستخدمة في المتحكمات الصغرية هي UART، SPI و I2C. فيزيائيًا، يتم استخدام أحد المغارز التي المتوّفرة ضمن المتحكم الصغريّ لإنشاء قناة اتصال تسلسليّ، وكل ما يتطلبه الأمر هو تهيئة المسجل المسؤول عن هذه المغارز ليخبر المعالج أنها ستستخدم لإنشاء قناة اتصال بحسب أحد المعايير.

كمثالٍ على البنية الداخلية لمتحكمٍ صغريّ التي تتضمن كافة الوحدات الأساسية بالإضافة إلى بعض الطرفيات، يمكن النظر إلى البنية الشهيرة 8051 التي تتضمن طرفيةً خاصة بالتعامل مع المقاطعات، بالإضافة لمؤقتين زمنيين Timer0, Timer1 وأخيرًا منفذ تسلسلي يتيح تبادل البيانات مع الأجهزة الأخرى.

المتحكم الصغري كنظامٍ حاسوبي

يعتبر السؤال المتعلق بالاختلافات بين المتحكم الصغريّ والمعالج الصغريّ من أكثر الأسئلة المطروحة عند الحديث عن المتحكمات الصغرية، وبما أننا قمنا سابقًا بالإجابة على هذا السؤال ضمن مقالٍ تفصيليّ، فإننا سنتطرق في هذه الفقرة لجانبٍ آخر من شأنه المساعدة على استيعاب بنية المتحكمات الصغرية والغرض منها.

أشرنا في مقدمة المقال إلى معلومة أساسية وهامة: في الجوهر، المتحكم الصغري Microcontroller عبارة عن حاسوب صغير جدًا! نعم لقد قرأت ذلك بشكلٍ صحيح، وقد يخطر ببالك أننا قد أخطأنا بمقدمة المقال عندما ذكرنا أن المتحكم الصغريّ هو دارة متكاملة IC. في الواقع، هذا الأمر يتطلب قليلًا من التوضيح، وعلينا الغوص نوعًا ما في تعريف “النظام الحاسوبيّ Computer System”.

يتم استخدام كلمة “حاسوب” في الحياة اليومية للإشارة إلى أجهزةٍ مثل الحاسوب المحمول “اللابتوب” أو الحاسوب المكتبيّ والتي تتضمن مجموعةً من الوحدات التي تضمن قيام هذه الآلة بالمهام التي نطلبها منها، وفي حين أن استخدامنا لكلمة “حاسوب” للإشارة لهذه الآلات (أي اللابتوب والحاسوب المكتبيّ) ليس خاطئًا، إلا أنه لا يعني أنها الآلات والأجهزة الوحيدة التي يمكن أن نطلق عليها اسم “حاسوب”، أو لنكن دقيقين أكثر، إنها ليست الأجهزة التقنية الوحيدة التي يمكن أن نطلق عليها اسم “نظام حاسوبي”.

لنأخذ نظرةً أكثر عمقًا حول الحاسوب نفسه، ولنحاول تحليل بنيته ومكوناته الأساسية التي يقوم عبرها بتنفيذ ما نطلبه منه:

  1. يمتلك الحاسوب دماغًا يقوم بإجراء كافة العمليات الخاصة بمعالجة البيانات، وهو وحدة المعالجة المركزية، أو اختصارًا المعالج.
  2. يمتلك الحاسوب ذواكر تقوم بتخزين الكثير من المعلومات الهامة والضرورية لضمان عمله بالشكل المطلوب، فضلًا عن وجود وحدات تخزين تتيح لنا حفظ المعلومات والبيانات المختلفة التي يقوم المعالج نفسه بتكوينها (صور، فيديوهات، ملفات نصية، ملفات موسيقية).
  3. يمتلك الحاسوب وحداتٍ تساعدنا على إرسال البيانات والمعلومات لداخله، سواء كانت أدواتٍ تفاعلية مباشرة (مثل لوحة المفاتيح والفأرة وشاشات اللمس) أو أدوات اتصالات مختلفة (مثل منفذ البيانات التسلسليّ USB، منفذ الايثرنت، منفذ الوسائط المتعددة عالية الوضوح HDMI).
  4. يمتلك الحاسوب وحداتٍ تساعدنا على مشاهدة ناتج عمليات معالجة البيانات، مثل الشاشة أو المكبرات الصوتية.

العرض الموجز السابق هو توضيح بسيط لمبدأ “النظام الحاسوبي” وما هي الوحدات الوظيفية التي يجب توافرها في أي نظام تقنيّ كي نتعامل معه على أنه حاسوب. قد يخطر بذهنكم الآن أن العرض السابق يشير بشكلِ ضمنيّ إلى أن أجهزةً مثل الهواتف الذكية هي عبارة عن حواسيب، وإن فكرتم بهذا الشكل، هنيئًا لكم، لأن هذا صحيح! من وجهة نظر تقنية مجرّدة، وبتجاهل الاختلافات المتعلقة بأنظمة التشغيل وخصائصها، فإن الهاتف الذكيّ هو عبارة عن نظام حاسوبي متكامل، يختلف عن الحاسوب المكتبيّ أو الحاسوب المحمول بطريقة تفاعل المستخدم معه وبالتصميم الداخليّ لوحداته الأساسية (مثل المعالج والذواكر) التي تجعل منها ذات استهلاكٍ منخفضٍ للطاقة وذات حجمٍ فيزيائيّ صغير يتيح وضعها ضمن جهازٍ صغير كالهاتف المحمول.

بالعودة للمتحكم الصغريّ، فإنه وكما أشرت بالبداية عبارة شريحة إلكترونية متكاملة تتضمن داخلها عددًا كبيرًا من الوحدات الوظيفية التي تؤدي مهام مختلفة تساهم بالنتيجة بتكوين نظامٍ حاسوبيّ مدمج على شريحةٍ صغيرة أبعادها لا تتجاوز أبعاد القطعة النقدية المعدنية. بشكلٍ أكثر دقة، يتضمن المتحكم الصغريّ بداخله معالجًا مركزيًا، وحدات ذاكرة، وحدات تخزين، وحدات إدخال وإخراج، وحدات اتصال. هذه تكامل عمل هذه الوحدات الوظيفية مع بعضها البعض هو ما يبرر اعتبار المتحكم الصغريّ نظامًا حاسوبيًا.

تصنيفات وأنماط المتحكمات الصغرية

يتواجد الكثير من أنواع المتحكمات الصغرية في وقتنا الرّاهن المختلفة عن بعضها البعض بالمميزات والقدرات التي تتيحها. هنا سنقوم بالتركيز على أبرز السمات التي تميّز عوائل المتحكمات الصغرية والمستخدمة في تصنيفها.

1. دقة المعالج Processor Resolution

أي سعة ناقل العناوين ضمن شريحة المتحكم الصغريّ، والتي تحدد الحجم الأكبر للبيانات التي يمكن تبادلها عند تنفيذ كل تعليمة برمجية. يمكن اختيار متحكم صغريّ بدقة 8-بت، 16-بت أو 32-بت.

2. الذواكر Memories

  • متحكمات صغرية بذواكر خارجية External Memory Microcontrollers: هذا النمط من المتحكمات لا يتضمن كافة الوحدات الوظيفية والطرفيات التي يحتاجها المتحكم وإنما تتواجد بشكلٍ منفصل خارج الشريحة وتتصل معه عبر وحدات الدخل والخرج.
  • متحكمات صغرية ذواكر مضمنة Embedded Memory Microcontrollers: هذا النمط من المتحكمات يتضمن كافة الذواكر والوحدات الوظيفية التي يحتاجها المتحكم لتنفيذ عمله بدون الحاجة لربطه مع أي ذاكرة أو وحدة وظيفية خارجية.

3. معمارية الذواكر Memory Architecture

  • معمارية هارفارد Harvard Memory Architecture: بهذا النوع من المتحكمات يتم تخصيص مساحات منفصلة لكل من ذاكرة البرامج وذاكرة البيانات، بما يسمح بالوصول إليها بنفس الوقت من قبل المعالج.
  • معمارية برينستون (فون-نيومان) Princeton Memory Architecture: بهذا النوع من المتحكمات يتم تخصيص مساحة مشتركة لذاكرة البرامج والبيانات، بما يعني ضرورة أن المعالج سيحتاج عدد دورات عمل أكثر لتنفيذ نفس التعليمة بالمقارنة مع معمارية هارفارد.

4. حزمة التعليمات Instruction Set

  • معمارية RISC: Reduced Instruction Set Computing: بهذا النمط من المتحكمات يتم استخدام عدد قليل من التعليمات البسيطة لتنفيذ البرامج المختلفة. كمثال، فإن عملية الضرب تتم عبر تنفيذ عدد متتالي من تعليمات الجمع، كون تعليمة الجمع أبسط من تعليمة الضرب. الاعتماد على تنفيذ التعليمات البسيطة يساهم بتقليل عدد الترانزستورات ضمن شريحة المعالجة وهو ما بدوره يساهم بتخفيض استهلاك الطاقة للشريحة ككل.
  • معمارية CISC: Complex Instruction Set Computing: بهذا النمط من المتحكمات يتم استخدام تعليمات معقدة من أجل تنفيذ الأوامر المختلفة، وهذا يعني عددًا أقل من التعليمات ولكنها ذات بنية أعقد، ما يتم ترجمته فيزيائيًا بضرورة تواجد عدد أكثر من الترانزستورات ضمن شريحة المعالجة وهو ما بدوره ينعكس على استهلاك الطاقة الذي سيكون مرتفعًا أكثر بالمقياس مع شرائح المتحكمات المعتمدة على معمارية RISC.

برمجة المتحكمات الصغرية

بعد التعرف على مكونات المتحكم الصغري وأنماطه المختلفة وكيفية التمييز بينها، حان الوقت لكي نتطرق إلى جانبٍ آخر يتعلق بها، وهو كيفية استخدامها في التطبيقات العملية.

لنأخذ مثالًا بسيطًا وهو دارة قياس درجة الحرارة باستخدام متحكمٍ صغريّ. لتنفيذ ذلك، فإننا نحتاج إلى حساس حرارة، المتحكم الصغريّ، مصدر تغذية كهربائية ووسيلة إظهار مثل شاشة الكريستال السائل LCD. ما نحتاجه هو ربط حساس الحرارة مع أحد المغارز التي تقوم بوظيفة التبديل التشابهي الرقمي لقراءة خرج الحساس، ومن ثم تفسير القيمة المقروءة داخل المتحكم، وأخيرًا عرض القيمة العددية لدرجة الحرارة على شاشة الإظهار.

الآن وبغض النظر عن التصميم الإلكترونيّ لمثل هكذا دارة، فإن ما يهمنا هو كيفية إخبار المتحكم بما يحتاجه لتنفيذ مهمة قياس الحرارة. هذه العملية هي فعليًا “برمجة” المتحكم، والتي تتم حاليًا باستخدام لغات البرمجة عالية المستوى وبشكلٍ أساسيّ لغتي C و ++C عن طريق أحد محررات النصوص البرمجية IDE بالإضافة لمبرمجة إلكترونية تستطيع نقل الشيفرة المصدرية من الحاسوب إلى المتحكم الصغريّ.

لا يستطيع المتحكم الصغريّ فهم لغات البرمجة عالية المستوى، وما يحتاجه فعليًا هو شيفرة مصدرية مكتوبة بلغة الثنائية Binary لأنها فعليًا الطريقة الوحيدة التي يستطيع عبرها المعالج التعامل مع أي نمطٍ من المعلومات. استخدمت سابقًا لغة التجميع Assembly Language على نطاقٍ واسع في كتابة برامج المتحكمات الصغرية كونها لغة منخفضة المستوى Low-Level Programming Language ويمكن ترجمتها للغة الثنائية بسهولة شديدة. مع تطور اللغات عالية المستوى وتطور مترجمات اللغات Compilers، أصبحت عملية كتابة البرامج أكثر سهولة عبر استخدام لغةٍ مثل C التي أصبحت اليوم أكثر اللغات تفضيلًا في مجال برمجة العتاديات Hardware Programming نظرًا للسرعة العالية التي توّفرها فضلًا عن الإمكانات الكبيرة التي تسمح بالتخاطب مع البنية العتادية وتوظيفها بالطريقة المناسبة.

بالعودة لدارة قياس الحرارة التي نريدها، فإن الوظيفة الأساسية الآن أصبحت محصورة بكتابة برنامج بلغة C ومن ثم استخدام أحد محررات النصوص لتوليد الشيفرة المصدرية التي يستطيع المتحكم فهمها لتنفيذ مهمة قياس الحرارة ومن ثم عرض قيمتها العددية. هذه الشيفرة المصدرية عبارة عن ملفٍ مكتوب بلغة الترميز الست عشرية Hexadecimal الذي يمكن بسهولة تفسيره من قبل المتحكم وتحويله للغة الثنائية. تمتلك هذه الملفات لاحقة .hex كإشارة إلى طبيعة المعلومات التي تتضمنها.

على الرّغم من استخدام اللغات عالية المستوى في برمجة المتحكمات الصغرية، فإنه من الجدير القول أن لغة التجميع لا تزال مستخدمة خصوصًا إذا كان التطبيق يحتاج تحكمًا دقيقًا بطريقة تفسير التعليمات البرمجية على مستوى المعالج. على صعيدٍ آخر، بدأت بعض التوزيعات الجديدة بالظهور لبرمجة المتحكمات الصغرية، مثل توزيعة MicroPython التي تعتمد على قواعد ومترجم لغة بايثون الشهيرة من أجل برمجة المتحكمات الصغرية.

أبرز الشركات المصنعة للمُتحكمات الصغرية

تقوم اليوم الكثير من الشركات بصناعة شرائح المتحكمات الصغرية، وتعتمد بعض الشركات على تصميم بنى خاصة بها بينما تقوم العديد منها باعتماد بنى مصممة من قبل شركاتٍ أخرى، وأبرز مثال على ذلك هو بنية ARM التي تقوم بتصميمها وتوصيفها شركة ARM Holdings ومن ثم تقوم بترخيصها للشركات المصنعة للشرائح لتستخدمها في تصنيع متحكماتها. هنالك نقاشٌ دائم بين المطورين حول أفضل عوائل وبنى المتحكمات الصغرية ولعل أشهر هذه النقاشات هو الفرق بين متحكمات PIC و AVR، والذي انتهى نوعًا ما عندما قامت شركة Microchip المصنعة لمتحكمات PIC بالاستحواذ على شركة Atmel المصنعة لمتحكمات AVR عام 2016.

لا يوجد اليوم شركة واحدة تسيطر على سوق المتحكمات الصغرية، بل تأخذ المنافسة شكلًا كبيرًا بوجود العديد من المصنعين في السوق، وأبرز هذه الأسماء في الوقت الحاليّ:

شركة NXP الهولندية: توّفر شركة NXP العديد من عوائل المتحكمات الصغرية العاملة بدقة 8، 16 و32-بت والتي تنتمي لعوائل مختلفة. قامت الشركة الهولندية بالاستحواذ على شركة FreeScale لتصبح اليوم من أكبر مصنعي شرائح المتحكمات الصغرية في العالم، وهي تعتمد على بنية Cortex-M من ARM في متحكمات 32-بت. للتعرف أكثر: اضغط هنا.

شركة Renesas اليابانية: توّفر الشركة اليابانية متحكماتٍ صغرية ضمن ثلاث عوائل أساسية وهي: RL78 بدقة 8 و 16-بت مخصصة للتطبيقات ذات الاستهلاك المنخفض للطاقة، وعائلة RZ بدقة 32-بت للتطبيقات المتوسطة واستهلاك الطاقة المُحسّن وأخيرًا عائلة RX بدقة 32-بت للتطبيقات عالية الأداء. للتعرف أكثر: اضغط هنا.

شركة Microchip: من الأسماء القديمة التي واكبت تطوّر المتحكمات الصغرية منذ بداياتها. توّفر الشركة طيفًا واسعًا من المتحكمات الصغرية التي يمكن استخدامها في العديد من التطبيقات، بدءًا من متحكمات 8-بت وصولًا لـ 32-بت، كما أنها تقوم بتصميم بنى شرائح خاصة بها بالإضافة للاعتماد على بنى أخرى مثل AVR و ARM. عززت الشركة من حضورها وحصتها في السوق بعد الاستحواذ على شركة Atmel عام 2016. للتعرف أكثر: اضغط هنا.

شركة Infineon الألمانية: تقوم الشركة الألمانية بتوفير متحكمات صغرية بدءًا من دقة 8-بت وحتى 32-بت، وهي تعتمد على بنية Cortex-M من ARM في متحكمات 32-بت (ضمن عائلة XMC الشهيرة) وكذلك على بنيتها الخاصة وهي Aurix المخصصة لشرائح المتحكمات الصغرية في قطاع صناعة السيارات. للتعرف أكثر: اضغط هنا.

شركة STMicroelectronics (إيطالية-فرنسية): من الشركات الحديثة نسبيًا في صناعة المتحكمات الصغرية ولكنها تمكنت من تحقيق نجاح كبيرٍ خلال فترةٍ زمنية قصيرة لتصبح اليوم من أكبر المصنعين. تقوم الشركة بتصنيع المتحكمات بدقة 8-بت ضمن عائلة STM8 ومتحكمات 32-بت ضمن عائلة STM32 المعتمدة على بنية Cortex-M من ARM. للتعرف أكثر: اضغط هنا.

شركة Texas Instruments الأمريكية: من الأسماء الكبيرة ذات التاريخ القديم في الصناعة الإلكترونية خصوصًا أنصاف النواقل. يعود الفضل لهذه الشركة في تقديم أول متحكمٍ صغري وهو TMS1000 سنة 1974، وتقوم اليوم بتصنيع المتحكمات الصغرية بدقة 16 و 32-بت اعتمادًا على بنى متنوعة، منها بنى خاصة بها مثل متحكمات MSP أو بالاعتماد على بنية ARM، كما أنها توّفر متحكمات متقدمة تحتوي داخلها على معالج إشارة رقميّ DSP ضمن العوائل المعتمدة على بنية ARM. للتعرف أكثر: اضغط هنا.

شركة Cypress الأمريكية: توّفر الشركة طيفًا كبيرًا من عوائل وبنى المتحكمات الصغرية بدقة 8، 16 و32-بت، وتختص أيضًا بتصميم الأنظمة القابلة للبرمجة على شريحة PSoC التي تتضمن بداخلها متحكمًا صغريًا ووحدات وظيفية أخرى تساعد على تنفيذ مهام حاسوبية متقدمة ومعقدة. للتعرف أكثر: اضغط هنا.

شركة Silicon Labs الأمريكية: تقوم بتصنيع المتحكمات الصغرية بدقة 8-بت ضمن عائلة EFM8 كما تقوم بتصنيع المتحكمات الصغرية بدقة 32-بت ضمن عائلة EFM32 المعتمدة على بنى Cortex-M من ARM. للتعرف أكثر: اضغط هنا.

القائمة التالية من موسوعة ويكيبيديا الإنجليزية تتضمن قائمة بكافة الشركات المصنعة للمتحكمات الصغرية وأبرز عوائلها: اضغط هنا.

خلاصة

تلعب المتحكمات الصغرية دورًا كبيرًا وهامًا في العديد من التطبيقات والأجهزة الإلكترونية المستخدمة من حولنا، ومع تطور الصناعة التقنية وتزايد عدد الأجهزة الذكية وتطبيقات إنترنت الأشياء، يتزايد الاعتماد يومًا بعد يوم على المتحكمات الصغرية لما توفره من أداءٍ حاسوبيّ مناسب ضمن حجمٍ صغير واستهلاكٍ منخفض للطاقة. هذا المقال هو مقدمة تعريفية يمكن عبرها أخذ فكرة عامة عن المتحكمات الصغرية، تاريخها، بنيتها وأشهر عوائلها والشركات المصنعة لها، ونأمل أن يكون مناسبًا كخطوةٍ أولى لمن يريد الولوج أكثر في هذا العالم التقنيّ الكبير.

مقالات ذات صلة

زر الذهاب إلى الأعلى