Skip to content

Latest commit

 

History

History
225 lines (171 loc) · 13.3 KB

README.md

File metadata and controls

225 lines (171 loc) · 13.3 KB

Extensive parametric search of MOSFETs for DC-DC converters

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

How to use

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)
  1. acquire a parts list from Digikey. go to digikey.com

  2. narrow down the search filters so your have 500 or less results.

  3. download the CSV file (click Download Table / First 500 Results)

  4. save the CSV file under digikey-results/ folder

  5. 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)
  1. 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.

Acquiring part specifications

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:

  1. 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.
  2. 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.
  3. LLM Apis https://github.com/piotrdelikat/fet-data-extractor

Datasheet download

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},

Troubleshooting

  • Tabula on macos: I had some issues getting java running on Mac M2, use zulu JDK

Power Loss Model

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.

Notes about Qrr

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

Acquiring Parts Lists from Suppliers (Search Results)

  • Digikey: use the filters to reduce number of results to 500 or less. then export csv
  • LCSC: use Browser Developer Tools to copy HTML DOM of each results page.

TODO

  • 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

Resources

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/

names

fetlib mosfetlib fetfinder findfet mosdb