8057|28

9792

帖子

24

TA的资源

版主

楼主
 

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呢?


最新回复

好的 多谢版主最近的帮助,这个问题我们改了一版电路板,现在好了,功耗休眠不进行广播的话6ua左右 1秒1次的话16ua左右。 这个广播唤醒自动配置IO的问题我们问下ST原厂,看看他们有什么答复,到时候再贴出来   多谢   详情 回复 发表于 2019-8-23 17:04
点赞 关注(1)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

664

帖子

104

TA的资源

纯净的硅(中级)

沙发
 
本帖最后由 gs001588 于 2018-3-16 12:14 编辑

littleshrimp版主研究得太细了,寻根究底。
我当时只想着SPI_CS必须接高,担心片选有效的话,传感器的SPI输出线上会上数据。其它的就没多想了,SPI_CLK、SPI_IN、SPI_OUT全接低了。也许SPI_IN都不需要处理。
IO12的内部上拉到是注意到了,但是都没看LSM6DS3的INT1是什么电平有效,有没有开启,想着只要传感器关闭后,不产生中断就不会对这个管脚有影响。现在想想实属不应该,得向版主学习。
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼主厉害,那个显示波形的软件是什么软件?看起来效果不错

点评

Simplicity Studio,配合silabs的单片机开发板可以实现电流测量 主控是使用STM32F103单片机实现的,有兴趣也可以自己DIY一个  详情 回复 发表于 2018-3-19 12:52
 
 
 

回复

9792

帖子

24

TA的资源

版主

4
 
suwei337008 发表于 2018-3-16 15:19
楼主厉害,那个显示波形的软件是什么软件?看起来效果不错

Simplicity Studio,配合silabs的单片机开发板可以实现电流测量
主控是使用STM32F103单片机实现的,有兴趣也可以自己DIY一个
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

5
 

楼主威武,有个问题请教一下,有没有深入研究过唤醒后引脚配置问题。

我设备用IO1 IO2 1O3 来控制一个共阳极的三色灯,1秒广播一次 。

我看资料显示广播也能唤醒单片机 

实测 没次唤醒后灯都会微弱闪一下 ,用示波器也看到了瞬间的低电平,程序睡眠后和醒来没有其他事件的话我是不会操作IO口的。

这种现象我感觉是唤醒后单片机接管IO 引起的。

我后来换了共阴极LED 灯的闪烁现象没了。

但是不知道具体原因

点评

是三个引脚都有瞬时低电平还是个别引脚有?  详情 回复 发表于 2019-8-12 12:39
 
 
 

回复

9792

帖子

24

TA的资源

版主

6
 
baixiukai 发表于 2019-8-12 11:55
楼主威武,有个问题请教一下,有没有深入研究过唤醒后引脚配置问题。

我设备用IO1 IO2 1O3 来控制一个共 ...

是三个引脚都有瞬时低电平还是个别引脚有?

点评

是这个几个睡眠后配置成高电平的都有这个现象  详情 回复 发表于 2019-8-12 14:12
现在测试看,是这样的,IO0-IO10, 我睡眠后若果配置成高电平,唤醒后就会有瞬间拉低的过程。   我放了个图片  这是这几个引脚的情况  1秒广播一次 ,就会发现引脚1秒瞬间拉低一下恢复高  详情 回复 发表于 2019-8-12 14:06
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

7
 
littleshrimp 发表于 2019-8-12 12:39 是三个引脚都有瞬时低电平还是个别引脚有?

现在测试看,是这样的,IO0-IO10,

我睡眠后若果配置成高电平,唤醒后就会有瞬间拉低的过程。

 

我放了个图片  这是这几个引脚的情况 

1秒广播一次 ,就会发现引脚1秒瞬间拉低一下恢复高电平。

 

BSZW.png (141.68 KB, 下载次数: 0)

BSZW.png
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

8
 
littleshrimp 发表于 2019-8-12 12:39 是三个引脚都有瞬时低电平还是个别引脚有?

是这个几个睡眠后配置成高电平的都有这个现象

点评

我使用官方的BLE_Beacon例程做了一下你说的实验 广播间隔1S,先初始化DIO6输出模式,上拉,输出高电平 然后在主循环“BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);”的后边加一句翻转DIO6的代码  详情 回复 发表于 2019-8-12 16:28
 
 
 

回复

9792

帖子

24

TA的资源

版主

9
 
baixiukai 发表于 2019-8-12 14:12 是这个几个睡眠后配置成高电平的都有这个现象

我使用官方的BLE_Beacon例程做了一下你说的实验

广播间隔1S,先初始化DIO6输出模式,上拉,输出高电平

然后在主循环“BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);”的后边加一句翻转DIO6的代码

用示波器可以看到每1秒翻转一次

然后注释掉主循环的翻转代码用示波器观察DIO6始终为高电平,没有跳变

 

 

测试工程

BLE_Beacon.rar (32.65 KB, 下载次数: 2)

点评

