We already have [SOURce[<n>]]:ARB
SCPI subsystem in our roadmap that should enable advanced definition of output voltage and current. However, the suggestions of the forum members from the EEVblog listed below should also be taken into account.
Comment from Jan28:
I played around with the trigger, list and ramp features in the simulator and am wondering: Why is ramp a separate function instead of a property of the list implementation? I will try to explain using SCPI commands. If there would be an command like:
[SOURce[]]:LIST:TYPE {ramptype}[, ...] where ramptype = 0 mean step, 1 = linear ramp, 2 = exponential ramp, ... = use imagination...
This would make:
- [SOURce[]]:CURRent:MODE STEP, CURRent:TRIGgered and CURRent:RAMP:DURation {} (and voltage equivalents) obsolete
- programmability more flexible because a list can generate ramps arbitrary up/down steps, etc.
- UI could stil have a menu to program a STEP in a simple way: This would just create a LIST with the right properties. The user can even edit the list afterwards to add steps (in that case going back to STEP menu would clear the list after a warning/conformation)
- The list edit menu would also need a type selection (icon?) for voltage and current. I think this would fit.
...
The R&S NGP800 has an 'interpolate' option in there implementation of a list which they call ARB. It's not exactly defined what interpolation it does, but looks like linear interpolation, which I called lineair ramp before. On there product page they have a screenshot of it (under Arbitrary Function): https://www.rohde-schwarz.com/nl/product/ngp800-productstartpage_63493-670592.html
The word Interpolate/Interpolation is a much more specific description of the functionality compared to the TYPE I made up.
The R&S SCPI implementation is not so nice (to my taste), because you quickly get into some kind of comma-counting-hell >:D and it doesn't allow for adding options/features later on in a backwards compatible way:
ARB:BLOC:DATA 1,1,1,1,0,2,2,2,1,1,3,3,1,0 (its a repeat of volt, current,time,interpolate)
BB3 equivalent:
LIST:VOLT 1,2,3
LIST:CUR 1,2,3
LIST:DWEL 1,1,1
LIST:INTerpolate 0,1,0 (new, instead of TYPE, 0= step, 1= interpolate)
Both sets of commands do the same:
- 1V,1A for 1 sec as a step
- rising from 1V,1A to 2V,2A in 1 sec (this is the function we're talking about)
- 3V,3A for 1 sec as a step
I agree that more complex ways of interpolation (e.g. exponential) might be better handled with the ARB subsystem. Just adding the interpolation makes the list function very powerful (in my opinion).
Comment from Rerouter:
That method while possibly needing a little polish would leave room for odd ramps, e.g. a sine wave could be done by adding type classes for the 3 sine segments, step gets you square like waves, interpolate gets you ramps, and other modes gets you sine and other,
Sine I see as being 3 main options, either crest / peak with the slow start and then fast change,
fast change to slow crest / peak
or from crest to peak or vice versa as a half sine wave.
If you wanted to you might then later make use of that chunk of code to generate some of the simple shapes via UI.
This way a sine wave would just be an arb table of the min / max voltage and the smooth type with the frequency being the inverse of the interpolation time.
Edit: and things like simulating a rectifier output would just be a fast start segment + a ramp down in a cycle.
Edit2: while probably not the easiest thing, allowing things like % as an input for the values would make things a bit more powerful, so e.g. adjusting the maximum amplitude, the min being set at 60% then tracks along at 60% of that start value, or vice versa if the end was a % and the start a fixed value. this would be more for UI than SCPI, but I'm dreaming.
Edit3: or relative values, e.g. *-2V for 2V less than the start value, probably again for UI.
![sine interpolation](https://user-images.githubusercontent.com/15106476/79630953-e4db4500-8155-11ea-9199-415bed58d941.png)