07-13-2022 01:02 PM
HI, I have 2 PXIe-4163 (MP: 140185E-01L)
and I'm trying to run IV sweep between 2 cards.
however, I keep getting error message no device by the given name was found.
also in NImax, i don't see trigger routing tab under them. any idea?
do they support PXI backplane trigger?
I have no issue to trigger between different channels as long as they are within the same card.
07-13-2022 05:22 PM - edited 07-13-2022 05:22 PM
> also in NImax, i don't see trigger routing tab under them. any idea?
This is a known issue, the 416x and some other newer products do not have the Routing tab in MAX.
> do they support PXI backplane trigger?
They certainly do!
Could you share a minimal code example that reproduces your issue and NI I/O Trace capture?
07-15-2022 12:07 PM
thanks for the quick reply.
I just used this example
Sequence Multi-Channel Sync
and I'm trying to do IV sweep with 2 Pxie-4163 cards but then got the error message above.
however, I found that the trigger works after I update the NI DCpower from version 20 to 21. odd.
now, this it what I'm trying to do next.
I'd like to do a voltage sweep on PXIe-4163 and output triggers after source complete on master device to a DAQ card (PXI-6230 PFI0) then connect the output to another instrument.
is there an example to show how to do that? (output trigger after source complete)
07-15-2022 03:11 PM
> is there an example to show how to do that? (output trigger after source complete)
I don't know if there is such an example, but you can configure the DAQ card to use the SMU's "SourceCompleteEvent" terminal as the source of its trigger.
In other words: it's better for the DAQ to pull the event than for the SMU to push (export) it. The digital pulse is always generated in the SMU, it just needs to be routed.
07-15-2022 04:53 PM
thanks for the suggestion,
I found one labview example which is called connect_terminals.vi might be the one to use?
is there C# example available?
other than export triggers, I'm also checking on how to import triggers
(ie. set SMU with fixed bias voltage, and measure current on input trigger)
I have following code but seems now working right.
dcPowerSession.Source.Mode = DCPowerSourceMode.SinglePoint;
dcPowerSession.Outputs[ChannelName].Source.Output.Function = DCPowerSourceOutputFunction.DCVoltage;
dcPowerSession.Outputs[ChannelName].Source.Voltage.VoltageLevel = double.Parse(bias);
dcPowerSession.Outputs[ChannelName].Measurement.ApertureTime = plc * nplc;
dcPowerSession.Outputs[ChannelName].Source.Voltage.VoltageLevelAutorange = DCPowerSourceVoltageLevelAutorange.On;
dcPowerSession.Outputs[ChannelName].Source.Voltage.CurrentLimitAutorange = DCPowerSourceCurrentLimitAutorange.On;
dcPowerSession.Measurement.Configuration.MeasureWhen = DCPowerMeasurementWhen.OnMeasureTrigger;
any advice? thank you
07-20-2022 07:07 PM
ok, my code above works to take external triggers.
however, still haven't figure out how to send triggers from SMU to PFI port on DAQ.
07-21-2022 10:27 AM
> dcPowerSession.Triggers.MeasureTrigger.DigitalEdge.Configure("/PXI1Slot6/PFI0", DCPowerTriggerEdge.Rising);
You are configuring the SMU's Measure Trigger source to be "/PXI1Slot6/PFI0". I don't know what type of instrument PXI1Slot6 is though and I assume PFI0 is some terminal in its front panel. This means that you also need to configure PXI1Slot6 to export some event to PFI0.
This is not necessary. Most NI drivers can interact in order to route signals from each other which makes it very rare for you to need to export any signals.
I'll give you a hypothetical example. Imagine you have two SMUs "smu1" and "smu2". You want "smu2" to trigger a measurement when "smu2" finishes sourcing a voltage on channel 3. You do this by setting the trigger source in "smu2" to be the SourceCompleteEvent terminal in "smu1". You don't need to explicitly export the signal in smu2 nor create temporary routes using connect terminals. Something like:
When you do this, the driver will create a route all the way from the internal terminal in smu1 to the internal terminal in smu2, and the route will be released at the right time.
07-21-2022 12:03 PM
thanks for the reply.
I forgot to mention that I have a PXI-6230 DAQ card on slot6 and I'm importing the trigger from PFI0 from it .
btw, seems for PXI-6230, PFI0 can only be configured as input port, not output. only PFI6 and 7 and be configured as output , is it correct?
and yes, I get trigger between 2 SMUs working. its odd that if I use NI DC power version 20, it won't work, but after I update to version 21, it worked.
my next attempt is to export trigger from SMU to DAQ PFI6 then external instruments which takes TTL signal as trigger input. (My application is sweep a diode from 1-100mA in 0.1mA step and record optical power at each point from another instrument, so I need to export the trigger to that external OPM)
PXI-6230 can generate a digital pulse from PFI6, I'm thinking to use a 0.001ms single pulse as TTL signal, and route SMU source complete event trigger to DAQ start trigger
it will be sth like
"GenerateDigitalPulse", COPulseTimeUnits.Seconds, idleStates,
myTask.Triggers.StartTrigger.Type = StartTriggerType.DigitalEdge;
myTask.Triggers.StartTrigger.DigitalEdge.Edge = triggerEdge;
which are combination from following 2 examples:
so at each source complete, I can have a TTL signal at PFI6 port.
not sure if this can work or not.
will give it a try sometime soon.
07-23-2022 11:23 AM
this is the closest example I found to match what I'm trying to do
however, there's no Connect Terminals in C# or just I couldn't find it.
I guess DAQmx might be smart enough to do autorouting
this is my first attempt to send the SMU sourcetrigger to DAQ PFI6
int Npts = Math.Abs(Convert.ToInt32((stop - start) / step + 1));
double currentLevelsSequence = new double[Npts];
for (int pointIndex = 0; pointIndex < Npts; pointIndex++)
currentLevelsSequence[pointIndex] = ((step * (double)pointIndex) + start)/1000;
dcPowerSession.Source.Mode = DCPowerSourceMode.Sequence;
dcPowerSession.Outputs[ChannelName].Source.Output.Function = DCPowerSourceOutputFunction.DCCurrent;
dcPowerSession.Outputs[ChannelName].Measurement.ApertureTime = plc*nplc; //1 NPLC
string sourceTriggerInputTerminal = BuildTerminalName(dcPowerSession, ChannelName, "SourceCompleteEvent");
myTask = new NationalInstruments.DAQmx.Task();
myTask.COChannels.CreatePulseChannelFrequency("/DAQ/ctr0","PulseTrain", COPulseFrequencyUnits.Hertz, COPulseIdleState.Low, 0.0,1,0.1);
myTask.Triggers.StartTrigger.Type = StartTriggerType.DigitalEdge;
myTask.Triggers.StartTrigger.DigitalEdge.Edge = DigitalEdgeStartTriggerEdge.Rising;
myTask.Triggers.StartTrigger.DigitalEdge.Source = sourceTriggerInputTerminal;
its not working and I can only detect 1 pulse at output. which I think is the start pulse
I made a work around which is adjust the frequency to match with NPLC setting at SMU and change
myTask.Timing.ConfigureImplicit(SampleQuantityMode.FiniteSamples, 1); to myTask.Timing.ConfigureImplicit(SampleQuantityMode.FiniteSamples, Npts);
after that, I can get all triggers detected, but I'm not sure about timing accuracy by doing this. need to figure out a way to check.