如何利用单片机IO口产生两倍的电源电压
简介
在很多情况下,电子系统中需要获得比工作电源高的电压电源,或者负电源。比如在一些功率器件(MOS)的基极驱动信号、扩展运算放大器的动态范围、一些通信信号(UART232)。
现在有很多专门的芯片,可以提供高效的电压转换,比如ICL7660就是一个非常通用的开关电压转换芯片,通过灵活的配置,可以产生-Vcc, 2VCC等不同的电源。并且可以通过级联获得更高倍数的电压信号。
如果仅仅是为了驱动一个高端MOS管的动作,需要有两倍以上的VCC作为基极信号,控制器开断,那么可以使用单片机的IO口来产生两倍的工作电源。
▲ 插图|Bing图库
下面给出了基于STC8G1K08(SOP16封装)设计的方案,以及相关的应用。
方案
这个方案最初的目标是用于制作STC无线远程自动程序下载器。由于STC系列的单片机在自动下载的时候,一种最通用的方式,就是使得单片机冷启动,在此过程中,配合PC端的ISP程序在单片机上电过程完成握手信号,使得单片机进入底层监控程序,最终完成下载。
为了能够自动控制外部单片机电源的通断,通常可以使用微型继电器、大功率MOS管。为了便于后期的通讯,当做开关作用的MOS管位于电源的上端,那么控制它的通断的栅极驱动信号就需要比VCC更高的电压。下面给出的方案就是借助于倍压整流(或者仿照ICL7660的工作原理)的方案。
1、原理图设计
本实验的实验工程文件:
D:\zhuoqing\AltiumDesigner\STC\Test\2020\Download7660L.SchDoc
整体的电路原理如下。利用单片极IO口只是该电路功能的一部分。
▲ 直接应用单片机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版图,利用快速制版方式获得实验电路。
▲ 实验电路板
其中。在C100处焊接容量为1000uF的电容,这使得开关对外负载如果也具有很大的容性的时候,可以提供比较大的冲击电流。
如果该电容没有焊接,或者采用的电容较小,此时在MOS开启对外负载供电的时候,对本电路电压产生冲激,使得电路中的单片机重启。
实验结果
实验中的单片机软件目录:
D:\zhuoqing\window\C51\STC\Tools\STCDL\STCDL8G1K1PWM\STCDL8G1K1.uvproj
1. 软件相关配置
STC的单片机内部时钟配置在35MHz。
▲ STC8G1K 硬件配置
在PWM输出使用8Bit的模式。
2. 相关子程序
控制10V输使用下面两个指令。需要同时控制P5V,PWMO的输出。
#define P10V_ON ON(P5V_PIN), PWM3SetPWM(0x7f)
#define P10V_OFF OFF(P5V_PIN), PWM3SetPWM(0xff)
- 1
- 2
3. 电路各部分的信号
系统上电,并下载程序之后,测量电路的各部分的信号以及输出性能。
▲ 实验电路板上电后的情况
参与产生电压的两个IO口,都设置为PUSH-POLL的大电流输出模式。
(1)驱动波形:
测量电路中的波形如下图所示:
▲ 电路上的两部分的波形
(2)输出的2VCC电压:
由于存在整流二极管的电压降,所以实际输出的电压比2VCC要低。在MOS的栅极上可以测到得到输出的驱动电压为:9.33V。
(3)MOS输出阻抗:
使用手持的RLC表,测量T1(MOS)的D,S极之间的电阻,大约为40mΩ。这说明该MOS管被充分打开了。
▲ 测量阻抗的手持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]
- 1
- 2
从下面图中俗称,输出电压随着电流的增加逐步下降。
▲ 倍压整流输出电压与电流之间的关系
输入电流和电压变化范围大体如下:
Δ 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×10−37.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
#============================================================
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
结论
直接使用能够输出大电流的单片机IO口(设置为Push-Poll模式),可以产生2VCC的高压。通过其它方式的二极管整流方式,也可以产生负电压。
由于在本实验应用中驱动MOS管的栅极负载非常小,所以所产生的2VCC电源的功率可以满足需求。
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/105888159
- 点赞
- 收藏
- 关注作者
评论(0)