چالش کمبود پین GPIO در میکروکنترلر – خواندن چند کلید با یک پایه ADC

افزایش پین های میکروکنترلر - خواندن چند کلید فقط با یک پایه
نوشته شده توسط

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

در این قسمت قصد دارم کمبود پایه های GPIO را مورد بررسی قرار دهم. پس با من تا انتهای مطلب مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این لینک مطالعه و بررسی کنید.


بررسی پایه های GPIO میکروکنترلر

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

چالش اصلی در انتخاب میکروکنترلر از نظر تعداد GPIO آنجایی خیلی مهم می شود که گاهی برای کم بودن تعداد کمی GPIO و حتی گاهی فقط 1 پین، طراح مجبور به انتخاب میکروکنترلر بزرگتر و به طبع گرانتری می شود. در این مواقع خلاقیت و نوآوری طراح، گاهی میلیون ها تومان در تیراژ محصول صرفه اقتصادی برای مجموعه تولید کننده به ارمغان می آورد.

گاهی در محصول مورد طراحی، چند کلید بر روی برد یا پنل در نظر گرفته می شود. تا از طریق آنها کاربر نسبت به کنترل سیستم یا اعمال تنظیمات اقدام نماید. وقتی تعداد کلید ها زیاد باشد مثلا 16 عدد، از روش اتصال ماتریسی استفاده می‌شود. این کار باعث شده تعداد پین های مورد نیاز برای قرائت آنها کم شود. مثلا تعداد پین را از 16 پین در روش اتصال مستقیم، به 8 عدد کاهش دهد.

اما اگر تعداد کلید ها کم باشد مثلا 4 عدد، چه آنها را مستقیم به پین های میکروکنترلر متصل کنیم و چه به صورت ماتریسی، به هر حال 4 پین میکروکنترلر اشغال می شود.!

حال اگر فقط یک پین از میکروکنترلر باقی مانده باشد باید چه کرد؟ میکروکنترلر را به نوع پر ظرفیت تر از نظر تعداد پین GPIO ارتقا داد؟ خیر. چرا که در حال مطالعه این مطلب هستید!


روش پیشنهادی جبران کمبود پین های GPIO میکروکنترلر

در روش پیشنهادی این مطلب، می‌توان کلید ها را به یک شبکه از مقاومت ها که تشکیل تقسیم مقاومتی داده اند متصل نمود. در نهایت ولتاژ خروجی شبکه را توسط یک پین ADC میکروکنترلر قرائت کرد. در این روش هر ولتاژ را به کلید متناظر با آن نسبت خواهیم داد. برای درک بهتر این روش، به مدار زیر توجه کنید:

خواندن چند کلید ورودی با یک پایه ADC میکروکنترلر (فقط یک پایه GPIO)
خواندن چند کلید ورودی با یک پایه ADC میکروکنترلر (فقط یک پایه GPIO)

در این مدار، با فشار دادن هر کلید، یکی از مقاومت های R2 الی R5 با مقاومت R1 تشکیل مقسم ولتاژ با نسبت تبدیل متفاوت می دهند. با این کار، ولتاژ خروجی متفاوتی به ازای هر کدام از کلید ها ایجاد می‌شود. این ولتاژ اختصاصاً مربوط به همان کلید است. نهایتا این ولتاژ به پایه ADC میکروکنترلر اعمال می‌شود.

در این مدار، ولتاژ خروجی برای هر کدام از کلید ها به ترتیب زیر می‌باشد:

  • کلید S1 ولتاژ خروجی برابر با 1.1 ولت
  • کلید S2 ولتاژ خروجی برابر با 2.0 ولت
  • کلید S3 ولتاژ خروجی برابر با 2.9 ولت
  • کلید S4 ولتاژ خروجی برابر با 3.7 ولت
  • در صورت عدم فشار دادن هیچ یک از کلیدها، ولتاژ خروجی برای 5 ولت می باشد.

مصونیت مدار در برابر نویز و خطا

پس از قرائت ولتاژ خروجی توسط ADC میکروکنترلر، با استفاده از دستورات شرطی با مقایسه ولتاژ خوانده شده با مقادیر بالا، می توان براحتی تشخیص داد که کدامیک از کلیدها فشار داده شده است. برای ایجاد مصونیت اسکن کلید ها از نویز، میتوان یک مقدار حد بالا و پایین مثلا 0.1 ولت را برای هر یک از ولتاژ ها در نظر گرفت. به عنوان مثال، برای کلید S2 به جای اینکه دقیقا با ولتاژ 2 ولت مقایسه شود، بازه 1.9 تا 2.1 ولت را برای تشخیص S2 در نظر می گیریم.

همچنین برای حذف تاثیر خطای مقدار مقاومت ها، مقدار دقیق هر یک از ولتاژ ها را بعد از مونتاژ نهایی برد با فشردن هر یک از کلیدها با ولتمتر یا نمایشگر خود دستگاه قراعت و مستقیما در برنامه قرار داده و یا با استفاده از رابط کاربری دستگاه به عنوان تنظیمات کالیبراسیون به دستگاه وارد می کنیم. در صورتی که از مقاومت های %1 برای این بخش از مدار استفاده شود، مقدار دقیق ولتاژ هر کلید در هر دستگاه مونتاژ شده تفاوت کمی خواهد داشت.

انتخاب مقاومت ها

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

به عنوان مثال در مدار پیشنهادی این مطلب، ولتاژ هر کلید حدود 0.8 ولت با کلید های کناری خود فاصله دارد که باعث بالا رفتن ضریب اطمینان تشخیص کلیدها می‌شود.

نکات مهم در بکار گیری از این روش

  • محاسبه مقدار مقاومت ها برای ایجاد ولتاژ با حداکثر فاصله نسبت به ولتاژ کلید های مجاور.
  • رنج مقاومت ها در محدود 1 الی 10 کیلو اهم باشد.
  • در نظر گرفتن حاشیه 0.1 ولت در دستورات شرطی برای ولتاژ هر کلید برای تشخیص مطمئن تر.
  • اندازه گیری ولتاژ هر کلید بعد از مونتاژ نهایی برد برای خنثی سازی اثر خطای مقاومت ها.
  • استفاده از روش میانگین گیری از چند نمونه ولتاژ ADC برای کاهش اثر نویز.

جمع بندی

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

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

در این روش هر کلید به وسیله یک مقاومت با مقدار متفاوت با سایر کلیدها در شبکه تقسیم ولتاژ قرار گرفته و ولتاژ خروجی متفاوتی از سایرین ایجاد می کند. با قرائت و شرط گذاشتن بر روی این ولتاژ اعمال شده به پایه ADC، میتوان کلید فشار داده شده را تشخیص داد.

امیدوارم که این مطلب مورد رضایت شما قرار گرفته باشد. چنانچه در این خصوص سوال، نظر و یا اطلاعات و تجربه ای دارید، آن را از قسمت کامنت ها با ما در میان بگذارید تا در اسرع وقت پاسخ داده شود و از تجربیات و اطلاعات شما هم استفاده شود. همچنین ما را در پیج اینستاگرام مایکروالکام دنبال کنید.

یک دیدگاه برای “چالش کمبود پین GPIO در میکروکنترلر – خواندن چند کلید با یک پایه ADC

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.