TPS5430 负压工作时 使能(EN)信号的正压控制转换

最近在做项目的时候遇到了一个问题,一开始的时候完全没有想到会遇到这种问题,只能说经验还是有点匮乏。就是在使用TI的开关电源芯片TPS5430生成负电压的时候,需要用工作电压为正的单片机进行使能的控制。(使用输出电压为0-3.3V的控制信号控制输出电压为-3.3V的TPS5430)

然而使用TPS5430这种开关电源使用正电压生成负电压时,往往是将输出的正端接入电路的GND(为了方便称呼不混淆,从后面将其称为PGND),负端作为负电压输出端,而负端对应的就是芯片的GND端(也就是CGND)。具体电路如下图:

TPS5430 正压转负压电路

也就是说,当输出端接入PGND之后其CGND就称为了负压,而其使能控制信号EN的参考电压就成了负压。这就意味着关断其使能需要提供一个负压,而开启它则需要给一个比CGND高的电压,具体是多少电压则需要看手册:

TPS5430 数据手册SLVS632I Page7

同时再看一下它的输入最大限制:

TPS5430 数据手册SLVS632I Page5

也就是说其EN脚的输入可以从VCGND-0.3V一直到VCGND+7V,然而实际上我觉得对于这种输入电流本身就不会很大的引脚来说超出其范围一些也没太大问题(大概)。所以需要对控制信号进行电压转换,这里我绕了一个小弯路,但我觉得讲讲这个还蛮有意思,所以不要嫌我啰嗦。

一开始的时候我觉得这个其实很简单嘛,那就用一个3.3V的齐纳管串接在控制信号上就好了,于是就设计了这么一个电路:

使用齐纳管转换控制信号电平

但啪的一下很快啊,我就发现了问题。就是说如果现在电源是开着的,那么单CTRL_EN信号为0V,EN信号可以降低到-3.3V足以让它关闭。但是如果它关闭了以后,-3V3的电压就会回归0V,再想让它打开,CTRL_EN即使到达3.3V也没办法让它开启。(当然实际情况并不是这样,这只是我简单的分析,实际情况要复杂一些,但即使简单的分析就已经不行了,所以这里就先按这样来,后面我会讲具体是什么情况。)

于是乎我就又想了一下,觉得那如果这样的话,不如直接再用一路电源产生一个-3.3V作为待机电源-3V3SUB,然后将R1的负端接到-3V3SUB不就好了。虽然这样做会在使能关闭的时候EN脚的输入电压低于最低电压限制( VCGND-0.3V )不过我觉得应该问题不大,只要能控制它就行,于是我就这么设计了电路并且投板子印了出来。在测试的时候就发现这样并不行,具体原因是:

首先,并不是说在齐纳管到达导通电压之前,它就没有电流。这是一个经常容易被忽略的地方,实际上在导通电压到来前其两端就已经有电流了,而这个电流的大小可以通过手册查到:

1N4728 数据手册中详细参数

通过这个可以看到,在它两端导通的时候,实际上两端需要过76mA电流才行,而实际上整个6.6V的电经过10K电阻也并不能产生高达76mA的电流,也只有0.66mA,即便把电阻换成1K也才只有6.6mA如果一味的换更小的电阻来试图达到这个电流,让它工作起来,且不说耗电的问题,单片机的IO口也会承受不住。我使用的STM8S003F3单片机的IO口只能支持最大20mA的电流。

STM8S003F3 数据手册DS7147 Rev 10 Page48

然而一味的寻找导通电压更高的管子不仅非常费劲,而且实际上对于板子来说也没办法复制,因为管子的参数有一定的误差,希望找到一个不是其主要关注参数的合适型号并且误差能够在允许范围内的管子还是不太容易的。(比理解我前面说的这句特别长的话要复杂)。如果再在单片机端口上加跟随电路做电流放大的话总觉得将简单的问题复杂化了。

所以说这个通过齐纳管来做电压转换这样可能并不能行得通,得想想其它办法才行。于是我打开了steam,挑了几个游戏玩了那么一会,希望能对这个问题有别的理解。

我突然想到自己从一开始理解这个问题的时候可能就陷入了一个误区。就是我过于纠结它的控制电压问题,想着做电压转换,或者说怎么样去将控制电压转换成负压。实际上换一个思路,我实际上需要控制的就是EN端和CGND端之间的通断就可以了。

换句话说,如果我想关闭使能,那就将EN和CGND两端连起来,(降低其压差到0.5V以内),如果我想开启使能,那就将EN和CGND两端之间断开,(增加其压差到1.3V以上)。而这种用一个电压去控制另一个回路通断的事情应该用三极管去做呀!

所以说,我开始考虑用三极管来做这个使能的控制,考虑到是使用高压去控制低压,所以这里选用了S9015的PNP管,所以电路如下:

使用S9015做EN使能控制转换

