GPIO چیست و چرا در مدارات الکترونیک از آن استفاده می‌شود؟

در بین همه میکروکنترلرهایی که در بازار می‌توانید پیدا کنید یک چیز مشترک وجود دارد و آن چیز مشترک پین است. برخی از پین یا پایه‌های میکروکنترلر عملکردی از پیش تعیین شده‌ای دارند، مانند پین RESET یا پین‌های ارتباط سریالی RX/TX، برخی دیگر می‌توانند به‌عنوان ورودی/خروجی عمومی (GPIO) استفاده شوند. در این نوشته به بررسی کارهایی که GPIO انجام می‌دهد و راه‌های مختلفی که می‌توانید آن‌ها را پیکربندی و استفاده کنید، می‌پردازیم. پس اگر برای شما هم سوال است که GPIO چیست، جای درستی آمده اید؛ با ما همراه  باشید.

GPIO چیست؟

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

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

اصول پین‌ های میکروکنترلر

نحوه اتصال یک میکروکنترلر به سایر اجزای مدار از طریق پین های آن انجام می‌گردد.

 در میکروکنترلر برخی از پین‌ها عملکردهای خاصی مانند "VDD" (محل اتصال منبع تغذیه) یا "VSS" (محل اتصال زمین) دارند و قابل تغییر نیستند. سایر پین‌ها را می‌توان از طریق نرم‌افزار در زمان اجرا، با دستور دادن به آن‌ها برای انجام یک عملکرد خاص (مانند I2C) یا به‌عنوان یک GPIO پیکربندی کرد.
بسیاری از میکروکنترلرهای موجود در بازار، پین های خود را در گروه‌هایی به نام پورت‌ها قرار می‌دهند. نام پورت ممکن است بسته به مارک و مدل تراشه متفاوت باشد، اما معمولاً با یک حرف نامگذاری می‌گردد، به‌عنوان‌مثال "پورت A".

هر پورت میکروکنترلر می‌تواند تعداد ثابتی پین را در خود جای دهد. این پین‌ها در یک پورت دارای یک عدد هستند. به‌عنوان‌مثال، پین شماره 0 پورتA  به نام PA0 نامیده می‌شود. اگر اطلاعاتی بیشتری درباره مباحث آی سی میکروکنترلر می‌خواهید می‌توانید مقاله «آی سی یا مدار مجتمع چیست؟» ما را مطالعه کنید.

توجه داشته باشید که این نام گذاری هنگام برنامه‌ریزی میکروکنترلر یا اشاره به یک پین معین مفید است، اما ربطی به شماره پین واقعی بر روی پکیج میکروکنترلر ندارد. به دایره کوچک بالای سمت چپ تراشه در تصویر بالا توجه کنید. این پایه 1 میکروکنترلر است و شما می‌توانید تمام پین‌ها را با شمارش در خلاف جهت عقربه‌های ساعت شمارش کنید. یعنی PC13 پین شماره 1، PC14 پین 2 و VBAT پین شماره 4 است.


عملکرد و ساختار

بیایید نگاهی بیندازیم که پین GPIO ممکن است در داخل میکروکنترلر  دارای چه  مداری است.
 

در تصویر بالا، در سمت راست، مربعی با برچسب “I/O pin” وجود دارد. آن مربع نشان دهنده پین فیزیکی است که به خارج از پکیج میکروکنترلر متصل است.


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


درست قبل از درایورهای خروجی، «رجیستر داده‌های ورودی» و «رجیستر داده‌های خروجی» وجود دارد. این رجیسترها در یک ناحیه نگاشت حافظه خاص قرار دارند که از آنجا می‌توانید وضعیت یک ورودی را بخوانید یا وضعیت یک خروجی را تنظیم کنید. به این معنا که با خواندن یا نوشتن در این ناحیه نگاشت حافظه خاص می‌توانید با یک پین فیزیکی میکروکنترلر تعامل داشته باشید. در کنار رجیستر‌های داده‌های ورودی/خروجی، رجیسترهای دیگری نیز وجود دارند که به شما امکان می‌دهند برخی از ویژگی‌های GPIO را پیکربندی کنید.

 

GPIO به عنوان ورودی

حالا که متوجه شدیم GPIO چیست، برویم سراغ اینکه چگونه به عنوان ورودی پیکر بندی می‌شود. هنگامی‌که GPIO به عنوان ورودی پیکربندی می‌شود، می‌توان وضعیت سیگنال ورودی را در پین مورد نظر خواند. این سیگنال می‌تواند یک حالت دیجیتال (0 یا 1) یا یک سیگنال آنالوگ باشد.

شما می‌توانید با خواندن بیت مربوطه از رجیستر اطلاعات ورودی در میکروکنترلر، وضعیت یک پین را بدانید و معمولاً زمانی که پین دارای  حالت High منطقی (مثلا 3.3 ولت) باشد، مقدار '1' را خواهید خواند و  0 وقتی که پین دارای حالت Low منطقی (0 ولت یا زمین) باشد.امکانات زیر در میکروکنترلرها، هنگام پیکربندی یک GPIO به عنوان ورودی معمول است:

 

مقاومت های Pull-up و Pull-Down

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

حالت شناور

این حالت معمول یک پین است که به عنوان ورودی پیکربندی شده است که مقاومت بالا کشنده یا پایین کشنده ندارد.  به این حالت معمولاً ورودی شناور یا با امپدانس بالا گفته می‌شود. اکثر پین‌های میکروکنترلر بعد از ریست در حالت پیکربندی شناور قرار می‌گیرند.

