TR6143-bas
10 ! Advantest TR6143
20 ! 2020-01-10
30 OPTION BASE 1
40 GOSUB Battery_select
50 GOSUB Fileopen
60 GOSUB Inst_open
70 GOSUB Stimulus_select
80 GOSUB Measure
90 GOSUB Fileclose
100 STOP
110 Measure: !
120 INTEGER Count,I
130 DIM Cmd$[25],A1$[14],A2$[14],Test$[1]
140 OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]"
150 OUTPUT @File2;"Cycle,Charge Time[m],Charge i Capa[mAh],Charge W Capa[Wh], Discharge Time[m],Discharge i Capa[mAh], Discharge W Capa[Wh]"
160 GOSUB Chart_var
170 GOSUB Init_chart
180 Wait=.001 !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
190 Count=0
200 Time_zero=TIMEDATE
210 FOR I=1 TO 100 !배터리 충방전실험을 5회 실시
220 C_i_capa=0
230 C_w_capa=0
240 D_i_capa=0
250 D_w_capa=0
260 GOSUB Cycle
270 OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa
280 NEXT I
290 RETURN
300 Cycle: !
310 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
320 !충전. +부호 정전류, 전압제한(전압을 읽는다.)
330 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
340 Test$="C"
350 Cmd$="I4" !2A range
360 Cmd$=Cmd$&" D"&VAL$(Ic)&"A" !D1.0A
370 Cmd$=Cmd$&" D"&VAL$(Vc)&"V" !D4.2V
380 OUTPUT @Src;Cmd$ !"I4 D1A D4.2V"
390 OUTPUT @Src;"E" !Operate ON
400 WAIT Wait
410 C_start_time=TIMEDATE
420 Pre_v=0 !최초 측정 전압=0으로 가정한다.
430 Pre_t=C_start_time
440 Curr=Ic
450 LOOP
460 T=TIMEDATE
470 Time_elapsed=(T-Time_zero)/60
480 GOSUB Reading
490 Volt=Data
500 IF Volt>Pre_v THEN !충전 전압이 상승하면
510 GOSUB Data_process
520 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
530 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
540 Pre_t=T
550 END IF
560 EXIT IF Volt>=Vc !측정 전압이 충전최고 전압에 도달하면
570 END LOOP
580 OUTPUT @Src;"H" !Operate OFF
590 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
600 !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
610 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
620 Cmd$="V5" !32V range
630 Cmd$=Cmd$&" D"&VAL$(Vc)&"V" !D4.2V
640 Cmd$=Cmd$&" D"&VAL$(Ic)&"A" !D1.0A
650 OUTPUT @Src;Cmd$ !"V5 D 4.2V D 1.0A"
660 OUTPUT @Src;"E" !Operate ON
670 WAIT Wait
680 Pre_v=Ic !충전 전류(Ic)를 초기값으로 기억한다.
690 Volt=Vc !충전전압은 일정하다.
700 LOOP
710 T=TIMEDATE
720 Time_elapsed=(T-Time_zero)/60
730 GOSUB Reading !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다.
740 Curr=Data
750 IF Curr<Pre_v THEN !측정 전류가 서서히 낮아지면
760 GOSUB Data_process
770 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
780 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !WA = A x V x hour
790 Pre_t=T
800 END IF
810 EXIT IF Curr<=Ic_end !현재 전류가 종료전류에 도달하면
820 END LOOP
830 C_time=(T-C_start_time)/60
840 OUTPUT @Src;"H" !Operate OFF
850 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
860 !방전 전류는 -로 표기한다.
870 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
880 Test$="D"
890 Cmd$="I4" !2A range
900 Cmd$=Cmd$&" D"&VAL$(Id)&"A" !D-1.0A
910 Cmd$=Cmd$&" D"&VAL$(Vc)&"V" !D4.2V
920 OUTPUT @Src;Cmd$ !"I4 D1A D4.2V"
930 OUTPUT @Src;"E" !Operate ON
940 WAIT Wait
950 Pre_v=Vc
960 D_start_time=TIMEDATE
970 Pre_t=D_start_time
980 Curr=Id !방전전류(-값을 갖는다.)는 일정하다.
990 LOOP
1000 T=TIMEDATE
1010 Time_elapsed=(T-Time_zero)/60
1020 GOSUB Reading !일정 전류 방전 , 전압이 측정된다.
1030 Volt=Data
1040 IF Volt<Pre_v THEN !측정전압이 서서히 낮아지면(방전이므로)
1050 GOSUB Data_process
1060 D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
1070 D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
1080 Pre_t=T
1090 END IF
1100 EXIT IF Volt<=Vd !현재 전압이 충전전압에 도달하면
1110 END LOOP
1120 D_time=(T-D_start_time)/60
1130 OUTPUT @Src;"H" !Operate OFF
1140 RETURN
1150 Data_process: !
1160 ! Count=Count+1
1170 Y1=(Volt*2/Vc)*100-100 !전압 [%]
1180 Y2=(Curr/Ic)*100 !전류 [%]
1190 Y(1)=Y1
1200 Y(2)=Y2
1210 CONTROL @Strip;SET("POINT LOCATION":Time_elapsed,"VALUES":Y(*))
1220 PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-4);"m, V=";Volt;"V, I=";Curr;"A"
1230 OUTPUT @File1;Count,PROUND(Time_elapsed,-4),Volt,Curr
1240 Pre_v=Data
1250 RETURN
1260 Reading: !
1270 LOOP
1280 GOSUB Reading1
1290 EXIT IF Data<>0
1300 END LOOP
1310 RETURN
1320 Reading1: !
1330 ! 전압을 측정하면 나타나는 데이터 포맷
1340 ! 12345678901234
1350 !"DV +03.857E+0" 원래
1360 !" DV +03.857E+0" 앞에 공백이 하나 추가되어 나온 적이 있다.
1370 ! 전압를 측정하면 나타나는 데이터 포맷
1380 ! 12345678901234
1390 !"DI +0.6310E+0" 원래
1400 ENTER @Src;A1$
1410 A2$=TRIM$(A1$) !앞뒤 공백 모두 없앤다
1420 Data=VAL(A2$[3,13])
1430 ! Data=PROUND(Data,-3) !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
1440 Data=DROUND(Data,3) !유효수자 3자리
1450 RETURN
1460 Fileopen: !
1470 DIM Filename1$[20],Filename2$[20],Dhms$[8]
1480 T=TIMEDATE
1490 Time$=TIME$(T) !하루가 늦게 계산되므로 하루 추가 +24*3600
1500 Date$=DATE$(T)
1510 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1520 Filename1$=Dhms$&".txt"
1530 CREATE Filename1$,1
1540 ASSIGN @File1 TO Filename1$;FORMAT ON
1550 T=T+1 !1초 늦게
1560 Time$=TIME$(T) !하루가 늦게 계산되므로 하루 추가 +24*3600
1570 Date$=DATE$(T)
1580 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1590 Filename2$=Dhms$&".txt"
1600 CREATE Filename2$,1
1610 ASSIGN @File2 TO Filename2$;FORMAT ON
1620 RETURN
1630 Fileclose:!
1640 ASSIGN @File1 TO *
1650 ASSIGN @File2 TO *
1660 RETURN
1670 Battery_select: !
1680 DIM Msg$[25]
1690 INTEGER Size,Length,Btn,Battery_no
1700 Size=4
1710 Length=6
1720 ALLOCATE Battery$(Size)[Length]
1730 Battery$(1)="Li"
1740 Battery$(2)="NiCd"
1750 Battery$(3)="3-NiCd"
1760 Battery$(4)="EDLC"
1770 Msg$="배터리 종류"
1780 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
1790 Battery_no=Battery_no+1
1800 RETURN
1810 Inst_open: !
1820 ASSIGN @Src TO 714 !advantest TR6143
1830 RETURN
1840 Stimulus_select: !
1850 SELECT Battery$(Battery_no)
1860 CASE "Li"
1870 Vc=4.2 !4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1880 Vd=3.2 !3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1890 Ic=2 !100mA 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1900 Ic_end=.5 !충전 종료 전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1910 Id=-2 !100mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1920 CASE "NiCd" !표준 1.2V
1930 Vc=1.3 !1.5V 충전전압
1940 Vd=.9 !0.9V 방전종료전압
1950 Ic=.001 !100mA 충전전류
1960 Ic_end=.0005 !충전 종료 전류
1970 Id=-.0001 !100mA 방전전류 음수
1980 CASE "3-NiCd" !표준 3.6V
1990 Vc=4.7 !4.1V 충전전압
2000 Vd=1.5 !3.1V 방전종료전압
2010 Ic=.0005 !100mA 충전전류
2020 Ic_end=.00035 !충전 종료 전류
2030 Id=-5.E-5 !100mA 방전전류 음수
2040 CASE ""
2050 Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
2060 END SELECT
2070 !GOSUB Dialog_string3
2080 RETURN
2090 Chart_var: !
2100 X_origin=0 !time=0
2110 X_range=.1*60 !1 hours *60min
2120 X_axis_label$="Elapsed Time [Min]"
2130 Y_origin=-110
2140 Y_range=220
2150 Y_axis_label$="Volt & Current [%]"
2160 RETURN
2170 Init_chart: !
2180 DIM X_axis_label$[25],Y_axis_label$[25]
2190 INTEGER Trace_num
2200 INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
2210 REAL Y(1:2) !Y(1) Volt, Y(2) Current
2220 GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
2230 !
2240 ! Set the dimensions of the graphics window using GESCAPE 33 so
2250 ! that it is centered on the screen.
2260 !
2270 Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
2280 Gwindow_dims(2)=Screen_dims(2)*.2 ! Y of upper left.
2290 Gwindow_dims(3)=Screen_dims(1)*.7 ! Width.
2300 Gwindow_dims(4)=Screen_dims(2)*.6 ! Height.
2310 GESCAPE CRT,33;Gwindow_dims(*) ! Set graphics window geometry.
2320 !
2330 GESCAPE CRT,35 ! Move the graphics window to the top.
2340 !
2350 ! Create a stripchart. Make it invisible until all changes are made.
2360 !
2370 ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
2380 !
2390 ! Set the overall attributes.
2400 !
2410 CONTROL @Strip;SET("TITLE":"Data Logger")
2420 CONTROL @Strip;SET("MINIMUM SCROLL":2)
2430 CONTROL @Strip;SET("MOVABLE":0)
2440 CONTROL @Strip;SET("MAXIMIZABLE":0)
2450 CONTROL @Strip;SET("X":0,"Y":0)
2460 !
2470 ! Size the stripchart to exactly fill the graphics window.
2480 !
2490 Vert_borders=26
2500 Horiz_borders=8
2510 Height=Gwindow_dims(4)-Vert_borders
2520 Width=Gwindow_dims(3)-Horiz_borders
2530 CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
2540 !
2550 CONTROL @Strip;SET("CURRENT AXIS":"X")
2560 CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
2570 CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
2580 !CONTROL @Strip;SET("DIGITS":5)
2590 !
2600 CONTROL @Strip;SET("CURRENT AXIS":"Y")
2610 CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
2620 CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
2630 !
2640 CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
2650 !
2660 RETURN
2670 END