Skip to content

Commit a14e023

Browse files
authored
Merge pull request #79 from VektrexElectronicSystems/development
Development v1.17.0
2 parents 57665dc + cda18f7 commit a14e023

56 files changed

Lines changed: 1188 additions & 198 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

application_specific_examples/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ These sequences address specific scenarios in which SpikeSafe functionality is u
77
- [Fixed Pulse Count Using Software Timing](fixed_pulse_count_using_software_timing)
88
- [Making Tj Measurements](making_tj_measurements)
99
- [Making Transient Dual Interface Measurements (JESD51-14)](making_transient_dual_interface_measurement)
10-
- [Measuring DC Staircase Voltages](measuring_dc_staircase_voltages)
10+
- [Measuring Hardware Based DC Staircase I/V Sweep](measuring_hardware_based_dc_staircase_iv_sweep)
11+
- [Measuring Software Based DC Staircase Voltages](measuring_software_based_dc_staircase_voltages)
1112
- [Measuring Wavelength Spectrum](measuring_wavelength_spectrum)
1213
- [Pulse Tuning](pulse_tuning)
1314
- [Running LIV Sweeps](running_liv_sweeps)

application_specific_examples/fixed_pulse_count_using_software_timing/FixedPulseCountUsingSoftwareTimingExample.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@
108108
tcp_socket.send_scpi_command('OUTP1 0')
109109

110110
# wait until the channel is fully discharged
111-
if spikesafe_info.supports_discharge_query:
112-
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(tcp_socket, channel_number=1)
113-
else:
114-
wait_time = spikesafe_python.Discharge.get_spikesafe_channel_discharge_time(compliance_voltage)
115-
spikesafe_python.Threading.wait(wait_time)
111+
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(
112+
spikesafe_socket=tcp_socket,
113+
spikesafe_info=spikesafe_info,
114+
compliance_voltage=compliance_voltage,
115+
channel_number=1)
116116

117117
# disconnect from SpikeSafe
118118
tcp_socket.close_socket()