分析这个电路,当CTRL_EN输入为低电平,即电压为0V左右时,由于S9015的发射极和基极电压差几乎为0V,所以集电极电流几乎为0mA,流过R2两端的电流几乎为0mA,EN和-3V3端(CGND端)压差几乎为0V,使能关闭。而当CTRL_EN输入为高电平时,减去发射极和基极压差0.7V,还有2.6V分到了R1两端,则R1两端有0.26mA的电流,由于S9015的hFE大约在60-600的区间内(也就是β),而流过R2最多只有0.66mA的电流,所以三极管一定是处于饱和状态,则EN脚输出的电压为3.3V-VCE(sat),远远超过了开启门限(-3.3V+1.3V)。则这个电路可以正常工作。三极管S9015的参数表格如下:

S9015数据手册

最后通过实际测试,这个电路可以正常工作。下面放一张我把一个二极管的焊盘强行塞一个三极管焊上去的丑陋操作图:

(完)

Dell C6320p 调试记录 (附电源板PCB)

之前大概12年到13年的时候,听说Intel出了一款非常厉害的协处理器叫Xeon Phi,有六十多个核心外加每个核心有4个线程,对年幼的我的心灵造成了巨大的冲击,当时脑子里的概念是,我家电脑才四核,这得顶得上多少台电脑啊。虽然现在看来十分幼稚,但当时内心的想法就是“我以后有钱了一定买一台”。后来上了大学之后看到某鱼卖这个东西才卖1k左右,立马心动了买了一张回来,各种把玩,当时真的是恨不得跟全世界都炫耀一下。不过后来懂了不少这方面东西之后发现,此核非彼核,并不是核心越多越厉害哈哈。

虽然这个东西早就已经成为时代的眼泪,不过前段时间看到某鱼上有人卖第二代的Xeon Phi还是心动的买了一张回来,因为第二代的Xeon Phi不像第一代是PCIE形式的协处理器,而是封装成了处理器的形式,所以需要搭配主板和内存进行使用。

主板这里我选用的是Dell的C6320p四子星中的一个节点,但是问题也随之而来,就是这张主板在不插进C6300的机箱的时候,是没有办法点亮的。然而看了看机箱的价格直接劝退了我这种穷逼,所以说怎么办呢,买都买了,只好瞎折腾,试了好几天,没想到还真被我给试出来了。

首先根据直觉,其决定能不能开机的信号应该在这个接口上(因为旁边写了PWR CTRL):

C6320p 电源控制口

接下来就是尝试上面的信号,最后试出来了一些信号的含义,但也有几个信号没有试出来,不过已经可以使用了,具体如图:

引脚定义

主供电是上面的那个大接口,其12V为主供电12V,12Vsub为待机供电12V。控制接口左上角为1号脚,从左向右从上到下依次编号,引脚功能为:

1:我不知道干啥的
2:我不知道,但好像和1号是一对
3:绿色的灯(正常运行),如果机箱亮绿色的灯这个脚会输出高电平
4:琥珀色的灯(有异常),同上
5:蓝色的灯(位置指示),同上
6:打开蓝色的灯(LOC开关)
7:电源开启信号,开机时会拉低来打开电源的输出
8:电源状态信号,输入高电平代表外置供电正常(主要就是没有这个信号会阻止开机)
9:我不知道
10:开机信号,输入低电平会开机
11:我不知道,但是拉低会报错
12:GND

将这些信号接到电源上便可以开机了,我这里还画了一张板子,可以把Dell的PSU电源转接到这个接口上,具体效果如图(顺便,jlcyyds):

最终效果图
开机了非常开心

另外,附上Dell的PSU电源引脚定义:

PCB文件:下载

(完)

Dell 13代服务器 修改 Service Tag

感觉有很长一段时间没有写博客了,有时候想起来还有点愧疚,毕竟最开始的时候励志要把自己学到的新东西记下来。(或者是不是因为太久没学新东西的缘故)

言归正传,之前捡了不少洋垃圾,感觉用着最顺手的就是Dell的洋垃圾,其服务器维护性能还有各方面还是做的不错的,而且不少垃圾都是从无尘机房出来的,成色各方面看着非常的新。

一开始捡的12代服务器还好,可以通过网上的工具修改Service Tag,但是某天我捡了一台T630,是13gen的服务器,发现它已经无法使用网上的asset工具进行修改了。

经过一番折腾发现,其Service Tag是储存在BIOS的Flash芯片内部的(此处省略一长串推理和侦探行为),所以通过刷BIOS可以刷掉Service Tag,然而Dell的BIOS升级程序会在刷BIOS时保留旧的Service Tag,故需要对Flash进行硬刷写。

具体做法是在官网下载Dell的BIOS升级包,并点击Extract对安装包进行解压:

Dell BIOS 升级程序界面

然后再在解压后的文件里边找到payload文件夹里边的.hdr文件,并使用16进制编辑器删除文件开头到一串FF的这部分内容。

删除文件头部

然后拖到文件最后,将超出Flash容量的这部分也删除掉:

删除文件尾部

最后就得到了一个体积和Flash容量一致的bit文件,再利用烧写工具将这个bit文件烧写进Flash便可替换掉原本的BIOS中存储的Service Tag,再上电时它会检测到新主板并提示让你手动输入Service Tag,这时确认好你的Service Tag再准确无误的输入就好了。

(完)