基于NCP5623的RGB—LED驱动电路设计

2018-01-02 11:20吴红雪
科学与财富 2018年32期

吴红雪

摘 要:本文從电路设计和软件编程两个方面详细探讨了基于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.