找回密码
 立即注册
楼主: 电子DIY小家

关于单片机做画面显示的探讨, 从点灯到点屏 | 增加【1线制硬件WS2812总线】

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-9-24 11:44:57 | 显示全部楼层
Debu*** 发表于 2024-9-23 23:32
要兼容4字节的SK6812(RGBW灯)和TM3130单总线数码管驱动器(还有TM18xx和TM19xx等单总线灯光控制芯片) ...

我看TM1809好像有400K和800K两种驱动速度
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-9-24 11:53:44 | 显示全部楼层
电子DI*** 发表于 2024-9-24 08:05
如果是要增加单总线接口的话,个人建议可以参考下友商的RMT接口的方案,
RMT单总线可以驱动

D-shot 600、D-shot 1200、Multi-shot、WBUS、SBUS、PPM
DebugLab
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-03-11 08:31:10

5

主题

35

回帖

765

积分

高级会员

积分
765
发表于 2024-9-24 13:32:37 | 显示全部楼层
神*** 发表于 2024-9-23 21:38
计划增加专门的 【1线制硬件WS2812总线】来支持大家点灯

针对不同的行业应用,出一些不同的类似有专用功能的芯片也是不错的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-9-26 13:32:30 | 显示全部楼层
这个适配所有单总线设备吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-10-8 11:35:22 | 显示全部楼层
电子DI*** 发表于 2024-9-24 11:44
我看TM1809好像有400K和800K两种驱动速度

截图202410081135116699.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-10-8 11:55:33 | 显示全部楼层
DSHOT协议要点简介


什么是DSHOT?
DSHOT是无人机里边,一种新型的驱动电调(ESC,无刷直流电机电子调速器)的方式。
常规的电机驱动都是采用PWM模式,不管是无刷也好,有刷也好,都是一样。也就是固定频率,控制端通过调节占空比的方式来发送电机油门的控制信号,接收端(ESC)通过测量PWM的占空比,然后量化出油门值,并转换为对电机的驱动,这个也就是ESC的工作。PWM是一种方波,表面来看是数字信号的传输,但本质上是一种模拟值,为什么说是模拟值?如控制端产生400HZ的一组PWM,周期是1/400=0.0025s=2.5ms,油门信号范围是0-100%,对应波形高电平长度范围是1000-2000us,也就是这段PWM波形的高电平的时间长度就是对应的油门值,然后接收端(ESC),通过测量这段信号高电平的时间来量化成油门值,模拟值就是在于“测量”这里,通常测量一个PWM脉宽都是通过硬件捕获信号的上升沿和下降沿然后算出时间差,这就会出现时间误差问题,控制端发出的脉宽可能是1008us,但可能会由于接收端控制器的时钟精度不高,导致测量的时钟基准和控制端出现一定偏差,测量出来可能是1006,或者1009,1010都是正常的,PWM信号甚至很容易收到干扰导致信号出现畸形,虽然接收端可以通过软件滤除方式,但终归是存在这么一个缺陷。所以这里说PWM控制是一个模拟值,因为通信两端发送和接收的信息,会受时钟精度的不同产生信息不一致的情况。
ok上面哆嗦那么半天就是为了DSHOT出场的,DSHOT是真正意义的数字信号协议,也是一种波形,这个协议其实很简单,一帧信号就是一串完整的数据,包含3部分,1是油门值,2是请求数据回传标志,3是校验位。
下图是示波器抓取的一帧信号

截图202410081154095745.jpg


简要介绍下一帧信号的3部分组成:
1.油门值(Throttle) 11位
由11位组成,按二进制计算可表示的数值范围是0-2047,共2048个油门值,可以表示非常精细的油门信号。
2.请求数据回传标志(Tlm request) 1位
这个位是向ESC请求数据回传的标志位,为0时表示不请求,为1表示请求,若发送请求,支持数据回传功能的ESC会回传ESC的各种状态信息给控制端。
3.校验位(CRC) 4位
校验位很重要,是验证一帧数据是否有效合法,是否未遭到破坏的一种校验方式,确保数据的正确性。这4个校验位是对前面11个油门值+1个回传标志这12个位按每组4位分3组,也就是三组4位的数据进行异或计算(C语言运算符就是^),计算结果取低4位作为这串数据的校验码插入。
以上是组成的位数,每个位不是0就是1,这两种信号是如何通过波形表示呢?如下图:

截图202410081154382807.jpg


