Digital Multimeters (DMMs) and Precision DC Sources

cancel
Showing results for 
Search instead for 
Did you mean: 

PXIe-4163 trigger issue

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. 

Shawn_Liu_0-1657735251635.png

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. 

 

thanks.

 

 

0 Kudos
Message 1 of 9
(4,098 Views)

> 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?

Marcos Kirsch
Chief Software Engineer
NI Driver Software
0 Kudos
Message 2 of 9
(4,092 Views)

HI Marcos,

 

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)

 

thanks,

Shawn

 

 

 

 

0 Kudos
Message 3 of 9
(4,077 Views)

> 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. 

Marcos Kirsch
Chief Software Engineer
NI Driver Software
0 Kudos
Message 4 of 9
(4,074 Views)

Marcos,

 

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;
dcPowerSession.Triggers.MeasureTrigger.DigitalEdge.Configure("/PXI1Slot6/PFI0", DCPowerTriggerEdge.Rising);
dcPowerSession.Control.Commit();
dcPowerSession.Control.Initiate();

 

any advice? thank you

0 Kudos
Message 5 of 9
(4,071 Views)

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. 

0 Kudos
Message 6 of 9
(4,051 Views)

> 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:

 

     smu2Session.Triggers.MeasureTrigger.DigitalEdge.Configure("/smu1/Engine3/SourceCompleteEvent", DCPowerTriggerEdge.Rising);

 

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.

Marcos Kirsch
Chief Software Engineer
NI Driver Software
0 Kudos
Message 7 of 9
(4,045 Views)

Marcos,

 

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

myTask.COChannels.CreatePulseChannelTime(counterComboBox.Text,
"GenerateDigitalPulse", COPulseTimeUnits.Seconds, idleStates,
Convert.ToDouble(iniDelayTextBox.Text),
Convert.ToDouble(lowTimeTextBox.Text),
Convert.ToDouble(highTimeTextBox.Text));

myTask.Triggers.StartTrigger.Type = StartTriggerType.DigitalEdge;
myTask.Triggers.StartTrigger.DigitalEdge.Edge = triggerEdge;

myTask.Triggers.StartTrigger.DigitalEdge.Source ="/smu1/Engine3/SourceCompleteEvent"

myTask.Start();

 

which are combination from following 2 examples:

GenDigPulse

GenDigPulseTrainContinuous_DigStart

 

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. 

 

thanks

0 Kudos
Message 8 of 9
(4,041 Views)

this is the closest example I found to match what I'm trying to do

https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019M9lSAE&l=en-US

 

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].Source.SetSequence(currentLevelsSequence);
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;
myTask.Timing.ConfigureImplicit(SampleQuantityMode.FiniteSamples, 1);

myTask.Start();
dcPowerSession.Control.Initiate();

 

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. 

 

 

 

0 Kudos
Message 9 of 9
(3,998 Views)