کنترل ماتریس LED با MAX7219 و افزایش خروجی PWM با PCA9685

قسمت 46
قسمت 46کنترل آرایه‌ای از دیودهای نوری با استفاده از رجیسترهای انتقالی MAX72xx
مشاهده سایر جلسات آموزش
11 بازدید
۱۴۰۴-۱۱-۲۵
6 دقیقه
  • نویسنده: Arduino captain
  • درباره نویسنده: من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!

در قسمت 45 از آموزش آردوینو به بررسی راه‌اندازی نمایشگر LED هفت سگمنت و راه‌اندازی نمایشگرهای LED هفت‌سگمنت چندرقمی (مالتی‌پلکسینگ) پرداختیم. در این قسمت قصد داریم درباره کنترل آرایه‌ای از دیودهای نوری با استفاده از رجیسترهای انتقالی MAX72xx، افزایش تعداد خروجی‌های آنالوگ با استفاده از مدارهای گسترش‌دهنده PWM و استفاده از یک آمپرمتر آنالوگ پنلی به عنوان نمایشگر، صحبت کنیم.

کنترل آرایه‌ای از دیودهای نوری با استفاده از رجیسترهای انتقالی MAX72xx

فرض کنید شما یک آرایه ۸×۸ از LEDها دارید و می‌خواهید تعداد پین‌های موردنیاز برای کنترل آن را کاهش دهید. در این صورت، شما می‌توانید از یک رجیستر انتقال (shift register) برای کاهش تعداد پین‌های موردنیاز استفاده کنید. این راه‌حل از چیپ درایور LED محبوب MAX7219 یا MAX7221 برای این منظور استفاده می‌کند. آردوینو، matrix و MAX72xx خود را مطابق با شکل 1 متصل کنید.

کنترل ماتریس LED با MAX7219 و افزایش خروجی PWM با PCA9685

شکل 1: MAX72xx driving یک آرایه LED 8×8

این اسکچ بر اساس کتابخانه قدرتمند MD_MAX72XX ساخته شده است که می‌تواند متن نمایش دهد، آبجکت‌ها را روی نمایشگر بکشد و تبدیل‌های مختلفی روی نمایشگر انجام دهد. این کتابخانه را می‌توانید در مدیر کتابخانه آردوینو (Arduino Library Manager) پیدا کنید.

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

شماره پین‌های نشان‌داده‌شده برای LEDهای سبز در ماتریس دو رنگ 8 × 8 هستند که از Adafruit (شماره قطعه 458) در دسترس است. اگر از یک ماتریس LED دیگر استفاده می‌کنید، برای تعیین اینکه کدام پین‌ها به هر ردیف و ستون مربوط می‌شوند، مستندات فنی آن را بررسی کنید.

این کد با یک matrix تک‌رنگ نیز کار می‌کند، زیرا فقط از یکی از دورنگ استفاده می‌کند. اگر متوجه شدید که متن به‌صورت معکوس یا با جهت‌گیری موردانتظار نمایش داده می‌شود، می‌توانید نوع سخت‌افزار را در خط #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW از PAROLA_HW به یکی از GENERIC_HW ،ICSTATION_HW یا FC16_HW تغییر دهید. یک تست اسکچ در نمونه‌های کتابخانه MD_MAX72xx به نام MD_MAX72xx_HW_Mapper وجود دارد که یک تست را اجرا کرده و به شما در تعیین نوع سخت‌افزار مناسب کمک می‌کند.

مقاومت (R1) برای کنترل حداکثر جریان استفاده شده برای هدایت یک LED به کار می‌رود. در دیتاشیت MAX72xx، جدولی وجود دارد که محدوده مقادیر را نشان می‌دهد (جدول 1).

کنترل ماتریس LED با MAX7219 و افزایش خروجی PWM با PCA9685

جدول 1: جدول مقادیر مقاومت (از دیتاشیت MAX72xx)

دیود نوری (LED) سبز در آرایه ماتریسی LED که در شکل 1 نشان داده شده است، دارای ولتاژ فوروارد ۲ ولت و جریان فوروارد ۲۰ میلی‌آمپر است. جدول 1 مقدار ۲۸ کیلواهم را نشان می‌دهد، اما برای ایجاد حاشیه اطمینان کمی، مقاومتی معادل ۳۰ کیلواهم یا ۳۳ کیلواهم انتخاب مناسبی خواهد بود. خازن‌ها (۰.۱ میکروفاراد و ۱۰ میکروفاراد) برای جلوگیری از ایجاد نوسانات نویز هنگام روشن و خاموش شدن LEDها موردنیاز هستند.

افزایش تعداد خروجی‌های آنالوگ با استفاده از مدارهای گسترش‌دهنده PWM

فرض کنید شما می‌خواهید شدت روشنایی LED‌های بیشتری را به‌صورت جداگانه کنترل کنید، بیش از آنچه آردوینو بتواند پشتیبانی کند.

تراشه PCA9685 می‌تواند تا ۱۶ LED را تنها با استفاده از دو پین I2C (SDA و SCL) کنترل کند. شرکت Adafruit بردی (برد توسعه) تولید کرده است که می‌تواند چندین سروو یا LED را درایو کند (شماره قطعه Adafruit: ۸۱۵). شکل 2 اتصالات را نشان می‌دهد. این نمونه کد بر اساس کتابخانه Adafruit_PWMServoDriver آدافرت است که می‌توانید با استفاده از مدیر کتابخانه‌های آردوینو (Arduino Library Manager) آن را نصب کنید.

شاید برای شما مفید باشد:
امبدد لینوکس – Bootloader
کنترل ماتریس LED با MAX7219 و افزایش خروجی PWM با PCA9685

