简介

在很多情况下,电子系统中需要获得比工作电源高的电压电源,或者负电源。比如在一些功率器件(MOS)的基极驱动信号、扩展运算放大器的动态范围、一些通信信号(UART232)。

现在有很多专门的芯片,可以提供高效的电压转换,比如ICL7660就是一个非常通用的开关电压转换芯片,通过灵活的配置,可以产生-Vcc, 2VCC等不同的电源。并且可以通过级联获得更高倍数的电压信号。

如果仅仅是为了驱动一个高端MOS管的动作,需要有两倍以上的VCC作为基极信号,控制器开断,那么可以使用单片机的IO口来产生两倍的工作电源。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(1)

▲ 插图|Bing图库

下面给出了基于STC8G1K08(SOP16封装)设计的方案,以及相关的应用。

方案

这个方案最初的目标是用于制作STC无线远程自动程序下载器。由于STC系列的单片机在自动下载的时候,一种最通用的方式,就是使得单片机冷启动,在此过程中,配合PC端的ISP程序在单片机上电过程完成握手信号,使得单片机进入底层监控程序,最终完成下载。

为了能够自动控制外部单片机电源的通断,通常可以使用微型继电器、大功率MOS管。为了便于后期的通讯,当做开关作用的MOS管位于电源的上端,那么控制它的通断的栅极驱动信号就需要比VCC更高的电压。下面给出的方案就是借助于倍压整流(或者仿照ICL7660的工作原理)的方案。

1、原理图设计

本实验的实验工程文件:

D:\zhuoqing\AltiumDesigner\STC\Test\2020\Download7660L.SchDoc

整体的电路原理如下。利用单片极IO口只是该电路功能的一部分。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(2)

▲ 直接应用单片机IO口完成倍压整流

使用STC8G1K08的CCP2输出第3通道的PWM波形。配合P3.6输出高电平和低电平,经过两个肖特基二极管的倍压整流(DT,DT1,C20, C21)最终可以在MOS管T1的栅极形成2VCC的电压。

工作模式1: P5VCTN输出 5V,PWMO输出占空比为50%的方波信号。C20电容上就会交替充上 5V电压,然后通过DT往C21上冲进2VCC 的电压。

在这种情况下,可以将DT,DT1,C20,C21看成对PWMO的标准倍压整流电路;

此时T1的栅极上施加有2VCC( 10V)的驱动电压,对外的电源打开。

工作模式2: 输出0V模式。此时将P5VCNTN输出为0V,PWM0停止振荡,它可以停留在0V,也可以停留在 5V,由于C20的隔直,所以停止振荡的PWMO信号不会对输出产生影响。

此时,T1栅极的电压经过RT1接到地,输出关断。

2. 制作实验电路板

通过设计单面PCB版图,利用快速制版方式获得实验电路。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(3)

▲ 实验电路板

其中。在C100处焊接容量为1000uF的电容,这使得开关对外负载如果也具有很大的容性的时候,可以提供比较大的冲击电流。

如果该电容没有焊接,或者采用的电容较小,此时在MOS开启对外负载供电的时候,对本电路电压产生冲激,使得电路中的单片机重启。

实验结果

实验中的单片机软件目录:

D:\zhuoqing\window\C51\STC\Tools\STCDL\STCDL8G1K1PWM\STCDL8G1K1.uvproj

1. 软件相关配置

STC的单片机内部时钟配置在35MHz。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(4)

▲ STC8G1K 硬件配置

在PWM输出使用8Bit的模式。

2. 相关子程序

控制10V输使用下面两个指令。需要同时控制P5V,PWMO的输出。

#defineP10V_ONON(P5V_PIN),PWM3SetPWM(0x7f) #defineP10V_OFFOFF(P5V_PIN),PWM3SetPWM(0xff)

3. 电路各部分的信号

系统上电,并下载程序之后,测量电路的各部分的信号以及输出性能。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(5)

▲ 实验电路板上电后的情况

