历史上的今天
返回首页

历史上的今天

今天是:2024年11月12日(星期二)

正在发生

2019年11月12日 | 教你使用一个单片机IO口控制RGB彩灯,单总线LED灯使用教程

2019-11-12 来源:eepw

相信大家学习单片机的第一课就是点亮第一盏LED灯了吧,初次点亮LED的时候的心情肯定是很激动的,可以操控眼前这个小小的芯片完成自己编写的指令,顿时感觉到很奇妙。初次了解之后便会激发我们的探索精神,当学习了PWM之后,控制RGB彩灯随意调出千变万化的颜色肯定不再是难事,用在各种项目上,RGB灯会让作品更加鲜艳动人。在这美丽的背后,其实隐藏了很多的科学道理,RGB灯的颜色能千变万化的原因是因为其内部集成了3个独立的3原色灯珠,然后使用PWM波控制每个灯珠处在不同的亮度,便可以得到不同的色彩。但是一个RGB灯可能会占用多个端口,想控制很多个RGB灯便是有些难度,好在随着集成工艺的发展,这一切不再是问题,如今的工艺促使了一种新型灯珠的出现,那就是单总线LED。


简单点来说就是这种类型的灯珠内置了一个驱动电路,它控制着灯珠发出的颜色,并且有一个数据输入口,意味着我们可以往在这个灯珠里面输入数据,然后灯珠内部的电路就会驱动的灯珠发出我们想要的颜色。这个电路呢还有一个数据的输出口,也就是说它可以将接受到的数据再次发送出去,送给下一个灯珠的输入,所以这使得所有的灯珠都可以连在一起,只需要使用一个IO口控制,这就相比传统的RGB灯节省了很多的端口。


这种类型的灯珠主要的核心就在它里面集成的那样一个驱动电路,这种类型的驱动电路有很多种,例如常见的WS2811,2812,SK6812等等,所以用其制作完成的灯珠一般都使用驱动电路的名字来命名。对于灯珠的大小型号呢,则有很多种类,例如5050,3535以及2020等封装,大家搜索的时候,搜索驱动电路的型号加上封装型号就可以找到想要的单总线LED了。下面是WS2812采用5050封装的图片。
 
本文会就WS2812这款最常用的驱动芯片来讲解其的控制方法以及在最后我会写一些控制这类单总线LED的方法。

由于是单总线通讯,自然没有时钟信号线,所以通讯的时序变得非常重要,我找到一份WS2812的数据手册,查看到了其中提到的输入数据时序图。
 

可以看到,2812芯片对着时序有着较为严格的需要,所以对于0码和1码,我们需要严格控制单片机延时的时间。并且这款芯片的时序大概都在纳秒级的延时,所以对于单片机的要求还是比较高的,我采用的是增强型的51单片机,速度上足够完成纳秒级的延时。


下面看到的数据的输入方法,可以看到每个数据包都是24bit长,也就是3个字节,发送完第一个24bit数据包之后就是接着发送第二个,可以看到在D2线上,第一个24bit数据包自动被忽略了,这是由于WS2812的转发机制,在其接受到第一个完整的24bit数据包之后,再接受到的数据包他会自动将其发送给下一个灯珠,这就是为什么可以一根线控制所有LED灯的秘密。并且WS2812芯片还有锁存的功能,也就是说送一次数据后,在下一回改变颜色之前都不需要再送数据了,内部的锁存电路会自动记住当前的颜色值,并控制灯珠一直保持着色彩。
 

对于每一个24bit数据包,其格式如下:每一个字节都表示着颜色的亮度,从高位到低位分别是绿色(G),红色(R),蓝色(B),控制这三个颜色的亮度,我们就可以得到千变万化的色彩。
 


了解到了数据包的格式,数据手册里面还给了一张应用电路的图片,很好的说明了这种单总线LED的连接方法。
 

看完了数据手册,下面就是对单片机编程,使其可以输出对应的波形了!


首先是对发送0码和1码的程序编写,由于需要用到纳秒级的延时,我使用空语句来进行软件延时,下面是发送0码和1码的代码截图。我这里是使用的STC15系列单片机,使用内部时钟11.0592MHZ,如果有使用相同单片机的朋友请直接参考我的代码,如果你的单片机类型不一样或者时钟频率不一样,最好使用示波器或者逻辑分析仪来得到精确的延时。
 

完成了发送0码和1码之后,接着就是发送一个字节了,核心思路就是每次判断字节高位的值来决定发送0还是1
 

经过简单的编程,所有代码就完成了,简单的写了一个程序,让前三个灯亮起,呈红色:
 

其实WS2812的编程较为容易,下面就来说一些我的改进地方。
我编写了一个使用串口控制RGB灯的程序,就是我可以在串口上发送数据,实时的控制每个LED灯的颜色,这样会方便后期一些动画效果的控制。我定义了一个数据格式,一个数据包含有5个字节,分别是帧头,LED灯的编号,红色(R)亮度值,绿色(G)亮度值以及蓝色(B)亮度值。例如我想要控制第五个灯变成最亮的白色,我就发送
FFH 05H FFH FFH FFH 就可以了,下面是使用这个程序调出来的颜色:
 

其思路就是当串口收到帧头之后,就开始读取灯的编号以及各个颜色的亮度值,然后再发送给LED灯珠即可。

这些就是单总线LED灯珠的使用方法了,其实编写程序较为简单,主要难点就是大家的时序一定要准确,这样才可以确保灯珠正常的点亮。

推荐阅读

史海拾趣

东晨(DC)公司的发展小趣事

