PyPSUcurvetrace: a flexible, open-source curve tracer using programmable power supplies

PYPSU using standard power supplies is a excellent idea (brilliant?) but without any ability for pulsed measurements there is a lot that can not be measured on higher power devices.
That's why I made the heater block for use with pypsucurvetrace. See here. This enables testing high-power DUTs with pypsucurvetrace.

It would open the door to developing open source uTarcer like pulsed measurement system projects where the hardware and all the firmware are open source. That to me sounds like a fun and useful project.
You are most welcome to start an open-source code project for the uTracer, and maybe it even makes sense to get some inspiration from pypsucurvetrace. Is there any documentation for the uTracer communication protocol?
 
You are most welcome to start an open-source code project for the uTracer, and maybe it even makes sense to get some inspiration from pypsucurvetrace. Is there any documentation for the uTracer communication protocol?
Yes Ronald the designer of the uTracer
https://www.dos4ever.com/
has kindly provided a wealth of information on the hardware and a fair bit of information on the firmware's communication protocol. There certainly is enough information to develop software to drive the uTracer.
The protocol is pretty simple and seems in clear text.
I have done a bit of testing with a simple ASCII terminal successfully sending it commands.
A few others have developed alternative user interfaces for the uTracer but none are open source and none are available for other users to make changes to.
 
All the software developed to date is based on GUIs.
This really limits the automation available in testing with all the pointing and clicking required to pull up a setup file, run the measurements and then save the resulting data file. GUIs in my experience are poorly suited to repetitive tasks like data acquisition.

I would prefer to drive the measurement system from a basic script that pulls in a text file for the settings and measurement to be done, calls a command line program to get the measurements done, then having the results written to a simple text file.
Really the Linux (Unix) way, several smaller simple programs working together with clear text to get done what is needed with no large complex monolithic software involved.

Also as soon as a GUI is introduced porting to other platforms or being made stand alone becomes far too complicated for my low programming skills.
 
Last edited:
Build your own hardware and write your own software. Attach it to whatever computing platform you like. Now you're fully decoupled from the nonsense pirouettes and arbitrary whimsies of Microsoft or Oracle/Java or FSF/Linux. Accumulate spares, run regular backups, and sleep soundly.
 
@Bluesystems I had a very quick look at the µTracer website, but I could not find the documentation of the communication protocol within 10 seconds, so I gave up ;-) Judging from your experience with talking to the µTracer through a terminal, it should not be too difficult to write some code to do what you described (btw, I agree 100% with your general approach).

I don't think that pypsucurvetrace would be ideal as a basis to get the measurements from the µTracer. pypsucurvetrace does a lot of things needed for use with normal power supplies that would interfere and need workarounds with the µTracer (checking for stable voltage / current settings, idling between readings, etc.). I guess it would be a lot easier and cleaner to implement the data acquisition part starting some litte program/code from scratch. If the data file output (ASCII format) is the same as with that used in pypsucurvetrace, you could use the plotting and processing parts from pypsucurvetrace directly.
 
I went through the pypsucurvetrace code last night and I agree with you that the architecture is very different as to what is needed to drive a uTracer.
There is for me, a hardware designer that does code as needed a lot of very good stuff in pypsucurvetrace to use as a starting base.
Things like working examples of file I/O, comms I/O, variable use and good instruction on getting the whole working environment in Linux going.
The example of plotting data curves is excellent also.
In my case there is great value in pypsucurvetrace as a learning tool and starting point. I thank you for sharing your skill with the community.
 
Hi,

I was able to assemble “my” measurement jig which consists of the RD6006p and RD6012p. I’ve measured ~20 BC549c parts as per examples available on pypsucurvetrace site. But practically I don't know what I'm doing (more or less) 😊 … so I need help …
Step I’m stuck on is matching measured parts, I don’t understand syntax of curvematch command.

I’m using Windows, configuration went smoothly. My parts were prematched with PEAK DCA to 5hfe range (635-640), then measured with pypsucurvetrace. Configuration files are attached to this post, only change to “examples” is limited U1 to 15V (a bit faster measurements)

