STEVAL-IDB007V1不处理DIO0~DIO3时电流不稳定的问题原因
[复制链接]
在挑战赛的开发过程中遇到一个问题 如果BlueNRG-1进入休眠模式时不对外部IO做处理的话电流会高低变化很不稳定 高的时候能过到几毫安,低的时候9uA左右 正常情况下BlueNRG-1休眠后加上传感器的待机电流总电流应该在10uA以下为正常 以前遇到过类似问题是其它单片机由于单片机未使用的I/O没有做处理产生 这次开始怀疑也是单片机I/O的问题,后来经过分析发现问题出现在LSM6DS3而不是BlueNRG-1 测试的过程是非常痛苦的断断续续我花了很多天才算找到原因 为了找到STEVAL-IDB007V1这块板子的这个问题我甚至都好几次怀疑自己是不是年纪大了,不适合再干这行了 不过还好,不管走了多少弯路花了多少时间,最后这部分问题总算找到了 测试的过程中在STEVAL-IDB007V1上留下很多“硬伤” 包括割线和打孔(因为4层板有的走线在内层,需要打孔将走线割断) 下边是我在查找原因时做的记录 断断续续花了很多天时间,当时大脑一片混乱,整理后一些地方还是很乱
开始我使用下边的拓扑来测量开发板的电流 在LSM6DS3、LPS25HB处于掉电状态,BlueNRG-1处于休眠模式时 高的时候能过到几毫安,低的时候9uA左右 分析后确定需要将DIO0~DIO3这4个引脚都做处理(找到问题后把板子割断的线都恢复后又发现DIO1不需要处理,DIO1不处理时为高电平),上拉或者下拉才能使电流稳定下来 下面是其它I/O悬空,指定I/O接地时的电流变化 在原理图里看到DIO0~DIO3主要和LSM6DS3连接,对应为SPI的CS,SCLK,SDI,SDO 除了DIO0~DIO3可以看到BlueNRG-1的DIO12也是和LSM6DS3直连的,如果问题出在LSM6DS3为什么DIO12就不需要处理呢? 通过分析Gerbre文件找到传感器的供电路线 通过切断PCB上的走线断开传感器的供电与VBLUE的连接 测量VBLUE网络的电流还是有变化,最高为600uA左右,最低还是9uA 和下边这个没断传感器电源的变化比起来已经好一些了 LPS25HB和LSM6DS3在PowerDown模式下的电流加起来应该有6.5uA左右,切断传感器的供电后空闲电流还是9uA左右,为什么电流没有降下来呢? 测量传感器电源(已经断开的传感器分部的网络我们给它取名叫VBLUE_SENSOR),会有2.5V左右的电压(这个数值是在不断变化的),这个供电又是哪来的? 测量DIO12为0V,测量DIO4、DIO5(LPS25HB的SCL和SDA)等于VBLUE_SENSOR电压 测量DIO0、DIO2、DIO3为0V,测量DIO1等于VBLUE_SENSOR电压 再检查看到断开的VBLUE_SNEOSR还和U10连接 原理图中SPI还同时和STG3692通过0欧电阻连接 分析了一下应该不是这个原因,因为断开VBLUE_SENSOR电源时会有的2.5V电压 主要怀疑对象是DIO1和DIO4、DIO5,这里没有能给这3个I/O提供供电的地方 后来查看实物图,对应的电阻并没有焊接 可以肯定问题和STG3692无关 再看原理图找到一个可疑对象PUSH2,I2C2_DATA通过一个上拉电阻和这边的VBLUE连接,测量了一下R54两端的电压,一端为3.3V一端为2.xV 因为官方提供的原理图不能通过网络标号检索,我一搬通过BlueNRG-1, BlueNRG-2 development kits en.DM00298232.pdf文档检索网络标号 遗憾的是手册里的Figure 29: STEVAL-IDB007V1 buttons and LEDs是以图片的形式提供的,无法通过网络标号检索到,所以它经常会被遗漏掉 下一步断开R54和VBLUE的连接,再测量电压,断开后R54两端都是2.xV了,电不是通过R54来的? 按住开发板上的复位键再测量DIO1、DIO4、DIO5和VBLUE_SENSOR电压都变成0V,松开上电后又会恢复到2.xV 打开示波器测量DIO4和DIO5的电压,只看到电压正好随电流的增加而降低,还是找不出原因 直接给VBLUE1供电,同时将RESETN拉到VDD,电流600 uA 将VBLUE_SENSOR与GND连接,空闲电流为47uA左右 DIO05、DIO04分别与GND短接时电流为126.7uA,同时将DIO5和DIO4连接到GND时的电流为75uA DIO1与GND短接后的电流为249uA VBLUE_SENSOR连接GND、VBLUE和空闲时的电流情况 VBLUE_SENSOR接GND上电流42uA左右,唤醒再休眠后电流无变化 如果传感器的电流基本都通过VBLUE_SENSOR网络获取,VBLUE_SENSOR接地时的电流为42uA,断开VBLUE_SENSOR时传感器能从VBLUE_SENSOR网络获得的电流也不会超过42uA才对 GPIO1接GND,电流248uA左右,唤醒再休眠电流会升高 将GPIO1接GND时电流为248uA,不断开GPIO1与GND的连接,同时再将BLUE_SENSOR与GND连接,这时电流会降到42uA 将GPIO1接GND时VBLUE_SENSOR的电压为1.5V,再将DIO4或DIO5接GND,VBLUE_SENSOR的电压为0.5V 最后用万用表测量DIO11时不小心将它和U10的pin5短路,发现电流一下跳到600uA DIO11和U10的pin5短路时的电流情况 再测试发现如果将U10的pin4(BlueNRG-1的DIO11)与GND连接电流为42uA,将pin5与GND连接电流无变化为9uA,同时将pin4和pin5连接到GND电流为42uA 但只要断开与GND的连接只让pin4与pin5短接电流就会达到600uA 如果把VBLUE_SENSOR与GND连接,电流为42uA,再短接U10的pin4和pin5电流无变化 使用万用表测量VBLUE_SENSOR到GND的电流为43uA,VBLUE整体电流消耗为45.75uA,测量U10的pin4到GND的电流为48uA,VBLUE整体电流消耗为43.95 用万用表测试U10的pin4电压高于VBLUE_SENSOR电压 VBLUE_SENSOR与GND短接在VBLUE_SENSOR 后来在BlueNRG-1的数据手册里找到DIO11的说明 DIO11在休眠状态下为上接模式 上拉电阻为81KhOM对应40uA 查看ST2378E的数据手册看到它的每一个I/O都通过上拉9K上拉电阻接在VL上 这解释了VBLUE_SENSOR的电压是怎么来的 电流通过81K的上拉电阻从BlueNRG-1的VDD流向DIO11,再通过ST2378E的9K上拉电阻流向VBLUE_SENSOR IO11的上拉电阻虽然可以通过代码禁止 不过在进入低功耗模式后又会恢复上拉功能 /** Init Structure */ GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Input; GPIO_InitStructure.GPIO_Pull = DISABLE; GPIO_InitStructure.GPIO_HighPwr = DISABLE; GPIO_Init(&GPIO_InitStructure); 断开U10的VDD后电流降到正常状态,平均电流为752nA,这才应该是不接传感器时BlueNRG-1应该有的休眠电流 同时测量VBLUE和VBLUE_SENSOR的电流能看到电流主要都消耗VBLUE_SENSOR电源网络上了
- VBLUE_SENSOR的电源网络上有2颗传感器,分别是LSM6DS3和LPS25HB,从对引脚的配置情况来看电流应该是LSM6DS3消耗的,因为LPS25HB只连接了I2C引脚 为了验证这种判断需要把LSM6DS3和LPS25HB的电源断开,从GERBER文件可以看到LSM6DS3和LPS25HB的电源是通过中间的GND(绿色)和PWR(青色)层连接的 如果想断开连接就需要在指定位置打孔来破坏内层连接 下边是打孔后的PCB板 去掉LSM6DS3后VBLUE和VBLUE_SENSOR的电流情况,可以看到2个电源网络的电流都降下来了 到这里STEVAL-IDB007V1在BlueNRG-1休眠时的电流不稳定的问题算是找到了,问题出在LSM6DS3那里 具体LSM6DS3为什么会出现这个问题,因为LSM6DS3在STEVAL-IDB007V1上的的pin2和pin3直接与地连接无法断开 我准备在网上买了一块LSM6DS3的开发板用来测试,希望能找到原因 另外还一个问题是VBLUE_SENSOR在通过DIO11供电时能够从DIO11那里获得的最大电流为40uA左右,可是为什么从VBLUE那里造成的电流消耗却能达到600uA呢?
|