* Op Amp Macromodels for PSpice * Generated by Ray Kendall * Intuitive Research and Technology Corp * Copyright August 2006 - All Rights Reserved * * Model parameters: * AV = open-loop DC gain * CMR = common mode rejection ratio * VRP = positive rail voltage difference (V) * VRN = negative rail voltage difference (V) * RO = output resistance (ohm) * IQ = quiescent current (A) * SR = slew rate (V/sec) * FU = unity gain frequency (gain bandwidth) (Hz) * PM = phase margin (degrees) * VOS = input offset voltage (V) * RIN = input resistance (ohm) (OPAMPMODH only) * IB = input bias current (A) (OPAMPMODP & OPAMPMODN only) * CIN = input capacitance (F) * ILP = positive output current limit (source) (A) * ILN = negative output current limit (sink) (A) * * * OPAMPMODH - HIGH INPUT IMPEDANCE OP AMP MODEL * .SUBCKT OPAMPMODH IN+ IN- V+ V- OUT + PARAMS: AV=100K VRP=1 VRN=1 RO=10 IQ=0.5m VOS=0 RIN=1E10 + CIN=2p ILP=50m ILN=50m CMR=100K SR=1MEG FU=1MEG PM=60 * X_XIQ V+ V- ILOADB PARAMS: ID={IQ} VD=0.5 V_VOS IN+ $N_0001 DC {VOS} G_GI+ V+ 1_VR 1_IOP 0 1 G_GI- 1_VR V- 1_ION 0 1 E_ABM23 1_VR 0 VALUE { (V(V+)+V(V-))/2 } C_CI2 IN- 1_VR {CIN} R_RI2 IN- 1_VR {RIN} R_RI1 IN+ 1_VR {RIN} C_CI1 IN+ 1_VR {CIN} X_H2 $N_0002 0 $N_0003 0 OPAMPMOD_H2 E_EI- 1_ION 0 VALUE { IF(V($N_0004)<0,-1*V($N_0004),0) } E_EI+ 1_IOP 0 VALUE { IF(V($N_0004)>0,V($N_0004),0) } X_HO $N_0005 $N_0006 $N_0004 0 OPAMPMOD_H1 E_EIL- $N_0005 $N_0007 VALUE { IF(V(1_ION)>{ILN},10K* + (V(1_ION)-{ILN}),0) } E_EIL+ $N_0008 $N_0007 VALUE { IF(V(1_IOP)>{ILP},10K* + (V(1_IOP)-{ILP}),0) } R_RO $N_0006 OUT {RO} C_CC $N_0002 $N_0009 {1m/SR} G_ABM2I4 $N_0002 0 VALUE { LIMIT((6.28m*{FU}/{SR})* + (V($N_0001,IN-)+(V($N_0001)+V(IN-))/(2*{CMR})),-1m,1m) } E_ABM48 $N_0009 0 VALUE { ((V(V+,V-)-{VRP}-{VRN})/3.14)*ATAN( + {SR}/{FU}*{AV}/2*V($N_0003,0)/(V(V+,V-)-{VRP}-{VRN}))+ + (V(V+)+V(V-)-{VRP}+{VRN})/2 } R_RP1 $N_0010 0 1K R_RP2 $N_0011 0 1K E_EP1 $N_0008 0 $N_0011 0 1 G_GP2 $N_0011 0 $N_0010 0 -1m G_GP1 $N_0010 0 $N_0009 0 -1m C_CP1 $N_0010 0 {1/(6.28K*FU*(128/(90-PM)-0.422))} C_CP2 $N_0011 0 {1/(6.28K*FU*(128/(90-PM)-0.422))} .ENDS OPAMPMODH * * * OPAMPMODP - PNP INPUT OP AMP MODEL * .SUBCKT OPAMPMODP IN+ IN- V+ V- OUT + PARAMS: AV=100K VRP=1 VRN=1 RO=10 IQ=0.5m VOS=0 IB=10n + CIN=2p ILP=50m ILN=50m CMR=100K SR=1MEG FU=1MEG PM=60 * X_H2 $N_0001 0 $N_0002 0 OPAMPMOD_H2 E_EI- 1_ION 0 VALUE { IF(V($N_0003)<0,-1*V($N_0003),0) } E_EI+ 1_IOP 0 VALUE { IF(V($N_0003)>0,V($N_0003),0) } X_HO $N_0004 $N_0005 $N_0003 0 OPAMPMOD_H1 E_EIL- $N_0004 $N_0006 VALUE { IF(V(1_ION)>{ILN},10K* + (V(1_ION)-{ILN}),0) } E_EIL+ $N_0007 $N_0006 VALUE { IF(V(1_IOP)>{ILP},10K* + (V(1_IOP)-{ILP}),0) } R_RO $N_0005 OUT {RO} C_CC $N_0001 $N_0008 {1m/SR} E_ABM48 $N_0008 0 VALUE { ((V(V+,V-)-{VRP}-{VRN})/3.14)*ATAN( + {SR}/{FU}*{AV}/2*V($N_0002,0)/(V(V+,V-)-{VRP}-{VRN}))+ + (V(V+)+V(V-)-{VRP}+{VRN})/2 } X_XIQ V+ V- ILOADB PARAMS: ID={IQ} VD=0.5 G_GI+ V+ 1_VR 1_IOP 0 1 G_GI- 1_VR V- 1_ION 0 1 E_ABM23 1_VR 0 VALUE { (V(V+)+V(V-))/2 } E_EV $N_0009 0 V+ 0 1 X_HIB $N_0009 $N_0010 $N_0011 0 OPAMPMOD_H1 V_VOS IN+ $N_0012 DC {VOS} D_DI1 $N_0013 $N_0012 DOPAMPMOD C_CI1 $N_0013 $N_0012 {CIN} C_CI2 $N_0013 IN- {CIN} D_DI2 $N_0013 IN- DOPAMPMOD X_XIB $N_0010 $N_0013 ILOADB PARAMS: ID={2*IB} VD=0.2 G_ABM3I2 $N_0001 0 VALUE { LIMIT((6.28m*{FU}/{SR})* + (V($N_0012,IN-)+(V($N_0012)+V(IN-))/(2*{CMR})), + -0.5m*V($N_0011)/{IB},0.5m*V($N_0011)/{IB}) } R_RP2 $N_0014 0 1K R_RP1 $N_0015 0 1K G_GP1 $N_0015 0 $N_0008 0 -1m G_GP2 $N_0014 0 $N_0015 0 -1m E_EP1 $N_0007 0 $N_0014 0 1 C_CP1 $N_0015 0 {1/(6.28K*FU*(128/(90-PM)-0.422))} C_CP2 $N_0014 0 {1/(6.28K*FU*(128/(90-PM)-0.422))} .ENDS OPAMPMODP * * * OPAMPMODN - NPN INPUT OP AMP MODEL * .SUBCKT OPAMPMODN IN+ IN- V+ V- OUT + PARAMS: AV=100K VRP=1 VRN=1 RO=10 IQ=0.5m VOS=0 IB=10n + CIN=2p ILP=50m ILN=50m CMR=100K SR=1MEG FU=1MEG PM=60 * X_H2 $N_0001 0 $N_0002 0 OPAMPMOD_H2 E_EI- 1_ION 0 VALUE { IF(V($N_0003)<0,-1*V($N_0003),0) } E_EI+ 1_IOP 0 VALUE { IF(V($N_0003)>0,V($N_0003),0) } X_HO $N_0004 $N_0005 $N_0003 0 OPAMPMOD_H1 E_EIL- $N_0004 $N_0006 VALUE { IF(V(1_ION)>{ILN},10K* + (V(1_ION)-{ILN}),0) } E_EIL+ $N_0007 $N_0006 VALUE { IF(V(1_IOP)>{ILP},10K* + (V(1_IOP)-{ILP}),0) } R_RO $N_0005 OUT {RO} C_CC $N_0001 $N_0008 {1m/SR} E_ABM48 $N_0008 0 VALUE { ((V(V+,V-)-{VRP}-{VRN})/3.14)*ATAN( + {SR}/{FU}*{AV}/2*V($N_0002,0)/(V(V+,V-)-{VRP}-{VRN}))+ + (V(V+)+V(V-)-{VRP}+{VRN})/2 } E_EV $N_0009 0 V- 0 1 X_HIB $N_0010 $N_0009 $N_0011 0 OPAMPMOD_H1 X_XIQ V+ V- ILOADB PARAMS: ID={IQ} VD=0.5 G_GI+ V+ 1_VR 1_IOP 0 1 G_GI- 1_VR V- 1_ION 0 1 E_ABM23 1_VR 0 VALUE { (V(V+)+V(V-))/2 } D_DI1 $N_0012 $N_0013 DOPAMPMOD V_VOS IN+ $N_0012 DC {VOS} C_CI1 $N_0013 $N_0012 {CIN} C_CI2 $N_0013 IN- {CIN} D_DI2 IN- $N_0013 DOPAMPMOD R_RP2 $N_0014 0 1K R_RP1 $N_0015 0 1K G_GP1 $N_0015 0 $N_0008 0 -1m G_GP2 $N_0014 0 $N_0015 0 -1m E_EP1 $N_0007 0 $N_0014 0 1 C_CP1 $N_0015 0 {1/(6.28K*FU*(128/(90-PM)-0.422))} C_CP2 $N_0014 0 {1/(6.28K*FU*(128/(90-PM)-0.422))} X_XIB $N_0013 $N_0010 ILOADB PARAMS: ID={2*IB} VD=0.2 G_ABM3I2 $N_0001 0 VALUE { LIMIT((6.28m*{FU}/{SR})* + (V($N_0012,IN-)+(V($N_0012)+V(IN-))/(2*{CMR})), + -0.5m*V($N_0011)/{IB},0.5m*V($N_0011)/{IB}) } .ENDS OPAMPMODN * * .subckt OPAMPMOD_H2 1 2 3 4 H_H2 3 4 VH_H2 -1K VH_H2 1 2 0V .ends OPAMPMOD_H2 * .subckt OPAMPMOD_H1 1 2 3 4 H_H1 3 4 VH_H1 1 VH_H1 1 2 0V .ends OPAMPMOD_H1 * .subckt ILOADB IN+ IN- PARAMS: ID=1 VD=1 J1 IN+ IN- IN- ILJ .PARAM VTOI={-1*VD} .PARAM BETI={ID/(VD*VD)} .model ILJ NJF (VTO={VTOI} BETA={BETI}) .ends ILOADB * .model DOPAMPMOD D( + Is=1e-14 Cjo=.1pF Rs=.1) *$