如何利用单片机IO口产生两倍的电源电压

简介

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

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

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

如何利用单片机IO口产生两倍的电源电压_第1张图片

▲ 插图|Bing图库

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

方案

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

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

1、原理图设计

本实验的实验工程文件:

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

整体的电路原理如下。利用单片极IO口只是该电路功能的一部分。
如何利用单片机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口产生两倍的电源电压_第3张图片

▲ 实验电路板

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

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

实验结果

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

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

1. 软件相关配置

STC的单片机内部时钟配置在35MHz。
如何利用单片机IO口产生两倍的电源电压_第4张图片

▲ STC8G1K 硬件配置

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

2. 相关子程序

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

#define P10V_ON                 ON(P5V_PIN), PWM3SetPWM(0x7f)        		
#define P10V_OFF                OFF(P5V_PIN), PWM3SetPWM(0xff)

3. 电路各部分的信号

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

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

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

(1)驱动波形:

测量电路中的波形如下图所示:
如何利用单片机IO口产生两倍的电源电压_第5张图片

▲ 电路上的两部分的波形

(2)输出的2VCC电压:

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

(3)MOS输出阻抗:

使用手持的RLC表,测量T1(MOS)的D,S极之间的电阻,大约为40mΩ。这说明该MOS管被充分打开了。
如何利用单片机IO口产生两倍的电源电压_第6张图片

▲ 测量阻抗的手持RLC表

4. 倍压部分输出特性

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

▲ 电子负载外观

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

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口产生两倍的电源电压_第7张图片

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

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

Δ I = 36 m A ,      Δ V = 7.1 V \Delta I = 36mA,\,\,\,\,\Delta V = 7.1V ΔI=36mA,ΔV=7.1V

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

R s = Δ V Δ I = 7.1 36 × 1 0 − 3 = 197.2 Ω R_s = {{\Delta V} \over {\Delta I}} = {{7.1} \over {36 \times 10^{ - 3} }} = 197.2\Omega Rs=ΔIΔV=36×1037.1=197.2Ω

实验中的测量程序:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2020-05-02
#
# Note:
#============================================================

from headm import *
from tsmodule.tshardware    import *
from tsmodule.tsvisa        import *
from tsmodule.tsstm32       import *
#------------------------------------------------------------
vdc, vout = tspload('testdata', 'vdc', 'vout')

i0 = (99 - 37)
v0 = 1.1e-3

vstart = vdc[0]

def v2i(v):
    return (v - vstart) * i0 / v0/ 10

printf(vdc, vout)
I = [v2i(v) for v in vdc]

plt.plot(I, vout)
plt.xlabel('Out Current(ms)')
plt.ylabel('Out Voltage(V)')
plt.grid(True)
plt.show()

exit()

#------------------------------------------------------------
dm3068open()

#------------------------------------------------------------
vdcdim = []
voutdim = []

for s in range(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()



#------------------------------------------------------------




#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

结论

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

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

你可能感兴趣的:(2020智能车竞赛专栏,基础电子)