一个“优秀”研发工程师的乐——原来是电源惹的祸

in #cn-stem6 years ago (edited)

昨天,我在一个“优秀”研发工程师的苦——可能又是堆栈惹的祸里面说,设计的仪表碰到了莫名的MCU复位问题,昨天测试了整整大半天,结果还是没有确诊,内心很是苦恼,没办法,只能暂且放过它(实际上是放过我自己)。

我之所以写这方面的心得,一方面是记录一下心得,日后备用;另一方面也是想让非研发人员能够进一步了解研发的过程,满足一下各位的好奇心。其实,很多时候我们研发中寻找/分析/解决问题的整个过程,对于一般日常生活的处理也是有不少借鉴意义的。

接下来我就描述一下昨天没有解决的这个问题,今天是如何解决的。

今天的关键点是这幅图:

环境描述:

昨天是元旦过后第一天上班,公司整整空了4天,暖气怎么打室温都上不来,只有10℃,内心冰冷加上外部低温,魔都的冬季魔法攻击让我像一条快要冻僵的蛇,生无可恋。

我早早地下班回家取暖,心中郁闷。

今天早上开始忙别的项目调试,一直到下午才忙完。因为昨天室温太低,我京东买了个取暖器,早上就到了,所以一整天室温在20℃以上,人还是挺舒服。


过程表现:

终于忙完了,我瘫坐在椅子上,无意中瞟到了昨天莫名复位的meter。我随手拿起来,按了开机键,奇迹发生了——昨天几百次的测试都没出现的状况,竟然出现了!!!

精神一振,我坐直了身体,连续开关了几次,几乎次次都复位!!!

这简直就是上天赐予我的礼物,我立即连上仿真器,打开PC调试软件,想看看到底是什么原因导致的复位。

可是,就在我信心满满debug要把虫子捉出来的时候,却再也没有出现过复位现象。

“TNND”,我心里暗骂一声,想,莫不是因为我没有给克劳德·艾尔伍德·香农烧纸拜会过,上天才会这样对我?

我拔下仿真器,重新开机测试,结果meter又复位了!!


找到规律:

这似乎有了规律,我反复插拔仿真器进行测试,结果发现:

也就是说,只要硬件上连接仿真器,即使PC不运行调试程序,meter也不会复位。

只要有规律,事情就好办。仿真器能治病啊!昨天已经排除了堆栈问题,因此,目前看来像是硬件问题而非软件问题。


确诊问题:

仿真器和MCU有4个连接引脚:

为了确诊是硬件问题,需要把这4个引脚中唯一一个有可能和软件有关的引脚BKGD排除在外,我将BKGD这根脚掰弯,只让仿真器连接VCC,GND,RST3根引脚,发现表现是一样的。

这就确诊了,100%是硬件问题。

仿真器的VCC同时也给mcu供电了,或者说,仿真器vcc引脚内部的电容同时也起到了滤波(蓄水池)的作用,因此接仿真器的时候,vcc不怎么下跌。

硬件问题相对比较好办,因为它就在那里,一般用示波器就能解决问题。

我拔掉仿真器,在开机复位时刻测量RST引脚波形,如下:

再量一下VCC波形,其形状和RST引脚类似,同样有2根下跌尖峰。而且VCC下跌的时候,最低电压跌到了1.8V以下。

这个就非常明确了,是因为开机的时候,VCC电源下跌,跌到了1.8V以下,导致了MCU复位。


寻找病因:

接下来,就是要找找电压下跌的原因了。

meter使用4节电池供电,几乎所有的元件工作电压是3.3V,因此使用一颗CMOS VOLTAGE REGULATOR U6来获得3.3V电压,具体线路如下:

前置滤波电容100uF,后置滤波电容20uF,这样的应用问题不大。

难道是U6供电能力不足而导致输出电压下跌?查一下U6的datasheet,参数如下:

输出能力大于50mA,而meter实际功耗如下:

  • 蓝牙模块耗电:21mA左右;
  • 背光耗电:10mA;
  • 测量模块:<5mA, 可以看出,耗电远小于50mA,所以供电能力是没有问题的。

而且,背光的电源是直接连接的Vbat,不是U6输出的3.3V,和这个下跌关系不大。

蓝牙供电线路开关如下:

可以看出,为了避免三极管Q10导通的瞬间对C14进行瞬间大电流充电,还使用了电感L2进行滤波,防止导通瞬间电流过大而影响U6输出电流下跌。

这在当初设计的时候都是充分考虑过的。