ورودی آنالوگ

شما می‌توانید ورودی را به عنوان ورودی آنالوگ پیکربندی کنید. این حالت پین را به یک ADC داخلی (مبدل آنالوگ به دیجیتال) متصل می‌کند و به شما امکان می‌دهد مقداری را بخوانید که نشان دهنده یک ولتاژ معین بر روی یک پین است. دقت مقدار قرائت شده به رزولوشن ADC بستگی دارد، برای مثال یک ADC 12 بیتی می‌تواند مقادیری از 0 تا 4095 داشته باشد.

هنگامی‌که یک GPIO در حالت آنالوگ پیکربندی می‌شود، مقاومت‌های ورودی کشش به پایین و بالا قطع می‌شوند و در حالت شناور قرار می‌گیرد. توجه داشته باشید که همه GPIO های موجود در یک میکروکنترلر را نمی‌توان به عنوان ورودی آنالوگ پیکربندی کرد. به دیتاشیت میکروکنترلر خود مراجعه کنید تا بدانید کدام پایه‌ها را می‌توان به این صورت پیکربندی کرد.

ورودی اینتراپت یا وقفه

در صورت تمایل می‌توان برخی از پین‌ها را به یک وقفه متصل کرد. به‌این‌ترتیب، به‌جای چک کردن مداوم وضعیت سیگنال یک پین، میکروکنترلر برنامه شما را در مورد تغییر وضعیت سیگنال  یک پین معین مطلع می‌کند. به‌عنوان‌مثال، می‌توانید به میکروکنترلر دستور دهید، زمانی که PA1 از  وضعیت 0 به 1 می‌رود، یک تابع خاص را فراخوانی کند. اکثر میکروکنترلرها به شما اجازه می‌دهند تا یک وقفه را برای بالا آمدن، پایین رفتن یا هر دو جناح پیکربندی کنید. 


GPIO به عنوان خروجی

هنگامی‌که یک GPIO به عنوان یک خروجی پیکربندی می‌شود، به شما امکان می‌دهد یک سیگنال منطقی (ولتاژ) را از طریق یک پین با نوشتن روی رجیستر اطلاعات خروجی در میکروکنترلر خود ایجاد کنید.

 اگر به مباحثی مانند نیمه هادی علاقمندید پیشنهاد می‌کنیم مقاله « نیمه هادی چیست» را مطالعه کنید تا اطلاعات خوبی درباره‌ی آن بدست بیاورید.
 

خروجی Push-Pull 

این نوع پیکربندی خروجی از ماسفت های P-MOS و N-MOS در مرحله خروجی (همانطور که در تصویر ساختار GPIO نشان داده شده است) استفاده می‌کند تا ولتاژ خروجی را پایین یا بالا بکشد، در نتیجه بر روی پین خروجی 0 ولت یا 3.3 ولت تولید می‌شود.

خروجی Open Drain

در این حالت، P-MOS درایور خروجی قطع می شود و سیگنال فقط مجاز است از طریق ماسفت N-MOS پایین رود (به زمین هدایت شود). این نوع حالت خروجی معمولاً با یک مقاومت کششی داخلی یا خارجی استفاده می شود. به این معنا که وقتی یک "1" را در رجیستر داده‌های خروجی می‌نویسید، خروجی هیچ کاری انجام نمی‌دهد ولی هنگامی که  "0" را در رجیستر داده های خروجی می نویسید، ماسفت N-MOS فعال می شود و سیگنال خروجی به 0 ولت کاهش می یابد. این حالتی است که می خواهید از پیکربندی خروجی ها برای پروتکل I2C استفاده کنید.

مقاومت های Pull-up و Pull-Down

درست مانند مقاومت‌های پایین و بالا کشنده ورودی، برخی از میکروکنترلرها به شما اجازه می‌دهند تا مقاومت‌های pull-up/pull-down را برای پایه‌های خروجی فعال کنید.

خروجی DAC

برخی از میکروکنترلرها به شما این امکان را می دهند که تعدادی پین را به یک DAC (مبدل دیجیتال به آنالوگ) متصل کنید. شما می توانید یک سیگنال آنالوگ را از طریق یک پین تولید کنید، دقیقاً معکوس یک GPIO که به عنوان ورودی ADC پیکربندی شده است. البته این یک ویژگی کمیاب است و اغلب اوقات از نظر فرکانس به روز رسانی، رزولوشن و تعداد پین با این ویژگی دارای محدودیت زیادی است.

توان خروجی

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

Slew Rate یا نرخ تغییر

این یکی دیگر از ویژگی های پیشرفته است. Rate Slew را می توان به عنوان حداکثر نرخ تغییر یک سیگنال (یعنی مدت زمانی که طول می کشد تا یک سیگنال از بالا به پایین و بالعکس طی کند) تعریف شود. برخی از میکروکنترلرها این قابلیت را دارند که سرعت حرکت سریع، معمولی یا آهسته را تنظیم کنند. این گزینه معمولاً با پیکربندی توان خروجی همراه می‌شود، بنابراین می‌توانید پین خروجی خود را برای برآورده کردن زمان‌بندی/نویز/مصرف/بار مورد نیاز مدار خود همگام کنید.

نتیجه گیری

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

 

نظرات کاربران

هیچ نظری برای این مطلب ثبت نشده است.