最近偶然拿到了一款俄产的盖格管剂量计,正好笔者最近也在研究怎么优化处理盖格管读出电路以适配手持设备,于是就把这个剂量计拆开,看看别人是怎么处理关键的高压升压电路的,这一研究,确实发现了一种堪称邪道的高压设计,能从3V的电池供电升出300V的高压,而静态电流甚至低于1 mA。

搞核电子学的总免不了要给探测器做高压驱动,不过毕竟搞科研不差钱,钱能买来的性能都不是事儿,所以基本都是去买威斯曼或者EMCO的高压模块,稳定好用就行。但是这种东西往盖格管上用就有些太浪费了。之前研究小型化盖格管设计时,正好看到一篇文章[曾国强,魏世龙,夏源,李强,徐亚东,葛良全,介万奇.碲锌镉探测器的数字核信号处理系统设计[J].核技术,2015,38(11):49-56],原理图如上图,于是就用了这个方案,做了些改进放在了盖格管驱动上。基本原理不做赘述,就是用max668这个芯片做了简单的Boost升压加二极管倍压。实际测试这个电路能升到最高400 V左右。能用是能用,但是当输出超过300 V时效率会很快下降,功耗剧烈上升,能达到一百多毫安,这种设计显然就跟手持电池供电设备无缘了,一节5号碳性电池的额定电量也就1500~2000 mAh,两节电池用不了多久就该被榨干了。
应该说这个电路不是不能用,但是boost+二极管倍压,既做不到高效,也做不到高带载能力,还不如用boost+变压器来做。
拿到俄产的这个剂量计之后,看到它自称在两节7号电池总计1450 mAh的供电下能够工作超500 h, 。意味着静态电流应该低于3mA,于是我拆了主板,加上电源,供电调成3V之后,一上电,一开机。
然后我傻了,电流在开机一瞬间跳了几mA,应该是电容充电加单片机初始化导致的(用的竟然是GD32F103)。之后,它的静态工作电流竟然显示 : 0 mA。
这下轮到我百思不得其解了,盖格管的规格书我查过,起始电压260~320 V,坪长100 V,建议工作电压400 V。尽管盖格管不一定必须在建议电压下,但是至少也得加到300 V左右进入坪区才能工作,也就是说这玩意儿实现了静态功耗低于1 mA的升压电路?
于是我立刻开始尝试逆向它的PCB,大概梳理了一下结构,找到了高压部分的电路,然后碰到了两个问题:
没有DC-DC芯片,只有一个参数不明的变压器,唯一一个电源芯片是电池转3.3V用的;
万用表量了一下,高压输出只有80多伏。
我还特意把GM管给拆了下来,看看是不这个管子很特殊,这么低的电压也能工作。但是不出意外,管子很正常,测试时一直加到290 V才开始有信号响应,300 V左右开始比较稳定。
也就是说这个高压电路指定有玄妙之处,于是我抱着复杂的心情把原理图还原了一下:

看到这个原理图,我大概猜到第一个问题的答案了,变压器需要交流信号带来的磁通变化才能实现升降压的操作,我没怎么研究过变压器电源电路,在我的印象里至少会需要一个555定时器或者bosst芯片之类的电路产生振荡激励信号驱动电源才行。而这个设计里,变压器初级绕组直接接到了电源上,用一个BJT作为开关,而BJT的基极,连到了单片机的IO口,这个IO对应了定时器的PWM输出功能的复用引脚,经过测量,这个脚上的确有一个125 Hz,30 us宽度的矩形波窄脉冲存在。也就是说单片机控制了初级线圈上的脉冲电流,次级线圈感应出电势,用最简单的半波整流把高压了升上去。
不禁感叹何等不羁的做法,用PWM输出做交流激励控制,感觉很邪道,但仔细想想好像又很合理,我都用单片机了,还加什么555定时器,这不是脱裤子放屁吗。这种不会出现在任何电子学教科书上的玩法,只能说确实被硬件工程师玩得很溜。
再进一步,第二个问题似乎也很好解释了,这种接法得到的高压完全依赖输出端半波整流的那颗高压电容存储的电荷,带负载能力肯定极低,而我最开始测试时直接使用万用表测量肯定不妥,万用表的内阻只有10 MΩ,碰上这种电路,会直接拉低输出电压。想要测量就得增加测量电路的电阻,于是我在输出端串上了一个1 GΩ的电阻,这样再用万用表测量,等于输出端的负载为1010 MΩ,万用表测10 MΩ内阻带来的分压,然后将读取值乘101就可以了。果不其然,实测值大约是3.1 V,也就是说这个电路的实际输出电压是310 V左右,并且只能够给GM管驱动这类几乎不用电流的电路使用。
于是根据这个电路,再考虑到实际方便生产的一些因素,我改出了下面这个电路:

