* Op Amp Macromodels for PSpice * use op amp data sheet parameters for all model parameters * Generated by Ray Kendall * Intuitive Research and Technology Corp * www.irtc-hq.com * Copyright 2007 - All Rights Reserved * * Op Amp Macromodels included: * OPAMPMODH - high input impedance (general purpose & FET input) * OPAMPMODP - PNP input * OPAMPMODN - NPN input * * Example formats for Op Amp subcircuit call: * *X IN+ IN- V+ V- OUT OPAMPMODH 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 IN+ IN- V+ V- OUT OPAMPMODP 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 * * Model parameters & relation to data sheet parameters: * AV = open-loop differential DC voltage gain * Sometimes given as large signal voltage gain. If given in * dB convert to dimensionless number using AV = 10^(dB/20). * Default: AV = 100K (100 dB) * CMR = common mode rejection ratio * Ratio of the differential voltage gain to the common mode * voltage gain. If given in dB convert to dimensionless number * using CMR = 10^(dB/20). Default: CMR = 100K (100 dB) * VRP = positive rail voltage difference (V) * Difference between the positive power supply voltage input * and the maximum output voltage swing. Always a positive number. * Default: VRP = 1 (lower for rail-to-rail op amps) * VRN = negative rail voltage difference (V) * Difference between the minimum output voltage swing and the * negative power supply voltage input. Always a positive number. * Default: VRN = 1 (lower for rail-to-rail op amps) * SR = slew rate (V/sec) * Maximum output voltage rate of change with large differential * input voltage. If a value is not given it may be determined from * output voltage slope in a voltage follower pulse response plot. * Default: SR = 1Meg * FU = unity gain frequency (Hz) * Frequency where the dominant pole reduces the small signal open- * loop voltage gain to one (0 dB). Sometimes given as gain bandwidth. * May be determined from a plot of gain vs. frequency. * Default: FU = 1Meg * PM = phase margin (degrees) * Difference between the output phase shift at unity gain and 180 * degrees. A measure of op amp stability. Value MUST be 0 < PM < 90. * If a value is not given it may be determined from a plot of phase * and gain vs. frequency or may be determined empirically by comparing * overshoot from a plot of op amp pulse response to corresponding * model response. Decreasing PM increases overshoot. Default: PM = 60 * IQ = quiescent power supply current (A) * Default: IQ = 0.5m * ILP = positive (source) output current limit (A) * Maximum current out of the op amp. Default: ILP = 50m * ILN = negative (sink) output current limit (A) * Maximum current into the op amp. Default: ILN = 50m * RO = output resistance (ohm) * Default: RO = 10 * VOS = input offset voltage (V) * Default: VOS = 0 * CIN = input capacitance (F) * Default: CIN = 2p * RIN = input resistance (ohm) (OPAMPMODH only) * Default: RIN = 1E10 * IB = input bias current (A) (OPAMPMODP & OPAMPMODN only) * Average of the two input currents (as generally specified). * Default: IB = 10n * * .SUBCKT OPAMPMODH INP INN VP VN 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 VP VN ILOADB PARAMS: ID={IQ} VD=0.5 V_VOS INP $N_0001 DC {VOS} G_GIP VP $N_VR $N_IOP 0 1 G_GIN $N_VR VN $N_ION 0 1 E_ABM23 $N_VR 0 VALUE { (V(VP)+V(VN))/2 } C_CI2 INN $N_VR {CIN} R_RI2 INN $N_VR {RIN} R_RI1 INP $N_VR {RIN} C_CI1 INP $N_VR {CIN} X_H2 $N_0002 0 $N_0003 0 OPAMPMOD_H2 E_EIN $N_ION 0 VALUE { IF(V($N_0004)<0,-1*V($N_0004),0) } E_EIP $N_IOP 0 VALUE { IF(V($N_0004)>0,V($N_0004),0) } X_HO $N_0005 $N_0006 $N_0004 0 OPAMPMOD_H1 E_EILN $N_0005 $N_0007 VALUE { IF(V($N_ION)>{ILN},10K* + (V($N_ION)-{ILN}),0) } E_EILP $N_0008 $N_0007 VALUE { IF(V($N_IOP)>{ILP},10K* + (V($N_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,INN)+(V($N_0001)+V(INN))/(2*{CMR})),-1m,1m) } E_ABM48 $N_0009 0 VALUE { ((V(VP,VN)-{VRP}-{VRN})/3.14)*ATAN( + {SR}/{FU}*{AV}/2*V($N_0003,0)/(V(VP,VN)-{VRP}-{VRN}))+ + (V(VP)+V(VN)-{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 * * .SUBCKT OPAMPMODP INP INN VP VN 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_EIN $N_ION 0 VALUE { IF(V($N_0003)<0,-1*V($N_0003),0) } E_EIP $N_IOP 0 VALUE { IF(V($N_0003)>0,V($N_0003),0) } X_HO $N_0004 $N_0005 $N_0003 0 OPAMPMOD_H1 E_EILN $N_0004 $N_0006 VALUE { IF(V($N_ION)>{ILN},10K* + (V($N_ION)-{ILN}),0) } E_EILP $N_0007 $N_0006 VALUE { IF(V($N_IOP)>{ILP},10K* + (V($N_IOP)-{ILP}),0) } R_RO $N_0005 OUT {RO} C_CC $N_0001 $N_0008 {1m/SR} E_ABM48 $N_0008 0 VALUE { ((V(VP,VN)-{VRP}-{VRN})/3.14)*ATAN( + {SR}/{FU}*{AV}/2*V($N_0002,0)/(V(VP,VN)-{VRP}-{VRN}))+ + (V(VP)+V(VN)-{VRP}+{VRN})/2 } X_XIQ VP VN ILOADB PARAMS: ID={IQ} VD=0.5 G_GIP VP $N_VR $N_IOP 0 1 G_GIN $N_VR VN $N_ION 0 1 E_ABM23 $N_VR 0 VALUE { (V(VP)+V(VN))/2 } E_EV $N_0009 0 VP 0 1 X_HIB $N_0009 $N_0010 $N_0011 0 OPAMPMOD_H1 V_VOS INP $N_0012 DC {VOS} D_DI1 $N_0013 $N_0012 DOPAMPMOD C_CI1 $N_0013 $N_0012 {CIN} C_CI2 $N_0013 INN {CIN} D_DI2 $N_0013 INN 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,INN)+(V($N_0012)+V(INN))/(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 * * .SUBCKT OPAMPMODN INP INN VP VN 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_EIN $N_ION 0 VALUE { IF(V($N_0003)<0,-1*V($N_0003),0) } E_EIP $N_IOP 0 VALUE { IF(V($N_0003)>0,V($N_0003),0) } X_HO $N_0004 $N_0005 $N_0003 0 OPAMPMOD_H1 E_EILN $N_0004 $N_0006 VALUE { IF(V($N_ION)>{ILN},10K* + (V($N_ION)-{ILN}),0) } E_EILP $N_0007 $N_0006 VALUE { IF(V($N_IOP)>{ILP},10K* + (V($N_IOP)-{ILP}),0) } R_RO $N_0005 OUT {RO} C_CC $N_0001 $N_0008 {1m/SR} E_ABM48 $N_0008 0 VALUE { ((V(VP,VN)-{VRP}-{VRN})/3.14)*ATAN( + {SR}/{FU}*{AV}/2*V($N_0002,0)/(V(VP,VN)-{VRP}-{VRN}))+ + (V(VP)+V(VN)-{VRP}+{VRN})/2 } E_EV $N_0009 0 VN 0 1 X_HIB $N_0010 $N_0009 $N_0011 0 OPAMPMOD_H1 X_XIQ VP VN ILOADB PARAMS: ID={IQ} VD=0.5 G_GIP VP $N_VR $N_IOP 0 1 G_GIN $N_VR VN $N_ION 0 1 E_ABM23 $N_VR 0 VALUE { (V(VP)+V(VN))/2 } D_DI1 $N_0012 $N_0013 DOPAMPMOD V_VOS INP $N_0012 DC {VOS} C_CI1 $N_0013 $N_0012 {CIN} C_CI2 $N_0013 INN {CIN} D_DI2 INN $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,INN)+(V($N_0012)+V(INN))/(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 INP INN PARAMS: ID=1 VD=1 J1 INP INN INN 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) *$