مقدمه
قابلیت منحصر به فرد LEDها در کنترل میزان سه رنگ اصلی (قرمز، سبز و آبی) برای ایجاد یک رنگ دلخواه، آنها را به قطعه ای جذاب و کاربردی در صنعت الکترونیک و نورپردازی مبدل ساخته است. یک RGB LED شامل یک پایه مشترک و سه پایه برای روشنایی رنگهای قرمز، سبز و آبی است. می توان با کنترل این پایهها از طریق سیگنال پالس PWM رنگهای بیشماری را از طریق ترکیب رنگهای اصلی بهدست آورد. (تعداد رنگها بستگی به دقت سیگنال PWM تولیدی دارد).
کنترل این قطعات با استفاده از میکروکنترلرها و درایورهای PWM انجام میشود. از آنجا که تعداد پایهها و جریان خروجی هر میکروکنترلری محدود است ماژولهای متنوعی جهت افزایش کانالهای PWM برای کنترل RGB LEDها طراحی شدهاند.
یکی از این ماژولهای پرکاربرد، ماژول TLC5947 است با 24 کانال PWM خروجی. در این مقاله به معرفی و راهاندازی اولیه این ماژول میپردازیم.
معرفی ماژول TLC5947
ماژول 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 در زیر آورده شده است.
TLC5947 12-BIT PWM LED DRIVER
TLC5947 IC DATASHEET
معرفی پایههای (Pinout) ماژول درایور PWM
- VCC : تغذیه ماژول (خروجی ها: 5 تا 30 ولت)
- GND : زمین
- Data In :DIN
- CLK: پایه کلاک
- LATCH :LATCH
- OE :Output Enable، اکتیو LOW (با HIGH کردن این پایه، تمام خروجیها غیر فعال میشوند.)
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راهاندازی ماژول کنترل TLC5947 PWM با آردوینو
گام اول: سیم بندی
مدار را مطابق شکل زیر ببندید.
الایدی استفاده شده یک 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 کردن ماژول کنترل PWM کافیست این ماژولها را به شکل بالا ببندید. برای تغذیه ماژولها هم از یک منبع تغذیه مجزا با جریان و ولتاژ مناسب استفاده کنید. برای محاسبه دقیق پارامترهای منبع تغذیه به دیتاشیت آیسی مراجعه کنید.
قطعات مورد نیاز
*منبع تغذیه ما 5 ولت است.
سیم بندی
کد
کافیست در کد بالا یک خط را تغییر دهید تا همان کد با دو ماژول کار کند.
#define NUM_TLC5947 2
خط بالا تعداد ماژولهای متصلشده به هم را مشخص کرده و در توابع از این عدد استفاده میکند تا تمام خروجیها را تست نماید.