آموزش راه‌اندازی ماژول PWM TLC5947 با آردوینو (درایور LED 12 بیتی)

فهرست مطالب

مقدمه

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

کنترل این قطعات با استفاده از میکروکنترلر‌ها و درایور‌های PWM انجام‌ می‌شود. از آنجا که تعداد‌ پایه‌ها و جریان خروجی هر میکروکنترلری محدود است ماژول‌های متنوعی جهت افزایش کانال‌های PWM برای کنترل RGB LEDها طراحی شده‌اند.

یکی از این ماژول‌های پرکاربرد، ماژول TLC5947 است با 24 کانال PWM خروجی. در این مقاله به معرفی و راه‌اندازی اولیه این ماژول می‌پردازیم.

معرفی ماژول TLC5947

TLC5947 Module

ماژول TLC5947 یک ماژول درایور ال‌ای‌دی جریان ثابت با 24 کانال خروجی است. با استفاده از این ماژول می‌توان 24 ردیف ال‌ای‌دی (یا 8ردیف ال‌ای‌دی RGB) را به صورت مجزا با سیگنال PWM کنترل کرد.

دقت سیگنال PWM در این ماژول 12 بیت است؛ یعنی هر کانال خروجی با 4096 استپ PWM کنترل می‌شود.

ارتباط با ما‌ژول از طریق سیگنال SPI با سطح ولتاژ 3 تا 5 ولت انجام می‌شود.

همچنین می توانیم چندین ماژول را به هم وصل کرده و همگی را با سه خط دیتا کنترل کنیم. به این صورت به راحتی می‌توان تنها با 3 پینِ میکرو کنترلر، تعداد زیادی “خروجی PWM قابل کنترل” داشت.

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

کانال‌های خروجی این ماژول، آند مشترک می‌باشند. این پایه‌های مشترک، مستقیم به پایه ولتاژ ورودی ماژول متصل­ هستند.

ولتاژ ورودی این ماژول 5 تا 30 ولت است. ولتاژ پایه‌های دیتا برای برقراری ارتباط نیز باید 3 تا 5 ولت باشد.

مشخصات فنی ماژول TLC5947

  • ولتاژ ورودی: 5 تا 30 ولت
  • 24 کانال جریان ثابت 30 میلی آمپری
  • 12Bit (4096 STEPS) PWM
  • CMOS Logic Level I/O
  • فرکانس انتقال دیتا: 30MHz (برد به تنهایی استفاده شود)
  • فرکانس انتقال دیتا در برد‌های متصل شده: 15MHz
  • دارای اسیلاتور داخلی 4MHz
  • دمای مجاز عملیاتی: 40 – تا 85 درجه سانتی‌گراد
  • ابعاد: 90*51.40 میلی‌متر

برای اطلاعات دقیق‌تر، به دیتاشیت ماژول مراجعه فرمایید. دیتاشیت ماژول کنترل PWM و دیتاشیت آی‌سی TLC5947 در زیر آورده شده است.

معرفی پایه‌های (Pinout) ماژول درایور PWM

  • VCC : تغذیه ماژول (خروجی ها: 5 تا 30 ولت)
  • GND : زمین
  • Data In :DIN
  • CLK: پایه کلاک
  • LATCH :LATCH
  • OE :Output Enable، اکتیو LOW (با HIGH کردن این پایه، تمام خروجی‌ها غیر فعال ‌می‌شوند.)
TLC5947 Module Pinout

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

Arduino UNO R3 × 1
ماژول کنترل TLC5947 - PWM × 1
ال ای دی RGB آند مشترک × 1
سیم جامپر × 1
مقاومت 220 اهم × 1

نرم افزارهای مورد نیاز

Arduino IDE

راه‌اندازی ماژول کنترل TLC5947 PWM با آردوینو

گام اول: سیم بندی

مدار را مطابق شکل زیر ببندید.

TLC5947-Arduino Circuit

ال‌ای‌دی استفاده شده یک RGB LED آند مشترک است که پایه مشترک آن به مقاومت متصل شده. مقاومت هم از سوی دیگر به پایه V+ متصل است.

مقاومت مورد استفاده 220 اهم است.

گام دوم: نصب کتابخانه مورد نیاز

کتابخانه کار با این ماژول: Adafruit_TLC5947

اگر برای نصب کتابخانه به راهنمایی بیشتر نیاز دارید روی این لینک کلیک کنید.

گام سوم: کد

کد زیر را در آردوینو کپی و اجرا کنید.

/*************************************************** 
 * TLC5947 TEST base on adafruit library example 
 * electropeak
 * ALi Akbar Hosseini 
 These drivers uses SPI to communicate, 3 pins are required to 
 interface: Data, Clock and Latch. The boards are chainable

 Fixed typo in all occurences of NUM_TLC5947 (was 5974)
 ****************************************************/

#include "Adafruit_TLC5947.h"
// How many boards do you have chained?
#define NUM_TLC5947 1

