|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
前段时间,因工作原因有接触了下电池保护板这块的设计, 电路集成度很高, 所以简单的1到4串板没什么特别的,参考芯片手册上的设计说明也就是了。
* {- Y1 e L( Y$ C6 o- N, n, m9 ^' f! ]
在这里注要还是总结下自己关于这些保护板如何快速批量的验证他们的硬件功能是否正常(注要适用于批里生产时使用,开发阶段要测试详细参数还是用专用仪器好些)
- E$ k1 l' a5 n* y$ `. i
" H5 n3 y7 p9 {0 G首先说下保护板的基本工作
* X5 w D1 ^) d6 H( h9 k! G, T 0.通过电池保护IC内置高精度电压监控电路-实时监测电池工作状态,当其状态触发设定的阀值时,做出对应的响应。
1 Q! u# P. z! G9 X' W& I 1.当检测到电池电量低时,自动将放电开关断开,防止过放。 (过放)
1 ^6 g3 p& t [0 `8 P; P 2.当检测到电池电量充满时,自动将充电开关断开,防止过充。 (过充)
# b6 _9 e, ]: x 3.当检测给设备供电(放电)时,如果电流过大-自己动将放电开关断开。(过流)
2 L. |5 T; N9 F. x/ B
! m; w3 K7 {8 H- `根据以上电池保护板的一个工作状态, 我们分别需要测试的内容主要分过放,过充这两个工作状态便可以验证PCBA上的器件是否工作正常。
0 I6 Q* |* N* P1 m; @" W
. Y0 j/ b5 V( ` ]! Z附上自己做的1-2串 可同时测试15块板的原理图作参考,希望对用到的人有所帮助。! u v+ W5 R% n( G, j
8 m' A8 \0 Q; l. m# f: P
; J# W4 i9 q$ x, b* ~" C' L+ `(同时附上mcu上的切换控制)
5 {, J# h) W! P8 v/***********************************************************************
' k/ q5 h; N3 p, l0 A初始化默认配 -正常模式,过冲,过放关闭 a1~a5做为错误结果信息标记2 N" }( ]6 \3 T7 }3 C1 k: \( E3 \) @1 u
***********************************************************************/: R4 b9 }+ p' y% L* W
: e. q! ]8 H* h" @) t& d( b
unsigned char a1,a2,a3,a4,a5; a1=0; a2=0; a3=0; a4=0; a5=0;
" E* i& t' P8 W7 C- n% ~. I BUZZER=0;
3 O' h0 t5 ~/ C- a. z' v OVER_DISCHARGE =0; OVER_CHARGE =0;
7 L+ ~8 [5 Q% X0 `: [3 w* Z2 S! b# ]0 D x2 H" N$ l
/***********************************************************************
' g7 m: B6 ?% a, z' W: I自检 正常一亮一灭 (测试指示灯是否运行同时表示程序开始运行) 0:开启: 1不开启 : s4 k; ~1 g8 Y7 i1 K+ p/ y
***********************************************************************/
* p" t7 k; D8 m# _/ F7 \4 C9 s' @) p+ ^9 h. ?' p5 d, Y$ h
Delayms(200) ;* _' d. Y9 i! j
LED_1=1; LED_2=1; LED_3=1; LED_4=1; LED_5=1;
^0 f1 J2 [# n F1 A Delayms(200) ;
/ a% J6 Y1 [( S, b0 n" O3 O/ |' y. y* j
/***********************************************************************
: B. d. I& A1 {1 Y4 r开始常规检查 ,过充过放均关闭 0 不开启, 1开启 正常情况灯亮 ,不正常的时候标记 //
+ v/ f+ f; ?) W***********************************************************************/
8 G3 B# Z3 h1 G! n* C5 [ OVER_DISCHARGE =0; OVER_CHARGE =0; COMPARE_UP=1; Delayms(2000) ;( g! E) l& `4 |! Y/ Z
; _$ |- k2 w" O& m$ N
if (JUDGE_1 == 1) LED_1 = 0; else { LED_1 = 1; a1 = 1; }
E9 X4 O5 X. f4 V, J) j if (JUDGE_2 == 1) LED_2 = 0; else { LED_2 = 1; a2 = 1; }
% C n- S% A5 v/ `! w! M, d! c, _) O if (JUDGE_3 == 1) LED_3 = 0; else { LED_3 = 1; a3 = 1; }; ^. g; x/ h& ]0 | K/ X
if (JUDGE_4 == 1) LED_4 = 0; else { LED_4 = 1; a4 = 1; }5 s m) C$ h6 W. |6 V# u
if (JUDGE_5 == 1) LED_5 = 0; else { LED_5 = 1; a5 = 1; }
`5 u& V* A9 D/ y$ d9 y; j
. j% S: k0 F: }1 V5 } Delayms(200) ;, Z( w" v7 E4 A! B1 _ S
6 E. K1 `# ]7 x- }3 X/***********************************************************************3 z. E5 l1 {; k2 {$ o6 @1 @
过放检查 ,过放继电器开启,过充关闭 默认正常JUDGE为1 :LED 0 不开启, 1开启 正常情况灯亮 ,不正常的时候标记
- b1 L' D4 p4 P; f" p3 u***********************************************************************/# [5 l1 z! \* p1 a! t
& p' V6 y& }$ B2 ` OVER_DISCHARGE =1; OVER_CHARGE =0; COMPARE_UP=0; Delayms(2000) ;: g1 E2 ~/ l) v; k; W' d
" R7 E( W- N4 J2 v9 n {) K
1 U* J) c6 N) Q0 d8 S/ u( o- l* z if (JUDGE_1 == 0) LED_1 = 0; else { LED_1 = 1; a1 = 1; }
- R" x* m1 I3 L; h& Q if (JUDGE_2 == 0) LED_2 = 0; else { LED_2 = 1; a2 = 1; }
5 a0 z% g( p% Y& {3 e$ i7 v" { if (JUDGE_3 == 0) LED_3 = 0; else { LED_3 = 1; a3 = 1; }
& r3 I: P! Y V% W+ N; w if (JUDGE_4 == 0) LED_4 = 0; else { LED_4 = 1; a4 = 1; }
7 ?3 w9 _3 d. O: Y+ ? if (JUDGE_5 == 0) LED_5 = 0; else { LED_5 = 1; a5 = 1; } 7 J0 c7 V& H4 U( A+ Q( S; w
; O# U$ I. Q) R0 Z* @) u
Delayms(200) ; ' B9 M+ f# T1 W; t |1 ~0 p/ z
/ ^7 i9 g% C4 u7 U$ H6 G# T
/***********************************************************************
+ a' Z3 y+ X$ _$ W恢复到常规检查 ,过充过放均关闭,再次判断保护板是否恢复正常 0 不开启, 1开启 正常情况灯亮 ,不正常的时候标记 % g, W7 x) L- X( R& f. W
***********************************************************************/
: ?2 ]. I9 g5 G% W: v/ ^. g) q$ e+ m. z! M& x3 \% Z
OVER_DISCHARGE =0; OVER_CHARGE =0; COMPARE_UP=1; Delayms(2000) ;
6 T) R% H; m9 x2 Y: z' q9 R
! X8 o: N2 y9 @4 a& K) t2 j5 L6 Z. v! p- r1 W$ S0 N
if (JUDGE_1 == 1) LED_1 = 0; else { LED_1 = 1; a1 = 1; }8 n6 T0 }1 c B4 Z5 Y, n
if (JUDGE_2 == 1) LED_2 = 0; else { LED_2 = 1; a2 = 1; }2 X" ?- B4 _: D% x+ ?$ v7 s9 _
if (JUDGE_3 == 1) LED_3 = 0; else { LED_3 = 1; a3 = 1; }
8 L* y& p7 @' p8 K: Z. \9 s* G if (JUDGE_4 == 1) LED_4 = 0; else { LED_4 = 1; a4 = 1; }
4 S( ]4 S. C: P if (JUDGE_5 == 1) LED_5 = 0; else { LED_5 = 1; a5 = 1; }
8 w9 o- m4 n2 j0 I) c; ~! B
. X. z5 A4 b6 |" h) H Delayms(200) ;5 D7 W( G B- ^) Y
6 z. O4 H4 `7 d1 w P/*********************************************************************** - C8 j1 y% n& N( u: G# o
过充检查 ,过充继电器开启,过放关闭 默认正常JUDGE为1 :LED 0 不开启, 1开启
' f+ W5 U# \2 V2 P4 m2 x+ N/ b ***********************************************************************/
, d, P: Q' l, e& x0 P. a$ d# @ OVER_DISCHARGE =0; OVER_CHARGE =1; COMPARE_UP=0; Delayms(2000) ;
: F% z8 B$ y) I) H4 O" H" P
6 P3 U: j b. b, S T, d+ o/ l if (JUDGE_1 == 0) LED_1 = 0; else { LED_1 = 1; a1 = 1; }
2 c7 T) g, \9 Y6 u% L. l" Q if (JUDGE_2 == 0) LED_2 = 0; else { LED_2 = 1; a2 = 1; }
8 I, _; q; Q8 |3 M2 | if (JUDGE_3 == 0) LED_3 = 0; else { LED_3 = 1; a3 = 1; }
7 A6 r$ g; `) H1 Y* R1 ]9 { if (JUDGE_4 == 0) LED_4 = 0; else { LED_4 = 1; a4 = 1; }% k& L! ]5 }! B. Z! ]+ R
if (JUDGE_5 == 0) LED_5 = 0; else { LED_5 = 1; a5 = 1; }
. M0 R: a' K5 B+ ?! g + w4 G: F7 ~& [7 ]0 }2 i( k) s: d
Delayms(200) ;
+ ]( v4 N5 ] z1 X! `& n1 g# n- `, B' k' A; X9 f$ x+ T
/***********************************************************************
) v7 w/ K9 J; w' G: R再次恢复到常规检查 ,过充过放均关闭,再次判断保护板是否恢复正常 0 不开启, 1开启 正常情况灯亮 ,不正常的时候标记 * r/ [" F4 @4 C; r; Q7 @7 T: p, P N
***********************************************************************/5 S' d+ Y" e- e/ I" h I; O9 V
/ a, a- j7 {7 G I' ]+ P
OVER_DISCHARGE =0; OVER_CHARGE =0; COMPARE_UP=1; Delayms(2000) ;
% x: Y( z$ c5 d% `7 d+ _* D" v% d
* y" [- J% F* H& d# @ if (JUDGE_1 == 1) LED_1 = 0; else { LED_1 = 1; a1 = 1; }
7 B( P3 Q& s6 X) n$ [: ]% M+ q if (JUDGE_2 == 1) LED_2 = 0; else { LED_2 = 1; a2 = 1; }
$ ]3 l2 K4 V7 U) {: i- y1 K if (JUDGE_3 == 1) LED_3 = 0; else { LED_3 = 1; a3 = 1; }# V/ q2 m# ^ f$ r
if (JUDGE_4 == 1) LED_4 = 0; else { LED_4 = 1; a4 = 1; }* V' ?9 `; E* C- z: R, z7 u
if (JUDGE_5 == 1) LED_5 = 0; else { LED_5 = 1; a5 = 1; } - W8 i' R+ q$ v2 C. I
- z0 e7 |- `4 d' P) V Delayms(200) ;
@% ?$ Z$ i' `& ~$ w2 n* G
w9 ]5 u3 p W$ s/***********************************************************************' c) G s o) |; o; u6 i" s
输出结果-只要上面测试环节有一个不通过, 则对应的保护板指示灯灭。 全部通过则指示灯点亮。
) ?6 ^% j# j2 U ***********************************************************************/
A; f" u) g% { w FINISH (); //测试完成提醒; U5 ~; h" R1 G \( i
OVER_DISCHARGE =0; OVER_CHARGE =0; Delayms(200) ; //保护板恢复到正常模式。) E, b& k; j. Q! }( `! t: Y9 h0 i
LED_1 = a1;& j. W8 j4 E T. }2 t7 w
LED_2 = a2;5 [5 l& E2 h$ M: H! f
LED_3 = a3;1 N' @2 Z' _/ H$ u3 N
LED_4 = a4;, V7 B0 s! O; y4 P9 r
LED_5 = a5;
! K8 p" r& W" \; @7 F4 j; Z, j2 t: ]& I
/***********************************************************************( X( {+ V6 d. Y) _7 `
测试结束。等待再次上电重新激活测试程序。
5 A" b5 J; R" s% E2 x ***********************************************************************/ + o l5 u. U9 K* e5 {8 ]: F
. _: K$ w% ]; e5 _9 P% H+ U
while(1);( I) M9 n3 {" b1 \
: p: |/ t7 n# B6 j0 q4 E% ]/ J, o6 b+ y% L5 D
2 G# O% j7 ?5 E- T
, b' J7 r! f0 U" s) T5 v$ T% a6 r7 o$ `: b; l% \; |$ k6 e6 h
" d; u s: X+ ]+ A1 e$ u1 U( f 7 c3 L/ k6 Z- z. ~$ Q
|
|