Operational Amplifier
Ideal operational amplifier with configurable gain and output voltage limits.
Non-inverting amplifier configuration with gain of 11.
using CircuitSim
circ = Circuit()
# Components
vin = ACVoltageSource("Vin", ac_magnitude=0.1, freq=1e3) # 100mV AC input
opamp = OpAmp("OP1", g=1e5, umax=12.0)
r1 = Resistor("R1", resistance=1000.0) # Feedback resistor
r2 = Resistor("R2", resistance=100.0) # Ground resistor
rload = Resistor("Rload", resistance=10000.0)
gnd = Ground("GND")
add_component!(circ, vin)
add_component!(circ, opamp)
add_component!(circ, r1)
add_component!(circ, r2)
add_component!(circ, rload)
add_component!(circ, gnd)
# Non-inverting amplifier: Gain = 1 + R1/R2 = 1 + 1000/100 = 11
@connect circ vin.nplus opamp.ninp # Input to non-inverting
@connect circ vin.nminus gnd
@connect circ opamp.ninn r2.n1 # Inverting to voltage divider
@connect circ r2.n2 gnd
@connect circ opamp.nout r1.n1 # Output through feedback
@connect circ r1.n2 r2.n1 # Feedback to inverting
@connect circ opamp.nout rload.n1 # Output to load
@connect circ rload.n2 gnd
# Transient analysis
tran_analysis = TransientAnalysis(stop=2e-3, points=200)
result = simulate_qucsator(circ, tran_analysis)
# Output voltage should be ~1.1V (0.1V × 11)
v_out = get_pin_voltage(result, rload, :n1)
println("OpAmp output: ", round(abs(v_out[end]), digits=2), " V (expected ~1.1V)")OpAmp output: 0.0 V (expected ~1.1V)