请选择 进入手机版 | 继续访问电脑版

迪文科技论坛

 找回密码
 立即注册
搜索
查看: 12275|回复: 57

【开源】T5L芯片做主控的可调功率LED电源软硬件设计方案

  [复制链接]

7

主题

71

回帖

617

积分

高级会员

Rank: 4

积分
617
发表于 2022-2-26 11:31:10 | 显示全部楼层 |阅读模式
       《T5L芯片做主控的可调功率LED电源软硬件设计方案》


对于一个软件开发工程师来讲,需要一块好的PCB开发板,无奈官网开发板存在许多不如意的问题。而大部分软件工程师是没硬件设计能力的,今天我来教大家如何设计一款好的PCB。        首先制定一个设计目标:
       1、支持TYPE C 可以直接很方便的连接到PC机,进行调试和烧录程序。
       2、支持WIFI,Buletooth 等无线连接。
       3、支持高速OS核接口,16bit并口。
       4、支持UI核PWM口,AD口引出可以做低成本应用设计,无需增加额外MCU。
       5、支持T5L更高频率运行,更稳定AD模拟采样误差。
       6、支持宽DC电压宽范围输入, 5~12V,更加宽的使用范围。

       我先用一块3.5寸屏来做设计。 上图。
   

       作为MCU核心,内部所有逻辑供电都是连接在供电端,为此芯片四周有分布试电源供电PIN脚,当MCU内部电路高速运行时,会在供电PIN脚产生高频电流,因此供电退耦电容必须最短距离连接,把高频电流限制在VCC到退耦电容之间。但很多硬件工程师不懂得这个原因,退耦电容位置远离MCU供电PIN脚,导致MCU频率一上去就发生各种不明原因的死机。按下面PCB布线 MCU工作频率可以上到600MHz,由于官方布线的不合理导致内核底层频率限制在250MHz,现在从新布线后只要内核频率修改到T5L极限频率就能上去。MCU底部有足够的散热,也解决了MCU散热问题。之前单纯的替换晶振频率11M改到18M测试过非常稳定。

/     
1、MCU  逻辑供电3.3V:C18, C26, C27, C28, C29, C31, C32, C33 为MCU3.3V供电,MCU管脚逻辑是对外通讯的供电是3.3V,因此3.3V引脚有非常大的高频电流,需要足够的低阻抗退偶电容,看看电脑CUP底部也有很多电容直接贴在CUP基板上就是这个原因,能最低阻抗给引脚提高瞬间能量。
2、MCU  内核供电1.25V: C23, C24 为MCU内核供电, 内核电压很低,并且运行基本上是接近正弦波电流,我排了2颗电容进去足够了。
3、MCU  模拟供电3.3V:  一颗C35, 模拟工作时不会有跳变电流,就一颗退偶电容足够但不能省去,在排版时,内核1.25V地和逻辑逻辑地可以并在一起,但模拟地必须分开,模拟地要和数字地在LDO的输出大电容负极汇集,模拟正极也要在LDO大电容正极汇集,这样AD采样噪声才能得到最低。


AD模拟信号采集电路:
       AD模拟输入需要一颗输入滤波电容CP1,MCU内部AD采样打开时,会有一个冲击电流流进AD引脚对AD内部的采保电容充电,还需滤波电容到AD采保通路的电感要保持足够小,如果滤波电容到AD引脚路径太长,那么在采保电容充电时会有一个过冲电压,当AD采样开关关闭时采保电容的电压不一定是滤波电容上的电压,因此造成采样误差,前面讲到MCU的模拟地和数字地独立分可,那么CP1的负极必须要最小阻抗连接到MCU模拟地。在这里顺便提一下晶振供电也是模拟供电的,几乎99%工程师都认为晶振是数字供电,那么问题就来了,数字供电端一定存在很大的脉动电流会使晶振造成频抖问题,比如通讯时钟眼图混乱,AD采样噪声白噪声等这里不详细讲了。晶振输出是正弦波,没有快速上升或下降的沿。而且信号幅度也就200~300mV,晶振的2颗并联电容是要接到MCU模拟地的,所以晶振地接到模拟地是不会对模拟电路造成影响。


