Giter VIP home page Giter VIP logo

pypsucurvetrace's People

Contributors

mbrennwa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pypsucurvetrace's Issues

Add feature to correct for voltage drop across test leads

Specify the resistance of the test leads and use the measured current to determine the voltage drop.

Example:

  • Test lead resistance Rx = 0.01 Ohm
  • Corrected U1 voltage is determined by subtracting the voltage drops across both test leads: U1_corr = U1_raw - 2I1Rx

Steps, to do:

  • Add feature to specify the test lead resistance and write them to the data files
  • Calculate corrected U2 values as described above when loading the raw data
  • Also, revise schematic showing the U1/I1 and U2/I1 connections to the DUT to explicitly connect PSU2 to the DUT pins directly using separate test leads in order to avoid affecting the U2 voltage with the voltage drop due to I1 in the return flow to the PSU1.

Add Examples page to documentation, define structure of Examples page

Add a page with examples. There should be a single "landing page" for readers looking for examples, so examples should not be scattered around the other pages in the manual. It's better to have all examples in one place, and provide links to them from the other manual pages.

What would be a good structure for the Examples page?

  • Structure by programs / tools? One section each for curvetrace, curveplot, curveprocess, curvematch?
  • Present fully worked examples starting with data acquisition with ``curvetrace", followed by data plotting and processing?
  • Best of both worlds: combine both! Use curvetrace examples than will be useful to continue in the other sections / examples!

Temperature control of heater block for isothermal testing at high dissipation or control of variable DUT temperature conditions

Mount DUT on a heater block with high heat inertia (e.g., chunk of copper), equipped with heating elements (e.g., power resistors), mounted on a heat sink (to allow heat dissipation). Use a temperature sensor to read the temperature of the heater block, and regulate the heat output to the heater elements (PID regulation or similar). Implement the regulation/control in the curve tracer software, and make sure that DUT readings are taken only if/when the heater-block temperature is within a pre-defined tolerance of the intended DUT temperature.

need some sort of a curve-matcher program that calculates a simple "curve match index"

Consider curve sets from two (or more) different DUTs (I1 vs U1 for different U2 values). How well are the two (or more) DUTs matched?

Idea:

  • Determine the range of U1 and I1 values where the curves should be matched. Remove all data outside of this range.
  • For each U2 curve pair: calculate the differences ("residuals") of of the I1 values at all U1 measurement points
  • Combine all residuals from all curve pairs into one array (delta_I1)
  • optional: determine the mean residual (I1_offset) and subtract this from the residuals array (delta_I1 = delta_I1 - I1_offset) [this will yield overall small residuals if the curves are mostly parallel in the U1/I1 range considered]
  • calculate the RMS value of the residuals: delta_I1_RMS = sqrt( sum(delta_I1^2) / length(delta_I1) )

--> report the delta_I1_RMS and optionally also the I1_offset:

  • The delta_I1_RMS value is a measure for the "matching goodness" between the curves. A low delta_I1_RMS indicates a good match. With the optional subtraction of the mean residual, parallel curve sets will also have low delta_I1_RMS
  • The I1_offset indicates the offset between the curve sets.

Always use initial Uc value as specified in config file (batch mode)

In batch mode, curvetrace uses the Uc value from the preheat of the previous DUT/part. This may not be a suitable starting value, and may result in long time to attain the targeted operating point (possibly too long, exceeding the preheat time).

Always use the value from the config file as Uc starting value instead.

Represent / handle PSUs solely using a dedicated thread for each PSU

The PSUs for DUT testing are currently represented as objects that allow setting/reading stuff at/from the PSU devices. This has the following drawbacks:

  • Access to the PSUs is not thread safe as they don't have a locking mechanism implemented that prevents different parts of the code from accessing the PSUs at the same time
  • Setting parameters at the PSUs is slow, and calling any "setting" methods from the PSU objects blocks the execution of the code.

A way out would be to use a dedicated, separated thread to control to each PSU object. The PSU object would not be exposed to the code outside of the thread. This would allow...

  • ...speeding up the execution of the tester code / loops, because both PSUs could be manipulated by their dedicated threads at the same time
  • ...isolating the access to the PSU object would allow introducing a queueing/locking layer in the thread in order to prevent parallel access issues to the PSU object.

Live-plotting of the data during data acquisition

Add functions that plot the data being acuired (use a background thread for this for independence of the measurement processes). It's probably best to work on this only one there is a basic GUI available (#4).

Plot size (axes range) can be too small after adding curve labels

The plot size (ranges of x and y axes) is determined by matplotlib using the x and y ranges covered by the data. The additional space consumed by the text labels (curve labels, added after data plotting) is not taken into account to set the x and y ranges. Depending on how the plot works out, the x and y ranges turn out too small once the curve labels are added and should therefore be increased after adding the curve labels.

Approach:

  • When adding the curve text labels, keep track of the extension of the labels (min/max extension of on the x and y axes)
  • After all text labels have been added to the plot, extend the x and y ranges according to the min/max extension of the text labels

Curve labels cover the curve/line ends

The labels at the end of each curve are centered on the last data point of the curve. The text labels therefore cover the last data point (and possible other points that are nearby). The text labels should therefore be moved such that they do not cover any data points.

Approach:

  • determine the size of the text label (width and height)
  • extrapolate the curve beyond the last data value
  • calculate the position (center point) of the text label on the extrapolated curve using the width and height of the label such that it does not overlap with the measured data points

Add documentation for heater block

Add documentation for heater block. This could go on the curvetrace page, but might be better to use a separate Heaterblock page because it will be rather long.

PSU COM port communication is not thread-safe

Thread-safe access to COM ports must ensure there is not simultaneous access to the PSU COM port from different threads. Need to add a "lock" thingy, and wrap the in/out to/from the the COM port such that it waits until the access is unlocked. See temperaturesensor_MAXIM class file ("UART lock").

Live plotting during curve tracing is sometimes delayed

The live plots during curve tracing are sometimes delayed, especially if the curve tracing proceeds quickly. There's probably a timeout in the plotting that prevents quick(er) updating of the live plots.
Reduce that timeout.

POSTPONED -- Change test-voltage parameters in DUT test config files to make it shorter, and to allow LOG spacing

Current formatat is like this:

VSTART =
VEND =
VSTEP =

--> this is used to set up a linearly spaced sequence of test voltages

New suggested format:
U = [USTART:UEND,N] or U = [USTART:UEND,N,SCAL]
where USTART and UEND are the same as above, N is the number of steps (not increment size).
The optional parameter SCAL indicates the scaling. If SCAL = LOG, the voltage steps are log distributed between USTART and UEND.

Note: use U... instead of V... for consistency with documentation etc., where voltage is always denoted as U, while V is used for the "Volt" unit.

  • implement parser for the new format. Is it possible to re-use the existing parser code used in the parsing of command-line arguments for curvematch and curveprocess?
  • make parser "smart" to work both the old and the new format. If the voltage specs are given both formats: show a warning about this redundancy in the DUT test config file, and use the new-style format.
  • revise generation of voltage step values in curvetrace program: adjust for new format/parser, implement log-scale option
  • check/avoid 0 value when using log scale!
  • Update documentation to reflect the new format
  • Update the example DUT test config files to use the new format

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.