DSHOT600为例(周期=1/600=1667ns):
位长度(一个数据周期)为1667纳秒(T0H + T0L或T1H + T1L)。
对于某位为0,脉冲宽度为625纳秒(T0H - 当位值为0时,脉冲为高电平的时间)
一位为1时,脉冲宽度为1250纳秒(T1H - 当位值为1时,脉冲为高电平的时间)
(也就是T1H = 2T0H)
位0和位1值的脉冲长度允许一定的容差,所以这些时间可以稍微减少或者延长,结果仍然是一样的。
DSHOT信号有DSHOT100,DSHOT300,DSHOT600,DSHOT1200,每种代表了不同的通信速率,因为不同的速率,决定了上面0和1数据的T0H TOL T1H T1L的脉冲周期,当然,DSHOTxxx后面的数值越高,速率就越高,数据的时间宽度就越窄,对处理器要求就越高,纳秒级,实际使用DSHOT600足矣。
以上16位数据发送时高位在前,逐位发送,理解好这点,对软件开发非常重要。
软件实现的方式可以通过DMA方式,因为DSHOT还是比较占资源的,放任DMA去帮处理器lu最合适,非常高效,解放下处理器的双手,包括数据解析也是一样的思路。

来源:https://blog.csdn.net/zhengningwei/article/details/79815281
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-10-8 13:30:26 | 显示全部楼层
S-BUS协议

该协议长度为 25 字节,每 14 毫秒(模拟模式)或 7 毫秒(高速模式)发送一次。
一个字节 = 1 个起始位 + 8 个数据位 + 1 个奇偶校验位 + 2 个停止位(8E2),波特率 = 100'000 bit/s
最高位先发送。逻辑反转(高电平 = 1)

[起始字节] [数据1] [数据2] .... [数据22] [标志][结束字节]

起始字节 = 11110000b (0xF0)

数据 1-22 = [ch1, 11bit][ch2, 11bit] .... [ch16, 11bit] (ch# = 0 bis 2047)
通道 1 使用 data1 中的 8 位和 data2 中的 3 位
通道 2 使用最后 5 位来自 data2 和来自 data3 的 6 位
等。

flags = bit7 = ch17 = digital channel (0x80)
bit6 = ch18 = digital channel (0x40)
bit5 = Frame lost, equivalent red LED on receiver (0x20)
bit4 = failsafe activated (0x10)
bit3 = n/a
bit2 = n/a
bit1 = n/a
bit0 = n/a

endbyte = 00000000b

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:202
  • 最近打卡:2025-04-29 08:30:00

0

主题

47

回帖

304

积分

中级会员

积分
304
发表于 2024-10-8 13:43:56 | 显示全部楼层
值得借鉴
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-10-9 00:46:42 | 显示全部楼层

单总线单极性归零码时序总结如下(如有遗漏请网友提出补充):

截图202410090005174087.jpg
WS2812和SK6812不同厂家不同芯片时序各不相同,最准确的方法是只接一个LED然后发多个LED的数据(因为它肯定不会自相矛盾)
如图所示测量了多款LED(备注实测),发现周期惊人的一致(0码周期1720μs,1码周期2390μs),但高低电平的时间不同
LED的手册可以不用看了,还是实测最准(因为它肯定不会自相矛盾)
测了一个WS2812控制器(备注成品控制器),时序比较合理,兼容性好,测过多款WS2812均能正常工作
TMxxxx是专用LED、数码管驱动芯片,这里只列出两款,0码周期和1码周期一致,应该是标准的三分之一或三分之二高电平的时序,两种速度二分频就可以兼容了
DSHOT是无人机飞控到电调的协议,是标准的三分之一或三分之二高电平的时序,分频可兼容4种速度,如果单极性归零码模块可以支持该协议,建议通道数设计4个或以上,用于无人机飞控

SBUS/WBUS/DBUS是无人机接收机到飞控的协议,属于反相的串口(100Kbps 8E2),由于不是单极性归零码,该表未列出
顺便希望串口硬件上支持反相(逻辑1低电平,逻辑0高电平,空闲低电平),支持SBUS和要求不高的RS-232逻辑(见过某设备的RS232接口,虽然逻辑是反相的,但是电平是0~5V的)


单总线单极性归零码时序.xlsx (12.44 KB, 下载次数: 103)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-10-9 00:51:16 | 显示全部楼层
CyberH*** 发表于 2024-10-9 00:46
单总线单极性归零码时序总结如下(如有遗漏请网友提出补充):

SBUS/WBUS/DBUS虽然空闲状态也是0,但同步方式与上述的单极性归零码不同,是每字节同步(与串口相同),而单极性归零码是每位同步
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:35 , Processed in 0.152478 second(s), 122 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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