蜂鸣器电路:

       C25为蜂鸣器供电电容,这个电容是不能省,蜂鸣器是个电感器件,在工作时会有尖峰电流,官方PCB板蜂鸣器电路把供电电容省了,因此会有很强的尖峰电流出现,为了降低这个尖峰,把蜂鸣器MOS驱动电流调小,使MOS管工作在线性区域。看是降低了蜂鸣器的干扰,实际上MOS会有放大倍数离散性是非常大的,强烈的干扰导致AD采样误差,这是个错误的设计。MOS本身就是工作在开关状态,设计电路就得让他工作在开关模式。我就5个元器件完成蜂鸣器电路设计,是不会有任何尖峰干扰,也没有元器件离散性问题。注意R18是并联在蜂鸣器两端,这是调接蜂鸣器声音品质的,可以使蜂鸣器声音清脆悦耳。


        
WIFI电路:

        WIFI芯片采样ESP32-C,官方用的是ESP8266,功能微弱。ESP32-C带WIFI+Bluetooth+BLE, 功能强大,ESP32-C价格和ESP8266接近,何必再用8266。我们来看布线原则,首先WIFI是属于射频器件,射频功率发射时消耗功率比MCU还要大,因此射频功率地必须严格和信号地分可。看上图2,上半部敷铜是功率地回路,WIFI天线反射地回路必须要大面积到功率地,功率地的汇集点是在C6负极,不然WIFI信号减弱甚至没法收发数据。功率地和WIFI天线之间要提供反射电流,也就是WIFI天线下边必须要有敷铜,并且敷铜要长度要超过WIFI天线延伸长度,延伸长点会是WIFI灵敏度增加。下半部敷铜作为信号地,汇集点在C2负极。也要做大面积敷铜可以屏蔽WIFI天线辐射带来的噪声。2个敷铜地在底层是分可的,通过过孔汇集到ESP32-C中间焊盘。射频功率地需要比信号地回路更低的阻抗,因此功率地到芯片焊盘有6个过孔,保证足够低的阻抗。晶振地回路不能有射频功率地流过,不然晶振产生频抖,WIFI频率偏移无法收发数据了。这个前面讲过了晶振频抖带来的问题。


         
背光LED供电电路:LCM液晶背光是用LED照明的,为了让LED亮度一致性,寿命,排线电流问题,通常会把LED串联。背光供电实际就是DC/DC升压,官方用T5L做数字DC/DC控制,我认为是一个错误设计。
1、数字电源设计必须要高速的AD采样,高速PWM占空比更新,高速更新也必须要高速PID运算。想想这会占用多大的MCU资源,而且一旦MCU死机,那么PWM不再更新,如果刚好是PID占空比调到最大状态,那LED会过流而烧毁,其次当负载LED开路时,由于没有过压保护控制,那么带来不可控的升压,直到电路损坏。
2、DC/DC恒流控制是采样LED电流,这个采样基准电压不能很低,由于AD基准是3.3V, 需要保证采样精度,也不能太大,会增加采样功耗,现在来看看AD采样噪声,DC/DC地线回路接到MCU模拟地。LED工作时地线电流就得会叠加到模拟地到LDO地之间。也就是说MCU模拟地和数字地之间存在LED的DC/DC工作电流三角波。这带来的AD采样噪声可想而知的。如果是接到数字地,那么数字地会有高频尖峰电压,这个电压会叠加到AD采样端。如果是接到LDO供电地,那么MCU模拟地和LDO地直接会有压差就会造成电流采样直流误差。
3、官方认为是降低成本,想想一颗SOT23 MOS也要0.2~0.3,PWM2输出直接到MOS上,MOS的 Cgs至少有500pF, 那么PWM2输出得有多大的冲击噪声带进MCU, PWM口是数字供电的,进过MOS后回路是进数字地呢还是模拟地,如果是数字地呢,那么电流的AD采样就有问题了,如果是进模拟地呢,那么PWM2数字信号回路就到模拟地了,导致整个信号回路混乱。
      基与以上原因,我采样一颗专用的LED驱动芯片,SOT23-6封装价格也就0.3,而且这种驱动芯片型号很多,容易购买,嘉立创就有,DC/DC 给LED供电可以独立构成回路,DC/DC的地接到3.3V LOD地,既不影响MCU数字地,也不影响MCU模拟地。由于PWM2口内核已经做专用化了,输出600K的PWM信号,我只能加了一个RC把PWM输出当作一个ON/OFF控制。希望厂家内核做一个功能切换,和PWM0, PWM1一样可以自定义PWM, 定义到200Hz~1K调制频率去开环控制背光驱动EN端。无需AD高速采样,无需高频率PID运算和更新PWM。

        
