Synchronous Boost Converter Design

Hello all,

I’m trying to create my first synchronous boost converter using KiCad. This is my first time using this program as well, so maybe there’s something I don’t understand, but my signals make no sense. I’m thinking this is a problem with my setup of the unfamiliar program.

Some things of note:

  1. I get errors such as
    doAnalyses: TRAN: Timestep too small; time = 1.0483e-10, timestep = 1.25e-17: trouble with node “xic2:probe_int_boot#branch”
    run simulation(s) aborted

    As far as I can tell from this forum, this is a catchall error and gives me no real information. The weirdest thing is that my simulation will sometimes run, I will make a change that will cause this error, and upon undoing the change, the error will exist in the sim that ran fine at first. Sometimes in a different component. There’s no rhyme or reason to where the error will occur, which is why you see so many resistors in my sim. They are a stopgap fix, but I don’t know the root causes.

  2. I’m using TPS28226DR gate driver, but using the library file for TPS28225 as this is the only one I can find Pspice code for and they are very similar in design and function.

Even when problem 1 doesn’t occur, I get a voltages across my entire circuit, even my bootstrap capacitor, and current in the unit of microamps.

What could I be doing wrong? Any help would be appreciated. I’m still learning this program.

I can’t share attachments on this forum yet, so here is a Google Drive link to all of the files needed to run this sim.

The files you put in your folder contain a user-specific path, so other people will not be able to use them as is.

  (property "Sim.Library" "C:\\\\Users\\\\maste\\\\OneDrive - University of South Carolina\\\\Fall '25\\\\Research\\\\Phase 2\\\\slum496\\\\tps28225.lib"

Have you looked over the general tips first? ex. https://www.google.com/search?q=doAnalyses%3A+TRAN%3A++Timestep+too+small

  1. https://www.reddit.com/r/AskElectronics/comments/1d05jqp/timestep_too_small_error_in_kicad_simulation/
  2. Insufficient pin allocation work

Thank you for the response.

Not being facetious here, but wouldn’t it be as simple as using the simulation model editor and changing the model path? I’m not sure how to share my files for others to use.

Yes, this is why I’m here. I’ve exhausted all my other options, because none of these links helped.

I’m not sure what you mean by this.

https://docs.kicad.org/master/en/eeschema/eeschema.html#simulation-pin-assignment

Simulation models may have their pins numbered differently than the corresponding symbol. For example, SPICE models for diodes usually consider pin 1 to be the anode, while schematic symbols are usually drawn with pin 1 as the cathode. Operational amplifier models are also very likely to have model pin assignments that do not match package or schematic pin numbers.

Simulating a SMPS is sort of tricky, as you combine fast switching in the PWM and slow time constants at the output.

Some ideas towards your example circuit:

Eeschema:

As tama suggested, do the pin assignment. It is wrong or not done in your example.

ngspice:

Reduce the transient time step, e.g. to 10ns

Increase the rise and fall times of your input pulse.

Add some options suitable for power supply simulation, as we typically have larger voltages compared to IC simulation (see circuit diagram attached).

The circuit:

Reduce the inductance

Remove most of the 0.1 Ohm resistors (except for series to L)

Increase the gate resistors.

The resulting circuit is

If I do these changes, I get as a simulation result

2 Likes

I’m a fan of 9.99, but it’s very difficult to do in that environment, and it’s very hard to keep it the same in both the situations where you have it and where you don’t. The easiest thing to do is to create a subfolder under the project, put it in there as a project specific symbol library, and then publish it, and other people will probably find it easy to reference.
project specific symbol library https://docs.kicad.org/9.0/en/eeschema/eeschema.html#managing-symbol-libraries

${KIPRJMOD} is a convenient parameter because it is a relative path. https://docs.kicad.org/9.0/en/eeschema/eeschema.html#sym-path-variable-substitution

Archiving the complete project is also a useful step, as it will be stored in an archive and should be easy for recipients to unarchive. https://docs.kicad.org/9.0/en/kicad/kicad.html#project-archive

Thank you for the response. If I’m going to be honest, I was hoping you’d respond. You came the closest to answering my question in the similar posts I’ve found related to this problem.

I made all the changes you suggested after this line:

And while my simulation runs, it still looks nothing like yours. UGATE never actually turns on fully:

Sanity checking tells me that in a SMPS, LGATE should turn on first to charge the bootstrap cap. This leads me to believe that the pin assignment really is the last piece of the puzzle. How did you fix it on your end?

I followed the link @tama sent and the closest I could find in my version of KiCad is this, which looks fine to me.

And then I think to look in the .lib file, where the subcircuit reads as

.SUBCKT TPS28225 PWM LGATE VDD UGATE EN/PG PHASE BOOT GND

Is this what you two mean by pin assignment?

No “Symbol Properties“ Pin Functions tab

https://docs.kicad.org/master/en/eeschema/eeschema.html#simulation-pin-assignment
”Simulation model” Pin Assignments tab

Thank you both! I’ve done more in the past 10 hours than I have in a week.

Also now is a good time to find out that “tw” is the offtime of the signal, not the duty cycle. tw = 5.5 gets my my desired output voltage of 12V. Now I’m off to add an actual PWM chip and design my first PCB.

Hi quick question, my original circuit, a regular synchronous boost converter, worked in LT Spice with a 150 uH inductor. Why change this inductor to 20 uH? How did you calculate that value?