#define data 4 //DIN changeable
#define clock 5 //CLK changeable
#define latch 6 //LAT changeable
#define oe -1 // set to -1 to not use the enable pin (its optional)

Adafruit_TLC5947 tlc = Adafruit_TLC5947(NUM_TLC5947, clock, data, latch);

void setup() {
 Serial.begin(9600); 
 Serial.println("TLC5947 test");
 tlc.begin();
 if (oe >= 0) {
 pinMode(oe, OUTPUT);
 digitalWrite(oe, LOW);
 }
}

void loop() {
 tlc.setLED(0,4059,0,0);//out number 0 fully on
 tlc.write();
 delay(200);
 tlc.setLED(0,0,4095,0);//out number 1 fully on
 tlc.write();
 delay(200);
 tlc.setLED(0,0,0,4059);//out number 2 fully on
 tlc.write();
 delay(200);
 //use premade functions 
 colorWipe(4095, 0, 0, 100); // "Red" (depending on your LED wiring)
 delay(200);
 colorWipe(0, 4095, 0, 100); // "Green" (depending on your LED wiring)
 delay(200);
 colorWipe(0, 0, 4095, 100); // "Blue" (depending on your LED wiring)
 delay(200);
 rainbowCycle(10);

}


// Fill the dots one after the other with a color
void colorWipe(uint16_t r, uint16_t g, uint16_t b, uint8_t wait) {
 for(uint16_t i=0; i<8*NUM_TLC5947; i++) {
 tlc.setLED(i, r, g, b);
 tlc.write();
 delay(wait);
 }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
 uint32_t i, j;

 for(j=0; j<4096; j++) { // 1 cycle of all colors on wheel
 for(i=0; i< 8*NUM_TLC5947; i++) {
 Wheel(i, ((i * 4096 / (8*NUM_TLC5947)) + j) & 4095);
 }
 tlc.write();
 delay(wait);
 }
}

// Input a value 0 to 4095 to get a color value.
// The colours are a transition r - g - b - back to r.
void Wheel(uint8_t ledn, uint16_t WheelPos) {
 if(WheelPos < 1365) {
 tlc.setLED(ledn, 3*WheelPos, 4095 - 3*WheelPos, 0);
 } else if(WheelPos < 2731) {
 WheelPos -= 1365;
 tlc.setLED(ledn, 4095 - 3*WheelPos, 0, 3*WheelPos);
 } else {
 WheelPos -= 2731;
 tlc.setLED(ledn, 0, 3*WheelPos, 4095 - 3*WheelPos);
 }
}

توضیح مختصر کد بالا:

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

  tlc.setLED(0,4059,0,0);//out number 0 fully on
  tlc.write();

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

با استفاده از دستور بالا و با تاخیر 200 میلی­ ثانیه ­ای، سه خروجی بلاک اول را به ترتیب روشن کردیم.

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

راه‌اندازی همزمان چند ماژول کنترل PWM TLC5947 به صورت CASCADE

قابلیت cascade در این‌ ماژول‌ها به ما اجازه می‌دهد تعداد زیادی از ماژول‌ها TLC5947 را جهت افزایش پایه‌های خروجی به هم متصل کرده و تنها با همان سه پایه، همه خروجی‌ها را کنترل کنیم. تهیه تغذیه مناسب برای خروجی‌های افزوده شده از نکات مهمی است که باید به آن توجه کرد.

قابلیت CASCADE در ماژول‌ها

Cascade کردن در ماژول‌ یا آی‌سی به این معناست که می­توان تعدادی از این قطعات را به صورت سری، طبقه به طبقه به هم متصل کرد به طوری که با خطوط کنترلی بلوک (طبقه) اول، کنترل بقیه طبقه‌ها هم امکان‌پذیر باشد. در یک ساختار CASCADE، اطلاعات و دستورات از یک طبقه به طبقه دیگر انتقال پیدا‌ کرده و مجموعه به صورت واحدی گسترش­ یافته از چندین بلاک عمل‌ می‌کند.

Cascade Structure

برای cascade کردن ماژول کنترل PWM کافیست این ماژول‌ها را به شکل بالا ببندید. برای تغذیه ماژول‌ها هم از یک منبع تغذیه مجزا با جریان و ولتاژ مناسب استفاده کنید. برای محاسبه دقیق پارامتر‌های منبع تغذیه به دیتاشیت آی‌سی مراجعه کنید.

قطعات مورد نیاز

Arduino UNO R3 × 1
ماژول کنترل TLC5947 - PWM × 1
ال ای دی RGB آند مشترک × 1
سیم جامپر × 1
مقاومت 220 اهم × 1
منبع تغذیه 5 الی 30 ولت جریان بالا* × 1

*منبع تغذیه ما 5 ولت است.

سیم بندی

TLC5947-Cascade Circuit

کد

کافیست در کد بالا یک خط را تغییر دهید تا همان کد با دو ماژول کار کند.

#define NUM_TLC5947 2

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

آموزش های مشابه

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

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