实际上,一般使用三极管/MOS管控制较大功率模块的时候,应该使用软启动来驱动三极管/MOS,像下图这样的驱动方式:

也就是让被控电压缓慢上升,以避免瞬间大电流。

只是蓝牙模块也包含一个MCU,上电时间过长的话,容易引发复位不完全的问题,因此在这里并没有使用软件启动的方式。

这样看来,单纯的从硬件分析似乎走入了死胡同。

我又重新回到软件部分来考虑潜在风险,仔细看了几遍以后,发现有一个地方可以改进:
我的设计是按键开机以后,有一个void module_init(void)函数,所有的模块初始化都在这里进行,部分代码如下:

也就是说,2个耗电较大的模块背光和蓝牙模块,几乎同时开始供电,消耗电流大约在30mA以上。

虽说背光是直接由Vbat供电,但是瞬间打开也会引起电池电压下跌,蓝牙模块的瞬间上电,也会引起U6 LDO的瞬间输出下跌,2个因素叠加,就有可能引发足以让MCU复位的电压。

为了确认问题,我修改了程序,蓝牙模块始终不上电,再开关机进行测试,发现再也没有出现过复位的情况。

这应该是100%确诊问题了。


解决方法:

最终我把蓝牙模块的上电初始化放在背光打开2秒以后,这样错开了瞬间大电流同时发生的情况,就再也没有出现过meter复位的情况了。

又解决了一个问题,作为产品的亲爹我还是很开心的。乐啊!!!!

这是不是说明作为一个工程师,勉强还称得上“优秀”二字啊……

至于为什么昨天测试了几百遍,都没有出现问题,而今天几乎次次都能出问题,各位有兴趣的话也可以考虑一下,是有鬼出没吗?是有什么不可抗力吗?是灵异现象吗?

下次有机会说说。

这就是一个研发工程师的日常工作状态,希望大家看了以后,能够有所启发,最重要的,是对身边的工程师好一点,再好一点,哈哈~~


参考文献:Seiko Instruments Inc. S801XX datasheet


希望喜欢我文字的人,去看看这个吧,说说对我的看法,请我吃星星

,谢谢啦~
我的 @ReviewMe 凭证留言板!

Posted using Partiko iOS

Sort:  

恭喜你!您的这篇文章入选 @justyy 今日 (2019-01-05) 榜单 【优秀的文章】, 回复本条评论24小时内领赏,点赞本评论将支持 @dailychina 并增加将来您的奖赏。

Congratulations! This post has been selected by @justyy as today's (2019-01-05) 【Good Posts】, Steem On! Reply to this message in 24 hours to get rewards. Upvote this comment to support the @dailychina and increase your future rewards! ^_^

哈哈哈,难得被富根的机器人选中啊!顺便在这里怎一下,代理600sp会是什么待遇?

Posted using Partiko iOS

Thank you for using CryptoSicko!

Well done and thank you for joining and supporting my subscription based upvoting bot that provides you with daily upvotes in exchange for your spare STEEM POWER.
Delegation links for CryptoSicko
100SP 250SP500SP

Congratulations! This post has been upvoted from the communal account, @minnowsupport, by killer from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.

If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.

Thank you so much for participating the Partiko Delegation Plan Round 1! We really appreciate your support! As part of the delegation benefits, we just gave you a 3.00% upvote! Together, let’s change the world!

Congratulations @julian2013! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 5500 comments. Your next target is to reach 6000 comments.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

You can upvote this notification to help all Steemit users. Learn why here!

吃了吗?来 @steemgg 玩游戏吧,决战到天亮如果不想再收到我的留言,请回复“取消”。

YOU JUST GOT UPVOTED

Congratulations,
you just received a 10.78% upvote from @steemhq - Community Bot!

Wanna join and receive free upvotes yourself?
Vote for steemhq.witness on Steemit or directly on SteemConnect and join the Community Witness.

This service was brought to you by SteemHQ.com

聚贤阁群友互动,您中奖了! 聚贤阁小乐透传送门





This post has been voted on by the SteemSTEM curation team and voting trail in collaboration with @utopian-io and @curie.

If you appreciate the work we are doing then consider voting all three projects for witness by selecting stem.witness, utopian-io and curie!

For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!

Thanks!

Posted using Partiko iOS

Hi @julian2013!

Your post was upvoted by Utopian.io in cooperation with @steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

Contribute to Open Source with utopian.io

Learn how to contribute on our website and join the new open source economy.

Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV

Coin Marketplace

STEEM 0.18
TRX 0.13
JST 0.029
BTC 57808.87
ETH 3061.38
USDT 1.00
SBD 2.33