STM32单片机IO口电流
01 STM32IO端口输出电流
一、前言
这个STM32单片机上午用于测试IO端口输出电阻, 有一个问题, 那就是当单片机IO端口设置为 高电平的时候, 它的IO输出的电流是否与单片机工作电流的增加是一一对应的呢? 下面通过测试来验证一下。
这是测量电路示意图。 测试的单片机为 STM32F103, 它的PB7 IO端口设置为输出, 并置为高电平。 利用一个可变电阻箱 QR10 作为它的负载, 使用数字万用表DM3068测试负载QR10上的电压, 进而可以计算出IO口输出电流。 直流电源 DH1766给单片机提供3.3V工作电压, 并可以回读到单片机的工作电流。 通过编程, 设置负载QR10不同的电阻, 可以对比 IO 不同的输出电流、电压下, 对应的工作电流的变化, 这样便可以对比IO口的输出电流与工作电流的变化是对应的。
二、测量结果
单片机工作电压为 3.3V, 静态工作电流为 34mA。 IO口空载电压为 3.253V。 通过编程设置QR10 电阻箱电阻从 10欧姆变化到 250欧姆。 测量不同负载电阻下对应的输出电压, 通过这个电压可以计算出 IO 端口输出电流。 在这个过程, 通过 DH1766也读取对应的单片机工作电流的变化。
-
静态工作条件:
-
工作电流
:34mA
工作电压
:3.295V
空载IO电压
:3.253V
▲ 图1.2.1 不同负载电阻与负载电压
rdim=[10.0000,15.0000,20.0000,25.0000,30.0000,35.0000,40.0000,45.0000,50.0000,55.0000,60.0000,65.0000,70.0000,75.0000,80.0000,85.0000,90.0000,95.0000,100.0000,105.0000,110.0000,115.0000,120.0000,125.0000,130.0000,135.0000,140.0000,145.0000,150.0000,155.0000,160.0000,165.0000,170.0000,175.0000,180.0000,185.0000,190.0000,195.0000,200.0000,205.0000,210.0000,215.0000,220.0000,225.0000,230.0000,235.0000,240.0000,245.0000]
vdim=[0.4838,0.7195,0.9516,1.1740,1.3828,1.5722,1.7355,1.8778,1.9993,2.0989,2.1872,2.2613,2.3275,2.3854,2.4360,2.4816,2.5223,2.5588,2.5938,2.6199,2.6502,2.6754,2.6988,2.7200,2.7395,2.7578,2.7750,2.7909,2.8059,2.8178,2.8329,2.8426,2.8542,2.8652,2.8758,2.8857,2.8937,2.9026,2.9116,2.9223,2.9300,2.9374,2.9445,2.9511,2.9575,2.9638,2.9698,2.9756]
idim=[0.0821,0.0821,0.0817,0.0807,0.0801,0.0799,0.0780,0.0764,0.0747,0.0728,0.0711,0.0694,0.0678,0.0664,0.0649,0.0638,0.0623,0.0610,0.0601,0.0591,0.0593,0.0583,0.0573,0.0567,0.0559,0.0552,0.0547,0.0539,0.0531,0.0525,0.0521,0.0516,0.0511,0.0508,0.0502,0.0498,0.0506,0.0500,0.0497,0.0491,0.0489,0.0487,0.0481,0.0479,0.0475,0.0472,0.0470,0.0465]
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2024-01-31
#
# Note:
#============================================================
from headm import *
from tsmodule.tsvisa import *
import serial
from _ast import Or
from serial.serialutil import SerialException
#------------------------------------------------------------
sport = serial.Serial()
sport.baudrate = 115200
sport.timeout = 0.05
try:
sport.port = 'COM5'
except:
printf('Set sport port COM5 error. ')
try:
sport.open()
except serial.serialutil.SerialException:
printf('Open sport port COM5 error.')
else:
printf('Open sport port COM5 Ok.')
#------------------------------------------------------------
dm3068open()
rdim = list(range(10, 250, 5))
printf(rdim)
vdim = []
idim = []
for r in rdim:
sport.write(b'AT+USER.SP=%5.1f\n'%r)
time.sleep(1.5)
call = dh1766call1()
i = call[2]
v = dm3068vdc()
vdim.append(v)
idim.append(i)
printff(r, i, v)
tspsave('measure', rdim=rdim, vdim=vdim, idim=idim)
plt.plot(rdim, vdim, lw=3)
plt.xlabel("R(mega)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
通过负载电压和电阻计算出 IO端口输出电流。 绘制 IO 输出电流与输出电压。 可以看到随着输出电流增加, IO端口电压也下降。 特别是当输出电流超过40mA 之后, 输出电压下降速度急剧上升。 这是在不同负载电阻下, 绘制出 IO 端口输出电流 以及 单片机工作电流增加量。 可以看到单片机工作电流的增加与IO口输出电流之间基本上是符合的。 之所以出现这些差异, 一部分原因 是因为 DH1766 回读到输出电流具有一定的误差。 由此也验证了单片机IO端口为高电平时, 输出的电流等于工作电流的增加。
▲ 图1.2.2 不同输出电流对应输出电压
▲ 图1.2.3 IO输出电流与工作电流增加
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST2.PY -- by Dr. ZhuoQing 2024-01-31
#
# Note:
#============================================================
from headm import *
rdim, vdim, idim = tspload('measure', 'rdim', 'vdim', 'idim')
I0 = 35
iodim = [v/r*1e3 for v,r in zip(vdim, rdim)]
didim = [i*1e3-I0 for i in idim]
plt.plot(rdim, iodim, lw=3, label='IO 输出电流')
plt.plot(rdim, didim, lw=3, label='工作电流增加')
plt.xlabel("R(omega)")
plt.ylabel("Current(mA)")
plt.grid(True)
plt.legend(loc="upper right")
plt.tight_layout()
plt.show()
#------------------------------------------------------------
'''
plt. plot(iodim, vdim, lw=3)
plt.xlabel("IO Current(mA)")
plt.ylabel("IO Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
'''
#------------------------------------------------------------
#------------------------------------------------------------
# END OF FILE : TEST2.PY
#============================================================
※ 总 结 ※
本文测试了单片机在不同的IO电阻负载下, 它的IO端口输出的电流, 与单片机的工作电流之间的关系。 数值上显示, IO口在高电平下输出的电流与单片机工作电流的增加是对应着的。 这也给后面对单片机IO口输出电流的测量提供了实验基础。
■ 相关文献链接:
● 相关图表链接: