Using one of LTspice's built-in VDMOS models, I am unable to duplicate your error of "Time step too small..." ...at least at the default temperature of 27°C (see below). There are other issues with this unencrypted PSpice library file that I had to first correct before LTspice would stop printing the following errors in its SPICE Error Log
.
Questionable use of curly braces in "b§e_lmg1210_pwm_abm1 lmg1210_pwm_n16782654 0 v={if(v(lmg1210_pwm_n16778522)>800m,1,0)} "
Error: undefined symbol in: "if([v](lmg1210_pwm_n16778522)>800m,1,0)"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vss}},{{vdd}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vss)),((vdd)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vss}},{{vdd}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vss)),((vdd)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}}&v(b)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh))&v(b)>((vthresh)),((vdd)),((vss)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vss}},{{vdd}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vss)),((vdd)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vss}},{{vdd}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vss)),((vdd)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}}&v(b)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh))&v(b)>((vthresh)),((vdd)),((vss)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vss}},{{vdd}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vss)),((vdd)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}}&v(b)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh))&v(b)>((vthresh)),((vdd)),((vss)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}}&v(b)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh))&v(b)>((vthresh)),((vdd)),((vss)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}}&v(b)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh))&v(b)>((vthresh)),((vdd)),((vss)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vdd)),((vss)))"
Questionable use of curly braces in "b§e_abmgate yint 0 v={if(v(a)>{{vthresh}},{{vdd}},{{vss}})}"
Error: undefined symbol in: "if([v](a)>((vthresh)),((vdd)),((vss)))"
Error on line 2939 : .model pmos01 pmos vto = -2 kp = 0.6875 lambda = 0.001*$
* Unrecognized parameter "*$" -- ignored
First, there are of bunch of behavioral E-sources which use an extra set of nested curly braces around IF(X,Y,Z)
statements that LTspice doesn't appreciate. One of them is called E_LMG1210_PWM_ABM1
. The rest are found in other subcircuits creating general purpose logic gates. These components are named E_ABMGATE
, E_ABMGATE1
, and E_ABMGATE2
and there are 23 instances with the discrepancy. The main LMG1210 subcircuit doesn't utilize all of these sub-subcircuits, but might as well correct them all instead of picking out the ones in the error log that need specific correction. You can either delete the extra set of curly braces or replace them with corresponding parentheses (either way works).
The last error is due to a missing newline after the definition of the .model PMOS01 PMOS
. The line that defines the LAMBDA
parameter should end after the 0.001
such that it looks like this:
*$
.model PMOS01 PMOS
+ VTO = -2
*+ KP = 0.389
+ KP = 0.6875
+ LAMBDA = 0.001
*$
Here is what my schematic looks like:
The following is the LMG1210.asy
symbol file. It points to LMG1210_TRANS.lib
.
Version 4
SymbolType BLOCK
RECTANGLE Normal -96 -184 112 184
WINDOW 0 8 -184 Bottom 2
WINDOW 3 8 184 Top 2
SYMATTR Prefix X
SYMATTR Value LMG1210
SYMATTR ModelFile LMG1210_TRANS.lib
PIN 112 -160 RIGHT 8
PINATTR PinName HB
PINATTR SpiceOrder 1
PIN 112 -128 RIGHT 8
PINATTR PinName HO
PINATTR SpiceOrder 2
PIN -96 -48 LEFT 8
PINATTR PinName PWM_LI
PINATTR SpiceOrder 3
PIN 112 -96 RIGHT 8
PINATTR PinName HS_0
PINATTR SpiceOrder 4
PIN 112 -64 RIGHT 8
PINATTR PinName HS_1
PINATTR SpiceOrder 5
PIN 112 -32 RIGHT 8
PINATTR PinName HS_2
PINATTR SpiceOrder 6
PIN 112 0 RIGHT 8
PINATTR PinName HS_3
PINATTR SpiceOrder 7
PIN 112 32 RIGHT 8
PINATTR PinName HS_DAP
PINATTR SpiceOrder 8
PIN 112 96 RIGHT 8
PINATTR PinName LS_DAP
PINATTR SpiceOrder 9
PIN -96 -144 LEFT 8
PINATTR PinName VIN
PINATTR SpiceOrder 10
PIN 112 64 RIGHT 8
PINATTR PinName LO
PINATTR SpiceOrder 11
PIN -96 80 LEFT 8
PINATTR PinName DHL
PINATTR SpiceOrder 12
PIN -96 112 LEFT 8
PINATTR PinName DLH
PINATTR SpiceOrder 13
PIN -96 -112 LEFT 8
PINATTR PinName VCC
PINATTR SpiceOrder 14
PIN 112 128 RIGHT 8
PINATTR PinName VSS_0
PINATTR SpiceOrder 15
PIN 112 160 RIGHT 8
PINATTR PinName VSS_1
PINATTR SpiceOrder 16
PIN -96 -80 LEFT 8
PINATTR PinName EN_HI
PINATTR SpiceOrder 17
PIN -96 -16 LEFT 8
PINATTR PinName NC_0
PINATTR SpiceOrder 18
PIN -96 16 LEFT 8
PINATTR PinName NC_1
PINATTR SpiceOrder 19
PIN -96 48 LEFT 8
PINATTR PinName NC_2
PINATTR SpiceOrder 20
PIN -96 144 LEFT 8
PINATTR PinName BST
PINATTR SpiceOrder 21
The following is the .asc
schematic file:
Version 4
SHEET 1 952 680
WIRE 752 -208 656 -208
WIRE -160 -176 -240 -176
WIRE 32 -176 -96 -176
WIRE 480 -176 32 -176
WIRE 752 -176 752 -208
WIRE -240 -128 -240 -176
WIRE -96 -128 -96 -176
WIRE 160 -128 -16 -128
WIRE 384 -128 224 -128
WIRE 480 -80 480 -176
WIRE 752 -48 752 -96
WIRE 656 -32 656 -208
WIRE -96 -16 -96 -48
WIRE -240 16 -240 -48
WIRE 384 16 384 -128
WIRE 384 16 288 16
WIRE -160 32 -160 -176
WIRE 80 32 -160 32
WIRE 384 32 384 16
WIRE 608 48 288 48
WIRE 32 64 32 -176
WIRE 80 64 32 64
WIRE 320 80 288 80
WIRE 80 96 -880 96
WIRE 656 96 656 64
WIRE 880 96 656 96
WIRE 320 112 320 80
WIRE 320 112 288 112
WIRE 384 112 384 96
WIRE 384 112 320 112
WIRE 80 128 -464 128
WIRE 384 144 384 112
WIRE 384 144 288 144
WIRE 656 144 656 96
WIRE 656 144 384 144
WIRE -880 160 -880 96
WIRE -464 160 -464 128
WIRE 80 160 32 160
WIRE 656 160 656 144
WIRE 880 160 880 96
WIRE 320 176 288 176
WIRE 384 176 384 144
WIRE 384 176 320 176
WIRE 80 192 32 192
WIRE 320 208 320 176
WIRE 320 208 288 208
WIRE 80 224 32 224
WIRE 608 240 288 240
WIRE 80 256 -80 256
WIRE -880 272 -880 240
WIRE -464 272 -464 240
WIRE 320 272 288 272
WIRE 480 272 480 -16
WIRE 480 272 320 272
WIRE 80 288 -208 288
WIRE 880 288 880 240
WIRE 320 304 320 272
WIRE 320 304 288 304
WIRE 656 304 656 256
WIRE -16 320 -16 -128
WIRE 80 320 -16 320
WIRE -208 336 -208 288
WIRE -80 336 -80 256
WIRE 320 336 320 304
WIRE 320 336 288 336
WIRE 320 400 320 336
WIRE -208 464 -208 416
WIRE -80 464 -80 416
FLAG 320 400 0
FLAG -240 16 0
FLAG -96 -16 0
FLAG -80 464 0
FLAG -208 464 0
FLAG 880 288 0
FLAG 656 304 0
FLAG 752 -48 0
FLAG -880 272 0
FLAG -464 272 0
SYMBOL AutoGenerated\\LMG1210 176 176 R0
SYMATTR InstName U1
SYMBOL voltage -96 -144 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V1
SYMATTR Value 5
SYMBOL voltage -240 -144 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V2
SYMATTR Value 6
SYMBOL schottky 160 -112 R270
WINDOW 0 32 32 VTop 2
WINDOW 3 0 32 VBottom 2
SYMATTR InstName D1
SYMATTR Value MBR20100CT
SYMATTR Description Diode
SYMATTR Type diode
SYMBOL cap 368 32 R0
SYMATTR InstName C1
SYMATTR Value 1.5µ
SYMBOL cap 464 -80 R0
SYMATTR InstName C2
SYMATTR Value 0.3µ
SYMBOL voltage 752 -192 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V7
SYMATTR Value 25
SYMBOL res 864 144 R0
SYMATTR InstName R3
SYMATTR Value 50
SYMBOL res -96 320 R0
SYMATTR InstName R6
SYMATTR Value 900k
SYMBOL res -224 320 R0
SYMATTR InstName R7
SYMATTR Value 900k
SYMBOL voltage -880 144 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V9
SYMATTR Value PULSE(0 1 0 0.5n 0.5n 24n 50n)
SYMBOL voltage -464 144 R0
WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0
SYMATTR InstName V8
SYMATTR Value PULSE(0 1 25n 0.5n 0.5n 24n 50n)
SYMBOL nmos 608 160 R0
SYMATTR InstName M1
SYMATTR Value BSC059N04LS6
SYMBOL nmos 608 -32 R0
SYMATTR InstName M2
SYMATTR Value BSC059N04LS6
TEXT -728 440 Left 2 !.tran 150n
The issues are far from gone, though. As soon as I raise the simulation temperature above the default of 27°, this model becomes unstable and fails to run...giving the timestep error you received. This is hopefully a lesson learned, where you should first verify at default temp before adjusting it (similar to first verifying with built-in MOSFETs before adding in the 3rd party GaN ones). One issue with the subcircuits provided by TI is that they are only tested with PSpice. It's quite time-consuming to go into the subcircuit code to correct what might be causing the issue in LTspice. However, since we know the temperature is causing the issue you can narrow it down a bit.
If you search for temp
you can find a PTEMP
parameter for a VARI_R
subcircuit. Fortunately, it's never used anywhere so that rules that out. If you search for T=
you can find a subcircuit which uses a T
parameter but it only linearly scales a capacitor and a T=10
is constantly used regardless.
This leaves us with the two most common temperature dependent devices in SPICE: any resistor with a TC
(temperature coefficient) defined and any type of semiconductor. You can search for TC=
and find a bunch of resistors...but they are all set to TC=0,0
so no problem there. Looking for semiconductors, you can search .model
statements. There will be a bunch of VSWITCH
which you can ignore, but you can then turn your attention to the two MOSFET models and the three diode models. This is the time-consuming part, but you can find each place these models are used and add a temp=27
to each instance to deduce which one (or ones) are causing the issue. After a bunch of goofing around, I determined that the following two lines need the temp=27
at the end:
Found in .SUBCKT D_D1
D1 1 2 DD1 temp=27
Found in .SUBCKT FALLING_DELAY
D_D1 IN INT DD temp=27
These corrections will allow the simulation to not fail when running at .options temp=80
, but obviously you have potentially compromised the temperature modelling accuracy of this subcircuit by doing this. You can spend more time if you wish tinkering with fixing their model to run in LTspice, but this is already quite involved.