proc SetVolt {volt} { if {$volt== 0} { PulserOff } else { set pulservolt [expr {($volt*1.0)/1000.0}] pulser send VOLT:OFFS $pulservolt pulserDC $pulservolt PulserOn } } proc GetVolt {} { pulser send VOLT:OFFS? } proc SingleVolt {volt oscno} { histmem mode unlimited newfile HISTOGRAM_XY if {$volt== 0} { PulserOff } else { set pulservolt [expr {($volt*1.0)/1000.0}] pulser send VOLT:OFFS $pulservolt pulserDC $pulservolt PulserOn } oscmd start $oscno hmm countblock save 0 oscmd stop } proc SetDC {} { pulseroff pulser send FUNC DC pulser send VOLT:OFFS 0 pulseron } proc VoltRamp {start step fin oscno} { histmem mode unlimited newfile HISTOGRAM_XY set loopvar 1 set i 0 while {$loopvar} { set j [expr {$i*$step+$start}] if {$j> $fin && $step > 0} {break} if {$j< $fin && $step < 0} {break} if {$j== 0} { PulserOff } else { set pulservolt [expr {($j*1.0)/1000.0}] pulserDC $pulservolt PulserOn } oscmd start $oscno hmm countblock save $i incr i } oscmd stop } proc VoltTextureRamp {start step fin mot tstart tstep tfin oscno} { histmem mode unlimited set loopvar 1 set i 0 while {$loopvar} { set j [expr {$i*$step+$start}] if {$j> $fin && $step > 0} {break} if {$j< $fin && $step < 0} {break} if {$j== 0} { PulserOff } else { set pulservolt [expr {($j*1.0)/1000.0}] pulserDC $pulservolt PulserOn } sampledescription voltage $j broadcast voltage $j newfile HISTOGRAM_XY set m 0 while {1} { set n [expr {$m*$tstep+$tstart}] if {$n> $tfin && $tstep > 0} {break} if {$n< $tfin && $tstep < 0} {break} drive $mot $n oscmd start $oscno hmm countblock save $m incr m } oscmd stop incr i } } proc SquarePulseVolt {start step fin freq oscno} { histmem mode unlimited newfile HISTOGRAM_XYT set loopvar 1 set i 0 while {$loopvar} { set j [expr {$i*$step+$start}] if {$j> $fin && $step > 0} {break} if {$j< $fin && $step < 0} {break} if {$j== 0} { PulserOff } else { set pulservolt [expr {($j*1.0)/1000.0}] PulserSquare $freq $pulservolt PulserOn # pulser send "APPL:SQU $freq,$pulservolt,0" } oscmd start $oscno hmm countblock save $i incr i } oscmd stop } proc SquarePulseFreq {volt freqlist bins oscno} { histmem mode unlimited newfile HISTOGRAM_XYT set loopvar 1 set i 0 foreach freq $freqlist { set pulservolt [expr {($volt*1.0)/1000.0}] histmem_period_strobo $freq $bins wait 3 PulserSquare $freq $pulservolt PulserOn # pulser send "APPL:SQU $freq,$pulservolt,0" oscmd start $oscno hmm countblock save $i incr i } oscmd stop } proc SinePulseFreq {volt freqlist bins oscno} { histmem mode unlimited newfile HISTOGRAM_XYT set loopvar 1 set i 0 foreach freq $freqlist { set pulservolt [expr {($volt*1.0)/1000.0}] histmem_period_strobo $freq $bins wait 3 PulserSin $freq $pulservolt PulserOn oscmd start $oscno hmm countblock save $i incr i } oscmd stop } proc UniPulseFreq {volt freqlist bins oscno} { histmem mode unlimited newfile HISTOGRAM_XYT set loopvar 1 set i 0 foreach freq $freqlist { set pulservolt [expr {($volt*1.0)/2000.0}] histmem_period_strobo $freq $bins wait 3 # PulserSquareOffs $freq $pulservolt [expr {$pulservolt/2}] PulserSquareOffs $freq $pulservolt $pulservolt PulserOn # pulser send "APPL:SQU $freq,$pulservolt,[expr {$pulservolt/2}]" oscmd start $oscno hmm countblock save $i incr i } oscmd stop } proc UniPulseFatigue {volt freq bins oscno reps runs} { histmem mode unlimited set pulservolt [expr {($volt*1.0)/1000}] set halfvolt [expr {$pulservolt/2.0}] histmem_period_strobo $freq $bins wait 3 PulserSquareOffs $freq $halfvolt $halfvolt PulserOn for {set i 0} {$i<$runs} {incr i} { newfile HISTOGRAM_XYT for {set j 0} {$j<$reps} {incr j} { oscmd start $oscno hmm countblock save $j } oscmd stop } PulserOff Histmem_strobo_off } proc PulserBurst {} { pulser send BURS:MODE TRIG pulser send TRIG:SOUR BUS pulser send BURS:STAT ON PulserOn pulser send *TRG while {1} { set sval [pulser send *OPC?] if {[string first 1 $sval] >-1} {break} } PulserOff } proc VoltPulseRun {vlo vhi freq cycl} { PulserOff pulser send VOLT:LOW [expr {$vlo/1000.0}] pulser send VOLT:HIGH [expr {$vhi/1000.0}] pulser send FREQ $freq pulser send BURS:PHAS [expr {90.0 - ($vhi*180.0)/(($vhi-$vlo)*1.0)}] pulser send BURS:MODE TRIG set ploop [expr {int($cycl/50000)}] set prem [expr {$cycl % 50000}] if {$ploop >0} { for {set i 0} {$i< $ploop} {incr i} { Pulser send BURS:NCYC 50000 PulserBurst } } pulser send BURS:NCYC $prem PulserBurst PulserOff pulser send BURS:STAT OFF } proc VoltPulses {vlo vhi freq cycl} { PulserOff pulser send FUNC SQU VoltPulseRun $vlo $vhi $freq $cycl } proc VoltTriPulses {vlo vhi freq cycl} { PulserOff pulser send FUNC RAMP pulser send FUNC:RAMP:SYMM 50 VoltPulseRun $vlo $vhi $freq $cycl } proc OneTri {volt period} { PulserOff if {$volt > 0} { pulser send VOLT:LOW 0 pulser send VOLT:HIGH [expr {$volt/1000.0}] pulser send BURS:PHAS -90 } else { pulser send VOLT:LOW [expr {$volt/1000.0}] pulser send VOLT:HIGH 0 pulser send BURS:PHAS 90 } pulser send FUNC RAMP pulser send FUNC:RAMP:SYMM 50 pulser send FREQ [expr {1.0/$period}] pulser send BURS:MODE TRIG pulser send BURS:NCYC 1 PulserBurst PulserOff } publish GetVolt user publish SetDC user publish SetVolt user publish SingleVolt user publish VoltRamp user publish SquarePulseVolt user publish SquarePulseFreq user publish UniPulseFreq user publish VoltTextureRamp user publish VoltPulses user publish VoltTriPulses user publish OneTri user publish UniPulseFatigue user