شکل 2: شانزده LED که با استفاده از PWM خارجی راه‌اندازی شده‌اند.

این برنامه (اسکچ) در یک حلقه تکرار (لوپ) از طریق هر کانال (LED) می‌گذرد، شدت LED قبلی را کم می‌کند (تضعیف می‌کند)، کانال فعلی را در حداکثر شدت قرار می‌دهد و کانال بعدی را کم‌نور می‌کند. LEDها از طریق چند متد اصلی کنترل می‌شوند. این برنامه فرض می‌کند که تراشه PCA9685 با آدرس پیش‌فرض I2C یعنی 0x40 پیکربندی شده است.

متد Adafruit_PWMServoDriver.begin درایور را قبل از هر تابع دیگری مقداردهی اولیه می‌کند. متد pwm.setPin وظیفه تنظیم چرخه وظیفه (Duty Cycle) یک کانال مشخص را بر عهده دارد که به‌صورت تعداد تیک‌ها از ۰ تا ۴۰۹۵ داده می‌شود. آرگومان اول، شماره کانال و به دنبال آن، میزان روشنایی است. هر سیکل مدولاسیون عرض پالس (PWM) به ۴۰۹۶ تیک تقسیم می‌شود. مقداری که برای روشنایی (brightness) فراهم می‌کنید، نشان‌دهنده تعداد تیک‌هایی است که LED باید روشن بماند. شما می‌توانید فرکانس PWM را با استفاده از متد pwm.setPWMFreq تغییر دهید (مقدار را بر حسب هرتز، از ۴۰ تا ۱۶۰۰، وارد کنید).

توابع بیشتری در این کتابخانه موجود است.

شما می‌توانید با اتصال پین‌های بردهای درایور مختلف به یکدیگر، چندین برد درایور را زنجیره‌ای (سری) کنید. هر برد باید یک آدرس منحصربه‌فرد داشته باشد که این آدرس را با لحیم‌کردن پدهای برچسب‌گذاری شده A0 تا A5 تنظیم می‌کنید. همچنین، شما می‌توانید تا ۶۲ برد درایور را به‌صورت زنجیره‌ای متصل کنید.

استفاده از یک آمپرمتر آنالوگ پنلی به‌عنوان نمایشگر

فرض کنید می‌خواهید نشانگر (pointer) یک متر پنلی آنالوگ را از طریق اسکچ خود کنترل کنید.

نمایشگرهای آنالوگ، تغییرات و نوسانات را راحت‌تر نشان می‌دهند و ظاهری نوستالژیک (رترو) به پروژه شما می‌بخشند.

متر را از طریق یک مقاومت سری (۵ کیلواهم برای متر معمولی ۱ میلی‌آمپر) به خروجی آنالوگ (PWM) وصل کنید (شکل 3 را ببینید).

حرکت نشانگر متناظر با موقعیت یک پوتانسیومتر (مقاومت متغیر) است:

شاید برای شما مفید باشد:
عملکرد ریست در FPGA با استفاده از زبان VHDL
کنترل ماتریس LED با MAX7219 و افزایش خروجی PWM با PCA9685

شکل 3: راه‌اندازی یک متر آنالوگ

در این حالت، خروجی analogWrite آردوینو یک متر پنلی را راه‌اندازی می‌کند. مترهای پنلی معمولاً بسیار حساس‌تر از LEDها هستند؛ بنابراین، برای کاهش جریان به سطح مناسب برای متر، باید یک مقاومت بین خروجی آردوینو و متر متصل شود.

مقدار مقاومت سری به حساسیت متر بستگی دارد؛ برای یک متر ۱ میلی‌آمپری، ۵ کیلواهم انحراف کامل مقیاس را ایجاد می‌کند. شما می‌توانید از مقاومت‌های ۴.۷ کیلواهمی استفاده کنید، زیرا تهیه آن‌ها آسان‌تر از ۵ کیلواهم است، اگرچه احتمالاً لازم است حداکثر مقداری که به analogWrite می‌دهید را به حدود ۲۴۰ کاهش دهید. در اینجا نحوه تغییر دامنه در تابع map آمده است اگر از مقاومت ۴.۷ کیلواهمی با یک متر ۱ میلی‌آمپر استفاده می‌کنید:

اگر متر شما حساسیت متفاوتی نسبت به ۱ میلی‌آمپر داشته باشد، نیاز خواهید داشت که از مقدار متفاوتی برای مقاومت سری استفاده کنید. مقدار مقاومت بر حسب اهم به‌صورت زیر است:

مقاومت = 5,000 / mA

بنابراین، برای یک متر ۵۰۰ میلی‌آمپری (اگر ۰.۵ میلی‌آمپر در نظر گرفته شود)، مقدار مقاومت 5,000/0.5 محاسبه می‌شود که برابر با ۱۰,۰۰۰ اهم (۱۰ کیلو اهم) است. یک متر ۱۰ میلی‌آمپری به ۵۰۰ اهم و یک متر ۲۰ میلی‌آمپری به ۲۵۰ اهم نیاز دارد.

برخی از مترهای مازاد (استوک) از قبل دارای یک مقاومت سری داخلی هستند؛ ممکن است برای تعیین مقدار صحیح مقاومت خارجی نیاز به آزمایش داشته باشید، اما مراقب باشید که ولتاژ بیش از حدی به متر اعمال نکنید.

اطلاعات
11
0
0
اشتراک و حمایت
profile نویسنده: Arduino captain متخصص الکترونیک

من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!


ویراستار: محمد کبیر
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله