Finding the right switches for your DCDC-Converter might be not as straight forward as it looks on first sight. Both switches operate in rather different conditions and especially the reverse recovery loss appears to be often overlooked. This program tries to help you with the selection.
What it does:
- Read search results from part suppliers
- Download parts datasheets in PDF
- Extract specification values from the PDF files
- Store gathered parts specifications in a database or CSV file
- Compute power Loss estimation for a given DC-DC converter
It builds a parts table with additional fields to those you will usually find in parametric search:
Qgs
,Qgd
,Qgs2
,Qg_th
,Q_sw
V_pl
(miller plateau voltage)C_oss
Qrr
- rise and fall times
git clone --recurse-submodules https://github.com/fl4p/fetlib
cd fetlib
pip install -r requirements.txt
git clone https://github.com/open-pe/fet-datasheets # fetch set of data-sheets (80,100,150V power mosfets)
-
acquire a parts list from Digikey. go to digikey.com
-
narrow down the search filters so your have 500 or less results.
-
download the CSV file (click Download Table / First 500 Results)
-
save the CSV file under
digikey-results/
folder -
Open
main.py
and adjust adjust the DCDC operating point:
# buck converter
dcdc = DcDcSpecs(vi=62, vo=27, pin=800, f=40e3, Vgs=12, ripple_factor=0.3, tDead=500e-9)
vi input voltage
vo output voltage
pin input power, alternatively you can set `io` (I_out) or `ii` (I_in).
f switching frequency
Vgs gate drive voltage for both HS and LS
ripple_factor peak-to-peak coil current divided by mean coil current (assuming CCM)
tDead gate driver dead-time (happens 2 times per period)
-
Run
python3 main.py
and it will download all datasheets (if not already found), extract values and compose a CSV file with loss estimations for the given DC-DC converter.The process will finish with an output like this:
written fets-buck-62V-27V-30A-40kHz.csv
stored 1259 parts
The CSV file includes these power loss values:
P_on HS conduction loss ~ (D * I² * Rds)
P_on_ls LS conduction loss ~ ((1 - D) * I² * Rds)
P_sw HS switching loss ~ max(tRise + tOff, 2 * Qsw / (Vgs / rg) )
P_rr reverse recovery loss when used as LS (sync fet) ~ Qrr
P_dt_ls LS dead time loss ~ (tDead * Vsd)
And these aggregated power values for the 2 slots HS, LS and for the 2p case each:
P_hs total loss caused by HS switch
P_2hs total HS loss with 2 parallel switches
P_ls total loss in LS switch
P_2ls total LS loss with 2 parallel switches
If a input value for power computation is missing the power values will be float('nan')
(empty CSV cell).
Vsd (body diode forward voltage) defaults to 1 V if not available.
See the equations in powerloss.py.
The program collects part specification values from different sources:
- Values from search results (Rds_on, Qg, Vds)
- Manual fields from
dslib/manual_fields.py
- Nexar API
- PDF Datasheet
- Text regex
- Tabula
- Table header aware iteration
- Row regex iteration
- LLMs (TODO)
- OpenAI´s ChatGPT
- Anthropic´s Claude 3.5 Sonnet
Values for Rds_on and Qgd are usually shown in the search results (Digikey, LCSC). Nexar API doesn't show the Qrr, and (tRise+tFall) only for some parts (especially values for newer chips are missing here). So I found the only way is to extract Qrr from the Datasheet. We use 3 techniques:
- Convert the PDF to txt and find the values with regular expressions. this can be tedious work, as table structure is not homogenous across manufacturers and some manufacturers use different formats across product series and release date. each extracted field usually requires its own regex since tables include testing conditions or design notes.
- use tabula (or another pdf2table program) to read the tables from the PDF. there is a python binding available that produces pandas DataFrames. find values by iterating the rows.
- LLM Apis https://github.com/piotrdelikat/fet-data-extractor
Downloads for some datasheet are protected by anti-robot mechanism. To avoid this, we use pyppeteer (Python port of puppeteer) with Chromium to simulate human user interaction. This will handle JS challenges, redirects and if the link points to a PDF-Preview page, we look for a download button and click it.
Chromiums PDF must be disabled, because we cannot access it through pupeteer.
chromiumUserDataPath/Default/Preferences
:
"plugins": {"always_open_pdf_externally": true},
- Tabula on macos: I had some issues getting java running on Mac M2, use zulu JDK
The power loss model for a DC-DC buck is based on this rOHM AN. We assume CCM mode, coil current never touches zero.
Note that loss from LS reverse recovery P_rr
is dissipated in HS.
In other words, poor performance of LS heats up the HS.
The generated CSV file includes the estimated losses caused by a transistor when placed in the HS or LS slot (not their
power dissipation).
Good Mosfet Properties:
HS:
- Fast switching
- Low Q_sw.
- Low r_g
LS:
- Low Q_rr
- Low Qgd/Qgs ratio
- High/optimized Vth
- Low r_g
- Low Vsd
The LS low Vsd problem can be tackled with a short dead time or by placing a Schottky diode parallel to the LS. Take care about parasitic inductances between the LS and the Schottky diode. This might even lower reverse recovery loss, because the LS body diode never powers up. See Toshiba Product Guide 2009 on page 18.
Qrr is often defined by design and values from the data-sheet are not subject to production test. Qrr depends on temperature, reverse voltage V_R, forward current I_F and forward current transient dif/dt. Most datasheets only specify a single value under some given conditions. DS of IQD016N08NM5 includes one for dif/dt=100A/us and dif/dt=1000A/us
- Digikey: use the filters to reduce number of results to 500 or less. then export csv
- N-Ch, 80V, Idc>25A, Qg<250nC, RdsON< 10mOhm 453 results 80V 26A 10mOhm 250nC.csv
- 100V
- LCSC: use Browser Developer Tools to copy HTML DOM of each results page.
- Coss power loss
- Use ocr (sample 'BUK7E4R0-80E,127.pdf', 'IPB019N08N3GATMA1' )
ocrmypdf
can recover the text, but doesn't recognize symbols correctly. - Mouser, API?
- Winsource
- Extract more fields
- Qgd/Qgs (self turn on)
- Vsd (body diode forward voltage)
- r_g
-
- https://epc-co.com/epc/design-support/part-cross-reference-search
- a very useful tool that comes with power loss calculations. i found some values to be off, e.g. IPA050N10NM5S Rds_on_max@10V is 5, in the app its 5.6.
-
https://octopart.com/ (Ciss, rise&fall times, )
https://www.discoveree.io/collateral/continental/PCIM2020_DiscoverEE_PowerLossModeling_AudioVisual.mp4 https://www.discoveree.io/collateral/PCIM_Europe_2020/PCIM2020_DiscoverEE_PowerLossModeling_Slides.pdf https://pcimasia-expo.cn.messefrankfurt.com/content/dam/messefrankfurt-redaktion/pcim_asia/download/pac2020/speakers-ppt/1/Shishir%20Rai.pdf https://ww1.microchip.com/downloads/en/Appnotes/01471A.pdf https://www.st.com/resource/en/application_note/dm00380483-calculation-of-turnoff-power-losses-generated-by-a-ultrafast-diode-stmicroelectronics.pdf https://www.vishay.com/docs/73217/an608a.pdf https://www.eetimes.com/how-fet-selection-can-optimize-synchronous-buck-converter-efficiency/
fetlib mosfetlib fetfinder findfet mosdb