application_specific_examples/making_tj_measurements/TjMeasurement.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,11 @@ def calculate_Vf0(start_point: int, end_point: int, digitizer_data_list: list[sp
132132
tcp_socket.send_scpi_command('OUTP1 0')
133133

134134
# wait until the channel is fully discharged
135-
if spikesafe_info.supports_discharge_query:
136-
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(tcp_socket, channel_number=1)
137-
else:
138-
wait_time = spikesafe_python.Discharge.get_spikesafe_channel_discharge_time(compliance_voltage)
139-
spikesafe_python.Threading.wait(wait_time)
135+
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(
136+
spikesafe_socket=tcp_socket,
137+
spikesafe_info=spikesafe_info,
138+
compliance_voltage=compliance_voltage,
139+
channel_number=1)
140140

141141
log_and_print_to_console('\nK-factor values obtained. Stopped bias current output. Configuring to perform Electrical Test Method measurement.')
142142

@@ -190,11 +190,11 @@ def calculate_Vf0(start_point: int, end_point: int, digitizer_data_list: list[sp
190190
tcp_socket.send_scpi_command('OUTP1 0')
191191

192192
# wait until the channel is fully discharged
193-
if spikesafe_info.supports_discharge_query:
194-
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(tcp_socket, channel_number=1)
195-
else:
196-
wait_time = spikesafe_python.Discharge.get_spikesafe_channel_discharge_time(compliance_voltage)
197-
spikesafe_python.Threading.wait(wait_time)
193+
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(
194+
spikesafe_socket=tcp_socket,
195+
spikesafe_info=spikesafe_info,
196+
compliance_voltage=compliance_voltage,
197+
channel_number=1)
198198

199199
# prepare digitizer voltage data to plot
200200
samples = []

application_specific_examples/making_transient_dual_interface_measurement/digitizer_log_sampling_demo.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,11 @@ def receive_user_input_and_log() -> str:
154154
tcp_socket.send_scpi_command('OUTP1 0')
155155

156156
# wait until the channel is fully discharged
157-
if spikesafe_info.supports_discharge_query:
158-
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(tcp_socket, channel_number=1)
159-
else:
160-
wait_time = spikesafe_python.Discharge.get_spikesafe_channel_discharge_time(compliance_voltage)
161-
spikesafe_python.Threading.wait(wait_time)
157+
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(
158+
spikesafe_socket=tcp_socket,
159+
spikesafe_info=spikesafe_info,
160+
compliance_voltage=compliance_voltage,
161+
channel_number=1)
162162

163163
# disconnect from SpikeSafe
164164
tcp_socket.close_socket()

application_specific_examples/measuring_hardware_based_dc_staircase_iv_sweep/MeasuringDcStaircaseIVSweep.py

Lines changed: 411 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Examples for Measuring Hardware Based DC Staircase Voltages Using the SpikeSafe PSMU Digitizer in Staircase Sweep Mode
2+
3+
## Purpose
4+
Measuring DC staircase voltages is essential in comparing the actual versus expected I/V results of a DUT. This example demonstrates how to use a SpikeSafe PSMU to provide a DUT DC current in a staircase pattern and take both a voltage and current measurement at each step. This is an addition to [Measure Staircase Sweep Voltage](../../making_integrated_voltage_measurements/measure_staircase_sweep_voltage/) when presented with any of the following cases:
5+
1. Hardware triggering is available on external device
6+
1. Trigger timing is greater than or equal to 1ms
7+
1. Current readings are needed
8+
9+
The SpikeSafe PSMU's integrated Digitizer is used to make high precision voltage measurements and the Keithley 7510 DMM is used to make current measurements while outputting a DC current steps to the DUT. The Digitizer and DMM are taking triggered readings using a hardware trigger initiated by a SCPI command. In this case a 3.5A, 25V LED is used as the DUT.
10+
11+
## Overview
12+
Operates SpikeSafe as both DC current source and a high precision voltage measurement device. A DC output is demonstrated in [Run Staircase Sweep](../../run_spikesafe_operating_modes/run_staircase_sweep/). While current is outputted, voltage measurements are being taken across the flattest portion of each current pulse. After all measurements are taken and read, the results are plotted in an I-V graph.
13+
14+
Note the use of the New Data query while the SpikeSafe is operating. While the Digitizer is still acquiring voltage data, it can be unobtrusively queried to determine if the buffer is full yet. This information can be used to determine whether the user would ideally want to fetch data, as the data fetch will only return fresh data if the specified measurements have occurred. In this case, the New Data query will return `TRUE` once the Digitizer has taken measurements equal to its Trigger Count.
15+
16+
### Key Settings
17+
18+
### SpikeSafe Current Output Settings
19+
- **Pulse Mode**: Staircase Sweep
20+
- **Start Current**: 20mA
21+
- **Stop Current**: 200mA
22+
- **Step Count**: 10
23+
- **On Time**: 2ms
24+
- **Compliance Voltage**: 20V
25+
26+
### Digitizer Voltage Measurement Settings
27+
- **Voltage Range**: 10V
28+
- **Aperture**: 500us
29+
- **Trigger Delay**: 1000us
30+
- **Trigger Source**: Hardware
31+
- **Trigger Count**: 10
32+
- **Reading Count**: 1 (per trigger)
33+
34+
### DMM Current Measurement Settings
35+
- **Current Range**: 1A
36+
- **Aperture**: 500us
37+
- **Trigger Delay**: 1000us
38+
- **Trigger Source**: Hardware
39+
- **Trigger Count**: 10
40+
- **Reading Count**: 1 (per trigger)
41+
42+
## Expected Results
43+
When running a DC staircase using this sequence, one can expect to see the following output.
44+
45+
**I/V Graph**
46+
47+
Once all 10 steps are measured, a graph will appear like below:
48+
49+
![](staircase_sweep_liv.png)
50+
51+
**DC Staircase Current Output**
52+
53+
This image was acquired by measuring output current using a TCPA300 Current Probe into a MDO3024 Mixed Domain Oscilloscope
54+
55+
![](dc_staircase_output.png)
21.7 KB
Loading
40.5 KB
Loading

application_specific_examples/measuring_dc_staircase_voltages/MeasuringDcStaircaseVoltages.py renamed to application_specific_examples/measuring_software_based_dc_staircase_voltages/MeasuringDcStaircaseVoltages.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@
118118
# send Set Current command for next step
119119
tcp_socket.send_scpi_command(cmdStr)
120120
currentIncrementFloat = step_size_A
121+
122+
# A small delay of at least 5ms between setting the current and triggering the software trigger for the digitizer to properly measure the voltage at each step. The optimal delay time may vary based on the characteristics of the load being driven and should be determined experimentally
123+
spikesafe_python.Threading.wait(0.005)
121124

122125

123126
# check for all events
@@ -134,11 +137,11 @@
134137
tcp_socket.send_scpi_command('OUTP1 0')
135138

136139
# wait until the channel is fully discharged
137-
if spikesafe_info.supports_discharge_query:
138-
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(tcp_socket, channel_number=1)
139-
else:
140-
wait_time = spikesafe_python.Discharge.get_spikesafe_channel_discharge_time(compliance_voltage)
141-
spikesafe_python.Threading.wait(wait_time)
140+
spikesafe_python.Discharge.wait_for_spikesafe_channel_discharge(
141+
spikesafe_socket=tcp_socket,
142+
spikesafe_info=spikesafe_info,
143+
compliance_voltage=compliance_voltage,
144+
channel_number=1)
142145

143146
# disconnect from PSMU
144147
tcp_socket.close_socket()

application_specific_examples/measuring_dc_staircase_voltages/README.md renamed to application_specific_examples/measuring_software_based_dc_staircase_voltages/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
# Examples for Measuring DC Staircase Voltages Using the SpikeSafe PSMU Digitizer in DC Dynamic Mode
1+
# Examples for Measuring Software Based DC Staircase Voltages Using the SpikeSafe PSMU Digitizer in DC Dynamic Mode
22

33
## Purpose
4-
Measuring DC staircase voltages is essential in comparing the actual versus expected I/V results of a DUT. This example demonstrates how to use a SpikeSafe PSMU to provide a DUT DC current in a staircase pattern and take a voltage measurement at each step. This is an alternative to [Measure Pulsed Sweep Voltage](../../making_integrated_voltage_measurements/measure_pulsed_sweep_voltage) when presented with any of the following cases:
4+
Measuring DC staircase voltages is essential in comparing the actual versus expected I/V results of a DUT. This example demonstrates how to use a SpikeSafe PSMU to provide a DUT DC current in a staircase pattern and take a voltage measurement at each step. This is an alternative to [Measure Staircase Sweep Voltage](../../making_integrated_voltage_measurements/measure_staircase_sweep_voltage/) when presented with any of the following cases:
55
1. No hardware triggering is available on external device
6-
1. Trigger timing is greater than 5ms
6+
1. Trigger timing is greater than or equal to 5ms
77

88
The SpikeSafe PSMU's integrated Digitizer is used to make high precision voltage measurements while outputting a DC current steps to the DUT. The Digitizer is taking triggered readings using a software trigger initiated by a SCPI command. In this case a 1 ohm resistor is used as the DUT.
99

0 commit comments

Comments
 (0)