Fatal error: Badly formed node voltage in behavioral source

Hello all,

I’m having an issue using a .subckt for the Diodes Inc AL8860.
I am able to run it in LTSPICE, but it struggles to run a .tran 2m.
I was hoping QSPICE could run faster.

The output window gives the follow message:
Fatal error: Badly formed node voltage in behavioral source.
The problem occured while parsing the line:
E_ABM15 N148964 0 VALUE { IF(V(TEMP) > 150-(30*V(OTP)),1,0)}

If anyone could point me in the right direction I’d be grateful.

I’ve pasted the subckt as I am a new user I cannot upload a file.

  • PSpice Model Editor - Version 16.6.0
    *$


  • DEVICE : AL8860 - Diodes Incorporated
  • DATE : 14AUG2019
  • SIMULATOR : PSPICE 16.6
  • MODEL VERSION : 1.0


  • DEVICE NOTES:
  • Following features are been modelled:
    1. Soft-Start
    1. PWM Dimming
    1. Analog Dimming
    1. Pulse Skip Mode
    1. Ron variation vs Temperature
    1. LED Open circuit protection
    1. LED Short circuit protection
    1. Over Temperature Protection


.SUBCKT AL8860 CTRL GND SET SW VIN PARAMS: TEMP_CHANGE_RATE=500U TAMB=27

  • RTJA=147
    E_E4 N148834 GND N148696 GND 1
    C_C15 GND N148696 1n IC=0 TC=0,0
    E_ABM15 N148964 0 VALUE { if(V(TEMP) > 150-(30*V(OTP)),1,0) }
    R_R7 N146146 REF 0.1 TC=0,0
    X_U12 PWM ISW I_WR IP_INT N07827 ipeaksampler PARAMS:
    R_R2 RISING_THRS N145465 50 TC=0,0
    E_ABM3 RISING_THRS 0 VALUE { V(CTRL_LIMIT)1.2 }
    E_ABM20 VRON 0 VALUE { ((0.0016m
    V(TEMP)V(TEMP)) + (0.5137mV(TEMP)) +
  • 17.383m)V(ISW) }
    C_C12 OTP GND 1n TC=0,0
    E_ABM22 RON 0 VALUE { V(SW)/(V(ISW)+10u) }
    C_C9 GND N148806 1n IC=0 TC=0,0
    X_U11 N148806 N148802 diode PARAMS:
    C_C17 GND CTRL 71.43p IC=0 TC=0,0
    E_ABM16 VIN_UVLO 0 VALUE { if(V(VIN) > 4.2-(0.2
    V(VIN_UVLO)),1,0) }
    E_ABM4 N145295 0 VALUE { V(RISING_THRS)-V(CTRL_LIMIT)0.8 }
    E_ABM8 IOUT 0 VALUE { (V(N07827))/1.1 }
    R_R11 N148964 OTP 500 TC=0,0
    E_ABM7 IRMS 0 VALUE { ((V(IOUT)**2)+((0.26
    V(IOUT))**2)/12)V(D) }
    E_ABM1 REF 0 VALUE { min(max((0.8928
    (V(VIN)-0.75)),0),2.5) }
    C_C5 GND N140441 1u IC=0 TC=0,0
    R_R10 N140441 D 6 TC=0,0
    E_ABM27 N148696 0 VALUE { V(IRMS)((V(VRON)/V(Isw))+0.2){Rtja} }
    E_ABM2 CTRL_LIMIT 0 VALUE { min(V(CTRL),2.5) }
    C_C13 GND N145359 1n TC=0,0
    C_C1 GND N145465 1n TC=0,0
    R_R5 N140479 N140441 6 TC=0,0
    G_G2 N148802 N148806 N149178 GND 1
    X_U3 SENSE N145465 N145295 N145353 COMPHYS2_SAN PARAMS: VDD=1.8 VSS=0
    X_U16 GND CTRL diode PARAMS:
    E_E3 N145603 GND VRON GND 1
    E_ABM24 N149178 0 VALUE { 1n/{Temp_Change_rate} }
    X_U10 N148834 N148802 diode PARAMS:
    C_C11 GND D 1u IC=0 TC=0,0
    X_H1 SW SW1 ISW GND AL8860_H1
    E_E1 SENSE GND VIN SET 25
    X_U6 GND SW1 diode PARAMS:
    E_ABM5 PWM 0 VALUE { IF( V(N145353)>0.5 | V(N145359)>0.5,1,0) }
    V_V1 N146278 GND 4.5
    X_U15 CTRL N146146 diode PARAMS:
    E_ABM12 N145529 0 VALUE { if((V(CTRL_LIMIT)<0.3) | (V(VIN_UVLO)<0.5) |
  • (V(OTP)>0.5) ,1,0) }
    E_ABM13 N140413 0 VALUE { IF(V(PWM)>0.5,0,1) }
    R_R12 N145529 N145359 1 TC=0,0
    X_S1 PWM GND SW1 N145603 AL8860_S1
    I_I5 N146278 CTRL DC 1.786u
    E_E2 N140479 GND N140413 GND 1
    G_G1 N148802 N148834 N149178 GND 1
    E_ABM10 TEMP 0 VALUE { (V(N148806)+{TAMB}) }
    .ENDS
    .subckt AL8860_H1 1 2 3 4
    H_H1 3 4 VH_H1 1
    VH_H1 1 2 0V
    .ends AL8860_H1
    *$
    .subckt AL8860_S1 1 2 3 4
    S_S1 3 4 1 2 _S1
    RS_S1 1 2 1G
    .MODEL _S1 VSWITCH Roff=1G Ron=200m Voff=0.8 Von=0.2
    .ends AL8860_S1
    *$
    .subckt ipeaksampler pwm isw i_wr ip_int ip
    c5 ip 0 1n ic=0
    xu7 pwm 5 rise_edge_det_san_0
  • params: VDD=1 VSS=0 T=100n
    sw3 ip ip_int 5 0 s_vswitch_1
    c4 i_wr 0 1u ic=0
    r4 isw i_wr 100m
    c3 ip_int 0 1n ic=0
    sw2 ip_int i_wr pwm 0 s_vswitch_2
    .model s_vswitch_1 vswitch
  • ron=0.01
  • roff=1e+009
  • von=0.8
  • voff=0.2
    .model s_vswitch_2 vswitch
  • ron=0.01
  • roff=1e+009
  • von=0.2
  • voff=0.8
    .ends ipeaksampler
    *$
    .subckt diode 1 2
    d1 1 2 ideal
    .model ideal d
  • n=0.001
  • is=1e-015
    .ends diode
    *$
    .subckt COMPHYS2_SAN INP INM HYS VOUT PARAMS: VDD=1 VSS=0
    .PARAM VTH = {( {VDD} + {VSS})/2 }
    EHYS INM INM_INT value = {if (V(VOUT)>{VTH},V(HYS),0)}
    E1 VOUT_PRE 0 value = {if(V(INP)>V(INM_INT),{VDD},{VSS})}
    R1 VOUT_PRE VOUT 1
    C1 VOUT 0 1n IC=0
    .ends COMPHYS2_SAN
    *$
    .SUBCKT RISE_EDGE_DET_SAN_0 IN OUT PARAMS:VDD=1 VSS=0 T=100N
    .PARAM VTH={({VDD}+{VSS})/2}
    XU1 IN IN2 OUT AND PARAMS:VDD={VDD} VSS={VSS}
    XU2 IN OUT_IN INV PARAMS:VDD={VDD} VSS={VSS}
    XU3 OUT_IN IN2 DIODE
    R1 OUT_IN IN2 {{{T}*1E9}}
    C1 IN2 0 1.443N
    .ENDS RISE_EDGE_DET_SAN_0
    *$
    .SUBCKT AND IN1 IN2 OUT PARAMS:VDD=1.8 VSS=0
    .PARAM VTH={({VDD}+{VSS})/2}
    E1 OUT1 0 VALUE={IF(V(IN1)>{VTH}&V(IN2)>{VTH},{VDD},{VSS})}
    R2 OUT1 OUT 1
    C2 OUT 0 1N
    .ENDS AND
    *$
    .SUBCKT INV INV_IN INV_OUT PARAMS:VDD=1.8 VSS=0
    .PARAM VTH={({VDD}+{VSS})/2}
    E2 INV_OUT1 0 VALUE={IF(V(INV_IN)>{VTH},{VSS},{VDD})}
    R4 INV_OUT1 INV_OUT 1
    C4 INV_OUT 0 1N
    .ENDS INV
    *$
    ** Schottky diode **
    .subckt B240A A B
    DSD1 A B DI_B240A
    .MODEL DI_B240A D ( IS=7.98u RS=13.4m BV=40.0 IBV=500u
  • CJO=370p M=0.333 N=1.13 TT=1.44n )
    .ENDS B240A
    *$
    ** LED Model **
    .subckt LEDR A B
    DLED1 A B D_CQX35A_1
    .MODEL D_CQX35A_1 D( IS= 9.43000000000000E-0017 N=2.13 BV=5 IBV=10U
  •  RS=2.08 CJO=63.8P VJ=3.4 M=226M FC=500M 
    
  •  TT=25.9N EG=1.11 XTI=3 KF=0 AF=1 )
    

.ENDS LEDR
*

This forum will auto format the text and remove important character if you just copy and paste into text box. Please edit your post by reposting your subckt. Or point the link where to download this model file.

In the forum message box, create a new line, press Ctrl-E for preformatted text, and paste your .subckt netlist in the “type or paste code here” section.

The model of the AL8860 can be found on the internet. The error you encountered is because “TEMP” is a reserved word in Qspice. This Pspice model uses it as a node name. What you need to do is modify “TEMP” to “TEMPn” to avoid using a reserved word. There are three lines that need to be modified. I have uploaded the modified library and a schematic that simulates with this device for your reference.

A common trick to run a Pspice model is to use gear integration and set trtol=7 (these two are Pspice settings). Sometimes, you may have to add “cshunt.” These are tricks that may work if the timestep is too small.

E_ABM15         N148964 0 VALUE { if(V(TEMPn) > 150-(30*V(OTP)),1,0)    }
E_ABM20         VRON 0 VALUE { ((0.0016m*V(TEMPn)*V(TEMPn)) + (0.5137m*V(TEMPn)) +
E_ABM10         TEMPn 0 VALUE { (V(N148806)+{Tamb})    }

Parent.AL8860Q.qsch (8.0 KB)
AL8860Q-Qspice.txt (6.9 KB)

2 Likes

Hello KSKelvin,

Thank you very much for figuring this out and offering the files too.

Kind regards,
Jack

1 Like