TR6143-bas

Togotech (토론 | 기여)님의 2020년 1월 16일 (목) 12:19 판

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