"TR6143-bas"의 두 판 사이의 차이
(같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | + | [[Advantest TR6143]] | |
− | 20 ! 2020-01- | + | <pre> |
− | 30 OPTION BASE 1 | + | 10 ! |
− | + | 20 ! 2020-01-17 배터리 충방전 프로그램 | |
− | 50 | + | 30 ! 2020-01-26 PTC용 표준 VI 측정추가 |
− | 60 | + | 40 OPTION BASE 1 |
− | 70 | + | 50 INTEGER No_cycle !충반전 실험 횟수 |
− | + | 60 INTEGER Size,Length,Btn | |
− | + | 70 DIM Msg$[25] | |
− | + | 80 No_cycle=2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 90 Wait=.1 !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간 | |
− | + | 100 GOSUB Dut_select | |
− | + | 110 GOSUB Stimulus_select | |
− | + | 120 GOSUB Fileopen | |
− | + | 130 GOSUB Inst6143_open | |
− | + | 140 GOSUB Measure | |
− | + | 150 GOSUB Fileclose | |
− | + | 160 ! PAUSE | |
− | + | 170 STOP | |
− | + | 180 Dut_select: ! | |
− | + | 190 INTEGER Dut_no | |
− | + | 200 Size=4 | |
− | + | 210 Length=7 | |
− | + | 220 ALLOCATE Dut$(Size)[Length] | |
− | + | 230 Dut$(1)="BATTERY" | |
− | + | 240 Dut$(2)="EDLC" | |
− | + | 250 Dut$(3)="PTC" | |
− | + | 260 Dut$(4)="tau" | |
− | + | 270 Msg$="DUT 종류" | |
− | + | 280 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Dut$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Dut_no) | |
− | + | 290 Dut_no=Dut_no+1 | |
− | + | 300 SELECT Dut$(Dut_no) | |
− | + | 310 CASE "BATTERY" | |
− | + | 320 GOSUB Battery_select | |
− | + | 330 CASE "EDLC" | |
− | + | 340 GOSUB Edlc_select | |
− | + | 350 CASE "PTC" | |
− | 380 | + | 360 GOSUB Ptc_select |
− | + | 370 CASE "tau" | |
− | 400 | + | 380 GOSUB Tau_select |
− | 410 | + | 390 END SELECT |
− | 420 | + | 400 RETURN |
− | 430 | + | 410 Battery_select: ! |
− | 440 | + | 420 INTEGER Battery_no |
− | 450 | + | 430 Size=7 |
− | 460 | + | 440 Length=8 |
− | 470 | + | 450 ALLOCATE Battery$(Size)[Length] |
− | 480 | + | 460 Battery$(1)="Li" |
− | 490 | + | 470 Battery$(2)="NiCd" |
− | 500 | + | 480 Battery$(3)="3-NiCd" |
− | 510 | + | 490 Battery$(4)=" " |
− | + | 500 Battery$(5)="BAT" | |
− | 530 | + | 510 Battery$(6)="Li-S4" !4개 직렬, 각셀을 34970A로 측정 |
− | + | 520 Battery$(7)="GrandMax" | |
− | + | 530 Msg$="배터리 종류" | |
− | 560 | + | 540 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no) |
− | 570 | + | 550 Battery_no=Battery_no+1 |
− | 580 | + | 560 RETURN |
− | 590 | + | 570 Edlc_select: ! |
− | + | 580 INTEGER Edlc_no | |
− | + | 590 Size=4 | |
− | + | 600 Length=10 | |
− | + | 610 ALLOCATE Edlc$(Size)[Length] | |
− | + | 620 Edlc$(1)="2.7V 0~1F" | |
− | + | 630 Edlc$(2)="2.7V 1~10F" | |
− | + | 640 Edlc$(3)="5.5V 0~1F" | |
− | + | 650 Edlc$(4)="5.5V 1~10F" | |
− | + | 660 Msg$="EDLC 종류" | |
− | + | 670 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Edlc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Edlc_no) | |
− | + | 680 Edlc_no=Edlc_no+1 | |
− | + | 690 RETURN | |
− | + | 700 Ptc_select: ! | |
− | + | 710 INTEGER Ptc_no | |
− | + | 720 Size=6 | |
− | + | 730 Length=6 | |
− | + | 740 ALLOCATE Ptc$(Size)[Length] | |
− | + | 750 Ptc$(1)="SPL1" | |
− | + | 760 Ptc$(2)=" " | |
− | + | 770 Ptc$(3)=" " | |
− | + | 780 Msg$="PTC 종류" | |
− | + | 790 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Ptc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Ptc_no) | |
− | + | 800 Ptc_no=Ptc_no+1 | |
− | + | 810 RETURN | |
− | + | 820 Tau_select: ! | |
− | + | 830 INTEGER Tau_no | |
− | + | 840 Size=6 | |
− | + | 850 Length=25 | |
− | + | 860 ALLOCATE Tau$(Size)[Length] | |
− | + | 870 Tau$(1)="V12T100" !12V 100sec | |
− | + | 880 Tau$(2)="V12T10" | |
− | + | 890 Tau$(3)=" " | |
− | + | 900 Msg$="Tau(Time-Constant) 종류" | |
− | + | 910 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Tau$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Tau_no) | |
− | + | 920 Tau_no=Tau_no+1 | |
− | + | 930 RETURN | |
− | + | 940 Stimulus_select: ! | |
− | + | 950 SELECT Dut$(Dut_no) | |
− | + | 960 CASE "BATTERY" | |
− | + | 970 SELECT Battery$(Battery_no) | |
− | + | 980 CASE "Li" | |
− | + | 990 Vc=4.2!4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1000 Vd=3.2!3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1010 Ic=2 !100mA 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1020 Ic_end=.5 !충전 종료 전류 !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1030 Id=-2 !100mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | 1060 | + | 1040 CASE "GrandMax" |
− | + | 1050 Vc=4.4!4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1060 Vd=3.2!3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1070 Ic=1 !1A 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1080 Ic_end=.2 !200mA 충전 종료 전류 !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1090 Id=-1 !1A 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
− | + | 1100 CASE "NiCd"!표준 1.2V | |
− | + | 1110 Vc=1.3!1.5V 충전전압 | |
− | + | 1120 Vd=.9!0.9V 방전종료전압 | |
− | + | 1130 Ic=.001!100mA 충전전류 | |
− | + | 1140 Ic_end=.0005!충전 종료 전류 | |
− | + | 1150 Id=-.0001!100mA 방전전류 음수 | |
− | + | 1160 CASE "3-NiCd"!표준 3.6V | |
− | + | 1170 Vc=4.7!4.1V 충전전압 | |
− | + | 1180 Vd=1.5!3.1V 방전종료전압 | |
− | + | 1190 Ic=.0005!100mA 충전전류 | |
− | + | 1200 Ic_end=.00035!충전 종료 전류 | |
− | + | 1210 Id=-5.E-5!100mA 방전전류 음수 | |
− | + | 1220 CASE "BAT"!표준 3.6V | |
− | + | 1230 Vc=3.5!4.1V 충전전압 | |
− | + | 1240 Vd=2.5!1.V 방전종료전압 | |
− | + | 1250 Ic=.02!100mA 충전전류 | |
− | + | 1260 Ic_end=.006!충전 종료 전류 | |
− | + | 1270 Id=-.005!-10mA 방전전류 음수 | |
− | + | 1280 CASE "Li-S4" | |
− | + | 1290 Vc=16.8!4.2x4 충전전압 4.2x4=16.8 3.7x4=14.8 nominal | |
− | + | 1300 Vd=12.8!3.2x4 방전종료전압 3.2x4=12.8 | |
− | + | 1310 Ic=2 !2A 충전전류 | |
− | + | 1320 Ic_end=1!충전 종료 전류 | |
− | + | 1330 Id=-2 !-2A 방전전류 음수 | |
− | + | 1340 CASE "" | |
− | + | 1350 Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], " | |
− | + | 1360 END SELECT | |
− | + | 1370 CASE "EDLC" | |
− | + | 1380 SELECT Edlc$(Edlc_no) | |
− | + | 1390 CASE "2.7V 0~1F" | |
− | + | 1400 Vc=2.7 ! 충전전압 | |
− | + | 1410 Ic=.1 ! 충전전류 | |
− | + | 1420 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% | |
− | + | 1430 Id=-.1 ! 100mA 방전전류 음수 | |
− | + | 1440 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 | |
− | + | 1450 CASE "2.7V 1~10F" | |
− | + | 1460 Vc=2.7 ! 충전전압 | |
− | + | 1470 Ic=.5 ! 충전전류 | |
− | + | 1480 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% | |
− | + | 1490 Id=-.5 ! 500mA 방전전류 음수 | |
− | + | 1500 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 | |
− | + | 1510 CASE "5.5V 0~1F" | |
− | + | 1520 Vc=5.5 ! 충전전압 | |
− | + | 1530 Ic=.1 ! 충전전류 | |
− | + | 1540 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% | |
− | + | 1550 Id=-.1 ! 100mA 방전전류 음수 | |
− | + | 1560 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 | |
− | + | 1570 CASE "5.5V 1~10F" | |
− | + | 1580 Vc=5.5 ! 충전전압 | |
− | + | 1590 Ic=.5 ! 충전전류 | |
− | + | 1600 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% | |
− | + | 1610 Id=-.5 ! 500mA 방전전류 음수 | |
− | + | 1620 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 | |
− | + | 1630 END SELECT | |
− | + | 1640 CASE "PTC" | |
− | + | 1650 SELECT Ptc$(Ptc_no) | |
− | + | 1660 CASE "SPL1" | |
− | + | 1670 Wait=1 | |
− | + | 1680 Volt_start=0 | |
− | + | 1690 Volt_stop=12 | |
− | + | 1700 Volt_step=.05 | |
− | + | 1710 Limit=2 !2A | |
− | + | 1720 END SELECT | |
− | + | 1730 CASE "tau" | |
− | + | 1740 SELECT Tau$(Tau_no) | |
− | + | 1750 CASE "V12T100" | |
− | + | 1760 Volt_set=12 !12V | |
− | + | 1770 Time_set=100 !100sec | |
− | + | 1780 Limit=2 !2A | |
− | + | 1790 CASE "V12T10" | |
− | + | 1800 Volt_set=12 !12V | |
− | + | 1810 Time_set=10 !100sec | |
− | + | 1820 Limit=2 !2A | |
− | + | 1830 END SELECT | |
− | + | 1840 END SELECT | |
− | + | 1850 !GOSUB Dialog_string3 | |
− | 1880 | + | 1860 RETURN |
− | + | 1870 Fileopen:! | |
− | + | 1880 DIM Dhms$[8] | |
− | + | 1890 DIM Filename1$[20],Filename2$[20],Filename3$[20] | |
− | + | 1900 T=TIMEDATE | |
− | + | 1910 Time$=TIME$(T) !하루 추가 +24*3600 | |
− | + | 1920 Date$=DATE$(T) | |
− | + | 1930 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] | |
− | + | 1940 Filename1$=Dhms$&".txt" | |
− | + | 1950 CREATE Filename1$,1 | |
− | + | 1960 ASSIGN @File1 TO Filename1$;FORMAT ON | |
− | + | 1970 SELECT Dut$(Dut_no) | |
− | + | 1980 CASE "BATTERY","EDLC" | |
− | + | 1990 T=T+1 !1초 늦게 | |
− | + | 2000 Time$=TIME$(T) | |
− | + | 2010 Date$=DATE$(T) | |
− | + | 2020 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] | |
− | + | 2030 Filename2$=Dhms$&".txt" | |
− | + | 2040 CREATE Filename2$,1 | |
− | + | 2050 ASSIGN @File2 TO Filename2$;FORMAT ON | |
− | + | 2060 SELECT Dut$(Dut_no) | |
− | + | 2070 CASE "BATTERY" | |
− | + | 2080 IF Battery$(Battery_no)="Li-S4" THEN!직렬배터리 4개에 대한 각 셀별 전압 기록용 | |
− | + | 2090 T=T+1 !1초 늦게 | |
− | + | 2100 Time$=TIME$(T) | |
− | + | 2110 Date$=DATE$(T) | |
− | + | 2120 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] | |
− | + | 2130 Filename3$=Dhms$&".txt" | |
− | + | 2140 CREATE Filename3$,1 | |
− | + | 2150 ASSIGN @File3 TO Filename3$;FORMAT ON | |
− | + | 2160 END IF | |
− | + | 2170 END SELECT | |
− | + | 2180 END SELECT | |
− | + | 2190 RETURN | |
− | + | 2200 Fileclose:! | |
− | + | 2210 ASSIGN @File1 TO * | |
− | + | 2220 SELECT Dut$(Dut_no) | |
− | + | 2230 CASE "BATTERY" | |
− | + | 2240 ASSIGN @File2 TO * | |
− | + | 2250 IF Battery$(Battery_no)="Li-S4" THEN | |
− | + | 2260 ASSIGN @File3 TO * | |
− | + | 2270 END IF | |
− | + | 2280 CASE "EDLC" | |
− | + | 2290 ASSIGN @File2 TO * | |
− | + | 2300 END SELECT | |
− | + | 2310 RETURN | |
− | + | 2320 Measure: ! | |
− | + | 2330 INTEGER I | |
− | + | 2340 DIM Cmd$[25],A1$[14],A2$[14],Test$[1] | |
− | + | 2350 SELECT Dut$(Dut_no) | |
− | + | 2360 CASE "tau","EDLC" | |
− | + | 2370 OUTPUT @File1;"No.,Time[s],Volt[V],Curr[A]" | |
− | + | 2380 CASE ELSE | |
− | + | 2390 OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]" | |
− | + | 2400 END SELECT | |
− | + | 2410 GOSUB Chart_var | |
− | + | 2420 GOSUB Init_chart | |
− | + | 2430 Count=0 | |
− | + | 2440 Time_zero=TIMEDATE | |
− | + | 2450 SELECT Dut$(Dut_no) | |
− | + | 2460 CASE "BATTERY" | |
− | + | 2470 GOSUB Measure_battery | |
− | + | 2480 CASE "EDLC" | |
− | + | 2490 GOSUB Measure_edlc | |
− | + | 2500 CASE "PTC" | |
− | + | 2510 GOSUB Measure_vi | |
− | + | 2520 CASE "tau" | |
− | + | 2530 GOSUB Measure_tau | |
− | + | 2540 END SELECT | |
− | + | 2550 RETURN | |
− | + | 2560 Measure_battery: ! | |
− | + | 2570 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]" | |
− | + | 2580 FOR I=1 TO No_cycle !배터리 충방전실험을 5회 실시 | |
− | + | 2590 C_i_capa=0 | |
− | + | 2600 C_w_capa=0 | |
− | + | 2610 D_i_capa=0 | |
− | + | 2620 D_w_capa=0 | |
− | + | 2630 GOSUB Cycle | |
+ | 2640 OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa | ||
+ | 2650 NEXT I | ||
2660 RETURN | 2660 RETURN | ||
− | 2670 END | + | 2670 Measure_edlc: ! |
+ | 2680 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]" | ||
+ | 2690 FOR I=1 TO No_cycle | ||
+ | 2700 C_i_capa=0 | ||
+ | 2710 C_w_capa=0 | ||
+ | 2720 D_i_capa=0 | ||
+ | 2730 D_w_capa=0 | ||
+ | 2740 Capacity=0 | ||
+ | 2750 GOSUB Cycle | ||
+ | 2760 OUTPUT @File2;I,C_time*60,C_i_capa,C_w_capa*1000,D_time*60,-D_i_capa,-D_w_capa*1000,Capacity | ||
+ | 2770 NEXT I | ||
+ | 2780 RETURN | ||
+ | 2790 Measure_vi: ! | ||
+ | 2800 FOR Volt=Volt_start TO Volt_stop STEP Volt_step | ||
+ | 2810 Cmd$="V5" !32V | ||
+ | 2820 Cmd$=Cmd$&" D "&VAL$(Volt)&"V" !D 2.0V | ||
+ | 2830 Cmd$=Cmd$&" D "&VAL$(Limit)&"A" !D 2.0A | ||
+ | 2840 OUTPUT @Src;Cmd$ !"V5 D 1V D 2A" | ||
+ | 2850 OUTPUT @Src;"E" !Operate ON | ||
+ | 2860 T=TIMEDATE | ||
+ | 2870 Time_elapsed=(T-Time_zero)/60 | ||
+ | 2880 GOSUB Reading | ||
+ | 2890 Curr=Data | ||
+ | 2900 GOSUB Data_process | ||
+ | 2910 WAIT Wait | ||
+ | 2920 NEXT Volt | ||
+ | 2930 OUTPUT @Src;"H" !Operate OFF | ||
+ | 2940 RETURN | ||
+ | 2950 Measure_tau: ! | ||
+ | 2960 Volt=Volt_set | ||
+ | 2970 Cmd$="V5" !32V | ||
+ | 2980 Cmd$=Cmd$&" D "&VAL$(Volt)&"V" !D 12V | ||
+ | 2990 Cmd$=Cmd$&" D "&VAL$(Limit)&"A" !D 2.0A | ||
+ | 3000 OUTPUT @Src;Cmd$ !"V5 D 1V D 2A" | ||
+ | 3010 OUTPUT @Src;"E" !Operate ON | ||
+ | 3020 Time_zero=TIMEDATE | ||
+ | 3030 LOOP | ||
+ | 3040 T=TIMEDATE | ||
+ | 3050 Time_elapsed=(T-Time_zero) !second | ||
+ | 3060 GOSUB Reading | ||
+ | 3070 Curr=Data | ||
+ | 3080 GOSUB Data_process | ||
+ | 3090 EXIT IF Time_elapsed>Time_set | ||
+ | 3100 END LOOP | ||
+ | 3110 OUTPUT @Src;"H" !Operate OFF | ||
+ | 3120 RETURN | ||
+ | 3130 Cycle: ! | ||
+ | 3140 Pre_v=0 !최초 측정 전압=0으로 가정한다. | ||
+ | 3150 GOSUB Charge1 | ||
+ | 3160 GOSUB Charge2 | ||
+ | 3170 GOSUB Discharge | ||
+ | 3180 RETURN | ||
+ | 3190 Charge1: ! | ||
+ | 3200 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 3210 !충전. +부호 정전류, 전압제한(전압을 읽는다.) | ||
+ | 3220 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 3230 Test$="C" | ||
+ | 3240 Cmd$="I4" !2A range | ||
+ | 3250 Cmd$=Cmd$&" D "&VAL$(Ic)&"A" !D 2.0A | ||
+ | 3260 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V | ||
+ | 3270 OUTPUT @Src;Cmd$ !"I4 D 2A D 4.2V" | ||
+ | 3280 WAIT Wait | ||
+ | 3290 OUTPUT @Src;"E" !Operate ON | ||
+ | 3300 WAIT Wait | ||
+ | 3310 C_start_time=TIMEDATE | ||
+ | 3320 Pre_t=C_start_time | ||
+ | 3330 Curr=Ic | ||
+ | 3340 LOOP | ||
+ | 3350 T=TIMEDATE | ||
+ | 3360 Time_elapsed=(T-Time_zero)/60 | ||
+ | 3370 GOSUB Reading | ||
+ | 3380 Volt=Data | ||
+ | 3390 ! IF Volt>Pre_v THEN !충전 전압이 상승하면 | ||
+ | 3400 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.01V 이상이면 | ||
+ | 3410 GOSUB Data_process | ||
+ | 3420 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour | ||
+ | 3430 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour | ||
+ | 3440 Pre_t=T | ||
+ | 3450 END IF | ||
+ | 3460 EXIT IF Volt>=(Vc-.001) !측정 전압이 충전최고 전압에 도달하면 | ||
+ | 3470 END LOOP | ||
+ | 3480 OUTPUT @Src;"H" !Operate OFF | ||
+ | 3490 WAIT Wait | ||
+ | 3500 RETURN | ||
+ | 3510 Charge2:! | ||
+ | 3520 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 3530 !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.) | ||
+ | 3540 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 3550 Cmd$="V5" !32V range | ||
+ | 3560 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V | ||
+ | 3570 Cmd$=Cmd$&" D "&VAL$(Ic)&"A" !D 2.0A | ||
+ | 3580 OUTPUT @Src;Cmd$ !"V5 D 4.2V D 2.0A" | ||
+ | 3590 WAIT Wait | ||
+ | 3600 OUTPUT @Src;"E" !Operate ON | ||
+ | 3610 WAIT Wait | ||
+ | 3620 Pre_v=Ic !충전 전류(Ic)를 초기값으로 기억한다. | ||
+ | 3630 Volt=Vc !충전전압은 일정하다. | ||
+ | 3640 LOOP | ||
+ | 3650 T=TIMEDATE | ||
+ | 3660 Time_elapsed=(T-Time_zero)/60 | ||
+ | 3670 GOSUB Reading !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다. | ||
+ | 3680 Curr=Data | ||
+ | 3690 ! IF Curr<Pre_v THEN !측정 전류가 서서히 낮아지면 | ||
+ | 3700 IF ABS(Curr-Pre_v)>=.01 THEN !전류차이가 .01A 이상이면 | ||
+ | 3710 GOSUB Data_process | ||
+ | 3720 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour | ||
+ | 3730 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !WA = A x V x hour | ||
+ | 3740 Pre_t=T | ||
+ | 3750 END IF | ||
+ | 3760 EXIT IF Curr<=Ic_end+.001 !현재 전류가 종료전류에 도달하면 | ||
+ | 3770 END LOOP | ||
+ | 3780 C_time=(T-C_start_time)/60 | ||
+ | 3790 OUTPUT @Src;"H" !Operate OFF | ||
+ | 3800 WAIT Wait | ||
+ | 3810 RETURN | ||
+ | 3820 Discharge: ! | ||
+ | 3830 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 3840 !방전 전류는 -로 표기한다. | ||
+ | 3850 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 3860 Test$="D" | ||
+ | 3870 Cmd$="I4" !2A range | ||
+ | 3880 Cmd$=Cmd$&" D "&VAL$(Id)&"A" !D -2.0A | ||
+ | 3890 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V | ||
+ | 3900 OUTPUT @Src;Cmd$ !"I4 D -2A D 4.2V" | ||
+ | 3910 WAIT Wait | ||
+ | 3920 OUTPUT @Src;"E" !Operate ON | ||
+ | 3930 WAIT Wait | ||
+ | 3940 Pre_v=Vc | ||
+ | 3950 D_start_time=TIMEDATE | ||
+ | 3960 Pre_t=D_start_time | ||
+ | 3970 Curr=Id !방전전류(-값을 갖는다.)는 일정하다. | ||
+ | 3980 Set80=0 | ||
+ | 3990 Set40=0 | ||
+ | 4000 LOOP | ||
+ | 4010 T=TIMEDATE | ||
+ | 4020 Time_elapsed=(T-Time_zero)/60 | ||
+ | 4030 GOSUB Reading !일정 전류 방전 , 전압이 측정된다. | ||
+ | 4040 Volt=Data | ||
+ | 4050 ! IF Volt<Pre_v THEN !측정전압이 서서히 낮아지면(방전이므로) | ||
+ | 4060 IF Set80=0 AND Volt<Vc*.8 THEN !방전전압이 충전전압의 80%가 되면 한번만 수행 | ||
+ | 4070 V80=Volt | ||
+ | 4080 T80=Time_elapsed*60 | ||
+ | 4090 Set80=1 | ||
+ | 4100 END IF | ||
+ | 4110 IF Set40=0 AND Volt<Vc*.4 THEN !방전전압이 충전전압의 40%가 되면 한번만 수행 | ||
+ | 4120 V40=Volt | ||
+ | 4130 T40=Time_elapsed*60 | ||
+ | 4140 Set40=1 | ||
+ | 4150 END IF | ||
+ | 4160 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.01V 이상이면 | ||
+ | 4170 GOSUB Data_process | ||
+ | 4180 D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour | ||
+ | 4190 D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour | ||
+ | 4200 Pre_t=T | ||
+ | 4210 END IF | ||
+ | 4220 EXIT IF Volt<=Vd+.001 !현재 전압이 방전 최저전압에 도달하면 | ||
+ | 4230 END LOOP | ||
+ | 4240 D_time=(T-D_start_time)/60 | ||
+ | 4250 Capacity=Id*(T80-T40)/(V80-V40) !기울기가 -이므로 | ||
+ | 4260 OUTPUT @Src;"H" !Operate OFF | ||
+ | 4270 WAIT Wait | ||
+ | 4280 RETURN | ||
+ | 4290 Data_process: ! | ||
+ | 4300 Count=Count+1 | ||
+ | 4310 SELECT Dut$(Dut_no) | ||
+ | 4320 CASE "BATTERY","EDLC" | ||
+ | 4330 X1=Time_elapsed | ||
+ | 4340 Y1=(Volt*2/Vc)*100-100 !전압 [%] | ||
+ | 4350 Y2=(Curr/Ic)*100 !전류 [%] | ||
+ | 4360 CASE "PTC" | ||
+ | 4370 X1=Volt | ||
+ | 4380 Y1=Curr | ||
+ | 4390 Y2=0 | ||
+ | 4400 CASE "tau" | ||
+ | 4410 X1=Time_elapsed | ||
+ | 4420 Y1=Curr | ||
+ | 4430 Y2=0 | ||
+ | 4440 END SELECT | ||
+ | 4450 Y(1)=Y1 | ||
+ | 4460 Y(2)=Y2 | ||
+ | 4470 CONTROL @Strip;SET("POINT LOCATION":X1,"VALUES":Y(*)) | ||
+ | 4480 PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-5);"m, V=";Volt;"V, I=";Curr;"A" | ||
+ | 4490 OUTPUT @File1;Count,Time_elapsed,Volt,Curr | ||
+ | 4500 Pre_v=Data | ||
+ | 4510 SELECT Dut$(Dut_no) | ||
+ | 4520 CASE "BATTERY" | ||
+ | 4530 IF Battery$(Battery_no)="Li-S4" THEN | ||
+ | 4540 GOSUB Reading34970 | ||
+ | 4550 OUTPUT @File3;Count,V(*) | ||
+ | 4560 END IF | ||
+ | 4570 END SELECT | ||
+ | 4580 RETURN | ||
+ | 4590 Reading: ! | ||
+ | 4600 LOOP | ||
+ | 4610 GOSUB Reading1 | ||
+ | 4620 EXIT IF Data<>0 | ||
+ | 4630 END LOOP | ||
+ | 4640 RETURN | ||
+ | 4650 Reading1: ! | ||
+ | 4660 ! 전압을 측정하면 나타나는 데이터 포맷 | ||
+ | 4670 ! 12345678901234 | ||
+ | 4680 !"DV +03.857E+0" 원래 | ||
+ | 4690 !" DV +03.857E+0" 앞에 공백이 하나 추가되어 나온 적이 있다. | ||
+ | 4700 ! 전압를 측정하면 나타나는 데이터 포맷 | ||
+ | 4710 ! 12345678901234 | ||
+ | 4720 !"DI +0.6310E+0" 원래 | ||
+ | 4730 ENTER @Src;A1$ | ||
+ | 4740 A2$=TRIM$(A1$) !앞뒤 공백 모두 없앤다 | ||
+ | 4750 Data=VAL(A2$[3,13]) | ||
+ | 4760 SELECT Dut$(Dut_no) | ||
+ | 4770 CASE "BATTERY" | ||
+ | 4780 ! Data=PROUND(Data,-3) !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로 | ||
+ | 4790 Data=DROUND(Data,3)!유효수자 3자리 | ||
+ | 4800 CASE "tau" | ||
+ | 4810 WAIT .05 !이보다 빨리 측정못한다. | ||
+ | 4820 END SELECT | ||
+ | 4830 RETURN | ||
+ | 4840 Reading34970: ! | ||
+ | 4850 OUTPUT @Sw;"MEAS:VOLT:DC? (@201:204)" | ||
+ | 4860 ENTER @Sw;V(*) | ||
+ | 4870 RETURN | ||
+ | 4880 Inst6143_open: ! | ||
+ | 4890 ASSIGN @Src TO 714 !advantest TR6143 | ||
+ | 4900 OUTPUT @Src;"C" !initialize | ||
+ | 4910 OUTPUT @Src;"OM1" !ascii, OM0=set value, OM1=meas value | ||
+ | 4920 SELECT Dut$(Dut_no) | ||
+ | 4930 CASE "BATTERY" | ||
+ | 4940 IF Battery$(Battery_no)="Li-S4" THEN | ||
+ | 4950 GOSUB Inst34970_open | ||
+ | 4960 END IF | ||
+ | 4970 END SELECT | ||
+ | 4980 RETURN | ||
+ | 4990 Inst34970_open: ! | ||
+ | 5000 DIM V(4) !4채널 전압 | ||
+ | 5010 ASSIGN @Sw TO 709 !Agilent 34970A | ||
+ | 5020 ! OUTPUT @Sw;"CONF:VOLT:DC AUTO (@201:204)" | ||
+ | 5030 OUTPUT @Sw;"SENS:VOLT:DC:RANG:AUTO ON,(@201:204)" | ||
+ | 5040 OUTPUT @Sw;"SENS:VOLT:DC:NPLC 2,(@201:204)" | ||
+ | 5050 RETURN | ||
+ | 5060 Chart_var: ! | ||
+ | 5070 SELECT Dut$(Dut_no) | ||
+ | 5080 CASE "BATTERY" | ||
+ | 5090 X_origin=0!time=0 | ||
+ | 5100 X_range=1*60 !1 hours *60min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 5110 X_axis_label$="Elapsed Time [Min]" | ||
+ | 5120 Y_origin=-110 | ||
+ | 5130 Y_range=220 | ||
+ | 5140 Y_axis_label$="Volt & Current [%]" | ||
+ | 5150 CASE "EDLC" | ||
+ | 5160 X_origin=0!time=0 | ||
+ | 5170 X_range=10 !10min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 5180 X_axis_label$="Elapsed Time [Min]" | ||
+ | 5190 Y_origin=-110 | ||
+ | 5200 Y_range=220 | ||
+ | 5210 Y_axis_label$="Volt & Current [%]" | ||
+ | 5220 CASE "PTC" | ||
+ | 5230 X_origin=Volt_start | ||
+ | 5240 X_range=Volt_stop-Volt_start !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 5250 X_axis_label$="Applied Volt [V]" | ||
+ | 5260 Y_origin=0 | ||
+ | 5270 Y_range=Limit | ||
+ | 5280 Y_axis_label$="Current [A]" | ||
+ | 5290 CASE "tau" | ||
+ | 5300 X_origin=0 | ||
+ | 5310 X_range=Time_set !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
+ | 5320 X_axis_label$="Elapsed Time [m]" | ||
+ | 5330 Y_origin=0 | ||
+ | 5340 Y_range=Limit | ||
+ | 5350 Y_axis_label$="Current [A]" | ||
+ | 5360 END SELECT | ||
+ | 5370 RETURN | ||
+ | 5380 Init_chart: ! | ||
+ | 5390 DIM X_axis_label$[25],Y_axis_label$[25] | ||
+ | 5400 INTEGER Trace_num | ||
+ | 5410 INTEGER Screen_dims(1:2),Gwindow_dims(1:4) | ||
+ | 5420 REAL Y(1:2) !Y(1) Volt, Y(2) Current | ||
+ | 5430 GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height. | ||
+ | 5440 ! | ||
+ | 5450 ! Set the dimensions of the graphics window using GESCAPE 33 so | ||
+ | 5460 ! that it is centered on the screen. | ||
+ | 5470 ! | ||
+ | 5480 Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left. | ||
+ | 5490 Gwindow_dims(2)=Screen_dims(2)*.2 ! Y of upper left. | ||
+ | 5500 Gwindow_dims(3)=Screen_dims(1)*.7 ! Width. | ||
+ | 5510 Gwindow_dims(4)=Screen_dims(2)*.6 ! Height. | ||
+ | 5520 GESCAPE CRT,33;Gwindow_dims(*) ! Set graphics window geometry. | ||
+ | 5530 ! | ||
+ | 5540 GESCAPE CRT,35 ! Move the graphics window to the top. | ||
+ | 5550 ! | ||
+ | 5560 ! Create a stripchart. Make it invisible until all changes are made. | ||
+ | 5570 ! | ||
+ | 5580 ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0) | ||
+ | 5590 ! | ||
+ | 5600 ! Set the overall attributes. | ||
+ | 5610 ! | ||
+ | 5620 CONTROL @Strip;SET("TITLE":"Data Logger") | ||
+ | 5630 CONTROL @Strip;SET("MINIMUM SCROLL":2) | ||
+ | 5640 CONTROL @Strip;SET("MOVABLE":0) | ||
+ | 5650 CONTROL @Strip;SET("MAXIMIZABLE":0) | ||
+ | 5660 CONTROL @Strip;SET("X":0,"Y":0) | ||
+ | 5670 ! | ||
+ | 5680 ! Size the stripchart to exactly fill the graphics window. | ||
+ | 5690 ! | ||
+ | 5700 Vert_borders=26 | ||
+ | 5710 Horiz_borders=8 | ||
+ | 5720 Height=Gwindow_dims(4)-Vert_borders | ||
+ | 5730 Width=Gwindow_dims(3)-Horiz_borders | ||
+ | 5740 CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height) | ||
+ | 5750 ! | ||
+ | 5760 CONTROL @Strip;SET("CURRENT AXIS":"X") | ||
+ | 5770 CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range) | ||
+ | 5780 CONTROL @Strip;SET("AXIS LABEL":X_axis_label$) | ||
+ | 5790 !CONTROL @Strip;SET("DIGITS":5) | ||
+ | 5800 ! | ||
+ | 5810 CONTROL @Strip;SET("CURRENT AXIS":"Y") | ||
+ | 5820 CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range) | ||
+ | 5830 CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$) | ||
+ | 5840 ! | ||
+ | 5850 CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart. | ||
+ | 5860 ! | ||
+ | 5870 RETURN | ||
+ | 5880 END | ||
+ | </pre> |
2020년 8월 20일 (목) 16:54 기준 최신판
10 ! 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=2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 90 Wait=.1 !계측기 세팅을 한 후, 첫 측정에서 측정값이 0이 나오는 현상 때문에 잠시 대기 시간 100 GOSUB Dut_select 110 GOSUB Stimulus_select 120 GOSUB Fileopen 130 GOSUB Inst6143_open 140 GOSUB Measure 150 GOSUB Fileclose 160 ! PAUSE 170 STOP 180 Dut_select: ! 190 INTEGER Dut_no 200 Size=4 210 Length=7 220 ALLOCATE Dut$(Size)[Length] 230 Dut$(1)="BATTERY" 240 Dut$(2)="EDLC" 250 Dut$(3)="PTC" 260 Dut$(4)="tau" 270 Msg$="DUT 종류" 280 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Dut$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Dut_no) 290 Dut_no=Dut_no+1 300 SELECT Dut$(Dut_no) 310 CASE "BATTERY" 320 GOSUB Battery_select 330 CASE "EDLC" 340 GOSUB Edlc_select 350 CASE "PTC" 360 GOSUB Ptc_select 370 CASE "tau" 380 GOSUB Tau_select 390 END SELECT 400 RETURN 410 Battery_select: ! 420 INTEGER Battery_no 430 Size=7 440 Length=8 450 ALLOCATE Battery$(Size)[Length] 460 Battery$(1)="Li" 470 Battery$(2)="NiCd" 480 Battery$(3)="3-NiCd" 490 Battery$(4)=" " 500 Battery$(5)="BAT" 510 Battery$(6)="Li-S4" !4개 직렬, 각셀을 34970A로 측정 520 Battery$(7)="GrandMax" 530 Msg$="배터리 종류" 540 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Battery$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Battery_no) 550 Battery_no=Battery_no+1 560 RETURN 570 Edlc_select: ! 580 INTEGER Edlc_no 590 Size=4 600 Length=10 610 ALLOCATE Edlc$(Size)[Length] 620 Edlc$(1)="2.7V 0~1F" 630 Edlc$(2)="2.7V 1~10F" 640 Edlc$(3)="5.5V 0~1F" 650 Edlc$(4)="5.5V 1~10F" 660 Msg$="EDLC 종류" 670 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Edlc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Edlc_no) 680 Edlc_no=Edlc_no+1 690 RETURN 700 Ptc_select: ! 710 INTEGER Ptc_no 720 Size=6 730 Length=6 740 ALLOCATE Ptc$(Size)[Length] 750 Ptc$(1)="SPL1" 760 Ptc$(2)=" " 770 Ptc$(3)=" " 780 Msg$="PTC 종류" 790 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Ptc$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Ptc_no) 800 Ptc_no=Ptc_no+1 810 RETURN 820 Tau_select: ! 830 INTEGER Tau_no 840 Size=6 850 Length=25 860 ALLOCATE Tau$(Size)[Length] 870 Tau$(1)="V12T100" !12V 100sec 880 Tau$(2)="V12T10" 890 Tau$(3)=" " 900 Msg$="Tau(Time-Constant) 종류" 910 DIALOG "LIST",Msg$,Btn;SET("ITEMS":Tau$(*),"COLUMNS":Length,"ROWS":Size),RETURN("SELECTION":Tau_no) 920 Tau_no=Tau_no+1 930 RETURN 940 Stimulus_select: ! 950 SELECT Dut$(Dut_no) 960 CASE "BATTERY" 970 SELECT Battery$(Battery_no) 980 CASE "Li" 990 Vc=4.2!4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1000 Vd=3.2!3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1010 Ic=2 !100mA 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1020 Ic_end=.5 !충전 종료 전류 !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!! 1030 Id=-2 !100mA 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1040 CASE "GrandMax" 1050 Vc=4.4!4.2V 충전전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1060 Vd=3.2!3.2V 방전종료전압 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1070 Ic=1 !1A 충전전류 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1080 Ic_end=.2 !200mA 충전 종료 전류 !!내부 저항 !!!!!!!!!!!!!!!!!!!!!!!! 1090 Id=-1 !1A 방전전류 음수 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1100 CASE "NiCd"!표준 1.2V 1110 Vc=1.3!1.5V 충전전압 1120 Vd=.9!0.9V 방전종료전압 1130 Ic=.001!100mA 충전전류 1140 Ic_end=.0005!충전 종료 전류 1150 Id=-.0001!100mA 방전전류 음수 1160 CASE "3-NiCd"!표준 3.6V 1170 Vc=4.7!4.1V 충전전압 1180 Vd=1.5!3.1V 방전종료전압 1190 Ic=.0005!100mA 충전전류 1200 Ic_end=.00035!충전 종료 전류 1210 Id=-5.E-5!100mA 방전전류 음수 1220 CASE "BAT"!표준 3.6V 1230 Vc=3.5!4.1V 충전전압 1240 Vd=2.5!1.V 방전종료전압 1250 Ic=.02!100mA 충전전류 1260 Ic_end=.006!충전 종료 전류 1270 Id=-.005!-10mA 방전전류 음수 1280 CASE "Li-S4" 1290 Vc=16.8!4.2x4 충전전압 4.2x4=16.8 3.7x4=14.8 nominal 1300 Vd=12.8!3.2x4 방전종료전압 3.2x4=12.8 1310 Ic=2 !2A 충전전류 1320 Ic_end=1!충전 종료 전류 1330 Id=-2 !-2A 방전전류 음수 1340 CASE "" 1350 Msg$="충전전류[A], 방전전류[A], 충전종료전류[A], " 1360 END SELECT 1370 CASE "EDLC" 1380 SELECT Edlc$(Edlc_no) 1390 CASE "2.7V 0~1F" 1400 Vc=2.7 ! 충전전압 1410 Ic=.1 ! 충전전류 1420 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% 1430 Id=-.1 ! 100mA 방전전류 음수 1440 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 1450 CASE "2.7V 1~10F" 1460 Vc=2.7 ! 충전전압 1470 Ic=.5 ! 충전전류 1480 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% 1490 Id=-.5 ! 500mA 방전전류 음수 1500 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 1510 CASE "5.5V 0~1F" 1520 Vc=5.5 ! 충전전압 1530 Ic=.1 ! 충전전류 1540 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% 1550 Id=-.1 ! 100mA 방전전류 음수 1560 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 1570 CASE "5.5V 1~10F" 1580 Vc=5.5 ! 충전전압 1590 Ic=.5 ! 충전전류 1600 Ic_end=Ic*.05 ! 충전 종료 전류는 충전전류의 5% 1610 Id=-.5 ! 500mA 방전전류 음수 1620 Vd=Vc*.05 ! 방전 종료 전압은 충전전압의 5% 이하로 떨어지면 1630 END SELECT 1640 CASE "PTC" 1650 SELECT Ptc$(Ptc_no) 1660 CASE "SPL1" 1670 Wait=1 1680 Volt_start=0 1690 Volt_stop=12 1700 Volt_step=.05 1710 Limit=2 !2A 1720 END SELECT 1730 CASE "tau" 1740 SELECT Tau$(Tau_no) 1750 CASE "V12T100" 1760 Volt_set=12 !12V 1770 Time_set=100 !100sec 1780 Limit=2 !2A 1790 CASE "V12T10" 1800 Volt_set=12 !12V 1810 Time_set=10 !100sec 1820 Limit=2 !2A 1830 END SELECT 1840 END SELECT 1850 !GOSUB Dialog_string3 1860 RETURN 1870 Fileopen:! 1880 DIM Dhms$[8] 1890 DIM Filename1$[20],Filename2$[20],Filename3$[20] 1900 T=TIMEDATE 1910 Time$=TIME$(T) !하루 추가 +24*3600 1920 Date$=DATE$(T) 1930 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] 1940 Filename1$=Dhms$&".txt" 1950 CREATE Filename1$,1 1960 ASSIGN @File1 TO Filename1$;FORMAT ON 1970 SELECT Dut$(Dut_no) 1980 CASE "BATTERY","EDLC" 1990 T=T+1 !1초 늦게 2000 Time$=TIME$(T) 2010 Date$=DATE$(T) 2020 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] 2030 Filename2$=Dhms$&".txt" 2040 CREATE Filename2$,1 2050 ASSIGN @File2 TO Filename2$;FORMAT ON 2060 SELECT Dut$(Dut_no) 2070 CASE "BATTERY" 2080 IF Battery$(Battery_no)="Li-S4" THEN!직렬배터리 4개에 대한 각 셀별 전압 기록용 2090 T=T+1 !1초 늦게 2100 Time$=TIME$(T) 2110 Date$=DATE$(T) 2120 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2] 2130 Filename3$=Dhms$&".txt" 2140 CREATE Filename3$,1 2150 ASSIGN @File3 TO Filename3$;FORMAT ON 2160 END IF 2170 END SELECT 2180 END SELECT 2190 RETURN 2200 Fileclose:! 2210 ASSIGN @File1 TO * 2220 SELECT Dut$(Dut_no) 2230 CASE "BATTERY" 2240 ASSIGN @File2 TO * 2250 IF Battery$(Battery_no)="Li-S4" THEN 2260 ASSIGN @File3 TO * 2270 END IF 2280 CASE "EDLC" 2290 ASSIGN @File2 TO * 2300 END SELECT 2310 RETURN 2320 Measure: ! 2330 INTEGER I 2340 DIM Cmd$[25],A1$[14],A2$[14],Test$[1] 2350 SELECT Dut$(Dut_no) 2360 CASE "tau","EDLC" 2370 OUTPUT @File1;"No.,Time[s],Volt[V],Curr[A]" 2380 CASE ELSE 2390 OUTPUT @File1;"No.,Time[m],Volt[V],Curr[A]" 2400 END SELECT 2410 GOSUB Chart_var 2420 GOSUB Init_chart 2430 Count=0 2440 Time_zero=TIMEDATE 2450 SELECT Dut$(Dut_no) 2460 CASE "BATTERY" 2470 GOSUB Measure_battery 2480 CASE "EDLC" 2490 GOSUB Measure_edlc 2500 CASE "PTC" 2510 GOSUB Measure_vi 2520 CASE "tau" 2530 GOSUB Measure_tau 2540 END SELECT 2550 RETURN 2560 Measure_battery: ! 2570 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]" 2580 FOR I=1 TO No_cycle !배터리 충방전실험을 5회 실시 2590 C_i_capa=0 2600 C_w_capa=0 2610 D_i_capa=0 2620 D_w_capa=0 2630 GOSUB Cycle 2640 OUTPUT @File2;I,C_time,C_i_capa,C_w_capa,D_time,-D_i_capa,-D_w_capa 2650 NEXT I 2660 RETURN 2670 Measure_edlc: ! 2680 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]" 2690 FOR I=1 TO No_cycle 2700 C_i_capa=0 2710 C_w_capa=0 2720 D_i_capa=0 2730 D_w_capa=0 2740 Capacity=0 2750 GOSUB Cycle 2760 OUTPUT @File2;I,C_time*60,C_i_capa,C_w_capa*1000,D_time*60,-D_i_capa,-D_w_capa*1000,Capacity 2770 NEXT I 2780 RETURN 2790 Measure_vi: ! 2800 FOR Volt=Volt_start TO Volt_stop STEP Volt_step 2810 Cmd$="V5" !32V 2820 Cmd$=Cmd$&" D "&VAL$(Volt)&"V" !D 2.0V 2830 Cmd$=Cmd$&" D "&VAL$(Limit)&"A" !D 2.0A 2840 OUTPUT @Src;Cmd$ !"V5 D 1V D 2A" 2850 OUTPUT @Src;"E" !Operate ON 2860 T=TIMEDATE 2870 Time_elapsed=(T-Time_zero)/60 2880 GOSUB Reading 2890 Curr=Data 2900 GOSUB Data_process 2910 WAIT Wait 2920 NEXT Volt 2930 OUTPUT @Src;"H" !Operate OFF 2940 RETURN 2950 Measure_tau: ! 2960 Volt=Volt_set 2970 Cmd$="V5" !32V 2980 Cmd$=Cmd$&" D "&VAL$(Volt)&"V" !D 12V 2990 Cmd$=Cmd$&" D "&VAL$(Limit)&"A" !D 2.0A 3000 OUTPUT @Src;Cmd$ !"V5 D 1V D 2A" 3010 OUTPUT @Src;"E" !Operate ON 3020 Time_zero=TIMEDATE 3030 LOOP 3040 T=TIMEDATE 3050 Time_elapsed=(T-Time_zero) !second 3060 GOSUB Reading 3070 Curr=Data 3080 GOSUB Data_process 3090 EXIT IF Time_elapsed>Time_set 3100 END LOOP 3110 OUTPUT @Src;"H" !Operate OFF 3120 RETURN 3130 Cycle: ! 3140 Pre_v=0 !최초 측정 전압=0으로 가정한다. 3150 GOSUB Charge1 3160 GOSUB Charge2 3170 GOSUB Discharge 3180 RETURN 3190 Charge1: ! 3200 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3210 !충전. +부호 정전류, 전압제한(전압을 읽는다.) 3220 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3230 Test$="C" 3240 Cmd$="I4" !2A range 3250 Cmd$=Cmd$&" D "&VAL$(Ic)&"A" !D 2.0A 3260 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V 3270 OUTPUT @Src;Cmd$ !"I4 D 2A D 4.2V" 3280 WAIT Wait 3290 OUTPUT @Src;"E" !Operate ON 3300 WAIT Wait 3310 C_start_time=TIMEDATE 3320 Pre_t=C_start_time 3330 Curr=Ic 3340 LOOP 3350 T=TIMEDATE 3360 Time_elapsed=(T-Time_zero)/60 3370 GOSUB Reading 3380 Volt=Data 3390 ! IF Volt>Pre_v THEN !충전 전압이 상승하면 3400 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.01V 이상이면 3410 GOSUB Data_process 3420 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour 3430 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour 3440 Pre_t=T 3450 END IF 3460 EXIT IF Volt>=(Vc-.001) !측정 전압이 충전최고 전압에 도달하면 3470 END LOOP 3480 OUTPUT @Src;"H" !Operate OFF 3490 WAIT Wait 3500 RETURN 3510 Charge2:! 3520 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3530 !충전, 충전 최고전압에 도달하면. 정전압, 전류제한(전류를 읽는다.) 3540 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3550 Cmd$="V5" !32V range 3560 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V 3570 Cmd$=Cmd$&" D "&VAL$(Ic)&"A" !D 2.0A 3580 OUTPUT @Src;Cmd$ !"V5 D 4.2V D 2.0A" 3590 WAIT Wait 3600 OUTPUT @Src;"E" !Operate ON 3610 WAIT Wait 3620 Pre_v=Ic !충전 전류(Ic)를 초기값으로 기억한다. 3630 Volt=Vc !충전전압은 일정하다. 3640 LOOP 3650 T=TIMEDATE 3660 Time_elapsed=(T-Time_zero)/60 3670 GOSUB Reading !충전전압에 도달되었기 때문에, 서서히 줄어드는 충전 전류를 측정한다. 3680 Curr=Data 3690 ! IF Curr<Pre_v THEN !측정 전류가 서서히 낮아지면 3700 IF ABS(Curr-Pre_v)>=.01 THEN !전류차이가 .01A 이상이면 3710 GOSUB Data_process 3720 C_i_capa=C_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour 3730 C_w_capa=C_w_capa+Curr*Volt*((T-Pre_t)/3600) !WA = A x V x hour 3740 Pre_t=T 3750 END IF 3760 EXIT IF Curr<=Ic_end+.001 !현재 전류가 종료전류에 도달하면 3770 END LOOP 3780 C_time=(T-C_start_time)/60 3790 OUTPUT @Src;"H" !Operate OFF 3800 WAIT Wait 3810 RETURN 3820 Discharge: ! 3830 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3840 !방전 전류는 -로 표기한다. 3850 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3860 Test$="D" 3870 Cmd$="I4" !2A range 3880 Cmd$=Cmd$&" D "&VAL$(Id)&"A" !D -2.0A 3890 Cmd$=Cmd$&" D "&VAL$(Vc)&"V" !D 4.2V 3900 OUTPUT @Src;Cmd$ !"I4 D -2A D 4.2V" 3910 WAIT Wait 3920 OUTPUT @Src;"E" !Operate ON 3930 WAIT Wait 3940 Pre_v=Vc 3950 D_start_time=TIMEDATE 3960 Pre_t=D_start_time 3970 Curr=Id !방전전류(-값을 갖는다.)는 일정하다. 3980 Set80=0 3990 Set40=0 4000 LOOP 4010 T=TIMEDATE 4020 Time_elapsed=(T-Time_zero)/60 4030 GOSUB Reading !일정 전류 방전 , 전압이 측정된다. 4040 Volt=Data 4050 ! IF Volt<Pre_v THEN !측정전압이 서서히 낮아지면(방전이므로) 4060 IF Set80=0 AND Volt<Vc*.8 THEN !방전전압이 충전전압의 80%가 되면 한번만 수행 4070 V80=Volt 4080 T80=Time_elapsed*60 4090 Set80=1 4100 END IF 4110 IF Set40=0 AND Volt<Vc*.4 THEN !방전전압이 충전전압의 40%가 되면 한번만 수행 4120 V40=Volt 4130 T40=Time_elapsed*60 4140 Set40=1 4150 END IF 4160 IF ABS(Volt-Pre_v)>=.01 THEN !전압차가 0.01V 이상이면 4170 GOSUB Data_process 4180 D_i_capa=D_i_capa+(Curr*1000)*((T-Pre_t)/3600) !mAh = mA x hour 4190 D_w_capa=D_w_capa+Curr*Volt*((T-Pre_t)/3600) !Wh = A x V x hour 4200 Pre_t=T 4210 END IF 4220 EXIT IF Volt<=Vd+.001 !현재 전압이 방전 최저전압에 도달하면 4230 END LOOP 4240 D_time=(T-D_start_time)/60 4250 Capacity=Id*(T80-T40)/(V80-V40) !기울기가 -이므로 4260 OUTPUT @Src;"H" !Operate OFF 4270 WAIT Wait 4280 RETURN 4290 Data_process: ! 4300 Count=Count+1 4310 SELECT Dut$(Dut_no) 4320 CASE "BATTERY","EDLC" 4330 X1=Time_elapsed 4340 Y1=(Volt*2/Vc)*100-100 !전압 [%] 4350 Y2=(Curr/Ic)*100 !전류 [%] 4360 CASE "PTC" 4370 X1=Volt 4380 Y1=Curr 4390 Y2=0 4400 CASE "tau" 4410 X1=Time_elapsed 4420 Y1=Curr 4430 Y2=0 4440 END SELECT 4450 Y(1)=Y1 4460 Y(2)=Y2 4470 CONTROL @Strip;SET("POINT LOCATION":X1,"VALUES":Y(*)) 4480 PRINT "Count=";Count;", T=";PROUND(Time_elapsed,-5);"m, V=";Volt;"V, I=";Curr;"A" 4490 OUTPUT @File1;Count,Time_elapsed,Volt,Curr 4500 Pre_v=Data 4510 SELECT Dut$(Dut_no) 4520 CASE "BATTERY" 4530 IF Battery$(Battery_no)="Li-S4" THEN 4540 GOSUB Reading34970 4550 OUTPUT @File3;Count,V(*) 4560 END IF 4570 END SELECT 4580 RETURN 4590 Reading: ! 4600 LOOP 4610 GOSUB Reading1 4620 EXIT IF Data<>0 4630 END LOOP 4640 RETURN 4650 Reading1: ! 4660 ! 전압을 측정하면 나타나는 데이터 포맷 4670 ! 12345678901234 4680 !"DV +03.857E+0" 원래 4690 !" DV +03.857E+0" 앞에 공백이 하나 추가되어 나온 적이 있다. 4700 ! 전압를 측정하면 나타나는 데이터 포맷 4710 ! 12345678901234 4720 !"DI +0.6310E+0" 원래 4730 ENTER @Src;A1$ 4740 A2$=TRIM$(A1$) !앞뒤 공백 모두 없앤다 4750 Data=VAL(A2$[3,13]) 4760 SELECT Dut$(Dut_no) 4770 CASE "BATTERY" 4780 ! Data=PROUND(Data,-3) !소수점 3자리. 0.1mA까지 측정되면 너무 많은 데이터가 획득되므로 4790 Data=DROUND(Data,3)!유효수자 3자리 4800 CASE "tau" 4810 WAIT .05 !이보다 빨리 측정못한다. 4820 END SELECT 4830 RETURN 4840 Reading34970: ! 4850 OUTPUT @Sw;"MEAS:VOLT:DC? (@201:204)" 4860 ENTER @Sw;V(*) 4870 RETURN 4880 Inst6143_open: ! 4890 ASSIGN @Src TO 714 !advantest TR6143 4900 OUTPUT @Src;"C" !initialize 4910 OUTPUT @Src;"OM1" !ascii, OM0=set value, OM1=meas value 4920 SELECT Dut$(Dut_no) 4930 CASE "BATTERY" 4940 IF Battery$(Battery_no)="Li-S4" THEN 4950 GOSUB Inst34970_open 4960 END IF 4970 END SELECT 4980 RETURN 4990 Inst34970_open: ! 5000 DIM V(4) !4채널 전압 5010 ASSIGN @Sw TO 709 !Agilent 34970A 5020 ! OUTPUT @Sw;"CONF:VOLT:DC AUTO (@201:204)" 5030 OUTPUT @Sw;"SENS:VOLT:DC:RANG:AUTO ON,(@201:204)" 5040 OUTPUT @Sw;"SENS:VOLT:DC:NPLC 2,(@201:204)" 5050 RETURN 5060 Chart_var: ! 5070 SELECT Dut$(Dut_no) 5080 CASE "BATTERY" 5090 X_origin=0!time=0 5100 X_range=1*60 !1 hours *60min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 5110 X_axis_label$="Elapsed Time [Min]" 5120 Y_origin=-110 5130 Y_range=220 5140 Y_axis_label$="Volt & Current [%]" 5150 CASE "EDLC" 5160 X_origin=0!time=0 5170 X_range=10 !10min !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 5180 X_axis_label$="Elapsed Time [Min]" 5190 Y_origin=-110 5200 Y_range=220 5210 Y_axis_label$="Volt & Current [%]" 5220 CASE "PTC" 5230 X_origin=Volt_start 5240 X_range=Volt_stop-Volt_start !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 5250 X_axis_label$="Applied Volt [V]" 5260 Y_origin=0 5270 Y_range=Limit 5280 Y_axis_label$="Current [A]" 5290 CASE "tau" 5300 X_origin=0 5310 X_range=Time_set !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 5320 X_axis_label$="Elapsed Time [m]" 5330 Y_origin=0 5340 Y_range=Limit 5350 Y_axis_label$="Current [A]" 5360 END SELECT 5370 RETURN 5380 Init_chart: ! 5390 DIM X_axis_label$[25],Y_axis_label$[25] 5400 INTEGER Trace_num 5410 INTEGER Screen_dims(1:2),Gwindow_dims(1:4) 5420 REAL Y(1:2) !Y(1) Volt, Y(2) Current 5430 GESCAPE CRT,36;Screen_dims(*) ! Get screen width and height. 5440 ! 5450 ! Set the dimensions of the graphics window using GESCAPE 33 so 5460 ! that it is centered on the screen. 5470 ! 5480 Gwindow_dims(1)=Screen_dims(1)*.25 ! X of upper left. 5490 Gwindow_dims(2)=Screen_dims(2)*.2 ! Y of upper left. 5500 Gwindow_dims(3)=Screen_dims(1)*.7 ! Width. 5510 Gwindow_dims(4)=Screen_dims(2)*.6 ! Height. 5520 GESCAPE CRT,33;Gwindow_dims(*) ! Set graphics window geometry. 5530 ! 5540 GESCAPE CRT,35 ! Move the graphics window to the top. 5550 ! 5560 ! Create a stripchart. Make it invisible until all changes are made. 5570 ! 5580 ASSIGN @Strip TO WIDGET "STRIPCHART";SET("VISIBLE":0) 5590 ! 5600 ! Set the overall attributes. 5610 ! 5620 CONTROL @Strip;SET("TITLE":"Data Logger") 5630 CONTROL @Strip;SET("MINIMUM SCROLL":2) 5640 CONTROL @Strip;SET("MOVABLE":0) 5650 CONTROL @Strip;SET("MAXIMIZABLE":0) 5660 CONTROL @Strip;SET("X":0,"Y":0) 5670 ! 5680 ! Size the stripchart to exactly fill the graphics window. 5690 ! 5700 Vert_borders=26 5710 Horiz_borders=8 5720 Height=Gwindow_dims(4)-Vert_borders 5730 Width=Gwindow_dims(3)-Horiz_borders 5740 CONTROL @Strip;SET("WIDTH":Width,"HEIGHT":Height) 5750 ! 5760 CONTROL @Strip;SET("CURRENT AXIS":"X") 5770 CONTROL @Strip;SET("ORIGIN":X_origin,"RANGE":X_range) 5780 CONTROL @Strip;SET("AXIS LABEL":X_axis_label$) 5790 !CONTROL @Strip;SET("DIGITS":5) 5800 ! 5810 CONTROL @Strip;SET("CURRENT AXIS":"Y") 5820 CONTROL @Strip;SET("ORIGIN":Y_origin,"RANGE":Y_range) 5830 CONTROL @Strip;SET("AXIS LABEL":Y_axis_label$) 5840 ! 5850 CONTROL @Strip;SET("VISIBLE":1) ! Show the stripchart. 5860 ! 5870 RETURN 5880 END