宽电压输入范围:
       之前的迪文屏PCBA大部分是5V,在实际应用中有时会遇到供电线压降很大,5V输出到PCB造成供电不稳定,导致T5L不能正常工作,因此我设计了2个DC/DC降压,对于DC/DC芯片选择也是很关键的,我测试过10来个DC/DC芯片型号总是有很大的尖峰电压,好一点50mV峰峰值,差一点200mV峰峰值,这是DC芯片内部MOS的Irrm巨大引起的。上面这颗型号几乎测试不出来尖峰干扰非常好。要注意DC/DC电路中R13, R17电阻不能省。2个DC/DC芯片是支持最高18V输入的,方便外部供电。(原理图R11=16k,图上26.42k是标错了没改回来,需要参考的朋友注意一下)。

    USB TYPE C调试口:
       由于TYPE C 可正反插拔,整好利于这点,不同方向插入提供不同的USB设备通讯,正向插入和WIFI芯片ESP32-C通讯,以便给WIFI芯片烧录代码,反向插入和XR21V1410IL16通讯,XR21V1410IL16是USB转串口连接到T5L UART1,以便给T5L烧录代码。同事TYPE C可以支持5V供电,2个CC口接5K电阻,协议上是5V供电设备。还有2个端口A8,B8目前没用到。

   
并口通讯:之前用迪文屏设计示波表时,发现T5L UART通讯实在太慢了,而且T5L OS核有很多IO口空闲着,刚好利于这点就设计了一款16bit并口通讯。结合ST ARM的FMC并口协议支持同步读写。


LCM RGB高速接口设计:
      大部分工程师为了省事,T5L RGB输出直连到LCM RGB,中间没有缓冲电阻,虽然是能工作,但是由于LCM FPC线比较长,如果直连相当于中间串联了一组电感,LCM 芯片接口有输入电容,那么在高速信号跳变沿会有很高的过冲,在LCM接受端会有尖峰电压和震荡波形,这个尖峰电压往往会超过VCC 3.3V电压,会导致液晶水纹波干扰。当进一步加大PCLK频率时,由于端口阻尼震荡和输入波形叠加导致信号错误,不能正常工作了。这时中间加一组排阻,可以降低尖峰电压幅度,也降低震荡,使得波形平滑,LCM水纹波干扰就大大下降了。在布线时尽量降低RGB接口的连线长度,特别是PCLK信号。另外还增加RGB接口测试点,PCLK, HS, VS, DE。 另外屏SPI口是连接到T5L的P2.4~P2.7口,这样做有利于更自由度设计屏驱动。调制屏工作参数使屏性能发挥到极致。同时也把RST, nCS, SDA, SCI测试点引出,有利于底层软件开发。

OS部分编程,底层代码设计:
首先来看一下效果图,无论是颜色搭配还是功能布局满满的科技感。


DGUS II UI设计:
  
选取数据变量显示控件在界面上电压右边画出一个框,数据变量的描述指针设置0x8000, 数据变量地址设置0x5000, UI核的RAM范围是从0x000~0x7FFF是用于UI显示的。0x8000~0xFFFE是给用户自定义使用的。其中0x0000~0x4FFF是UI接口地址和绘图地址,控件地址最佳是放在0x5000~0x7FFF之间。描述指针最佳是放在0x8000~0xFFFE之间。描述指针是对控件属性的描述,比如显示位置,显示变量指针,字体颜色,字体大小等属性。这个描述指针最好是要定义出来下面讲到怎么使用。KEIL OS 设计:

//---------------------------------DUGS读写格式
typedef struct
{
   u16        addr;              //UI 16bit变量地址
   u8         datLen;           //8bit数据长度
   u8                *pBuf;            //8bit数据指针
} UI_packTypeDef;           //DGUS 读写包


//-------------------------------数字显示控件
typedef struct
{
   u16     VP;
   u16     X;
   u16     Y;
   u16     Color;
   u8      Lib_ID;
   u8      FontSize;
   u8      Algnment;
   u8      IntNum;
   u8      DecNum;
   u8      Type;
   u8      LenUint;
   u8      StringUinit[11];
} Number_spTypeDef;                           //数据变量描述结构体

