找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9919|回复: 19
收起左侧

51单片机(12MHz@12T)驱动WS2812B

  [复制链接]
ID:885138 发表于 2021-2-24 19:42 | 显示全部楼层 |阅读模式
本帖最后由 xxd0708 于 2021-2-24 21:43 编辑

本实验创新点:RC电路产生非uS整数值的延时,使得单片机可以产生小于脉宽小于1uS的高电平

附件说明:
/*
*程序功能:验证低速率单片机(51单片机在12MHZ晶振@12T)驱动WS2812B灯带的可行性
*
*作者:xxd0708
*发布网址:www.51hei.com
*程序版本:V1.00
*编写时间 20210224
*声明:本程序只供学习使用,未经作者许可,不得用于其它任何用途
*
*硬件说明
*CPU:AT89S52 16K bytes flash ROM, 256 bytes data RAM
*程序版本:V1.00
*晶振频率:12MHz @12T
*
*以AT89S52为例
*连接方式:
*     单片机           WS2812B灯带
*     +5V
*      |         
*     VCC——————|—————————— VCC
*              |
*       1K5电阻*
*              |
*     P00——————|———————————DIN
*              |
*           102电容*
*              |
*     GND——————|———————————GND
*
*原理:单片机与灯带之间接入RC电路,P00工作在开漏工作方式,
*输出1即上升沿由RC产生延时,数值由RC参数决定,而在输出0下降沿无延时
*这样就有可能产生小于1uS的高电位脉冲
*对WS2812而言,高电平时间小于0.45uS为逻辑0,大于时为逻辑1
*多次调整RC值使延时量符合要求(本程序要求上升沿延时在1.5~1.8us之间)
*
*调整经验:
*下载本程序后,根据发光情况调整,发白时说明WS2812识别为全1,延时量过小,需加大R或C;
*反之,不发光时说明识别为全0,延时量过小,需减小R或C;
*有彩光发出时再精确调整至合适值时,直到发光正常(实测RC值约为1.5uS,供参考)
*调试要有耐心,祝好运 :-)
*
*/

AT89S52_WS2812.zip

23.55 KB, 下载次数: 207, 下载积分: 黑币 -5

keil工程文件

评分

参与人数 1黑币 +15 收起 理由
lkc8210 + 15 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:885138 发表于 2021-2-24 21:07 | 显示全部楼层
第一次上传附件

AT89S52_WS2812.zip

23.55 KB, 下载次数: 56, 下载积分: 黑币 -5

keil uv4工程文件

回复

使用道具 举报

ID:885138 发表于 2021-2-25 07:04 来自手机 | 显示全部楼层
我实验时RC调节过程:
回复

使用道具 举报

ID:885138 发表于 2021-2-25 07:19 | 显示全部楼层
我实验时RC调整用了四次(R是上拉电阻,接在vcc与P00之间,C接在P00与GND之间):
1.R取302(3K),C取102(0.001uF),灯全不亮。说明延时太大,高电平宽度不足,需减小R或C,为方便固定C调整R;
2.R改102(1K),全亮发白。说明延时太小,高电平过宽,0被识别成1,需加大R;
3.R取222(2K2),灯不亮。需减R;
4.R取152(1K5),发光正常。(此值供参考,根据PCB实际情况调整)
调节后经一晚上的运行,显示正常,小马拉大车实验初告成功!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:885138 发表于 2021-2-25 10:14 来自手机 | 显示全部楼层
基本原理:
程序中发位0时为2uS高电平,发位1时为3uS高电平。
由于P00是开漏囗,下拉能力强而上拉能力由外部上拉电阻提供。所以对端口实际电压而言,当P00上拉电阻下拉电容时,由0上升到1为较慢的充电过程,而由1到0为快速放电过程(时间可忽略)。
另一方面,WS2812B输入带整形电路,由0转1电压门限为0.7Vcc,由1转0电压门限为0.3Vcc。如选择并调整好R与C,使C上电压充至0.7Vcc的时间大于1.55uS,则单片机发位0时,WS2812B实际收到的高电平时间小于2-1.55=0.45uS,发送位1时,多1uS必然大于0.45uS,从而满足了驱动要求。
原理分析可行后,实际验证按“先估算、后调整”的思想进行。
由RC充放电原理知,从0到0.7倍电压的时间约为1.2倍时间常数,我们需要大于1.55uS并小于2uS,取1.8uS为宜,故RC约为1.8/1.2=1.5uS。我选取了C为0.001uF的电容(102),R应选1.5uS/0.001uF=1.5k的电阻(152)。
为实验验证,并考虑电器元件的误差及PCB的附加电容的影响,选2倍及2/3倍为上下限电阻(3k与1k),用二分法逼近,最终运行正常为1.5K,与理论值相符。(应实际工作电压或电路器件不同,允许一定偏差)
附手绘的电平转换原理图一张:
Screenshot_20210225_094151.jpg

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:69115 发表于 2021-3-3 23:11 | 显示全部楼层
楼主,你真聪明.
回复

