吳紅雪
摘 要:本文從電路設計和軟件編程兩個方面詳細探討了基于NCP5623的RGB-LED驅動電路設計方案。
關鍵詞:NCP5623;RGB-LED;驅動電路
1 硬件設計
本設計采用51單片機作為核心控制器,選用NCP5623作為驅動芯片。NCP5623是美國的安森美半導體公司推出的帶I2C接口的LED驅動器,內部有3個獨立工作的通道,可用于驅動RGB-LED。由于51單片機本身沒有集成I2C接口,可任選兩個I/O管腳與NCP5623的SDA和SCL腳相連,用軟件模擬通訊協議。51單片機通過I2C總線向NCP5623發送命令,可實現RGB-LED三種顏色的亮度單獨調整,漸進調光等功能。設計硬件電路圖如圖1所示。RSET為基準電流端的外接電阻,用于設定LED的最大工作電流ILED(max),工作電流的計算公式:
式中UREF為NCP5623的內部基準電壓源600mV;n為步進量,其值由控制命令中的參數確定,1?燮n?燮31。需要注意的是當n=31時,應按照n=30來計算,以避免電流計算公式中出現分母為零的情況。
2 軟件設計
51單片機通過普通I/O口模擬I2C總線的技術已經非常成熟,這里不再贅述。對于本設計而言,軟件工作的重點是根據NCP5623的數據手冊所提供的命令設計子函數,NCP5623的內部寄存器各位分配情況如表1所示。
該器件的每一個命令為1個字節,通過I2C總線將這一個字節傳輸出去即可實現相應的控制功能。在這一個字節中,最高三位表示命令類型,低五位用來表示命令參數。比如010表示對紅燈進行控制,后五位則表示控制的目標亮度相關參數n,下面給出每個命令的子程序實現流程,其中Start_I2C( )是I2C總線啟動函數,Stop_I2C( )是I2C總線停止函數,ACK( )是I2C總線應答函數,SendByte( )是傳輸數據函數,data值由表1可得到。
表中的$70代表NCP5623的器件地址。
Start_I2C( );
SendByte(0x70);
ACK( );
SendByte(data);
ACK( );
Stop_I2C( );
其中data=0x00時,實現三個燈全滅的功能;當data取值為0x20~0x3f時,可同時控制三個燈的亮度;當data取值為0x40~0x5f時,可以單獨控制紅燈的亮度;當data取值為0x60~0x7f時,可以單獨控制綠燈的亮度;當data取值為0x80~0x9f時,可以單獨控制藍燈的亮度。
NCP5623自帶亮度漸進調整命令,子程序實現流程如下:
Start_I2C( );
SendByte(0x70);
ACK();
SendByte(data1);
ACK();
SendByte(data2);
ACK( );
SendByte(data3);
ACK( );
Stop_I2C( );
當data1取值為0x20~0x3f,data2取值為0xa0~0xbf時,可實現燈光漸亮調整。由于data1表示起始亮度值,data2表示目標亮度值,所以data1的低五位值一定要小于data2的低五位值,data3表示亮度調整的步進時間。
當data1取值為0x20~0x3f,data2取值為0xc0~0xdf時,可實現燈光漸暗調整,此時須保證data1的低五位值大于data2的低五位值。
3 總結
本文設計了一種基于單片機的RGB-LED驅動電路。根據功能需求,采用了NCP5623芯片,給出了電路圖和主要命令程序,將不同命令程序組合起來,可以實現多種顏色變化和多層次亮度調整,有非常強的實用價值。
參考文獻
[1]林立.單片機原理及應用——基于Prot
eus和Keil C(第4版)[M].電子工業出版社,2018.
[2]NCP5623 Triple Output I2C Controlle
d RGB LED Driver.october.2008.