本帖最后由 通宵敲代码 于 2018-5-6 22:19 编辑
在这之前用5050的灯珠都是三色自己控制的,
还从未用过这种内部集成驱动芯片的灯珠,尽管知道。
这次手上来了case,恰巧方案中提出了这种灯珠,
就决定尝试一下。
深入了解自己的对手,才能有把握打胜仗,
先让我们看一下WS2812灯珠的相关资料吧。
以上照片来自某厂家官网的截图,可以看到同系列的LED型号还是不少的。尽管都是常见的5050封装,却由四脚与六脚之分,设计的时候一定要注意,
我们这次使用的是WS2812B,下面是有关这可灯珠的介绍。
这张图是对这狂灯珠的一些基本介绍,例如电源可以串联共用,
每个灯珠都自带信号整形电路,上电掉电复位电路,
每颗灯珠都可以实现RGB256级控制,扫描频率400KHz,
任意两点间通信距离不低于3米,至少可以级联1024颗,
看起来这款灯珠就是专为LED灯带设计的。
上面是关于这款灯带的一下电气参数,
供电电压可以使最常用的5V电源,限号传输延迟很小,
不错参数里有一点没提及,这款芯片内置了恒流驱动电路,
不但能保证灯珠颜色的良好一致,而且连限流电阻都可以省了。
这是关于W2812B单总线驱动的内容,
控制器可以连续发送24位GRB控制信号,
第一个灯珠截取前24位后,会显示到自己的LED上,
并会将其余的数据进行整形后发送给第二颗灯珠,
第二颗灯珠会截取第二组24位数据进行显示,
并继续转发剩下的,知道最后一组数据被显示为止。
这是对魅族24位GRB数据中信号0与信号1的介绍,
可以看到信号的周期为1.25us,
与前面的800kbps的通信频率正好对应。
信号0与1通过不同的占空比拉进行区分。
然而此处也报漏了一个问题,
我们都知道,常用的STM32F1系列单片机,内核速率只有72MHz,
对于主打高性能的STMF4系列也不过200MHz左右,
也就是说,STM32F1的一个指令周期需要大约14ns,
而正常情况下用HAL库控制单片机I/O翻转,
至少需要30个指令周期,将近500ns才能实现一次高低电平变化,
这就不用说还要形成严格的驱动信号,来控制LED显示颜色了,
其实不光HAL库不行,用最新的LL库也一样,最大也不超过5MHz,
即使是直接用寄存器驱动I/O,也不过只能达到12MHz的翻转速度,
就是F4系列直接用寄存器驱动,虽然可以超频到240MHz,
让I/O翻转速率达到80MHz,然而并没有什么卵用,
先不说稳定性咋样,就但是30多块钱一片的F4就吃消不起。
所以这里希望的大家如果用到WS2812系列的LED灯珠的话,
希望大家能记住这条结论,免得在原理问题上浪费时间,
STM32以及所有比他性能还低的单片机,用I/O翻转的方式,
是很难驱动WS2812系列灯珠的,除非你是土豪直接上400M的F7,
或者你的片子啥事都不干就驱动一串LED。
那难道STM32就没法驱动WS2812这种灯珠了吗,答案当然是能了。
具体怎们驱动我留到下节再说,这里就不啰嗦了。
下面是WS2812的串联驱动电路,
到了WS2813系列,连那颗电容都可以省掉不焊,
是不是很简单呢