My questions:
1)How should curvematch syntax look like?
-Name of curvetrace output files: 1_1.dat -> 1_20.dat
-Files are located in C:\Users\ML_sd\
-How to limit U1range and I1range (maybe leave it as per configuration file? U1 1 to 15V; I1 0.5mA to 50mA)
-I don’t know what is –bjvbel; how to set it correctly?

curvematch –U1range [1,15] –I1range [0.001,0.05] –bjtvbe [???????????] datafiles [1_1.dat, 1_2.dat, 1_3.dat, 1_4.dat, 1_5.dat, 1_6.dat, 1_7.dat, 1_8.dat, 1_9.dat, 1_10.dat, 1_11.dat, 1_12.dat, 1_13.dat, 1_14.dat, 1_15.dat, 1_16.dat, 1_17.dat, 1_18.dat, 1_19.dat, 1_20.dat]

With above syntax I get result:
result.png

if i understand above correctly: sample 1_10 was picked as reference and compared to others samples? and last column is how close samples are matched?

2) Curveplot
How to change units on Yaxis (to mA)

3) Measurment of bc549c takes aprox.37min (U1 0-15V; U2 0,65-6,65; 1V steps; 2s IDLESECS)
How to reasonably limit/optimize measurement ranges? Maybe start with higher U2 like 1.65V? those bc parts will be used on Wolverine IPS.

….4) how to adjust config/connections for bc559cparts?

…5) how to adjust config for TTA/TTC004, KSC parts?


Yesterday received Characteristic recorder [http://diy.ucborgmann.de] boards from JLPCB and gathered all the necessary parts, so will be able to compare measurements soon 😊


... thanks for help




EDIT:
curvematch 1_1.dat, 1_2.dat, 1_3.dat, 1_4.dat, 1_5.dat, 1_6.dat, 1_7.dat, 1_8.dat, 1_9.dat, 1_10.dat, 1_11.dat, 1_12.dat, 1_13.dat, 1_14.dat, 1_15.dat, 1_16.dat, 1_17.dat, 1_18.dat, 1_19.dat, 1_20.dat

that shows proper results.. 🙂 what about rest 2-5?
 

Attachments

Last edited:
curvematch 1_1.dat, 1_2.dat, 1_3.dat, 1_4.dat, 1_5.dat, 1_6.dat, 1_7.dat, 1_8.dat, 1_9.dat, 1_10.dat, 1_11.dat, 1_12.dat, 1_13.dat, 1_14.dat, 1_15.dat, 1_16.dat, 1_17.dat, 1_18.dat, 1_19.dat, 1_20.dat

that shows proper results.. 🙂 what about rest 2-5?
I have no clue about Windows, but what about curvematch *.dat ?

2) Curveplot
How to change units on Yaxis (to mA)
curveplot --help

3) Measurment of bc549c takes aprox.37min (U1 0-15V; U2 0,65-6,65; 1V steps; 2s IDLESECS)
How to reasonably limit/optimize measurement ranges? Maybe start with higher U2 like 1.65V? those bc parts will be used on Wolverine IPS.
Use less measurement points, shorter IDLE, or no IDLE at all.

….4) how to adjust config/connections for bc559cparts?
…5) how to adjust config for TTA/TTC004, KSC parts?
Use a working config file (from another part) and adjust as needed.

-I don’t know what is –bjvbel; how to set it correctly?
See here (scroll down to the BC550 example):
https://pypsucurvetrace.readthedocs...mples.html#working-with-the-curveplot-program

Yesterday received Characteristic recorder [http://diy.ucborgmann.de] boards from JLPCB and gathered all the necessary parts, so will be able to compare measurements soon 😊
I am sure the Borgman unit will be much faster.
 
Last edited:
I have no clue about Windows, but what about curvematch *.dat ?
this works

curveplot --help
yea.. checked before asking; will read on more

….4) how to adjust config/connections for bc559cparts?
ok: how [PSU1] POLARITY option works? it switches PSU polarity or is it info for script to properly interpret results?

BC559 needs a negative Collector-Emitter voltage and a negative Base-Emitter voltage [...] connect the pins as follows:
PSU1-black to the Collector pin
PSU1-red to the Emitter pin and to PSU2-red
PSU2-black to the Base pin via the 100 kΩ
correct? or simply to invert POLARITY of PSUs?

