OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5548|回复: 12

WS2812的问题(类似灯带上的LED)

[复制链接]

33

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-7-8
在线时间
176 小时
发表于 2021-1-12 10:50:04 | 显示全部楼层 |阅读模式
10金钱
这个LED需要的信号,以bit为单位的话,大约是1微秒
q1.png
q2.png
我确定我发的信号是正确的情况下,有没有其他原因,会导致LED点不亮?
小弟先拜托了,经验不足,希望前辈们想一想有没有什么可能性
有两点我说一下
【1】工厂内有380V和220V,尝试让电工配一条自己用的220,还是有问题,但不知道是不是这个原因
【2】LED先不供电,在STM32持续发送SPI的情况下,开启LED的供电,有时LED会遵照我的信号而开启,但有时不会,开启的时候,给它关闭的信号,它会如实的执行,再尝试开启,又不听了

拜托了,谢谢

最佳答案

查看完整内容[请看2#楼]

只能比150ns小,另外周期太大了,误差太多。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-1-12 10:50:05 | 显示全部楼层
seraph15 发表于 2021-1-12 13:59
datasheet是在网上找的,上面写了还有150ns的误差容许,还是说,有些LED的容错连150n都不到?谢谢

只能比150ns小,另外周期太大了,误差太多。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2021-1-12 11:11:38 | 显示全部楼层
建议使用FPGA处理这些 ns级别的时序,STM32处理,如果有中断发生,时序就会延时了
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2021-1-12 11:14:12 | 显示全部楼层
你是通过SPI 通讯控制?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2021-1-12 12:46:23 | 显示全部楼层
周期不对,WS2812是800kbps速率,周期应该是1.25us左右,你的高电平持续时间已经超过1us了
回复

使用道具 举报

33

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-7-8
在线时间
176 小时
 楼主| 发表于 2021-1-12 13:56:29 | 显示全部楼层
jiangyy 发表于 2021-1-12 11:14
你是通过SPI 通讯控制?

是的,用SPI,还用了DMA
回复

使用道具 举报

33

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-7-8
在线时间
176 小时
 楼主| 发表于 2021-1-12 13:59:57 | 显示全部楼层
ricefat 发表于 2021-1-12 12:46
周期不对,WS2812是800kbps速率,周期应该是1.25us左右,你的高电平持续时间已经超过1us了

datasheet是在网上找的,上面写了还有150ns的误差容许,还是说,有些LED的容错连150n都不到?谢谢
回复

使用道具 举报

33

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-7-8
在线时间
176 小时
 楼主| 发表于 2021-1-12 17:40:00 | 显示全部楼层
ricefat 发表于 2021-1-12 17:27
只能比150ns小,另外周期太大了,误差太多。

好的,非常感谢,我再调整一下试试
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2021-1-12 17:46:10 | 显示全部楼层
seraph15 发表于 2021-1-12 13:56
是的,用SPI,还用了DMA

用的什么型号的芯片
回复

使用道具 举报

33

主题

114

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-7-8
在线时间
176 小时
 楼主| 发表于 2021-1-13 12:10:52 | 显示全部楼层
jiangyy 发表于 2021-1-12 17:46
用的什么型号的芯片

STM32F407
回复

使用道具 举报

13

主题

174

帖子

0

精华

高级会员

Rank: 4

积分
814
金钱
814
注册时间
2018-12-19
在线时间
166 小时
发表于 2021-1-13 12:54:26 | 显示全部楼层
我用低速M0+芯片驱动WS2812的程序,可以任意设置颜色,可以多级串联,有偿提供。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2021-1-14 08:35:38 | 显示全部楼层
  1. #define   RGB_H      (NRF_GPIO->OUTSET = (1UL << RGB_LED))   //RGB 对应管脚设置 高电平
  2. #define   RGB_L      (NRF_GPIO->OUTCLR = (1UL << RGB_LED))   //RGB 对应管脚设置 高电平

  3. /*
  4.         初始化RGB_LED
  5. */
  6. void LED_GPIO_Configuration(void)
  7. {
  8.         nrf_gpio_cfg(
  9.         RGB_LED,
  10.         NRF_GPIO_PIN_DIR_OUTPUT,
  11.         NRF_GPIO_PIN_INPUT_DISCONNECT,
  12.         NRF_GPIO_PIN_PULLUP,
  13.         NRF_GPIO_PIN_S0S1,
  14.         NRF_GPIO_PIN_NOSENSE);
  15. }

  16. /*
  17.         写 0码 函数
  18.         根据RGB灯手册查得 :RGB_H 延时 300ns,RGB_L 延时 900ns
  19.         RGB_H,RGB_L之间的延时,根据不同芯片的主频实际调节__nop()函数的个数(以下nop个数未知)          
  20. */
  21. void Write0(void)
  22. {
  23.         RGB_H;
  24.         __nop();__nop();__nop();
  25.        
  26.         RGB_L;
  27.         __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
  28.         __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
  29. }
  30. /*
  31.         写 1码 函数
  32.         根据RGB灯手册查得 :RGB_H 延时 600ns,RGB_L 延时 600ns
  33.         RGB_H,RGB_L之间的延时,根据不同芯片的主频实际调节__nop()函数的个数          
  34. */
  35. void Write1(void)
  36. {
  37.         RGB_H;
  38.         __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
  39.         __nop();__nop();__nop();_
  40.        
  41.         RGB_L;
  42.         __nop();__nop();__nop();__nop();__nop();__nop();
  43. }

  44. /*
  45.         写一个字节(8bit)数据
  46.         备  注: RGB的亮度通过更改 0x01 处的值进行调节
  47. */
  48. void RGB_WByte(uint8_t byte)
  49. {
  50.         uint8_t i=0;
  51.         for(i=0;i<8;i++)
  52.         {
  53.           if((byte<<i)&0x01)
  54.                   Write1();
  55.           else
  56.                   Write0();
  57.         }
  58. }
  59. /*
  60.         设置一个RGB灯的色彩
  61.         green red blue,红绿蓝光所占比例大小,范围0~255
  62.         灯亮的顺序为GRB,每种颜色占8位数据,因此一个灯需要写24位数据
  63. */
  64. void Write24Bit(uint8_t green, uint8_t red, uint8_t blue)
  65. {
  66.         RGB_WByte(green);
  67.         RGB_WByte(red);
  68.         RGB_WByte(blue);
  69. }
  70. /*
  71.         红灯
  72. */
  73. void RGB_LED_Red(void)
  74. {
  75.         Write24Bit(0,0xff,0);
  76. }

  77. /*
  78.         橙灯
  79. */
  80. void RGB_LED_Orange(void)
  81. {
  82.         for(i=0;i<4;i++)  //4个灯
  83.         {
  84.                 Write24Bit(0xa5,0xff,0x00);
  85.         }
  86. }

  87. /*
  88.         蓝灯
  89. */
  90. void RGB_LED_Off(void)
  91. {
  92.         uint8_t i;
  93.         for(i=0;i<4;i++)   //四个灯
  94.         {
  95.                 Write24Bit(0,0,0);
  96.         }
  97. }
  98. //.......
复制代码
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2021-1-14 08:39:45 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 01:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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