我是老温,一名热爱学习的嵌入式工程师
, ]" H* q% R; M' c! D. T! p0 v关注我,一起变得更加优秀!
2 j, p. p% a6 J: |! d( g+ B, u最近遇到了一件糟心的事情,交付给客户现场运行了不到一个月的硬件定制产品,开始出现无规律的停机现象,已经影响到客户的生产线运作,客户已经开始炸毛了。
: I8 a6 w3 V) f3 w
k2osnhxxrie64059727823.jpg
4 _ ^0 ?) }7 l3 v5 b在跟客户进行了一通“友好”的电话沟通之后,我和嵌入式软件工程师李工,马上订机票飞往客户现场,一方面是为了安抚好客户情绪(现场挨批),另一方面是为了了解现场机器的运行情况。
+ Y: u8 A! i) N$ x( h根据停机现象,我们怀疑是设备在运行一段时间后,程序出现了偶发性卡死,然后外部看门狗会对机器进行强制复位,复位后的设备虽然能重启进入界面,但机械结构会从运行态切换为停止态。
) x1 \" E5 u0 Y' m(有些工业设备不允许上电就直接运行,需要重新人工开机)
1 }! E- y# U5 L+ _' A& Z为了找出程序跑飞时的栈调用情况,李工启用了 cm_backtrace 组件,然后结合 addr2line 对程序跑飞时的栈调用情况进行了分析。+ x( q* a6 ?' d6 D- C, e1 Z
因为停机无规律出现(后来发现,电机启动一瞬间出现的概率高一点),很不容易地抓取到两三次停机之后,我们发现程序有时候出现 HardFault,有时候出现 BusFault,并且跑飞的位置不固定。& j- I. Y( z3 ~* @5 @
根据李工的经验,他怀疑是硬件设计的问题,于是打电话给第三方的硬件工程师陈工。。。
: p5 N7 P% ?$ z. w6 Q2 i我:“李工,你跟陈工描述一下调试情况。”3 _: g% O* y+ Q; P
软件李工:“ 陈工,我们现场排查了,程序跑飞的位置不固定,这种情况可能是某个硬件的可靠性或者是信号干扰影响导致的~”。
( ?4 E$ ?4 C& I1 N2 _; |硬件陈工反驳道:“这完全不可能,硬件出厂时都是经过测试的,测试时都没出过岔子,是不是你软件内存溢出或者逻辑处理得不好?”
+ [; }- X1 ?7 q# m+ W软件李工开始不耐烦:“我已经把内存可能溢出的地方处理了,不是软件的原因啊,~”
4 K8 B C) ?5 M: c4 P* \硬件陈工急了:“这个硬件原理,我们以前也用过啊,也没出现过这种情况,你再找找软件原因。”; y3 s9 o$ q* @- p" b* {
。。。。。。(两人你一言我一语地争论起来,互不相让,反正都不承认各自的原因。)+ d' D! G4 b3 ]' m& D: T8 a6 Z
我:“这样,吵下去也无济于事,我先安抚好客户,回公司后我们马上复刻现场进行重新测试验证!”, e3 ]( A9 ^+ F5 A3 g/ i0 [
1gllhlimlva64059727923.jpg
" a& L5 w3 ]+ b. W! D. M(从客户现场回到公司后。。。)& X$ u% G: B3 j
现场出现问题的是一款工业三相电机控制器设备,采用 AC-220V 供电,里面有 AC 转 DC 电源模块,带有显示屏和联网功能,支持继电器输出和隔离光耦输入,支持 RS485 和 CAN 通信功能,设计框图如下。. d4 o x+ x. a
jn4jrmww0kr64059728023.png
9 S7 S$ p9 b, H. @' m- Q由于考虑到工业信号的实时性和多任务并发处理,李工设计嵌入式软件时,采用了 FreeRTOS 操作系统进行任务调度,而且还在外部SDRAM开启 Framebuffer 缓冲区,用来给GUI进行刷屏。. b0 |4 B5 M0 Z" T
为了减少内存溢出的风险,李工对各个数据缓冲区数组进行了优化,采用静态方式进行管理,并且每次写缓冲区时都进行数组范围判断,防止内存申请失败或者写缓冲区时出现数组越界操作。
6 z ^! B- p0 o& c我们从仓库里面领取了新的硬件设备做测试,一开始怎么也没办法复现出现场的停机现象,验证过程一度陷入了停滞。。。$ y9 C* ~/ k$ k0 L( m
ijwbfsmpwhjHurt59728123.png
: V! ^1 O" Q* s) A
但是,在设备连续不断电运行了差不多240个小时之后,事情似乎出现了转机,设备开始出现偶尔的看门狗复位重启,并且随着设备运行时间越长,出现得越来越频繁。(电机启动或者电磁阀吸合瞬间,特别容易出现): }" H2 j7 U' y, B) \/ H
查找方向开始转到硬件设计上。。。
$ I& y: C% ~3 V这款产品为了方便取电,陈工在硬件内部集成了开关电源,用隔离变压器和整流桥进行 AC 转 DC 处理,PCB 整体布局和布线,据说已经充分考虑 emc 和 EMI 。5 ?; U6 a' T/ L
我们重新检测这台运行了“很久”的设备的各个电源回路,发现当设备运行了一段时间之后,3.3V 的电源回路上就会出现一些噪声,纹波忽高忽低,特别是在电机启动或者电磁阀吸合瞬间,电源噪声可能达到 2~3V 以上。(不是每次噪声都会导致MCU复位,说明这款MCU还是挺“扛噪”的。)& K7 V# h, E3 I7 [1 [; Z3 n
amr0ttr4w3464059728224.png
4 ^$ ]4 |+ w! z
! [8 L# `# u( Q0 r+ L
5b4eydsrosu64059728325.png
( ]1 `# N+ A: |$ T$ y这对于 3.3V 供电的芯片来说可能是致命的,电源噪声很容易造成MCU和内存芯片的数据错乱,造成程序莫名其妙地跑飞~
8 K! e8 j( O5 r& x( `4 Q有见及此,陈工马上开始对硬件进行整改,优化硬件的各路电源环路设计,将输入回路、辅助绕组回路和输出回路的环路面积做到最小,以增强抗干扰能力和减少对外的干扰。) z. O. T' s8 M1 p1 S \* ~, Y6 _; i/ }) [
为了更好的信号完整性和降低电磁干扰(EMI)和减少层间耦合噪声,陈工决定改用 6 层板对 PCB 进行重新 layout,我们在嘉立创领取了打样券,现在样品也能用沉金工艺了,而且免费增加至2u"厚度,盘中孔工艺也可以免费使用,并且不限制BGA封装。
/ `) j. x' i; s4 \6 m' H9 s
oab3jnow2oa64059728425.png
: I! i8 j# M" b6 r9 q' k) l c: ^0 V
以前打个 6 层板的样品,打样费也是一笔不小的研发成本开销,现在嘉立创对于 6 层以上 PCB 的打样政策,工程费可以大降50%,对不少中小企业是非常大的利好。
$ n0 y5 b' T) V9 b/ A
qwtktntmvxb64059728525.png
" S; [1 Q8 b4 b, @. C! Q在关键的电源和存储器芯片上面,也替换为进口方案(贵就贵点,但胜在够稳),这几天布线完之后,应该会发出去打样,等样品回来之后我们再仔细进行验证。
; C8 g, n4 c/ X! O0 t3 B$ ?* z( K/ j(事情虽然还没有结束,但总算看到了一点希望~
! J7 J, I7 z* k2 U
00cc1tcghy3Expression_77@2x59728625.png
D/ z# w) y9 C5 v+ J/ O* L
)
0 z/ B5 ~8 q& D Y在开发过程中,客户一直抠成本,产品做出来之后,客户又急着在生产线上面使用,只是经过了基本的功能逻辑测试就交付了(没经过疲劳和可靠性测试),没想到,最后在客户现场还是出现了问题~
7 d' Z. ?2 m) D: n! R, X2 ~$ b整个过程,有几点是需要值得我去反思的:
- P7 m0 w9 G( [0 T1、产品在客户现场出现了问题,电话和信息无法解决的时候,该到现场(挨批)还是要到,一方面为了降低客户损失,另一方面也为了安抚和挽留客户。5 N- S! q9 b$ R& J9 F4 u
2、处理好成员冲突,尽可能地不要让团队成员在客户现场发生矛盾,以解决问题为主要目的,团队成员才是解决现场问题的关键要素。
$ j8 [6 s0 A8 R; m9 {, x6 X5 t) x3、不能为了降低成本而忽略了产品的稳定性,哪怕客户一直要求降低成本,也要管理好客户的预期,明确告知客户降本的风险。& d7 x8 c! V( M8 X, E: {
4、做硬件产品研发还是得坚守原则,该遵循的流程还是要遵循,该做的测试还是要做(哪怕后补,也要有测试数据),EMC和EMI,可靠性测试,疲劳测试,耐久度测试,等等。
5 j6 Q' A, L5 I0 w( W5、事情的进展,有时候看上去似乎停滞不前,但也不要马上停下来,(就好比,让设备空转运行也得让它转),没准过一段时间就会迎来转机~. B% e2 j3 h/ k/ o
最后,希望这次改版能行,生活又给我上了一课!~
8 h2 m B6 _- l! S, l# Q. w! P: W" k- B$ D& w3 P2 P! `+ e' K! o
, ]' K, q7 O: r7 C: Q
jtqggdtdwqf64059728726.png
' u9 r; h- n) K& u' {- X3 Y; k4 j
▲ @幕后硬汉:随手上传“创新背后的故事”,瓜分100000+大奖!
8 @# u9 C x7 ~! D-END-
. k0 J7 B1 |/ b. B! @' O, i往期推荐:点击图片即可跳转阅读
$ Z; H% M% e- @, l! x/ D! \! D" |
! |; P( X1 K6 U( I
! w+ i, ?7 D$ `5 e& N! j, O
( [/ I) G* o* Z+ N! }8 h) K1 x0 N" N 4 X# P9 n; q4 ?0 Y: L
egdtzu2dfq564059728826.jpg
, ~0 I; q( s1 w" u) F. j
6 W: d1 ~* V1 I5 v5 U+ l. W 硬件都做出来了,客户说想改一下,结果,全部推倒重做!1 a2 E& S! U- T& O$ s; L
+ V* w: o& a- }, U
8 [4 }, ]% o# U2 x" m( p
1 v& |% i6 O! C : e' }* N2 g, l0 \ W: D. B
miesxw3r4g464059728926.jpg
) i5 _" T% B3 L3 M3 @. w; c
/ o. P, t: P z2 U% D7 A 不想让嵌入式核心板吃灰,于是,我准备对它下手了!
3 w% i# A* Y* C8 F
/ H4 V5 g( H) V' p$ i" n% g
8 }$ \0 E: {8 B% I+ o 2 V# R+ y3 O3 j: r
iwfuvc35qri64059729026.jpg
: ^3 Y t1 @' ]$ V
3 Z$ K. J- Q0 H- S' C 这些嵌入式主板,确实惊艳到我了!
; r. d+ X3 d' G- F' [* \
, ]% j( L& {" L# |2 K' n- z" t- X
! O7 U/ X4 H( h$ H8 b
9 M9 d6 [; {* N$ q 我是老温,一名热爱学习的嵌入式工程师: y N" D: z( @9 C
关注我,一起变得更加优秀! |