在电子行业的激烈竞争中,东晨(DC)公司凭借一项革命性的技术突破——高效能低功耗的芯片设计,迅速崛起。该公司投入大量研发资源,成功开发出了一款性能卓越、能耗极低的芯片,这一创新成果为智能手机、平板电脑等移动设备提供了更长的续航时间和更快的运行速度。凭借这一技术优势,东晨(DC)公司迅速获得了市场的认可,产品销量节节攀升。

Herley New York公司的发展小趣事

东晨(DC)公司深知市场需求的重要性,因此制定了精准的市场策略。公司通过深入研究消费者需求,不断推出符合市场趋势的新产品。同时,东晨(DC)公司还注重与渠道商的合作,通过建立稳定的销售渠道,将产品快速推向市场。此外,公司还积极参与各种展会和论坛,展示最新技术和产品,赢得了客户和业界的广泛赞誉。

Aces Electronics Co Ltd公司的发展小趣事

在发展过程中,Aces也面临过各种挑战和危机。例如,原材料价格波动、市场竞争激烈、贸易壁垒等因素都曾经给公司带来不小的压力。然而,Aces凭借敏锐的市场洞察力和强大的危机管理能力,成功应对了这些挑战。公司及时调整采购策略、优化产品结构、拓展销售渠道等措施,有效缓解了外部压力,保持了稳定的发展态势。

这些故事虽然基于假设和推测,但反映了一个电子企业在发展过程中可能遇到的各种情况。无论面对技术挑战、市场竞争还是行业变革,Aces Electronics Co., Ltd.都展现了坚韧不拔、勇往直前的精神风貌。未来,公司将继续致力于技术创新和市场拓展,为电子行业的发展贡献更多力量。

南京中科微公司的发展小趣事

CSM成立以来,一直致力于研发具有自主知识产权的射频/模拟关键芯片。经过数年的辛勤耕耘,团队成功开发出了多款高性能的集成电路芯片与模块,其中不乏在功耗、成本、性能等方面达到国际先进水平的产品。这些技术突破不仅为公司赢得了市场的认可,也为国内电子行业的发展注入了新的活力。

Helium公司的发展小趣事

随着Helium在物联网领域的不断突破和发展,其市场认可度逐渐提升。在2021年,Helium通过Token销售完成了1.11亿美元的融资;次年年初,又以12亿美元估值完成了2亿美元的D轮融资。这些融资的成功不仅为Helium提供了充足的资金支持,也进一步验证了其在物联网和区块链领域的商业价值和发展潜力。同时,Helium还吸引了众多明星机构和投资者的青睐,为其未来的发展奠定了坚实的基础。

Eagle-Picher公司的发展小趣事

进入21世纪后,Eagle-Picher公司迎来了新的发展机遇。2017年,OMGroup斥资1.7亿美元收购了Eagle-Picher公司,这一举措为Eagle-Picher注入了新的资金和资源。在新的资本支持下,Eagle-Picher加大了在电池技术领域的研发投入,不断推出新的产品和解决方案。同时,公司也积极拓展国际市场,与全球多家知名企业建立了合作关系。这些新的发展机遇为Eagle-Picher的未来发展奠定了坚实的基础。

问答坊 | AI 解惑

详谈如何“轻松”的开发和应用Zigbee

一、 突破ZigBee应用系统设计的瓶颈 对于一个实际ZIGBEE应用系统的设计,设计者主要面对的技术难点有三个,通讯距离,高频设计技术和无线软件技术,这也是ZigBee技术走向应用的主要瓶颈。 1、通讯距离问题,由于一般的ZigBee前端RF部 ...…

查看全部问答>

奥迪采用车载电子设备新技术 汽车可避开红灯

德国大众旗下奥迪(Audi)进一步扩大了Travolution车载电子系统的测试范围,并在15辆测试汽车和25处红绿灯上安装了该系统,以帮助车辆避开红灯。安装Travolution系统后,当汽车行驶至红绿灯时,就会收到交通灯发射的信号,Travolution系统便根据此 ...…

查看全部问答>

招聘兼职 STM32项目

负责STM32 AD部分数据采集然后通过USB传送到pc. 2009-06-16 -------------------------------------------------------------------------------- 广州日普电子有限公司 梁先生 广州科学城玉树工业区H栋东座3楼 电话:020-82260121 传真:020 ...…

查看全部问答>

有没有4路16位A/D转换芯片?

有没有4路16位A/D转换芯片?请问哪款性价比好点?…

查看全部问答>

U盘插拔式的wince终端

新买了款终端机,和以前用的很不一样。在样机上做的程序也不能跑。有很多问题请教: 1。不能实现和activesync同步,插上数据线,就像U盘一样,只显示ce里面的flash disk。 2。不能安装netcf,不能识别。查看系统是wince5.0的,处理器类型是Inge ...…

查看全部问答>

KEIL C代码加密

大家好,我有个问题想请教,我的是嵌入式系统,KEIL C代码,怎么加密代码呢,可否提示一下!…

查看全部问答>

侃侃我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答>

ADS下compile说头文件找不到这是为啥?

/**************************************************************** NAME: u2440mon.c DESC: u2440mon entry point,menu,download ****************************************************************/#define GLOBAL_CLK&nb ...…

查看全部问答>

【为C2000做贡献】基于TMS320F2812的DSP最小系统设计

摘 要:在电子信息专业的课程教学、综合实验教学、毕业设计以及电子设计竞赛中,需要应用DSP 实验系统。本文以性价比高、在工业上广泛应用的TMS320F2812 为主控芯片,设计了一个DSP 最小应用系统。详细介绍了各部分电路的设计方法和调试过程。该 ...…

查看全部问答>

新人刚开始学51单片机

刚开始学单片机,经同学介绍来此论坛学习知识,希望大家能指点一下,我们现在在学51,不知道大家对51的学习有什么建议没呢 …

查看全部问答>