万分感谢。 很无奈,是不是跟配置有关系呢? 我主程序 都屏蔽掉了。 [attachimg]427681[/attachimg] 结果引脚状态是这样的 [attachimg]427679[/attachimg] 1秒一次的广播间隔,引脚配置 [attachimg  详情 回复 发表于 2019-8-12 17:47
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

10
 
本帖最后由 baixiukai 于 2019-8-13 10:44 编辑

上次的回复格式有问题占的篇幅太长了,我删除了

image.png (95.49 KB, 下载次数: 0)

image.png

image.png (1.12 MB, 下载次数: 0)

image.png

image.png (57.81 KB, 下载次数: 0)

image.png

image.png (78.89 KB, 下载次数: 0)

image.png

image.png (70.73 KB, 下载次数: 0)

image.png

点评

从你示波器上看是高电平脉冲,你把led配置成上拉了  详情 回复 发表于 2019-8-13 09:43
 
 
 

回复

9792

帖子

24

TA的资源

版主

11
 
baixiukai 发表于 2019-8-12 17:47 littleshrimp 发表于 2019-8-12 16:28 我使用官方的BLE_Beacon例程做了一下你说的实验 广播间隔1S,先初 ...

从你示波器上看是高电平脉冲,你把led配置成上拉了

点评

实际测试 这个高电平的信号持续大概2.7ms左右。  详情 回复 发表于 2019-8-13 10:45
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

12
 
littleshrimp 发表于 2019-8-13 09:43 从你示波器上看是高电平脉冲,你把led配置成上拉了

实际测试 这个高电平的信号持续大概2.7ms左右。

点评

你把GPIO_Pull = ENABLE去掉,测试一个没有连接其它电路的GPIO看下  详情 回复 发表于 2019-8-13 10:48
 
 
 

回复

9792

帖子

24

TA的资源

版主

13
 
baixiukai 发表于 2019-8-13 10:45 实际测试 这个高电平的信号持续大概2.7ms左右。

你把GPIO_Pull = ENABLE去掉,测试一个没有连接其它电路的GPIO看下

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

14
 
littleshrimp 发表于 2019-8-13 10:48 你把GPIO_Pull = ENABLE去掉,测试一个没有连接其它电路的GPIO看下

版主感谢这两天的帮助,能加一下微 信吗,15215326245.。最近啊搞一个项目,功耗和异常问题比较多。感觉看资料也和配置的差不多就是实际现象着实让人难以接收

 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

15
 

其他脚悬空也试了,电平确实也是跳变,广播就跳变。你发的beacon例程 引脚状态应该不对,睡眠后IO6不能正常保持住原来的高或者低电平。睡眠后是高阻态。

点评

开始的时候我想使用外部电阻做上下拉 后来在不使用外部电阻时没有出现你遇到的那个问题就没理测试 如果没有接电阻都不会出现你的问题,这个问题就和电阻应该没有关系     要不你用BLE_Beac  详情 回复 发表于 2019-8-19 21:08
 
 
 

回复

9792

帖子

24

TA的资源

版主

16
 
baixiukai 发表于 2019-8-19 14:20 其他脚悬空也试了,电平确实也是跳变,广播就跳变。你发的beacon例程 引脚状态应该不对,睡眠后IO6不能正常 ...

开始的时候我想使用外部电阻做上下拉

后来在不使用外部电阻时没有出现你遇到的那个问题就没理测试

如果没有接电阻都不会出现你的问题,这个问题就和电阻应该没有关系

 

 

要不你用BLE_Beacon例程改一下,能复现你遇到的问题,然后我按照你的方法测试一下,帮你找找原因

点评

[attachimg]428737[/attachimg]测试IO配置 [attachimg]428738[/attachimg]修改广播间隔 [attachimg]428739[/attachimg]主函数配置 [attachimg]428740[/attachimg] 实际测试1秒一次的引脚波动,这是我用  详情 回复 发表于 2019-8-20 11:55
我利用开发板实测是这样的 [attachimg]428730[/attachimg]利用Beacon例程修改的 。 [attachimg]428731[/attachimg]添加IO配置代码 [attachimg]428732[/attachimg]修改广播间隔 [attachimg]428733[/attac  详情 回复 发表于 2019-8-20 11:52
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

17
 
littleshrimp 发表于 2019-8-19 21:08 开始的时候我想使用外部电阻做上下拉 后来在不使用外部电阻时没有出现你遇到的那个问题就没理测试 ...

我利用开发板实测是这样的

利用Beacon例程修改的 。

添加IO配置代码

修改广播间隔

主程序加入测试代码

实测放大后是这个波形。感觉怪怪的。

 

BLE_Beacon_b.zip

3.08 MB, 下载次数: 2

点评

我试了一下你这个代码 while里有一句“GPIO_ToggleBits(GPIO_Pin_6);” 把它注释掉DIO6就会一直低电平  详情 回复 发表于 2019-8-20 16:54
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

18
 
littleshrimp 发表于 2019-8-19 21:08 开始的时候我想使用外部电阻做上下拉 后来在不使用外部电阻时没有出现你遇到的那个问题就没理测试 ...

测试IO配置

修改广播间隔

主函数配置

实际测试1秒一次的引脚波动,这是我用开发板测试的结果

 
 
 

回复

869

帖子

0

TA的资源

禁止发言

19
 
其他脚悬空也试了,电平确实也是跳变,广播就跳变

点评

你也试了?我好像发现一个规律,就是IO0到1O8和IO14睡眠前配置成输出低电平,广播唤醒后就不跳变 IO9-IO11内部有上拉睡眠前要配置成高电平,唤醒后部跳变。 但是一直没找到相关的确切说明  详情 回复 发表于 2019-8-20 13:20
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

20
 
zhuyebb 发表于 2019-8-20 12:59 其他脚悬空也试了,电平确实也是跳变,广播就跳变

你也试了?我好像发现一个规律,就是IO0到1O8和IO14睡眠前配置成输出低电平,广播唤醒后就不跳变

IO9-IO11内部有上拉睡眠前要配置成高电平,唤醒后部跳变。

但是一直没找到相关的确切说明

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表