thx.
 
ok: how [PSU1] POLARITY option works? it switches PSU polarity or is it info for script to properly interpret results?
The PSU hardware can't simply reverse the polarity. All you can do is to invert the connections to the DUT. The POLARITY option is simply there to tell PyPSU software what the polarity of the connections is.

BC559 needs a negative Collector-Emitter voltage and a negative Base-Emitter voltage [...] connect the pins as follows:
PSU1-black to the Collector pin
PSU1-red to the Emitter pin and to PSU2-red
PSU2-black to the Base pin via the 100 kΩ
Looks alright to me.
 
  • Like
Reactions: mahtew
Hi,

I'm looking for a curve tracer to measure and match some Tokin SITs, and lower power devices in the future. So far I've looked at:
  • Electron Plus CT-503 (100V, 3A)
  • Uwe Borgmann's Characteristic Recorder project (20V, 2A)
  • PyPSUcurvetrace, which seems well-suited to the SITs higher current and voltage
I have a Siglent SPD3303X-E (2 x 32V x 3.2A + 5V x 3.2A, 220W, resolution 10mV, 10mA) which has USB port and software control, so hopefully should be possible to use this with a bit of work.

I'll need one, or two with a heater, more controllable power supplies if I want to test at higher currents.
  • Korad KA3010P goes up to 10A, 30V with 1mA and 10mV resolution and an RS232 interface ($200 shipped on AliExpress). Their
  • Korad KD6005P has 5A and 60V at a similar price
  • KWR102 has 30A, 30V and 300W (presumably 30A+10V or 10A+30V) at 1mA and 1mV resolution but not readily available atm
  • Riden RD6030 (Hangzhou Ruideng Technology Co., Ltd) offers up to 30A and 60V (1440W), 10mA and 10mV resolution, with USB ($190 shipped on AliExpress) which would cover a wider range of testing and looks like a better bet.
I was wondering whether it'd be possible to increase accuracy by attaching a couple of meters and a shunt to log voltages and currents?

Secondly, if that's possible, could the curve tracer be adapted to lower power devices by adding voltage dividers? The power supply's current readings wouldn't be accurate but the meters should be much better.

What do you think?
 
Here's an overview of the currently supported PSUs:
https://pypsucurvetrace.readthedocs.io/en/latest/PSUs/supported_PSUs.html

If you want separate meters (maybe with dividers) you could implement this by writing a driver for a PSU/meter combo that exposes as a "PSU unit" object to PyPSU, while in reality its a combination of different devices.

I'd say you'd be better off with using a suitable off-the shelf PSU. The built-in meters are usually quite good.
 
Thanks, yes.

Reading
Testing small-signal transistors requires a high-resolution PSU that can set and read voltages and currents at small increments of about 10-100 μV and 10-100 μA, while the power will be 1 W or less.
made me think there might be another way to achieve that sort of gradation, as high-res power supplies are expensive.

I'll start with the Riden and see how it goes.
 
You can synthesize a programmable current source with 2^12 possible output currents, using a cheap 12 bit DAC, unity gain buffer, error amplifier opamp, and a precision resistor. If you add range switching to swap in several different resistor values, you can span quite a large range of output currents.
 
  • Like
Reactions: Giallograle
@mbrwenna I reread your list of power supplies and the Riden RD6012P has a good range - up to 60V and 12A - with 1mV and 0.1mA resolution which better than the others. Took me a while to work out that they sell the control panel, 720W switching psu, and case separately, but it's available on Alibaba assembled and shipped for $155.

From the examples on your site, it looks like it should be fine for both low power and high power devices. Do you have any thoughts or comments on starting with this?
 
I've ordered the Riden RD6012P from the manufacturer's Taobao outlet (Chinese domestic sales, the major marketplace for all sorts of electronic equipment) as prices and availability are better than Alibaba.

It took me a while to find it, but the company's (HangZhou RuiDeng Technology 杭州睿登科技) website with links to all their direct sales outlets is here: http://ruidengkeji.com/

Note that Taobao requires payment by AliPay (same group) and shipping within China. I used Superbuy as my forwarding agent and their Guangdong office as my address.
 
  • Like
Reactions: birdbox