%matplotlib inline
import pylab
import numpy
R2=1.0*10**3;
R1=8.2*10**3;
V=15.0;
V_REF=R2*V/(R1+R2);
print('V_REF = %f V'%V_REF)
############PLOT##################################
t = arange(0.001, 2.0, 0.005)
k = arange(0.0001, 0.0529, 0.0005)
k1= arange(0.0529, 0.447, 0.0005)
k2= arange(0.447, 1.053, 0.0005)
k3= arange(1.053,1.447, 0.0005)
k4= arange(1.447,2.0, 0.0005)
m=arange(-12,12,0.0005)
x5=(0.0529*m)/m
x10=(0.447*m)/m
x15=(1.053*m)/m
x25=(1.447*m)/m
subplot(211)
plot(t, 5*sin(2*pi*t))
plot(t,(1.63*t)/t,'--')
ylim( (-5,5) )
ylabel('Vin')
title('Input Waveform')
subplot(212)
plot(k,-12*k/k,'b')
plot(k1,12*k1/k1,'b')
plot(k2,-12*k2/k2,'b')
plot(k3,12*k3/k3,'b')
plot(k4,-12*k4/k4,'b')
plot(x5,m,'b')
plot(x10,m,'b')
plot(x15,m,'b')
plot(x25,m,'b')
ylim( (-13,13) )
ylabel('Vout')
xlabel('each time the input exceeds +1.63V,o/p switches to +12 and vice-versa')
title('Output Waveform')
R1=100.0*10**3;
R2=R1;
V_out_max=5.0;
V_UTP=R2*V_out_max/(R1+R2);
V_LTP=-V_out_max*R2/(R1+R2);
print('upper trigger point = %.1f Volts'%V_UTP)
print('lower trigger point = %.1f Volts'%V_LTP)
import pylab
import numpy
R1=100.0*10**3;
R2=47.0*10**3;
V_R1=4.7+0.7; #one zener is always forward biased with forward voltage 0.7V
#V_R1 can be positive or negative
I_R1=V_R1/R1;
I_R2=I_R1;
V_R2=R2*I_R2;
V_out=V_R1+V_R2; #positive or negative
print ('I_R1 = ±%d uA' %(I_R1*10**6))
print ('V_R2 = ±%.2f V' %(V_R2))
print('max output voltage = ± %.2f V'%V_out)
print('\nV_UTP = + %.2f V' %(V_R2))
print('V_LTP = - %.2f V' %(V_R2))
################PLOT######################################
t = arange(0.0, 1.0, 0.0005)
t1=arange(0.0001,0.085,0.0005)
t2=arange(0.0001,0.585,0.0005)
t3=arange(0.585,1.0,0.0005)
t4=arange(0.085,0.585,0.0005)
m=arange(-7.94,7.94,0.0005)
x1=(0.085*m)/m
x5=(0.585*m)/m
subplot(211)
plot(t, 5*sin(2*pi*t))
plot(t1,2.54*t1/t1,'--')
plot(t2,-2.54*t2/t2,'--')
text(0.09,1.95,'(0.085,2.54)')
text(0.586,-2,'(0.585,-2.54)')
#annotate('(0.085,2.54)',(0.085,2.54),(0.3,2.5),arrowprops = dict(facecolor='black',shrink=0.09,xycoords='data',textcoords='axes fraction'))
ylim( (-6,6) )
ylabel('Vin')
title('Input Waveform')
subplot(212)
plot(t1,7.94*t1/t1,'b')
plot(t3,7.94*t3/t3,'b')
plot(t4,-7.94*t4/t4,'b')
plot(x1,m,'b')
plot(x5,m,'b')
ylim( (-9,9) )
title('Source and output AC voltage')
V_IN1=3.0;
V_IN2=1.0;
V_IN3=8.0;
#all resistors are of equal value so weight of each input is 1
V_OUT=-(V_IN1+V_IN2+V_IN3);
print('output voltage = %d Volts'%V_OUT)
R_f=10.0*10**3;
R1=1.0*10**3;
R2=R1;
R=R1;
V_IN1=0.2;
V_IN2=0.5;
V_OUT=-(R_f/R)*(V_IN1+V_IN2);
print('output voltage of the summing amplifier = %d Volts'%V_OUT)
R_f=25.0*10**3;
R1=100.0*10**3;
R2=R1;
R3=R1;
R4=R1;
R=R1;
V_IN1=1.0;
V_IN2=2.0;
V_IN3=3.0;
V_IN4=4.0;
V_OUT=-(R_f/R)*(V_IN1+V_IN2+V_IN3+V_IN4);
print('output voltage = %.1f Volts'%V_OUT)
V_IN_avg=(V_IN1+V_IN2+V_IN3+V_IN4)/4;
if abs(V_OUT)==V_IN_avg:
print('The amplifier produces an output whose magnitude\n is the mathematical average of the input voltages')
V_IN1=3.0;
V_IN2=2.0;
V_IN3=8.0;
R_f=10.0*10**3;
R1=47.0*10**3;
R2=100.0*10**3;
R3=10.0*10**3;
weight_of_input1=R_f/R1;
weight_of_input2=R_f/R2;
weight_of_input3=R_f/R3;
V_OUT=-(weight_of_input1*V_IN1+weight_of_input2*V_IN2+weight_of_input3*V_IN3);
print('weight_of_input1 = %f'%weight_of_input1)
print('weight_of_input2 = %.1f'%weight_of_input2)
print('weight_of_input3 = %d'%weight_of_input3)
print('output voltage = %f Volts'%V_OUT)
import pylab
import numpy
R_i=10.0*10**3;
C=0.01*10**-6;
V_in=2.5-(-2.5);
PW=100.0*10**-6; #pulse width
T=2*PW;
A=2.5;
op_change_cap_charge=-V_in/(R_i*C);
op_change_cap_discharge=V_in/(R_i*C);
print('rate of change of output voltage with respect to time when capacitor is charging = %.1f V/sec'%op_change_cap_charge)
print('rate of change of output voltage with respect to time when capacitor is discharging =%.1f V/sec'%op_change_cap_discharge)
del_V_OUT=op_change_cap_discharge*PW;
print('\n\nwhen input is positive, the slope is negative,\nwhen input is negative, the slope is negative. \nSo, the output is a triangular wave varying from zero to %.1f V'%(-del_V_OUT))
##############PLOT#############################
t = arange(0.0, 10.0, 0.0005)
t1= arange(10.0, 20.0, 0.0005)
t2= arange(20.0, 30.0, 0.0005)
t3= arange(30.0, 40.0, 0.0005)
k = arange(0.0001, 10.0, 0.0005)
k1= arange(10.0, 20.0, 0.0005)
k2= arange(20.0, 30.0, 0.0005)
k3= arange(30.0,40.0, 0.0005)
m=arange(-2.5,2.5,0.0005)
x1=(0.001*m)/m
x5=(10*m)/m
x10=(20*m)/m
x15=(30*m)/m
x25=(39.99*m)/m
subplot(211)
plot(k,2.5*k/k,'b')
plot(k1,-2.5*k1/k1,'b')
plot(k2,2.5*k2/k2,'b')
plot(k3,-2.5*k3/k3,'b')
plot(x1,m,'b')
plot(x5,m,'b')
plot(x10,m,'b')
plot(x15,m,'b')
plot(x25,m,'b')
ylim( (-3,3) )
ylabel('Vin')
xlabel('us')
title('Input to Opamp Integrator')
subplot(212)
plot(t,(-0.5*t),'b')
plot(t1,(0.5*t-5),'b')
plot(t2,(-0.5*t),'b')
plot(t3,(0.5*t-5),'b')
ylim( (-5,0) )
ylabel('Vout')
xlabel('us')
title('Output of an Integrator')
import pylab
import numpy
R_f=2.2*10**3;
C=0.001*10**-6;
Vc=5.0-(-5.0);
A=5.0;
time_const=R_f*C;
T=10.0*10**-6;
t=T/2;
slope=Vc/t;
V_out=slope*time_const; #V_out is negative when input is positive and V_out is positive when input is negative
print('output voltage = %.1f V'%V_out)
print('max output voltage = %.1f V'%V_out)
print('min output voltage = %.1f V'%(-V_out))
##################PLOt############################
t = arange(0.0, 5.0, 0.0005)
t1= arange(5.0, 10.0, 0.0005)
t2= arange(10.0, 15.0, 0.0005)
t3= arange(15.0, 20.0, 0.0005)
k = arange(0.0001, 5.0, 0.0005)
k1= arange(5.0, 10.0, 0.0005)
k2= arange(10.0, 15.0, 0.0005)
k3= arange(15.0, 20.0, 0.0005)
m=arange(-4.4,4.4, 0.0005)
x1=(0.001*m)/m
x5=(5*m)/m
x10=(10*m)/m
x15=(15*m)/m
subplot(211)
plot(t,(2*t-5),'b')
plot(t1,(-2*t+5),'b')
plot(t2,(2*t-5),'b')
plot(t3,(-2*t+5),'b')
ylim( (-6,6) )
ylabel('Vin')
xlabel('us')
title('Triangular wave input')
subplot(212)
plot(k,-4.4*k/k,'b')
plot(k1,4.4*k1/k1,'b')
plot(k2,-4.4*k2/k2,'b')
plot(k3,4.4*k3/k3,'b')
plot(x1,m,'b')
plot(x5,m,'b')
plot(x10,m,'b')
plot(x15,m,'b')
ylim( (-5,5) )
ylabel('Vout')
xlabel('us')
title('Output of Opamp Differentiator')