typedef struct
{
   Number_spTypeDef              sp;               //定义sp描述指针
   UI_packTypeDef                   spPack;        //定义sp变量DGUS读写包
   UI_packTypeDef                   vpPack;        //定义vp变量DGUS读写包
} Number_HandleTypeDef;                          //数据变量结构体


有了前面的数据变量handle定义。接下来给电压采样显示定义一个变量。
Number_HandleTypeDef  Hsample;
u16   voltage_sample;

首先 执行初始化函数
NumberSP_Init(&Hsample,  voltage_sample,  0x8000);            //这里的0x8000就是描述指针。
//---------------数据变量显示SP指针结构初始化--------------------------
void NumberSP_Init(Number_HandleTypeDef *number,  u8 *value, u16 numberAddr)
{
   number->spPack.addr = numberAddr;
   number->spPack.datLen = sizeof(number->sp);
   number->spPack.pBuf = (u8 *)&number->sp;
        
   Read_Dgus(&number->spPack);
   number->vpPack.addr = number->sp.VP;
        switch(number->sp.Type)                //根据DGUS界面设计的数据变量类型自动选择vp变量的数据长度。
        {
                case 0:
                case 5:
                        number->vpPack.datLen = 2;        
                        break;
                case 1:
                case 2:
                case 3:
                case 6:
                        number->vpPack.datLen = 4;        
                case 4:
                        number->vpPack.datLen = 8;        
                        break;
        }               
   number->vpPack.pBuf = value;
}


通过初始化之后,Hsample.sp 就是电压采样数据变量的描述指针。Hsample.spPack 是OS核通过DGUS接口函数和UI电压采样数据变量通信指针。Hsample.vpPack是改电压采样变数据变量的属性,比如字体颜色等。也是通过DGUS接口函数传递到UI核。Hsample.vpPack.addr 是电压采样数据变量地址已经从初始化函数自动获取了。这是一个非常好的方法,当你在DGUS 界面改变变量地址或者变量数据类型等。无需在OS核同步更新变量地址。OS核心计算出voltage_sample变量后只要执行Write_Dgus(&Hsample.vpPack)函数更新就完事。无需再把voltage_sample打包再DGUS发送(繁琐)
上面的handleTypDef 结构化的思路是非常好使。这是链接UI和OS的中间桥梁,希望厂家开发出链接库。把所有的空间都封包起来。UI内核更新后链接库也跟着更新。有利于后面工程师快速上手。
另外希望迪文公司 DGUS II软件增加自动变量分配机制。比如指针描述用宏定义,编译以后生成宏文件,在OS核无需再手工定义描述指针宏,当DGUS II描述指针变量自动修改后,OS核也无需手工同步修改。特别对于初学者来讲对控件长度地址不是那么清楚情况下,经常会出现地址重叠出现莫名其妙的显示问题。变量自动分配机制。


   
LED亮度控制是控制电流PWM的占空比,我在硬件设计上电流PWM定义到PWM0,PWM0的UI接口地址是在0x92,滑动指示控件变量地址就写0x92——代表0x92的数据带给滑动控件指针图标位置显示用。PWM频率设置100K, PWM精度==825.7536MHz/100K = 8257 写到终止变量刻度值。

  
滑动功能用拖动调节控件,变量地址对应PWM0的变量地址,终止位置对应返回值写PWM精度8257, 意思是滑动条滑动位置按8257比例返回到0x92地址。

  


今天把屏时钟优化了一下,居然PCLK可以达到20M, 官方提供的CFG文件屏时钟只有10M, 看了一下屏驱动芯片规格书已经达到了最高频率了,这是合理布线的重要性。顺便附上ILI9488规格书。  
地址0x13是屏的PCLK时钟分频系数,系统频率206.4384M /分配系数10 = 20.64384M。我把屏的SPI口挂在OS核,这就是带来很很大的好处,可以自己优化屏参数。PCLK比官方默认的10M整整大了一倍,这意味着屏刷新率增大了1倍,播放动画看不到卡顿感。


WIFI部分硬件已经走通,通过TYPE C正向插入连上WIFI部分ESP32芯片USB口,并通过USB口成功下载ESP32-C3官方固件。现在把固件包和刷机工具也附上。感兴趣的童鞋可以尝试一下。
  
