电子DIY小家
发表于 2024-9-24 11:44:57
DebugLab 发表于 2024-9-23 23:32
要兼容4字节的SK6812(RGBW灯)和TM3130单总线数码管驱动器(还有TM18xx和TM19xx等单总线灯光控制芯片) ...
我看TM1809好像有400K和800K两种驱动速度
DebugLab
发表于 2024-9-24 11:53:44
电子DIY小家 发表于 2024-9-24 08:05
如果是要增加单总线接口的话,个人建议可以参考下友商的RMT接口的方案,
RMT单总线可以驱动
D-shot 600、D-shot 1200、Multi-shot、WBUS、SBUS、PPM
chineseboyzxy
发表于 2024-9-24 13:32:37
神农鼎 发表于 2024-9-23 21:38
计划增加专门的 【1线制硬件WS2812总线】来支持大家点灯
针对不同的行业应用,出一些不同的类似有专用功能的芯片也是不错的。
soma
发表于 2024-9-26 13:32:30
这个适配所有单总线设备吧
CyberHamster
发表于 2024-10-8 11:35:22
电子DIY小家 发表于 2024-9-24 11:44
我看TM1809好像有400K和800K两种驱动速度
CyberHamster
发表于 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是校验位。
下图是示波器抓取的一帧信号
简要介绍下一帧信号的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,这两种信号是如何通过波形表示呢?如下图:
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
CyberHamster
发表于 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 = .... (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
zjiot
发表于 2024-10-8 13:43:56
值得借鉴
CyberHamster
发表于 2024-10-9 00:46:42
单总线单极性归零码时序总结如下(如有遗漏请网友提出补充):
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的)
CyberHamster
发表于 2024-10-9 00:51:16
CyberHamster 发表于 2024-10-9 00:46
单总线单极性归零码时序总结如下(如有遗漏请网友提出补充):
SBUS/WBUS/DBUS虽然空闲状态也是0,但同步方式与上述的单极性归零码不同,是每字节同步(与串口相同),而单极性归零码是每位同步