ARGB接口mini显示屏
从主板上的ARGB接口中读取灯光序列,模拟灯带显示,同时显示CPU温度占用等硬件信息
实物图,目前版本略丑,正在改进

功能:ARGB同步显示;显示硬件信息(CPU温度和占有率,GPU温度和占用率,内存占用率);保留i2c扩展接口用于连接其他传感器
技术方案

ARGB接口本身和WS2812灯珠的时序是相同的,从使用逻辑分析仪测量的ARGB接口时序图可以看出,数据使用脉冲宽度进行编码,对于0和1来说,高电平和低电平时间总和相同,每个编码都是先发送高电平,再发送低电平。总计时间为1250ns,也就是800kHz,编码为0的高电平脉冲长度为333ns,编码为1的高电平脉冲长度约为960ns

读取ARGB的方法大概有三个,1. 使用脉冲长度计数区分0和1;2. 使用ESP-IDF中的RMT功能测量脉冲编码;3. 通过模拟电路还原800kHz时钟,通过SPI SLAVE模式读取数据。对于方法1,ESP32缺乏输入捕获功能,手动计数误差较大;方法2理论上可行,不过我测试中发现会稳定丢失第1包数据中的最高位,暂未使用。
ARGB数据中的每位数据都是固定频率,首先想到的是用锁相环恢复时钟,但实际数据发送间隔较长,在空闲时间容易失锁,重新锁定又需要时间所以废弃此方案。因为每位数据都是先发送高电平,可以使用沿触发的单稳态电路在上升沿后输出一个固定脉冲长度的信号,把脉冲长度设置为625ns,这样通过SPI协议以脉冲的下降沿进行采样时,脉冲长度低于625ns的数据会被读取为0,反之为1,就把脉冲编码还原。此外,把脉冲长度设置为每个编码的2到3倍,在连续触发模式下,脉冲在存在数据时会保持为1,因此就可以把SPI协议所需的CS信号还原出来。

为保证速度足够,没有使用555定时器的单稳态电路,使用的74LS123或74HC123作为替代。实际测量的脉冲长度和手册中计算的略有不同,在RC分别为1.5k欧和470pF时,测量脉冲约为625ns。原理图如下所示,图片中标记为x的电容和电容为焊接时用于调整时间常数。在使用74LS123芯片时,某些杂牌芯片可能不支持重复触发,如果发现CS信号出现很多毛刺多半是芯片的问题。

整体原理图如下

软件设计较为简单,使用arduino库驱动蓝牙串口,使用tft-espi库驱动lcd,使用esp-idf中的spi slave库读取数据,使用蓝牙串口从C#上位机中读取CPU温度或者GPU温度等硬件信息。分别使用3个线程分别用于显示刷新、读取数据、蓝牙通信。
C#使用InTheHand蓝牙通信,LibreHardwareMonitor读取硬件信息,写一个简单的上位机ui。

后续会把工程文件,上位机源代码和PCB上传



2071

被折叠的 条评论
为什么被折叠?