参与产生电压的两个IO口,都设置为PUSH-POLL的大电流输出模式。

(1)驱动波形:

测量电路中的波形如下图所示:

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(6)

▲ 电路上的两部分的波形

(2)输出的2VCC电压:

由于存在整流二极管的电压降,所以实际输出的电压比2VCC要低。在MOS的栅极上可以测到得到输出的驱动电压为:9.33V。

(3)MOS输出阻抗:

使用手持的RLC表,测量T1(MOS)的D,S极之间的电阻,大约为40mΩ。这说明该MOS管被充分打开了。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(7)

▲ 测量阻抗的手持RLC表

4. 倍压部分输出特性

使用电子负载作为倍压整流的负载,测量在不同的输出电流下,倍压整流的输出电压。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(8)

▲ 电子负载外观

如下是测量不通电流下的输出电压,

vdc=[-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,-0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01] vOut=[9.31,9.30,9.31,9.31,9.30,9.31,9.31,9.30,9.30,9.31,9.30,9.31,9.31,9.30,9.30,9.31,9.30,9.30,9.11,9.01,8.91,8.82,8.71,8.61,8.51,8.41,8.31,8.21,8.10,8.00,7.90,7.78,7.67,7.57,7.45,7.34,7.22,7.10,6.99,6.87,6.74,6.62,6.49,6.36,6.23,6.09,5.95,5.81,5.66,5.50,5.34,5.18,5.00,4.81,4.63,4.47,4.34,4.26,4.20,4.15,4.11,4.07,4.02,3.99,3.95,3.90,3.87,3.83,3.79,3.75,3.71,3.67,3.63,3.59,3.54,3.50,3.46,3.41,3.37,3.33,3.27,3.23,3.18,3.13,3.08,3.03,2.97,2.93,2.87,2.81,2.76,2.70,2.64,2.58,2.53,2.46,2.40,2.34,2.26,2.19]

从下面图中俗称,输出电压随着电流的增加逐步下降。

单片机io口接6v电压(如何利用单片机IO口产生两倍的电源电压)(9)

▲ 倍压整流输出电压与电流之间的关系

输入电流和电压变化范围大体如下:

则倍压整流的输出等效电阻为:

实验中的测量程序:

#!/usr/local/bin/python #-*-coding:gbk-*- #****************************** #TEST1.PY--byDr.ZhuoQing2020-05-02 # #Note: #****************************** fromheadmimport* fromtsmodule.tshardwareimport* fromtsmodule.tsvisaimport* fromtsmodule.tsstm32import* #------------------------------------------------------------ vdc,vout=tspload('testdata','vdc','vout') i0=(99-37) v0=1.1e-3 vstart=vdc[0] defv2i(v): return(v-vstart)*i0/v0/10 printf(vdc,vout) I=[v2i(v)forvinvdc] plt.plot(I,vout) plt.xlabel('OutCurrent(ms)') plt.ylabel('OutVoltage(V)') plt.grid(True) plt.show() exit() #------------------------------------------------------------ dm3068open() #------------------------------------------------------------ vdcdim=[] voutdim=[] forsinrange(100): zbcmd(b'clzigbee%d'%s) time.sleep(1) vdc=dm3068vdc() meter=meterval() vout=meter[0] printf("VDC:%f,VOUT:%f"%(vdc,vout)) vdcdim.append(vdc) voutdim.append(vout) tspsave('testdata',vdc=vdcdim,vout=voutdim) printf('\a') tspsave('testdata',vdc=vdcdim,vout=voutdim) plt.plot(vdc,vout) plt.show() #------------------------------------------------------------ #------------------------------------------------------------ #ENDOFFILE:TEST1.PY #******************************

结论

直接使用能够输出大电流的单片机IO口(设置为Push-Poll模式),可以产生2VCC的高压。通过其它方式的二极管整流方式,也可以产生负电压。

由于在本实验应用中驱动MOS管的栅极负载非常小,所以所产生的2VCC电源的功率可以满足需求。

,