TYPE C支持正反方向插入,刚好利用这一点,反向插入接通XR21V1410 USB转串口芯片,连接T5L UART1, 正向插入连上ESP32-C3 USB 虚拟串口,注意需要打开液晶左上角的power按钮,ESP32 EN端受T5L P3.2口控制。
   
打开flash_download_tool.exe chip Type 选择 EP32C3 点击OK,进入烧入界面,选择固件,地址0x0, 打勾,START。等待完成,大概1~2分钟。完成后用安信可串口工具可以直接打印log了。

  
PCB修改为1.1版本,
1USB转串口芯片XR21V1410IL16 改为CH340N,价格才1块多点,大大降低了BOM成本,同时去掉了UART1和WIFI.UART0 2*8PIN座。(WIFI.UART0和WIFI.USB是一样功能的做ESP32的log打印)
2、ESP32-C3 为了调试AT COMMAND增加了2*4PIN座,
3、贴片电感原先4018封装修改为3015足够了,这有利于今后设计COF屏做小型化。
4、增加了一颗3.6V稳压管保护3.3V系统供电,生产时不小心把3.3V和VCC短路了可以立即烧毁3.6稳压管短路3.3V,来保护T5L不被过压烧掉。
5、屏固定4个椭圆位置固定往左移动了3mm距离,使屏显示区域在PCB板中间。


附上设计图。后续将会持续更新,敬请关注:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

23

主题

286

回帖

1936

积分

金牌会员

Rank: 6Rank: 6

积分
1936
QQ
发表于 2022-2-27 13:07:02 | 显示全部楼层
非常赞
运动,编程,热爱生活
回复

使用道具 举报

0

主题

7

回帖

273

积分

中级会员

Rank: 3Rank: 3

积分
273
发表于 2022-2-28 14:33:07 | 显示全部楼层
受教了
回复

使用道具 举报

2

主题

4

回帖

43

积分

新手上路

Rank: 1

积分
43
发表于 2022-3-14 17:16:56 | 显示全部楼层
非常赞
回复

使用道具 举报

4

主题

309

回帖

2193

积分

金牌会员

Rank: 6Rank: 6

积分
2193
发表于 2022-3-16 10:03:02 | 显示全部楼层
下载收藏,谢谢大神(虽然目前的水平还看不懂)
回复

使用道具 举报

0

主题

2

回帖

85

积分

注册会员

Rank: 2

积分
85
发表于 2022-3-23 13:08:55 | 显示全部楼层
简直就是业界良心啊,专业,除了专业还是专业
回复

使用道具 举报

0

主题

2

回帖

41

积分

新手上路

Rank: 1

积分
41
发表于 2022-3-31 11:32:11 | 显示全部楼层
必须点个赞,比官方的更具有参考
回复

使用道具 举报

12

主题

159

回帖

952

积分

高级会员

Rank: 4

积分
952
QQ
发表于 2022-3-31 16:54:05 | 显示全部楼层
实话实说,非常奇怪,官方的板子,引脚供电电压为啥先进引脚再到电容呢,这样是把引脚非常容易的引出来了,但是作为硬件设计来说,这是不允许的
回复

使用道具 举报

12

主题

159

回帖

952

积分

高级会员

Rank: 4

积分
952
QQ
发表于 2022-3-31 18:09:57 | 显示全部楼层
老兄好,我上次那个图有点缺陷,本想把gui核的引脚用了,后来说这块暂时不开放,问下咱们的这个电路,os核的并口,io口来模拟的话,这个速度咋样
回复

使用道具 举报

7

主题

71

回帖

617

积分

高级会员

Rank: 4

积分
617
 楼主| 发表于 2022-3-31 21:22:27 | 显示全部楼层
lihui163 发表于 2022-3-31 18:09
老兄好,我上次那个图有点缺陷,本想把gui核的引脚用了,后来说这块暂时不开放,问下咱们的这个电路,os核 ...

在不改变晶振情况下大概最高速度能到5M*16bit 90Mbps。如果把晶振改为18M。那这个速度可以到120Mbps了。可以实时传输图形都没问题了。在写底层OS代码时多看看编译后的汇编指令就可以知道代码执行速度。特别是在高速执行时尽量用dat区变量,只有1个指令可以完成存取。可以写出高质量代码。
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-3-29 16:16 , Processed in 0.100048 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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