驱动RGB灯带MCU阐述

驱动RGB灯带MCU推荐

本文仅分享个人工作中积累的经验,无任何商业行为,若有更好的方案欢迎交流共同进步。


一、RGB灯带驱动IC简介

市面上存在多种RGB驱动IC,比如:WS2812,YX1903B,TC1903, SM16703P等;除此之外还有一种RGBW驱动IC,其相比上述驱动IC多了一个w驱动通道,工作方式大同小异。最近各家MCU急缺的情况下,各位在选型时一定要注意选取IC的归零码脉宽时间(一般是宽脉宽时间为900ns,短脉宽时间为300ns,参数允许波动范围可能会因IC存在一定差异),这样能够保证最快的速度更换IC。

二、MCU推荐

1.模拟时序驱动

本人使用赛元,新塘,沁恒微等国产51已模拟方式实现驱动RGB灯带。需要注意的地方是在发送一帧数据时关闭总中断,避免模拟数据脉宽时间被干扰。一般选择主频可达24M以上,同时需要根据驱动RGB灯带长度选取RAM资源大小。模拟实现核心代码如下所示:

#define  cBIT1 {P26=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();P26=0;}
#define  cBIT0 {P26=1;_nop_();P26=0;_nop_();_nop_();}
UINT8 bdata LED_DATA;
sbit DAT_bit0 = LED_DATA^7;
sbit DAT_bit1 = LED_DATA^6;
sbit DAT_bit2 = LED_DATA^5;
sbit DAT_bit3 = LED_DATA^4;
sbit DAT_bit4 = LED_DATA^3;
sbit DAT_bit5 = LED_DATA^2;
sbit DAT_bit6 = LED_DATA^1;
sbit DAT_bit7 = LED_DATA^0;
void sRGBSend(unsigned char dat)
{
  LED_DATA = dat;
  if(DAT_bit0){cBIT1}else{cBIT0}
  if(DAT_bit1){cBIT1}else{cBIT0}
  if(DAT_bit2){cBIT1}else{cBIT0}
  if(DAT_bit3){cBIT1}else{cBIT0}
  if(DAT_bit4){cBIT1}else{cBIT0}
  if(DAT_bit5){cBIT1}else{cBIT0}
  if(DAT_bit6){cBIT1}else{cBIT0}
  if(DAT_bit7){cBIT1}else{cBIT0}
}

上述关于BIT0和BIT1使用NOP个数因MCU不同可能会存在差异,需使用示波器自行测试验证。

2.硬件外设实现

对于STM32等32位强大类型的MCU,则可通过SPI,PWM功能实现驱动,但是对于低成本的产品此类MCU成本较高,这里不再赘述。锦锐科技的CA51F5系列MCU,CA51F5系列MCU自带两路级联LED驱动通道(比较可惜是此系列MCU无ADC功能,据说后期开发)。CA51F5系列初始化以及数据发送代码如下:

void sRGBInit(void)
{
  	//级联驱动RGB初始化
 	PWM2DIVH = 0; PWM2DIVL = 20;  	 //周期配置寄存器
 	PWM2DUTH = 0; PWM2DUTL = 5;   	//设置0码时间
 	LEDUTH = 0; LEDUTL = 14;    	//设置1码时间 
 	PWM2CON = 0x3A;
 	PWM2CKD = 0;       		//PWM2工作不分频       
 	LEDWTMH = 0;LEDWTML = 5;    	//设置暂停时间
	PWMEN = 4;      		//PWM2使能
	EA = 1;
 } 
 void sRGBSendData(u8 *pRGBDataBuff,u16 wBufferLen)
{
	u16 wTemp;
	for(wTemp = 0;wTemp <wBufferLen;wTemp++ )
	{
	   while(LEFLG & 0x40);
	   LEDAT1 = *(pRGBDataBuff+bTemp);
	}
}

三、总结

驱动此类IC其实很简单,我们只需要研究透彻其工作原理即可。分享给大家一些驱动思路供大家进行学习,快速找到适合自己产品的开发方案,希望我们可以一起共同学习进步(可私信加V)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值