Page 1 of 1

Sweep of trains of current pulses

Posted: October 13th, 2020, 6:28 am
by AndreaOtto
Dear all,

My goal is to create a TSB code for consecutive trains (n repetition) of square current pulses in which the current level is increased step by step (i.e. a sweep of current pulses, not single but train).

I am currently using the code reported below which is able to produce a train (finite or infinite) of square current pulses at a fixed value of current, but I am not able to implement it to generate a sweep of trains without going into conflict with the following step of the sweep.

Thanks in advance for any kind answer to solve this issue.

This is the actual code I am using:

---
reset()

--set current to 1 mA
iLevel = 1e-3

smua.sense = smua.SENSE_LOCAL -- 4-wire sense; change to SENSE_LOCAL for 2-wire sense
smua.measure.nplc=0.01
smua.source.rangei = 0.1
smua.source.leveli = 0 -- Idle source level
smua.source.limitv = 50 -- Idle compliance limit
smua.measure.rangev =20 -- Set based on max pulse or sweep level and load resistance
smua.source.delay = 100e-6
trigger.timer[1].delay = 0.05 -- Period Timer 50 msec.
trigger.timer[1].stimulus = smua.trigger.ARMED_EVENT_ID
trigger.timer[1].count = 1
trigger.timer[1].passthrough = true
trigger.timer[2].delay = 0.025 -- Pulse Width Timer 2.5 msec.
trigger.timer[2].stimulus = trigger.timer[1].EVENT_ID
trigger.timer[2].count = 1
trigger.timer[2].passthrough = false
--smua.trigger.source.listi({iLevel})
--smua.trigger.source.lineari(iLevel,stop,PulseCount) -- linearX (start, stop, points); generates pulse train if stop=start 5 pulse at 1 volt
--smua.trigger.source.levelv(Vpulse) --Set pulse voltage level
smua.trigger.source.limiti = 0.1 --5 -- Use this attribute to perform EOA pulse mode sweeps.
smua.trigger.arm.stimulus = 0 -- Equivalent of IMMEDIATE
smua.trigger.arm.count = 0 -- 0 for infinite
smua.trigger.source.action = smua.ENABLE -- Enable source action in smua trigger model
smua.trigger.source.stimulus = trigger.timer[1].EVENT_ID -- Source stimulus is Period Timer
smua.trigger.count = 1 --PulseCount
smua.trigger.endpulse.action = smua.SOURCE_IDLE -- SOURCE_IDLE for Pulse or SOURCE_HOLD for staircase
smua.trigger.endpulse.stimulus = trigger.timer[2].EVENT_ID -- Endpulse controlled by Pulse Width Timer
smua.trigger.endsweep.action = smua.SOURCE_HOLD -- Controls source action at end of sweep
-- Stay at last set level (HOLD) or go to idle level (IDLE)
--smua.trigger.measure.iv(smua.nvbuffer1,smua.nvbuffer2) --Configures measurements to be made in subsequent sweep
--smua.trigger.measure.action = smua.ENABLE -- Disable/Enable measure action in smua trigger model
smua.source.output = smua.OUTPUT_ON

--print(smua.measure.iv())
--print("Sweeping")
waitcomplete()
smua.trigger.initiate()

---

Re: Sweep of trains of current pulses

Posted: October 21st, 2020, 5:31 am
by Andrea C
Once you start the smua.trigger.initiate(), the trigger model will not look for any new source values to output.
I'm assuming you are using this commmand to program what level of current is sourced: --smua.trigger.source.listi({iLevel})

Running it with an arm count of zero/infinite running, you'd have to abort the operation and then restart it with new iLevel.

Can your experiment deal with interruption?

If you know ahead of time all the values, you could build a list:

iLevel = {level1, level1, level1, level2, level2, level2, etc.}

In this case the trigger count and timer1 count would be equal to the number of values in iLevel and the arm count goes to 1 (unless you want to repeat the entire list.

Re: Sweep of trains of current pulses

Posted: October 27th, 2020, 4:34 am
by AndreaOtto
Dear Andrea C,

Thanks a lot for your reply. I think the solution you suggest is practicable.
Nevertheless, when I insert the list of fixed values and I run the code a 104 error (data type error) appears. In this case I have also changed the pulse train from infinite to a finite number of pulses.

How I should further modify the code?

Is it possible to implement a cycle using for example the "repeat" or "for" syntax? For the moment, trying to implement this, I still find the same problem as before (error 5042, overlapped operations).

Best regards