Advantest TR6143
10 ! [[Advantest TR6143]] <pre>
20 ! 2020-01-17 배터리 충방전 프로그램
30 ! 2020-01-26 PTC용 표준 VI 측정추가
40 OPTION BASE 1
50 INTEGER No_cycle !충반전 실험 횟수
60 INTEGER Size,Length,Btn
70 DIM Msg$[25]
80 No_cycle=100 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
90 Wait=.1 !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간
100 GOSUB Dut_select
110 GOSUB Stimulus_select
120 GOSUB Inst_select
130 GOSUB Fileopen
140 GOSUB Measure
150 GOSUB Fileclose
160 GOSUB Inst_close
170 ! PAUSE
180 STOP
190 Inst_select: ! 계측기 선택
200 INTEGER Inst_no
210 Size=5
220 Length=7
230 ALLOCATE Inst$(Size)[Length]
240 Inst$(1)="TR6143"
250 Inst$(2)="66332A"
260 Msg$="계측기 종류"
270 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Inst$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Inst_no)
280 Inst_no=Inst_no+1
290 SELECT Inst$(Inst_no)
300 CASE "TR6143"
310 GOSUB Inst6143_open
320 CASE "66332A"
330 GOSUB Inst66332_open
340 END SELECT
350 RETURN
360 Cycle: !
370 Pre_v=0!최초 측정 전압=0으로 가정한다.
380 SELECT Inst$(Inst_no)
390 CASE "TR6143"
400 GOSUB Charge1
410 GOSUB Charge2
420 GOSUB Discharge
430 ! GOSUB Charge1
440 ! GOSUB Charge2
450 CASE "66332A"
460 SELECT Dut$(Dut_no)
470 CASE "Phone" ! only charge
480 GOSUB Charge1
490 GOSUB Charge2
500 CASE ELSE
510 GOSUB Charge1
520 GOSUB Charge2
530 GOSUB Discharge
540 END SELECT
550 END SELECT
560 RETURN
570 Dut_select: !
580 INTEGER Dut_no
590 Size=6
600 Length=7
610 ALLOCATE Dut$(Size)[Length]
620 Dut$(1)="PRI-BAT" !1차 전지
630 Dut$(2)="BATTERY" !2차 전지
640 Dut$(3)="EDLC"
650 Dut$(4)="PTC"
660 Dut$(5)="tau"
670 Dut$(6)="Phone"
680 Msg$="DUT 종류"
690 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Dut$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Dut_no)
700 Dut_no=Dut_no+1
710 SELECT Dut$(Dut_no)
720 CASE "PRI-BAT"
730 GOSUB Pri_bat_select
740 CASE "BATTERY"
750 GOSUB Battery_select
760 CASE "EDLC"
770 GOSUB Edlc_select
780 CASE "PTC"
790 GOSUB Ptc_select
800 CASE "tau"
810 GOSUB Tau_select
820 CASE "Phone"
830 GOSUB Phone_select
840 END SELECT
850 RETURN
860 Pri_bat_select: !
870 INTEGER Pri_bat_no
880 Size=3
890 Length=4
900 ALLOCATE Pri_bat$(Size)[Length]
910 Pri_bat$(1)="BR" !3V
920 Pri_bat$(2)="CR" !3V
930 Pri_bat$(3)="1.5V"
940 Msg$="1차 전지 종류"
950 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Pri_bat$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Pri_bat_no)
960 Pri_bat_no=Pri_bat_no+1
970 RETURN
980 Battery_select: !
990 INTEGER Battery_no
1000 Size=14
1010 Length=12
1020 ALLOCATE Battery$(Size)[Length]
1030 Battery$(1)="Li"
1040 Battery$(2)="Li 1.5V"
1050 Battery$(3)="NiMH 8000mAh"
1060 Battery$(4)="NiCd"
1070 Battery$(5)="3-NiCd"
1080 Battery$(6)="4-NiCd"
1090 Battery$(7)="6-NiCd" !7.2V
1100 Battery$(8)="BAT"
1110 Battery$(9)="Li-S4" !4개 직렬, 각셀을 34970A로 측정
1120 Battery$(10)="GrandMax"
1130 Battery$(11)="Li-S7" !7개 직렬
1140 Battery$(12)="Li-S2" !2개 직렬
1150 Battery$(13)="Pb12V" !
1160 Battery$(14)="LFP12V" !
1170 Msg$="배터리 종류"
1180 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no)
1190 Battery_no=Battery_no+1
1200 RETURN
1210 Edlc_select: !
1220 INTEGER Edlc_no
1230 Size=5
1240 Length=10
1250 ALLOCATE Edlc$(Size)[Length]
1260 Edlc$(1)="2.7V 0~1F"
1270 Edlc$(2)="2.7V 1~10F"
1280 Edlc$(3)="2.7V 10~F"
1290 Edlc$(4)="5.5V 0~1F"
1300 Edlc$(5)="5.5V 1~10F"
1310 Msg$="EDLC 종류"
1320 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Edlc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Edlc_no)
1330 Edlc_no=Edlc_no+1
1340 RETURN
1350 Ptc_select: !
1360 INTEGER Ptc_no
1370 Size=6
1380 Length=6
1390 ALLOCATE Ptc$(Size)[Length]
1400 Ptc$(1)="SPL1"
1410 Ptc$(2)=" "
1420 Ptc$(3)=" "
1430 Msg$="PTC 종류"
1440 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Ptc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Ptc_no)
1450 Ptc_no=Ptc_no+1
1460 RETURN
1470 Tau_select: !
1480 INTEGER Tau_no
1490 Size=6
1500 Length=25
1510 ALLOCATE Tau$(Size)[Length]
1520 Tau$(1)="V12T100" !12V 100sec
1530 Tau$(2)="V12T10"
1540 Tau$(3)=" "
1550 Msg$="Tau(Time-Constant) 종류"
1560 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Tau$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Tau_no)
1570 Tau_no=Tau_no+1
1580 RETURN
1590 Phone_select: !
1600 INTEGER Phone_no
1610 Size=2
1620 Length=25
1630 ALLOCATE Phone$(Size)[Length]
1640 Phone$(1)="5V 1A"
1650 Phone$(2)="4.2V 1A"
1660 Msg$="Phone 공급 전압전류"
1670 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Phone$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Phone_no)
1680 Phone_no=Phone_no+1
1690 RETURN
1700 Stimulus_select:!
1710 SELECT Dut$(Dut_no)
1720 CASE "PRI-BAT" !방전만 한다.
1730 SELECT Pri_bat$(Pri_bat_no)
1740 CASE "BR"
1750 Vd=.2 !방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1760 Vc=3. !기본
1770 Id=-.01 !10mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1780 CASE "CR"
1790 Vd=.2 !방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1800 Vc=3. !기본
1810 Id=-.01 !10mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1820 CASE "1.5V"
1830 Vd=.2 !방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1840 Vc=1.5 !기본
1850 Id=-.01 !10mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1860 END SELECT
1870 CASE "BATTERY"
1880 SELECT Battery$(Battery_no)
1890 CASE "Li"
1900 Vc=4.2 !4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1910 Vd=3.2 !3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1920 Ic=2 !100mA 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1930 Ic_end=.5 !충전 종료 전류 !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!!
1940 Id=2 !100mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1950 CASE "Li 1.5V"
1960 Vc=4.2 !4.2V 충전전압 !!
1970 Vd=1. !3.2V 방전종료전압 !!
1980 Ic=.1 !200mA 충전전류 !!
1990 Ic_end=.02 !충전 종료 전류 !!내부 저항 !!
2000 Id=-.1 !200mA 방전전류 음수 !!
2010 CASE "GrandMax"
2020 Vc=4.4!4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2030 Vd=3.2!3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2040 Ic=5 !1A 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2050 Ic_end=.5 !200mA 충전 종료 전류 !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!!
2060 Id=-5 !1A 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2070 CASE "NiMH 8000mAh"
2080 Vc=1.5 !1.5V 충전전압 +0.3V
2090 Vd=.9 !0.9V 방전종료전압 -0.3V
2100 Ic=1.9 !100mA 충전전류
2110 Ic_end=.4 !충전 종료 전류
2120 Id=-1.9 !100mA 방전전류 음수
2130 CASE "NiCd"!표준 1.2V
2140 Vc=1.5 !1.5V 충전전압 +0.3V
2150 Vd=.9 !0.9V 방전종료전압 -0.3V
2160 Ic=2 !100mA 충전전류
2170 Ic_end=.1 !충전 종료 전류
2180 Id=-1 !100mA 방전전류 음수
2190 CASE "3-NiCd" !표준 3.6V
2200 Vc=4.5!4.1V 충전전압 3x1.5=4.5V
2210 Vd=2.7!3.1V 방전종료전압 3x0.9=2.7V
2220 Ic=.05 !100mA 충전전류
2230 Ic_end=.025 !충전 종료 전류
2240 Id=-.05 !100mA 방전전류 음수
2250 CASE "4-NiCd" !표준 3.6V
2260 Vc=4*1.25 ! 충전전압 4x1.5=6.0V
2270 Vd=4*1.15 ! 방전종료전압 4x0.9=3.6V
2280 Ic=.05 !100mA 충전전류
2290 Ic_end=.01 !충전 종료 전류
2300 Id=-.05 !100mA 방전전류 음수
2310 CASE "6-NiCd" !표준 7.2V
2320 Vc=9. ! 충전전압 6x1.5V=9.0V
2330 Vd=5.4! 방전종료전압 6x0.9V=5.4V
2340 Ic=.2 ! 200mA 충전전류
2350 Ic_end=.1 !충전 종료 전류
2360 Id=-.2 !200mA 방전전류 음수
2370 CASE "BAT"!표준 3.6V
2380 Vc=3.5!4.1V 충전전압
2390 Vd=2.5!1.V 방전종료전압
2400 Ic=.02!100mA 충전전류
2410 Ic_end=.006!충전 종료 전류
2420 Id=-.005!-10mA 방전전류 음수
2430 CASE "Li-S4"
2440 Vc=16.8!4.2x4 충전전압 4.2x4=16.8 3.7x4=14.8 nominal
2450 Vd=12.8!3.2x4 방전종료전압 3.2x4=12.8
2460 Ic=2 !2A 충전전류
2470 Ic_end=1!충전 종료 전류
2480 Id=-2 !-2A 방전전류 음수
2490 CASE "Li-S7" !18650
2500 Vc=4.2*7 !29.4 !4.2x7V 충전전압
2510 Vd=2.5*7 ! 22.4 !3.2x7V 방전종료전압
2520 Ic=1 !1A 충전전류
2530 Ic_end=.05 !충전 종료 전류 !!내부 저항 !!
2540 Id=-2 !1A 방전전류 음수
2550 CASE "Li-S2" !18650
2560 Vc=4.2*2 !29.4 !4.2x7V 충전전압
2570 Vd=2.5*2 ! 22.4 !3.2x7V 방전종료전압
2580 Ic=1 !1A 충전전류
2590 Ic_end=.1 !충전 종료 전류 !!내부 저항 !!
2600 Id=-1 !1A 방전전류 음수
2610 CASE "Pb12V" !
2620 Vc=14.4 !14.4 충전전압 13.6V 안전
2630 Vd=10.5 ! 11.7 10.5 방전종료전압
2640 Ic=1 !1A 충전전류
2650 Ic_end=.1 !충전 종료 전류 !!내부 저항 !!
2660 Id=-1 !1A 방전전류 음수
2670 CASE "LFP12V" !
2680 Vc=3.65*4 !14.6
2690 Vd=2.5*4 !10.0 방전종료전압
2700 Ic=5 !1A 충전전류
2710 Ic_end=.1 !충전 종료 전류 !!내부 저항 !!
2720 Id=-1 !1A 방전전류 음수
2730 CASE ""
2740 Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], "
2750 END SELECT
2760 CASE "EDLC"
2770 SELECT Edlc$(Edlc_no)
2780 CASE "2.7V 0~1F"
2790 Vc=2.7 ! 충전전압
2800 Ic=.1 ! 충전전류
2810 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
2820 Id=-.1 ! 100mA 방전전류 음수
2830 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
2840 CASE "2.7V 1~10F"
2850 Vc=2.7 ! 충전전압
2860 Ic=.5 ! 충전전류
2870 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
2880 Id=-.5 ! 500mA 방전전류 음수
2890 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
2900 CASE "2.7V 10~F"
2910 Vc=2.7 ! 충전전압
2920 Ic=2. ! 충전전류 2A 최대
2930 Ic_end=Ic*.5 ! 충전 종료 전류는 충전전류의 50%
2940 Id=-2 ! 500mA 방전전류 음수
2950 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
2960 CASE "5.5V 0~1F"
2970 Vc=5.5 ! 충전전압
2980 Ic=.1 ! 충전전류
2990 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
3000 Id=-.1 ! 100mA 방전전류 음수
3010 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
3020 CASE "5.5V 1~10F"
3030 Vc=5.5 ! 충전전압
3040 Ic=.5 ! 충전전류
3050 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5%
3060 Id=-.5 ! 500mA 방전전류 음수
3070 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면
3080 END SELECT
3090 CASE "PTC"
3100 SELECT Ptc$(Ptc_no)
3110 CASE "SPL1"
3120 Wait=1
3130 Volt_start=0
3140 Volt_stop=12
3150 Volt_step=.05
3160 Limit=2 !2A
3170 END SELECT
3180 CASE "tau"
3190 SELECT Tau$(Tau_no)
3200 CASE "V12T100"
3210 Volt_set=12 !12V
3220 Time_set=100 !100sec
3230 Limit=2 !2A
3240 CASE "V12T10"
3250 Volt_set=12 !12V
3260 Time_set=10 !100sec
3270 Limit=2 !2A
3280 END SELECT
3290 CASE "Phone"
3300 SELECT Phone$(Phone_no)
3310 CASE "5V 1A"
3320 Vc=5 !
3330 Ic=.1 !1A
3340 Ic_end=.01 !충전 종료 전류
3350 Id=0 !그래프 그리기 위해
3360 Vd=3 !그래프 그리기 위해
3370 CASE "4.2V 1A"
3380 Vc=4.2 !4.2V 충전전압
3390 Ic=1
3400 Ic_end=.01
3410 Id=0 !그래프 그리기 위해
3420 Vd=3 !그래프 그리기 위해
3430 END SELECT
3440 END SELECT
3450 !GOSUB Dialog_string3
3460 RETURN
3470 Fileopen:!
3480 DIM Dhms$[8]
3490 DIM Filename1$[20],Filename2$[20],Filename3$[20]
3500 T=TIMEDATE
3510 Time$=TIME$(T) !하루 추가 +24*3600
3520 Date$=DATE$(T)
3530 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
3540 Filename1$=Dhms$&".txt"
3550 CREATE Filename1$,1
3560 ASSIGN @File1 TO Filename1$;FORMAT ON
3570 SELECT Dut$(Dut_no)
3580 CASE "BATTERY","EDLC"
3590 T=T+1 !1초 늦게
3600 Time$=TIME$(T)
3610 Date$=DATE$(T)
3620 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
3630 Filename2$=Dhms$&".txt"
3640 CREATE Filename2$,1
3650 ASSIGN @File2 TO Filename2$;FORMAT ON
3660 SELECT Dut$(Dut_no)
3670 CASE "BATTERY"
3680 IF Battery$(Battery_no)="Li-S4" THEN!직렬배터리 4개에 대한 각 셀별 전압 기록용
3690 T=T+1 !1초 늦게
3700 Time$=TIME$(T)
3710 Date$=DATE$(T)
3720 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
3730 Filename3$=Dhms$&".txt"
3740 CREATE Filename3$,1
3750 ASSIGN @File3 TO Filename3$;FORMAT ON
3760 END IF
3770 END SELECT
3780 END SELECT
3790 RETURN
3800 Fileclose:!
3810 ASSIGN @File1 TO *
3820 SELECT Dut$(Dut_no)
3830 CASE "BATTERY"
3840 ASSIGN @File2 TO *
3850 IF Battery$(Battery_no)="Li-S4" THEN
3860 ASSIGN @File3 TO *
3870 END IF
3880 CASE "EDLC"
3890 ASSIGN @File2 TO *
3900 END SELECT
3910 RETURN
3920 Measure: !
3930 INTEGER I
3940 DIM Cmd$[25],A1$[14],A2$[14],Test$[1]
3950 SELECT Dut$(Dut_no)
3960 CASE "tau","EDLC"
3970 OUTPUT @File1;"No.,Time[s],Volt[V],Curr[A]"
3980 CASE ELSE
3990 OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]"
4000 END SELECT
4010 GOSUB Chart_var
4020 GOSUB Init_chart
4030 Count=0
4040 Time_zero=TIMEDATE
4050 SELECT Dut$(Dut_no)
4060 CASE "PRI-BAT"
4070 GOSUB Measure_pri_bat
4080 CASE "BATTERY"
4090 GOSUB Measure_battery
4100 CASE "EDLC"
4110 GOSUB Measure_edlc
4120 CASE "PTC"
4130 GOSUB Measure_vi
4140 CASE "tau"
4150 GOSUB Measure_tau
4160 CASE "Phone"
4170 GOSUB Measure_phone
4180 END SELECT
4190 RETURN
4200 Measure_pri_bat: !
4210 GOSUB Discharge_pri
4220 RETURN
4230 Measure_battery: !
4240 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]"
4250 FOR I=1 TO No_cycle !배터리 충방전실험을 n회 실시
4260 C_i_capa=0
4270 C_w_capa=0
4280 D_i_capa=0
4290 D_w_capa=0
4300 GOSUB Cycle
4310 OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa
4320 NEXT I
4330 RETURN
4340 Measure_phone: !
4350 GOSUB Cycle
4360 RETURN
4370 Measure_edlc: !
4380 OUTPUT @File2;"Cycle,Charge Time[s],Charge i Capa[mAh],Charge W Capa[mWh], Discharge Time[s],Discharge i Capa[mAh], Discharge W Capa[mWh], Capacity[F]"
4390 FOR I=1 TO No_cycle
4400 C_i_capa=0
4410 C_w_capa=0
4420 D_i_capa=0
4430 D_w_capa=0
4440 Capacity=0
4450 GOSUB Cycle
4460 OUTPUT @File2;I,C_time*60,C_i_capa,C_w_capa*1000,D_time*60,-D_i_capa,-D_w_capa*1000,Capacity
4470 NEXT I
4480 RETURN
4490 Measure_vi: !
4500 FOR Volt=Volt_start TO Volt_stop STEP Volt_step
4510 Cmd$="V5" !32V
4520 Cmd$=Cmd$&" D "&VAL$(Volt)&"V" !D 2.0V
4530 Cmd$=Cmd$&" D "&VAL$(Limit)&"A" !D 2.0A
4540 OUTPUT @Src;Cmd$ !"V5 D 1V D 2A"
4550 OUTPUT @Src;"E" !Operate ON
4560 T=TIMEDATE
4570 Time_elapsed=(T-Time_zero)/60
4580 GOSUB Reading
4590 Curr=Data
4600 GOSUB Data_process
4610 WAIT Wait
4620 NEXT Volt
4630 OUTPUT @Src;"H" !Operate OFF
4640 RETURN
4650 Measure_tau: !
4660 Volt=Volt_set
4670 Cmd$="V5" !32V
4680 Cmd$=Cmd$&" D "&VAL$(Volt)&"V" !D 12V
4690 Cmd$=Cmd$&" D "&VAL$(Limit)&"A" !D 2.0A
4700 OUTPUT @Src;Cmd$ !"V5 D 1V D 2A"
4710 OUTPUT @Src;"E" !Operate ON
4720 Time_zero=TIMEDATE
4730 LOOP
4740 T=TIMEDATE
4750 Time_elapsed=(T-Time_zero) !second
4760 GOSUB Reading
4770 Curr=Data
4780 GOSUB Data_process
4790 EXIT IF Time_elapsed>Time_set
4800 END LOOP
4810 OUTPUT @Src;"H" !Operate OFF
4820 RETURN
4830 Charge1: !
4840 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4850 !충전. +부호 정전류, 전압제한(전압을 읽는다.)
4860 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4870 Test$="C"
4880 SELECT Inst$(Inst_no)
4890 CASE "TR6143"
4900 Cmd$="I4" !2A range
4910 Cmd$=Cmd$&" D "&VAL$(Ic)&"A" !D 2.0A
4920 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V
4930 OUTPUT @Src;Cmd$ !"I4 D 2A D 4.2V"
4940 WAIT Wait
4950 OUTPUT @Src;"E" !Operate ON
4960 WAIT Wait
4970 CASE "66332A"
4980 OUTPUT @Src;"VOLT ";Vc
4990 OUTPUT @Src;"CURR ";Ic
5000 END SELECT
5010 C_start_time=TIMEDATE
5020 Pre_t=C_start_time
5030 Curr=Ic
5040 LOOP
5050 T=TIMEDATE
5060 Time_elapsed=(T-Time_zero)/60
5070 GOSUB Reading
5080 SELECT Inst$(Inst_no)
5090 CASE "TR6143"
5100 Volt=Data
5110 CASE "66332A"
5120 Data=Volt
5130 END SELECT
5140 ! IF Volt>Pre_v THEN !충전 전압이 상승하면
5150 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.01V 이상이면 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5160 GOSUB Data_process
5170 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
5180 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
5190 Pre_t=T
5200 END IF
5210 ! EXIT IF Volt>=((1*Vc)+.01) !측정 전압이 충전최고 전압 에 도달하면
5220 EXIT IF Volt>=((1*Vc))-.001 !측정 전압이 충전최고 전압 에 도달하면
5230 END LOOP
5240 !!!!!!!!! 마지막 기록
5250 GOSUB Data_process
5260 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
5270 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
5280 !!!!!!!!!
5290 ! OUTPUT @Src;"H" !Operate OFF
5300 ! WAIT Wait
5310 RETURN
5320 Charge2:!
5330 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5340 !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.)
5350 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5360 SELECT Inst$(Inst_no)
5370 CASE "TR6143"
5380 Cmd$="V5" !V5 32V range
5390 Cmd$=Cmd$&" D "&VAL$(Vc-.005)&"V" !D 4.2V
5400 Cmd$=Cmd$&" D "&VAL$(Ic*1)&"A" !D 2.0A
5410 OUTPUT @Src;Cmd$ !"V5 D 4.2V D 2.0A"
5420 WAIT Wait
5430 ! OUTPUT @Src;"E" !Operate ON
5440 ! WAIT Wait
5450 CASE "66332A"
5460 OUTPUT @Src;"VOLT ";Vc
5470 OUTPUT @Src;"CURR ";Ic
5480 END SELECT
5490 Pre_v=Ic !충전 전류(Ic)를 초기값으로 기억한다.
5500 Volt=Vc !충전전압은 일정하다.
5510 LOOP
5520 T=TIMEDATE
5530 Time_elapsed=(T-Time_zero)/60
5540 GOSUB Reading !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다.
5550 SELECT Inst$(Inst_no)
5560 CASE "TR6143"
5570 Curr=Data
5580 CASE "66332A"
5590 Data=Curr
5600 END SELECT
5610 ! IF Curr<Pre_v THEN !측정 전류가 서서히 낮아지면
5620 IF ABS(Curr-Pre_v)>=.01 THEN !전류차이가 .01A 이상이면 !!!!!!!!!!!!!!!!!!!!!
5630 GOSUB Data_process
5640 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
5650 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !WA = A x V x hour
5660 Pre_t=T
5670 END IF
5680 EXIT IF Curr<=1*Ic_end !현재 전류가 종료전류 105% 에 도달하면
5690 END LOOP
5700 !!!!! 마지막 기록
5710 GOSUB Data_process
5720 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
5730 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !WA = A x V x hour
5740 !!!!!
5750 C_time=(T-C_start_time)/60
5760 ! OUTPUT @Src;"H" !Operate OFF
5770 ! WAIT Wait
5780 RETURN
5790 Discharge: !
5800 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5810 !방전 전류는 -로 표기한다.
5820 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5830 Test$="D"
5840 SELECT Inst$(Inst_no)
5850 CASE "TR6143"
5860 Cmd$="I4" !2A range
5870 Cmd$=Cmd$&" D "&VAL$(Id)&"A" !D -2.0A
5880 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V
5890 OUTPUT @Src;Cmd$ !"I4 D -2A D 4.2V"
5900 WAIT Wait
5910 OUTPUT @Src;"E" !Operate ON
5920 WAIT Wait
5930 CASE "66332A"
5940 OUTPUT @Src;"VOLT ";Vd
5950 OUTPUT @Src;"CURR ";-Id !양수이어야한다.
5960 END SELECT
5970 Pre_v=Vc
5980 D_start_time=TIMEDATE
5990 Pre_t=D_start_time
6000 Curr=Id !방전전류(-값을 갖는다.)는 일정하다.
6010 Set80=0
6020 Set40=0
6030 LOOP
6040 T=TIMEDATE
6050 Time_elapsed=(T-Time_zero)/60
6060 GOSUB Reading !일정 전류 방전 , 전압이 측정된다.
6070 SELECT Inst$(Inst_no)
6080 CASE "TR6143"
6090 Volt=Data
6100 CASE "66332A"
6110 Data=Volt
6120 END SELECT
6130 ! IF Volt<Pre_v THEN !측정전압이 서서히 낮아지면(방전이므로)
6140 IF Set80=0 AND Volt<Vc*.8 THEN !방전전압이 충전전압의 80%가 되면 한번만 수행
6150 V80=Volt
6160 T80=Time_elapsed*60
6170 Set80=1
6180 END IF
6190 IF Set40=0 AND Volt<Vc*.4 THEN !방전전압이 충전전압의 40%가 되면 한번만 수행
6200 V40=Volt
6210 T40=Time_elapsed*60
6220 Set40=1
6230 END IF
6240 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.005V 이상이면 기록한다 !!!!!!!!!!!!!!!!!
6250 GOSUB Data_process
6260 D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
6270 D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
6280 Pre_t=T
6290 END IF
6300 EXIT IF Volt<=(Vd+.01) !현재 전압이 파워서플라이 세팅값 이하로 떨어지지 않기 때문에 0.01V
6310 END LOOP
6320 !!!! 마지막 기록
6330 GOSUB Data_process
6340 D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
6350 D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
6360 !!!!!!!!
6370 D_time=(T-D_start_time)/60
6380 IF (V80-V40)<>0 THEN
6390 Capacity=Id*(T80-T40)/(V80-V40)!기울기가 -이므로
6400 END IF
6410 OUTPUT @Src;"H" !Operate OFF
6420 WAIT Wait
6430 RETURN
6440 Discharge_pri: !
6450 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6460 !방전 전류는 -로 표기한다.
6470 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6480 Test$="D"
6490 Cmd$="I4" !2A range
6500 Cmd$=Cmd$&" D "&VAL$(Id)&"A" !D -2.0A
6510 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V
6520 OUTPUT @Src;Cmd$ !"I4 D -2A D 4.2V"
6530 WAIT Wait
6540 OUTPUT @Src;"E" !Operate ON
6550 WAIT Wait
6560 Pre_v=Vc
6570 D_start_time=TIMEDATE
6580 Pre_t=D_start_time
6590 Curr=Id !방전전류(-값을 갖는다.)는 일정하다.
6600 LOOP
6610 T=TIMEDATE
6620 Time_elapsed=(T-Time_zero)/60
6630 GOSUB Reading !일정 전류 방전 , 전압이 측정된다.
6640 Volt=Data
6650 ! IF Volt<Pre_v THEN !측정전압이 서서히 낮아지면(방전이므로)
6660 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.01V 이상이면
6670 GOSUB Data_process
6680 D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour
6690 D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour
6700 Pre_t=T
6710 END IF
6720 EXIT IF Volt<=Vd+.01 !현재 전압이 방전 최저전압에 도달하면
6730 END LOOP
6740 D_time=(T-D_start_time)/60
6750 OUTPUT @File1;"discharge i capa [mAh]=,",D_i_capa
6760 OUTPUT @File1;"discharge w capa [Wh]=,",D_w_capa
6770 OUTPUT @Src;"H" !Operate OFF
6780 WAIT Wait
6790 RETURN
6800 Data_process: !
6810 Count=Count+1
6820 SELECT Dut$(Dut_no)
6830 CASE "PRI-BAT"
6840 X1=Time_elapsed
6850 Y1=(Volt*2/Vc)*100-100 !전압 [%]
6860 Y2=(Curr/Id)*100 !전류 [%]
6870 CASE "BATTERY","EDLC"
6880 X1=Time_elapsed
6890 Y1=(Volt*2/Vc)*100-100 !전압 [%]
6900 Y2=(Curr/Ic)*100 !전류 [%]
6910 CASE "PTC"
6920 X1=Volt
6930 Y1=Curr
6940 Y2=0
6950 CASE "tau"
6960 X1=Time_elapsed
6970 Y1=Curr
6980 Y2=0
6990 END SELECT
7000 Y(1)=Y1
7010 Y(2)=Y2
7020 CONTROL @Strip;SET("POINT LOCATION":X1,"VALUES":Y(*))
7030 PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-5);"m, V=";Volt;"V, I=";Curr;"A"
7040 IF NOT (Dut$(Dut_no)="BATTERY" AND No_cycle>5000) THEN !1000회 실험은 데이터를 저장하지 않는다.
7050 OUTPUT @File1;Count,Time_elapsed,Volt,Curr
7060 END IF
7070 Pre_v=Data
7080 SELECT Dut$(Dut_no)
7090 CASE "BATTERY"
7100 IF Battery$(Battery_no)="Li-S4" THEN
7110 GOSUB Reading34970
7120 OUTPUT @File3;Count,V(*)
7130 END IF
7140 END SELECT
7150 RETURN
7160 Reading: !
7170 SELECT Inst$(Inst_no)
7180 CASE "TR6143"
7190 LOOP
7200 GOSUB Reading_tr6143
7210 EXIT IF Data<>0
7220 END LOOP
7230 CASE "66332A"
7240 GOSUB Reading_66332a
7250 END SELECT
7260 RETURN
7270 Reading_tr6143: !
7280 ! 전압을 측정하면 나타나는 데이터 포맷
7290 ! 12345678901234
7300 !"DV +03.857E+0" 원래
7310 !" DV +03.857E+0" 앞에 공백이 하나 추가되어 나온 적이 있다.
7320 ! 전압를 측정하면 나타나는 데이터 포맷
7330 ! 12345678901234
7340 !"DI +0.6310E+0" 원래
7350 ENTER @Src;A1$
7360 A2$=TRIM$(A1$) !앞뒤 공백 모두 없앤다
7370 Data=VAL(A2$[3,13])
7380 SELECT Dut$(Dut_no)
7390 CASE "BATTERY"
7400 ! Data=PROUND(Data,-3) !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로
7410 Data=DROUND(Data,3)!유효수자 3자리
7420 CASE "tau"
7430 WAIT .05 !이보다 빨리 측정못한다.
7440 END SELECT
7450 RETURN
7460 Reading_66332a: !
7470 OUTPUT @Src;"MEAS:VOLT?"
7480 ENTER @Src;Volt
7490 OUTPUT @Src;"MEAS:CURR?"
7500 ENTER @Src;Curr
7510 RETURN
7520 Reading34970: !
7530 OUTPUT @Sw;"MEAS:VOLT:DC? (@201:204)"
7540 ENTER @Sw;V(*)
7550 RETURN
7560 Inst6143_open: !
7570 ASSIGN @Src TO 714 !advantest TR6143
7580 OUTPUT @Src;"C" !initialize
7590 OUTPUT @Src;"OM1" !ascii, OM0=set value, OM1=meas value
7600 SELECT Dut$(Dut_no)
7610 CASE "BATTERY"
7620 IF Battery$(Battery_no)="Li-S4" THEN
7630 GOSUB Inst34970_open
7640 END IF
7650 END SELECT
7660 RETURN
7670 Inst66332_open: !
7680 ASSIGN @Src TO 709
7690 OUTPUT @Src;"OUTP ON"
7700 SELECT Dut$(Dut_no)
7710 CASE "BATTERY"
7720 IF Battery$(Battery_no)="Li-S4" THEN
7730 GOSUB Inst34970_open
7740 END IF
7750 END SELECT
7760 RETURN
7770 Inst34970_open: !
7780 DIM V(4) !4채널 전압
7790 ASSIGN @Sw TO 709 !Agilent 34970A
7800 ! OUTPUT @Sw;"CONF:VOLT:DC AUTO (@201:204)"
7810 OUTPUT @Sw;"SENS:VOLT:DC:RANG:AUTO ON,(@201:204)"
7820 OUTPUT @Sw;"SENS:VOLT:DC:NPLC 2,(@201:204)"
7830 RETURN
7840 Inst_close: !
7850 SELECT Inst$(Inst_no)
7860 CASE "TR6143"
7870 CASE "66332A"
7880 OUTPUT @Src;"OUTP OFF"
7890 END SELECT
7900 RETURN
7910 Chart_var: !
7920 SELECT Dut$(Dut_no)
7930 CASE "PRI-BAT"
7940 X_origin=0!time=0
7950 X_range=1*60 !1 hours *60min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7960 X_axis_label$="Elapsed Time [Min]"
7970 Y_origin=-110
7980 Y_range=220
7990 Y_axis_label$="Volt & Current [%]"
8000 CASE "BATTERY"
8010 X_origin=0!time=0
8020 X_range=1*60 !1 hours *60min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8030 X_axis_label$="Elapsed Time [Min]"
8040 Y_origin=-110
8050 Y_range=220
8060 Y_axis_label$="Volt & Current [%]"
8070 CASE "EDLC"
8080 X_origin=0!time=0
8090 X_range=60 !10min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8100 X_axis_label$="Elapsed Time [Min]"
8110 Y_origin=-110
8120 Y_range=220
8130 Y_axis_label$="Volt & Current [%]"
8140 CASE "PTC"
8150 X_origin=Volt_start
8160 X_range=Volt_stop-Volt_start !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8170 X_axis_label$="Applied Volt [V]"
8180 Y_origin=0
8190 Y_range=Limit
8200 Y_axis_label$="Current [A]"
8210 CASE "tau"
8220 X_origin=0
8230 X_range=Time_set !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8240 X_axis_label$="Elapsed Time [m]"
8250 Y_origin=0
8260 Y_range=Limit
8270 Y_axis_label$="Current [A]"
8280 CASE "Phone"
8290 X_origin=0!time=0
8300 X_range=1*60 !1 hours *60min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
8310 X_axis_label$="Elapsed Time [Min]"
8320 Y_origin=-110
8330 Y_range=220
8340 Y_axis_label$="Volt & Current [%]"
8350 END SELECT
8360 RETURN
8370 Init_chart: !
8380 DIM X_axis_label$[25],Y_axis_label$[25]
8390 INTEGER Trace_num
8400 INTEGER Screen_dims(1:2),Gwindow_dims(1:4)
8410 REAL Y(1:2) !Y(1) Volt, Y(2) Current
8420 GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height.
8430 !
8440 ! Set the dimensions of the graphics window using GESCAPE 33 so
8450 ! that it is centered on the screen.
8460 !
8470 Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left.
8480 Gwindow_dims(2)=Screen_dims(2)*.2 ! Y of upper left.
8490 Gwindow_dims(3)=Screen_dims(1)*.7 ! Width.
8500 Gwindow_dims(4)=Screen_dims(2)*.6 ! Height.
8510 GESCAPE CRT,33;Gwindow_dims(*) ! Set graphics window geometry.
8520 !
8530 GESCAPE CRT,35 ! Move the graphics window to the top.
8540 !
8550 ! Create a stripchart. Make it invisible until all changes are made.
8560 !
8570 ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0)
8580 !
8590 ! Set the overall attributes.
8600 !
8610 CONTROL @Strip;SET("TITLE":"Data Logger")
8620 CONTROL @Strip;SET("MINIMUM SCROLL":2)
8630 CONTROL @Strip;SET("MOVABLE":0)
8640 CONTROL @Strip;SET("MAXIMIZABLE":0)
8650 CONTROL @Strip;SET("X":0,"Y":0)
8660 !
8670 ! Size the stripchart to exactly fill the graphics window.
8680 !
8690 Vert_borders=26
8700 Horiz_borders=8
8710 Height=Gwindow_dims(4)-Vert_borders
8720 Width=Gwindow_dims(3)-Horiz_borders
8730 CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height)
8740 !
8750 CONTROL @Strip;SET("CURRENT AXIS":"X")
8760 CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range)
8770 CONTROL @Strip;SET("AXIS LABEL":X_axis_label$)
8780 !CONTROL @Strip;SET("DIGITS":5)
8790 !
8800 CONTROL @Strip;SET("CURRENT AXIS":"Y")
8810 CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range)
8820 CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$)
8830 !
8840 CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart.
8850 !
8860 RETURN
8870 END