使用道具 举报

ID:654946 发表于 2021-12-11 15:08 | 显示全部楼层
xxd0708 发表于 2021-2-25 07:19
我实验时RC调整用了四次(R是上拉电阻,接在vcc与P00之间,C接在P00与GND之间):
1.R取302(3K),C取102 ...

能提供一下电路图吗
回复

使用道具 举报

ID:998804 发表于 2022-1-2 17:21 | 显示全部楼层
第一次看到楼主这个方法,真是聪明!
我用1T单片机,再加上你的电路,没有用你的程序,可以成功驱动。
但用A89S52的单片机无法成功,晶振是11.0592Mhz的。
回复

使用道具 举报

ID:290373 发表于 2022-1-4 13:18 | 显示全部楼层
很巧妙的方法2812真的要被玩坏了
回复

使用道具 举报

ID:71233 发表于 2022-5-1 19:41 | 显示全部楼层
太厉害了,电子玩得太娴熟了,居然想到用RC充电原理来实现对2812的驱动。
回复

使用道具 举报

ID:514317 发表于 2022-5-3 00:16 | 显示全部楼层
厉害   技术强贴    我遇到这个问题   直接换1T 40M的单片机
回复

使用道具 举报

ID:832644 发表于 2022-7-15 17:36 | 显示全部楼层

楼主,你真聪明.
回复

使用道具 举报

ID:825397 发表于 2022-7-22 14:14 | 显示全部楼层
在stc89c52上成功,比较创新的方法,感谢楼主分享
回复

使用道具 举报

ID:482083 发表于 2022-7-27 18:26 | 显示全部楼层
lzzasd 发表于 2022-5-3 00:16
厉害   技术强贴    我遇到这个问题   直接换1T 40M的单片机

哈哈哈,我也是
回复

使用道具 举报

ID:603024 发表于 2022-8-17 14:15 | 显示全部楼层
牛人,感谢分享
回复

使用道具 举报

ID:46750 发表于 2023-5-10 10:41 | 显示全部楼层
厉害,技术好贴,可以用3毛钱的单片机控制了
回复

使用道具 举报

ID:324780 发表于 2023-12-1 21:26 | 显示全部楼层
厉害,这就是所谓的突破与创新!!!!!
回复

使用道具 举报

ID:85743 发表于 2024-2-2 11:22 | 显示全部楼层
xxd0708 发表于 2021-2-25 10:14
基本原理:
程序中发位0时为2uS高电平,发位1时为3uS高电平。
由于P00是开漏囗,下拉能力强而上拉能力由外 ...

意思就是:用了这个RC,程序里面的I/O就是一般的高\低电平了?
回复

使用道具 举报

ID:433219 发表于 2024-2-2 19:44 | 显示全部楼层
d^_^b  低速mcu上ws2812高速玩的思路???
回复

使用道具 举报

ID:253767 发表于 2024-2-3 07:52 | 显示全部楼层
厉害,突破创新!
谢谢分享!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表