Skip to content

Commit 2cb21b4

Browse files
authored
Merge pull request #19 from VektrexElectronicSystems/development
Development 1.2.1
2 parents 903b73a + 4a46862 commit 2cb21b4

20 files changed

+3615
-3475
lines changed

src/Vektrex.SpikeSafe.CSharp.Samples/ApplicationSpecificExamples/MakingTransientDualInterfaceMeasurement/MakingTransientDualInterfaceMeasurementExample.cs

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class MakingTransientDualInterfaceMeasurementExample
1616

1717
private const int FAST_LOG_TOTAL_SAMPLE_COUNT = 525;
1818
private const int MEDIUM_LOG_TOTAL_SAMPLE_COUNT = 500;
19-
private const int SLOW_LOG_TOTAL_SAMPLE_COUNT = 460;
19+
private const int SLOW_LOG_TOTAL_SAMPLE_COUNT = 500;
2020
private const int FAST_LOG_MODE = 1;
2121
private const int MEDIUM_LOG_MODE = 2;
2222
private const int SLOW_LOG_MODE = 3;
@@ -78,23 +78,28 @@ public void Run(string ipAddress, int portNumber)
7878

7979
if(FAST_LOG_MODE == samplingMode)
8080
{
81-
logScaleTime = LogTimeData(FAST_LOG_TOTAL_SAMPLE_COUNT);
81+
logScaleTime = LogTimeData(FAST_LOG_TOTAL_SAMPLE_COUNT, samplingMode);
8282
}
8383
else if(MEDIUM_LOG_MODE == samplingMode)
8484
{
85-
logScaleTime = LogTimeData(MEDIUM_LOG_TOTAL_SAMPLE_COUNT);
85+
logScaleTime = LogTimeData(MEDIUM_LOG_TOTAL_SAMPLE_COUNT, samplingMode);
8686
}
8787
else if(SLOW_LOG_MODE == samplingMode)
8888
{
89-
logScaleTime = LogTimeData(SLOW_LOG_TOTAL_SAMPLE_COUNT);
89+
logScaleTime = LogTimeData(SLOW_LOG_TOTAL_SAMPLE_COUNT, samplingMode);
9090
}
9191

9292
// plot the pulse shape using the fetched voltage readings and the light measurement readings overlaid
9393
CreateSinglePlot(logScaleTime, voltageReadings, samplingMode);
9494
}
9595
else if(2 == option)
9696
{
97-
CreateMultiplePlots();
97+
LogAndPrintToConsole("Enter the option # for sampling mode:");
98+
LogAndPrintToConsole("1. FASTLOG");
99+
LogAndPrintToConsole("2. MEDIUMLOG");
100+
LogAndPrintToConsole("3. SLOWLOG");
101+
int samplingMode = int.Parse(ReceiveUserInputAndLog());
102+
CreateMultiplePlots(samplingMode);
98103
}
99104

100105
_log.Info("MakingTransientDualInterfaceMeasurementExample.Run() completed.\n");
@@ -204,8 +209,8 @@ private void SpikeSafeSetup(TcpSocket tcpSocket, int sampleMode)
204209
tcpSocket.SendScpiCommand("SOUR1:VOLT 25");
205210
// set auto range
206211
tcpSocket.SendScpiCommand("SOUR1:CURR:RANG:AUTO 1");
207-
// set currenty to 1A
208-
tcpSocket.SendScpiCommand("SOUR1:CURR 1");
212+
// set currenty to 0.35A
213+
tcpSocket.SendScpiCommand("SOUR1:CURR 0.35");
209214
// set Ramp mode to Fast
210215
tcpSocket.SendScpiCommand("OUTP1:RAMP FAST");
211216
// request SpikeSafe events and read data
@@ -218,7 +223,7 @@ private void SpikeSafeSetup(TcpSocket tcpSocket, int sampleMode)
218223
ReadAllEvents.ReadUntilEvent(tcpSocket, 100);
219224
}
220225

221-
private void CreateMultiplePlots()
226+
private void CreateMultiplePlots(int samplingMode)
222227
{
223228
int totalSampleCount = 0;
224229
string readFilePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
@@ -263,7 +268,7 @@ private void CreateMultiplePlots()
263268
throw new InvalidOperationException("The Grease and no Grease testing were ran with different sampling mode.");
264269
}
265270

266-
logScaleTime = LogTimeData(totalSampleCount);
271+
logScaleTime = LogTimeData(totalSampleCount, samplingMode);
267272

