mbrennwa / pypsucurvetrace Goto Github PK
View Code? Open in Web Editor NEWPython program for I-V curve tracing of electronic parts using programmable power supplies
License: GNU General Public License v3.0
Python program for I-V curve tracing of electronic parts using programmable power supplies
License: GNU General Public License v3.0
Specify the resistance of the test leads and use the measured current to determine the voltage drop.
Example:
Steps, to do:
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?
curvetrace
, curveplot
, curveprocess
, curvematch
?curvetrace
examples than will be useful to continue in the other sections / examples!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.
curvetrace
page.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:
--> report the delta_I1_RMS and optionally also the I1_offset:
Check out PyInstaller, maybe others.
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.
One of the wonderful features of the HP4145 / 4156 curve tracers, is their ability to accurately measure the partial derivatives
gm := partial(Ice)/partial(Vbe) ... and/or ... partial(Ids)/partial(Vgs)
go := partial(Ice)/partial(Vce) ... and/or ... partial(Ids)/partial(Vds)
ri := partial(Vbe)/partial(Ibe)
Also:
gain mu = partial(U1) / partial(U2)
See here for inspiration (but need to make this thread safe):
https://stackoverflow.com/questions/2819791/how-can-i-redirect-the-logger-to-a-wxpython-textctrl-using-a-custom-logging-hand
When the 6012P is configured at high-current mode (12A range), the code goes wrong when it tries to get a reading where the current is higher than 6A. Is there something going on with register #20?
Configuring the BK9185 using BK9185B_LOW will establish the serial port connection, but the voltage setting does not work correctly. There is no error or warning message, but the voltage value set at the PSU unit is not correct.
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:
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...
See here for Python code that checks and lists the COM/serial ports available on the system: https://stackoverflow.com/questions/44056846/how-to-read-and-write-from-a-com-port-using-pyserial
import serial.tools.list_ports as port_list
ports = list(port_list.comports())
for p in ports:
print (p)
Or maybe (even better?):
https://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python
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).
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:
Entering a data label / file name of a file that already exists will overwrite the existing file to save the new data without asking "are you sure you want to overwrite the exising file?" first.
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:
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.
Add a GUI. Use a cross platform tool to make the code universal.
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").
Comparing complementary parts of opposite polarity would be a lot easier if their curves could be plotted using the same "polarity".
Add feature to use absolute values of U1, I1 (and U2?) for plotting in curveplot
(i.e., in plot_curves
).
Add (simple) examples to complete the Examples page.
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.
Example (in the DUT-test config file):
VSTART = 0
VEND = 1.7
VSTEP = 0.1
--> voltage steps turn out as V = [0, 0.1. 0.2, ... , 1.6 ], but the last value should be 1.7.
curveplot
needs a feature to limit the range of the curve levels, similar to the --xlimit
, --ylimit
, and --xylimit
flags.
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.
curvematch
and curveprocess
?curvetrace
program: adjust for new format/parser, implement log-scale option0
value when using log scale!A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.