经过一些测试和摸索,高压部分做了些调整:
原设计定制的变压器参数不明,但是可以猜测匝数比是1:100,但是绕组的其他参数并不好测,所以选了个1:100的电流互感器来做测试;
增加了一个D3用来续流,防止长期工作时初级绕组的电流没有泄放渠道对Q1产生影响;
D2用齐纳管做稳压防止电压过高,但注意管子在3.3 V下的反向漏电流,若选用ZMM3V3,会产生数个毫安的静态电流,导致功耗变高;
Q1换成了NMOS管;
R12用于控制通过初级绕组的电流。
因为不想自己去绕变压器,所以选择成品的1:100的电流互感器(一种国产的EE8.3 贴片电流互感器,PH9494.XXXNLT替代品),在这种应用中理论上是可行的(虽然也很邪道),但是带来了一些新的问题:
电流互感器虽然原理和变压器一样,但是区别在于它本身是为了做大电流测量而设计的,其初级线圈的电阻和感值跟一般变压器比起来小得多,因为需要尽量避免对被测电路造成影响,这就导致电流互感器的初级绕组通常 匝数极少(甚至只有1匝),在本设计中,这很容易导致在Q1导通的瞬间,直接产生大电流短路,对电源电路产生冲击导致断电保护;
尽管电流互感器次级绕组禁止开路,但是本设计本来就是为了产生高压,所以直接无视,但注意次级绕组输出部分半波整流的二极管与电容的耐压。
问题2通过器件选型很好解决,但是问题1会带来很多的麻烦。初级绕组过小的电阻和感值带来的短路冲击很麻烦,经过反复调试,发现可以通过调整四个参数:电源端大容值储能钽电容(C1,下面简称C)、初级回路负载电阻(R12,下面简称R)、和PWM的脉冲宽度和频率来解决。
由于电源的3.3V是通过一颗DC-DC芯片得来的,最高输出只有200 mA,通过增加更多大电容储能,可以缓解Q1导通的短暂时间内对电源芯片的压力,本质上是电容充放电的问题。PWM的脉冲宽度需要尽量减小,而频率需要适当增加。这个过程还需要反复注意静态功耗。理论模型不太好把这些参数直接数值化,但是经过反复的测试,最终还真被我找到了合适的参数范围,最后的结果是R=50 mΩ,C=220 uF *3,PWM参数为500 Hz,830 ns的脉冲,单片机主频控制在12 MHz,并且在空闲状态时进入Sleep模式,节省功耗,最后的结果如下:


驱动两个盖格管,双通道通过外部中断独立计数(示波器里的粒子入射脉冲产生的信号很大,也足够宽,可以触发下降沿中断),静态平均功耗小于1 mA。
尽管四个参数的数值化不是很好建模,但是RC值的确定还是简单且有据可循的。
我们先来复习一下电容充放电的模型,在RC充电回路里,电压与电流的变化如下图,公式为V(t) = V_0*(1-e^{-t/\tau}) 其中(\tau=RC)。

放电过程则是对称过程,如下面的公式:
V(t) = V_0*e^{-t/\tau}
I(t)=V(t)/R
当R=50 mΩ,在t=0时,I(t=0)=3.3V / 0.05Ω = 66 A,这显然远超电源的输出能力,导致电源短路,系统掉电。
看手册可以知道,GD32的最低供电电压是2.6V,把V(t)=2.6 V,V_0=3.3 V带入,可以解得τ=4.2t,把t=830 ns带入,则RC时间常数应不低于3.5 us。也就是说在50 mΩ负载时,储能电容理论上70 uF就够了,但是这个值仅是理想值,电源冲击给单片机带来的影响远比想象中的大,实际测试时发现单片机上电后打开PWM输出后,根本来不及输出830 ns的脉冲就立刻掉电了。实际储能电容要在500 uF以上时才相对稳定,因此最后实际上用了3颗220 uF的电容才解决了高压稳定性的问题。
不过有条件的话还是建议用回变压器,用电流互感器升压这种事笔者自己也感觉很巨魔,但是竟然成功了,属实让人大脑发光,特此记录。