前几天一个工程师向我反馈他测得如下电路MCU IO口的电压不是3.3V,只有2V多。
IO配置的是输入功能,无上下拉。最初我不太相信这个结果,后来自己用万用表实际测量了下,还真是这个结果
这是咋回事呢?不应该电压就是3.3V吗?后来经高人指点可能是IO口输入漏电流的原因,输入漏电流在MCU数据手册中符号为Ilkg,lkg表示Input leakage current。
IO口的内部是CMOS器件,因为 CMOS 是高输入阻抗器件, 理想状态下IO接一个高电平是没有输入电流的。但实际情况因为存在一个输入阻抗,所以还是会有微弱的电流,这个电流叫做漏电流。
那么电压降低到2.48V是不是就是因为输入漏电流的原因呢?
答案是否,因为如果电压就是2.48V,那么漏电流有(3.3V-2.48V)/3.6M=227nA,这个和上述数据手册最大100nA对不上啊!
真实的原因是万用表自身的内阻导致的,就算上拉电阻不接MCU的IO,直接用万用表测电压下面,测出来也是2.4几V,这也可以验证和IO输入漏电流无关。
万用表在测量电压时,内部具有电阻,通常被称为输入阻抗。不同型号和品牌的万用表有不同的输入阻抗,一般在兆欧姆(MΩ)的数量级。
通常,万用表的输入阻抗可以在用户手册或仪器上找到。一些典型的值包括10 MΩ或更高。
这个输入阻抗会影响测量结果,特别是在测量高阻值电路时,比如对上述电路就会产生很大影响,因为上拉电阻太大了,
假设万用表输入阻抗是10 MΩ,实际测量电压值为10/(3.6+10)*3.3V=2.43V。
对于一般的上拉电阻比如1KΩ,实际测量电压值为10000000/(1000+10000000)*3.3V≈3.3V,几乎无影响了。
对于上述的两个电路,要想得到准确的电压值,只能选用更高输入阻抗的测量仪器。我这里选用了泰克DMM4050来测试第一个电路,同时要注意设置为高输入阻抗模式,因为它默认也是10MΩ。这时候测得的电压值如下:
启用高输入阻抗的设置方法可以在说明书中找到:
设置之后阻抗会超过10GΩ,这时测的电压就准确了,测得的电压相比3.3V也有下降,只是不会再下降那么多,这时再来估算一下漏电流,(3.3V-3.10V)/3.6M=56nA,这就符合实际了。
如果测第二个电路电压,那电压几乎就是3.3V。由此可见不同的测量仪器差别还是挺大的。