268273
var plt = new ScottPlot.Plot();
269274
// plot the pulse shape using the fetched voltage readings
@@ -275,17 +280,17 @@ private void CreateMultiplePlots()
275280
plt.Legend();
276281

277282
string plotFileName = "";
278-
if(SLOW_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
283+
if(SLOW_LOG_MODE == samplingMode)
279284
{
280285
plt.Title("Digitizer Slow Log Sampling");
281286
plotFileName = "slow_log_sampling.png";
282287
}
283-
else if(MEDIUM_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
288+
else if(MEDIUM_LOG_MODE == samplingMode)
284289
{
285290
plt.Title("Digitizer Medium Log Sampling");
286291
plotFileName = "medium_log_sampling.png";
287292
}
288-
else if(FAST_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
293+
else if(FAST_LOG_MODE == samplingMode)
289294
{
290295
plt.Title("Digitizer Fast Log Sampling");
291296
plotFileName = "fast_log_sampling.png";
@@ -306,17 +311,17 @@ private void CreateMultiplePlots()
306311
plt2.Legend();
307312

308313
string plotFileName2 = "";
309-
if(SLOW_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
314+
if(SLOW_LOG_MODE == samplingMode)
310315
{
311316
plt2.Title("Voltage Subtraction (Slow Log Sampling)");
312317
plotFileName2 = "slow_log_sampling_subtraction.png";
313318
}
314-
else if(MEDIUM_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
319+
else if(MEDIUM_LOG_MODE == samplingMode)
315320
{
316321
plt2.Title("Voltage Subtraction (Medium Log Sampling)");
317322
plotFileName2 = "medium_log_sampling_subtraction.png";
318323
}
319-
else if(FAST_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
324+
else if(FAST_LOG_MODE == samplingMode)
320325
{
321326
plt2.Title("Voltage Subtraction (Fast Log Sampling)");
322327
plotFileName2 = "fast_log_sampling_subtraction.png";
@@ -325,14 +330,14 @@ private void CreateMultiplePlots()
325330
System.Environment.Exit(0);
326331
}
327332

328-
private List<double> LogTimeData(int totalSampleCount)
333+
private List<double> LogTimeData(int totalSampleCount, int samplingMode)
329334
{
330335
var timeAxis = new List<double>();
331336
float timeUs = 0;
332337

333338
if(SLOW_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
334339
{
335-
timeUs = 1000;
340+
timeUs = 2;
336341
}
337342
else if(MEDIUM_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
338343
{
@@ -346,31 +351,43 @@ private List<double> LogTimeData(int totalSampleCount)
346351
for(int sampleNumber=1; sampleNumber<=totalSampleCount; sampleNumber++)
347352
{
348353
timeAxis.Add(timeUs/1000000);
349-
if(SLOW_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
354+
if(SLOW_LOG_MODE == samplingMode)
350355
{
351356
// log time scale
352-
if( sampleNumber > 0 && sampleNumber <=99)
357+
if( sampleNumber > 0 && sampleNumber <=49)
353358
{
354-
timeUs = timeUs + 1000;
359+
timeUs = timeUs + 2;
355360
}
356-
else if(sampleNumber > 99 && sampleNumber <= 189 )
361+
else if(sampleNumber > 49 && sampleNumber <= 139 )
357362
{
358-
timeUs = timeUs + 10000;
363+
timeUs = timeUs + 10;
359364
}
360-
else if(sampleNumber > 189 && sampleNumber <= 279)
365+
else if(sampleNumber > 139 && sampleNumber <= 229)
361366
{
362-
timeUs = timeUs + 100000;
367+
timeUs = timeUs + 100;
363368
}
364-
else if(sampleNumber > 279 && sampleNumber <= 369)
369+
else if(sampleNumber > 229 && sampleNumber <= 319)
365370
{
366-
timeUs = timeUs + 1000000;
371+
timeUs = timeUs + 1000;
367372
}
368-
else if(sampleNumber > 369 && sampleNumber <= 459)
373+
else if(sampleNumber > 319 && sampleNumber <= 364)
369374
{
370-
timeUs = timeUs + 10000000;
375+
timeUs = timeUs + 20000;
371376
}
377+
else if(sampleNumber > 364 && sampleNumber <= 409)
378+
{
379+
timeUs = timeUs + 200000;
380+
}
381+
else if(sampleNumber > 409 && sampleNumber <= 454)
382+
{
383+
timeUs = timeUs + 2000000;
384+
}
385+
else if(sampleNumber > 454 && sampleNumber <= 500)
386+
{
387+
timeUs = timeUs + 20000000;
388+
}
372389
}
373-
else if(MEDIUM_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
390+
else if(MEDIUM_LOG_MODE == samplingMode)
374391
{
375392
if(sampleNumber > 0 && sampleNumber <=49)
376393
{
@@ -401,7 +418,7 @@ private List<double> LogTimeData(int totalSampleCount)
401418
timeUs = timeUs + 1200000;
402419
}
403420
}
404-
else if(FAST_LOG_TOTAL_SAMPLE_COUNT == totalSampleCount)
421+
else if(FAST_LOG_MODE == samplingMode)
405422
{
406423
if(sampleNumber > 0 && sampleNumber <=99)
407424
{

src/Vektrex.SpikeSafe.CSharp.Samples/ApplicationSpecificExamples/MakingTransientDualInterfaceMeasurement/README.md

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,17 @@ Vektrex PSMU's Digitizer Medium Sampling algorithm provides sample data to 2 mic
3737
| 426-500 | 75 | 1.2 s |
3838

3939
### Slow Sampling
40-
Vektrex PSMU's Digitizer Slow Sampling algorithm provides sample data from 1 millisecond to 1000 seconds. It is recommended for DUTs with a larger package or a larger thermal mass. 460 individual voltage DUT measurements divided into the following samples at each aperture:
40+
Vektrex PSMU's Digitizer Slow Sampling algorithm provides sample data from 2 microseconds to 1000 seconds. It is recommended for DUTs with a larger package or a larger thermal mass. 500 individual voltage DUT measurements divided into the following samples at each aperture:
4141
| Sample Number | Sample Count | Aperture |
4242
| - | - | - |
43-
| 1-100 | 100 | 1 ms |
44-
| 101-190 | 90 | 10 ms |
45-
| 191-280 | 90 | 100 ms |
46-
| 281-370 | 90 | 1 s |
47-
| 371-460 | 90 | 10 s |
43+
| 1-50 | 50 | 2 us |
44+
| 51-140 | 90 | 10 us |
45+
| 141-230 | 90 | 100 us |
46+
| 231-320 | 90 | 1 ms |
47+
| 321-365 | 45 | 20 ms |
48+
| 366-410 | 45 | 200 ms |
49+
| 411-455 | 45 | 2 s |
50+
| 456-500 | 45 | 20 s |
4851

4952
More information about the TDIM can be found at [JESD 51-14](https://www.jedec.org/standards-documents/docs/jesd51-14-0)
5053

@@ -63,7 +66,7 @@ Setup the PSMU connections, thermal platform controller connections, LED with no
6366
![Setup Side View](setup_side.jpg)
6467
![Setup Top View (no grease)](setup_top_no_grease.jpg)
6568
![Setup Top View (no grease with paper)](setup_top_no_grease_paper_part.jpg)
66-
Run DigitizerLogSampling.exe, select slow, medium, or fast, and no grease when prompted.
69+
Run Vektrex.SpikeSafe.CSharp.Samples.exe, select slow, medium, or fast, and no grease when prompted.
6770

6871
**2. Wait 5 minutes to led LED cool down for next test.**
6972

@@ -72,19 +75,19 @@ Run DigitizerLogSampling.exe, select slow, medium, or fast, and no grease when p
7275
Setup LED with grease:
7376
![Grease DOW Corning 340](grease_dow_corning_340.jpg)
7477
![Setup Top View (grease)](setup_top_grease_part.jpg)
75-
Run DigitizerLogSampling.exe, select slow, medium, or fast (same option as Step 1), and grease when prompted.
78+
Run Vektrex.SpikeSafe.CSharp.Samples.exe, select slow, medium, or fast (same option as Step 1), and grease when prompted.
7679

7780
**4. Produce conductive thermal resistance over time**
7881

79-
Run DigitizerLogSampling.exe, select "2. Create Graph".
82+
Run Vektrex.SpikeSafe.CSharp.Samples.exe, select "2. Create Graph".
8083

8184
**NOTE**
8285
Messages will appear in the console at various portions of the test and will prompt user input. Perform the specified test operations when these messages appear, and then press "Enter" to continue with the test procedure.
8386

8487
## Key Settings
8588
### SpikeSafe Current Output Settings
8689
- **Pulse Mode:** DC Dynamic
87-
- **Set Current:** 1A (may modify according to DUT characteristics)
90+
- **Set Current:** 0.35A (may modify according to DUT characteristics)
8891
- **Compliance Voltage:** 25V (may modify according to DUT characteristics)
8992
- **Ramp Rate:** Fast. Voltage will ramp as fast as 1000V/sec. Current will ramp as fast as 50A/sec.
9093

@@ -106,8 +109,8 @@ Messages will appear in the console at various portions of the test and will pro
106109
- FASTLOG will take 10 seconds to complete, MEDIUMLOG takes 100 seconds, and SLOWLOG will take 1000 seconds to complete. Abort the Step if it takes longer to complete than the aforementioned times.
107110
- Recorded voltage measurements saved to data log files in Steps 1 and 3 will be overwritten when re-running that Step.
108111
- For your testing, you may have to modify settings as pointed out under Key Settings to obtain accurate voltage measurements. For this test, an Osram LED with the following characteristics was used:
109-
- Forward current: 1A
110-
- Forward voltage: ~5.5V
112+
- Forward current: 0.35A
113+
- Forward voltage: ~2.6V
111114
- Set Temperature: 25°C
112115
- Time to reach thermal equilibrium: <10 seconds
113116
- For your testing, you may need to select an appropriate thermal controller platform with enough cooling capacity for your device. For this test an Arroyo 5400 Series TECSource was used.
@@ -119,21 +122,21 @@ Messages will appear in the console at various portions of the test and will pro
119122
## Expected Results
120123

121124
### Fast Log Results
122-
Voltage measurements taken with no grease and with grease are similar until roughly ~350ms when the voltages start to diverge. From ~750ms and above the no grease voltage measurements begin to exponentially decline due to an increase in the LED junction temperature, this conveys the LED's heat is not dissipating fast enough through the thermal platform.
125+
Voltage measurements taken with no grease and with grease are similar until roughly ~1s when the voltages start to diverge. From ~1.5s and above the no grease voltage measurements begin to decline more quickly due to an increase in the LED junction temperature, this conveys the LED's heat is not dissipating fast enough through the thermal platform.
123126

124127
![Fast Log Sampling](fast_log_sampling.png)
125128

126129
![Fast Log Sampling Difference](fast_log_sampling_subtraction.png)
127130

128131
### Medium Log Results
129-
The Medium Log has the similar results as the Fast Log that the two voltages curves start to diverge at roughly ~350ms. The voltage measurement taken with no grease shows that the LED tends to reach the temperautre steady state from ~50s but still not stabilized yet. Therefore, a slower log sampling is required for showing voltages stablization. See the Slow Log Results in the next sub-section.
132+
The Medium Log has the similar results as the Fast Log that the two voltages curves start to diverge at roughly ~1s. The voltage measurement taken with no grease shows that the LED tends to reach the temperautre steady state from ~10s. A slower log sampling can be applied for clearly showing voltages stablization. See the Slow Log Results in the next sub-section.
130133

131134
![Medium Log Sampling](medium_log_sampling.png)
132135

133136
![Medium Log Sampling Difference](medium_log_sampling_subtraction.png)
134137

135138
### Slow Log Results
136-
Fast Log and Medium Log Results shows that the LED reaching temperature steady state should be reflected with a stable voltage reading over time. Here the voltage readings have not stabilized yet, so this test will be repeated using Slow Log. Slow Log shows the same result, from ~350ms and above, of an exponential decline in no grease voltage measurements due to an increase in LED junction temperature. Additionally, starting at ~200s and above shows the LED reaches temperature steady state with no grease, whereas at ~10s and above the LED reaches temperature steady state with grease.
139+
Fast Log and Medium Log Results shows that the LED reaching temperature steady state should be reflected with a stable voltage reading over time. Here if the voltage readings have not stabilized yet, this test will be repeated using Slow Log. Slow Log shows the same result, from ~1.5s and above, of an decline more quickly in no grease voltage measurements due to an increase in LED junction temperature. Additionally, starting at ~10s and above shows the LED reaches temperature steady state with no grease, whereas at ~700ms and above the LED reaches temperature steady state with grease.
137140

138141
Using this information can help determine the optimal parameters and environments which are suitable for this LED's behavior. Thanks to Vektrex's PSMU and a stable thermal platform, JESD51-14 testing can be repeated easily and reliably to provide key performance metrics of any DUT.
139142

0 commit comments

Comments
 (0)