测量NUCLEO-L4R5ZI的工作电流
测量之前先了解一下NUCLEO-L4R5ZI的电源电路
NUCLEO-L4R5ZI的供电比较灵活,可以选择使用板子上的ST-LINK供电或者通过外部的VIN、E5V和+3.3V供电
使用ST-LINK供电时电源通过CN1调试口的USB引入5V,经过U4(ST890CDR电源开关)再经过JP6(电源选择跳线)最后通过U6(LD39050PU33R低压差稳压器)将5V转换为3.3V
使用VIN时7V到12V的外部供电通过CN8的pin15和CN11的pin24接入,经过U5(LD1117S50TR低压差稳压器)将7V~12V降为5V再经过JP6,最后通过U6将5V降为3.3V
E5V通过CN11的pin6引入外部5V,经过JP6再经过U6将5V降为3.3V
+3.3V通过CN8的pin7和CN11的pin16引入3V~3.6V直接为MCU供电
我准备用来测试电流的工具直接有3.3V输出,所以可以直接将电源接在开发板的+3.3V引脚上
不过直接使用+3.3V为板子供电有些需要注意的地方,一是使用外部3.3V供电板载的ST-LINK是不工作的
可以选择把ST-LINK部分掰掉,或者断开JP3跳线和SB6焊盘
断开JP3的原因是因为ST-LINK不工作时会导致NRST引脚处于低电平状态,会把STM32L4R5的复位引脚拉低导致单片机无法工作
断开SB6是因为+3.3V经过SB6连接到U6,如果不断开会造成3.3V经过U6回流到ST-LINK电路,使测试的电流并非STM32L4R5的实际工作电流
对于新到手的评估板,无论是剪掉ST-LINK或者焊掉SB6都是一件比较心疼的事
本着尽量保留原板结构的原则再看看还有没有其它办法可以不对板子进行改动实现电流测量
可以看到+3V3是经过JP5跳线连接到VDD上,如果可以直接为VDD供电,然后断开JP5跳线这个问题就能完美解决
前提是+3V3没有供电不会对板子上的其它功能产生影响
+3V3还经过SB5跳线连接到+3V3_PER上
在原理图里查找了一下+3V3和+3V3_PER
看到+3V3除了经过JP5连接到VDD外没有其它连接
+3V3_PER除了连接到JLINK的PA0外基本都是为板子上的LED供电,测试STM32L4R5时不需要用到LED,所以+3V3_PER不连接也不会对测量产生影响
另外有一个问题,板子的IOREF是连接在VDD_MCU上的
VDD_MCU同时还为STM32L4R5的VDD1~VDD10供电,VDD_MCU经过SB154连接到VBAT
看了整个电路没见到有VDD到VDD_MCU和VBAT的连接,VDD_MCU是谁给供的电呢?
查看STM32L4R5的数据手册,找到VBAT部分的电路,看电路VBAT好像是通过一个单刀双掷开关在VDD和Backup domain之间切换
单刀双掷开关是由VDD domain控制的
看到这段解释,理解为VBAT是备用电源引脚,在VDD工作时开关切到VDD上可以为外部供电
VDD不工作时外部备用电源通过VBAT引脚为Backup domain供电
这也解释了为什么在电路图里没有看到VDD与VDD_MCU或者VBAT的连接,因为它是在内部自由连接的
查找VDD引脚看到VDD只在CN11的5脚上,而CN11接口在板子出厂时并没有焊接,直接把插针连接在CN11的5脚上会不稳定
继续查找VDD后看到VDD经过SB158->L3->SB152最终连接到AVDD上
用万用表测量一下VDD和AVDD证明是导通的,所以下一步就是通过给AVDD供电来测量STM32L4R5的电流
AVDD在CN10的pin1上,可直接将2.54插针插在CN10上为板子供电
别忘了下完程序测量时还要把JP3和JP5断开
解决了电路问题下面来看代码,工程的Examples\PWR目录下包含了很多用来测试低功耗的例程
完整目录为STM32Cube_FW_L4_V1.10.0\Projects\STM32L4R5ZI-Nucleo\Examples\PWR
和数据手册对照测一下电流
首先是Shutdown模式,我的万用表最小量程是100nA,手册上是STM32L4R5的电流是33nA
在Shutdown模式下电流太小,我的工具能力有限一直显示0,无法测量
评估板的电流测量也无法显示正常的电流情况,因为33nA太低了
接下来测Stop 2 with RTC,手册上是2.8uA,万用表实测3.0uA
使用评估板电流工具测量为3.12uA
Standbymode with RTC模式,数据手册为420 nA,万用表显示500nA
评估板为481.5nA
LPRUN模式运行频率为100KHz,数据手册上的电流为210uA(25摄氏度),实际测量为170uA左右,比数据手册上的还要低
使用图形化工具可以看出电流是不断变化的,最大188uA最小150uA
打开PWR_ModesSelection例程,这个例程里包含了大部分用来测试低功耗的模式
需要用串口指令控制会不太方便
在main函数的HAL_Delay(1000);下边加一句test_lprun_2mhz();让其上电就进入LPRUN 2MHz
测量电流为557.2uA
数据手册中为490uA,这个实际电流比手册中高了一些
将test_lprun_2mhz替换为test_run_range1_80mhz,编译后下载
测量电流为12.02mA
数据手册为11.5mA比较接近