18.1 Amplitude Modulator
Design steps from Handbook of Operatinal Amplifier Circuit Design, by David F. Stout and Milton Kaufman editor.
The modulator is based on four CD4016 switches that chop the waveform at the carrier frequency. The reference designators corespond to figure 18.1. The carrier frequency is applied to the Vc terminal. The modulation input is applied to Vm.
# use math library
from math import *
Step 1: Choose a comparitor, switches and op amps which will utilize the same supply voltages. The supply voltage must be at least 2 volts higher the the positive peak expected at Vo. In stead of using an LM339 to generate the complement of the carrier, a CD4069 will be used in the actual circuit. A CD4066 will be used in place of a CD4016. The op amp will be a LM324, which is a general purpose quad op amp.
Step 2: Choose R1 to be greater than or equal to the minimum allowed inut resistance at Vm. In the reference design, Rin = 10k
R1 = 10e3
Step 3: Choose a range of values for Vr which is slightly larger than the expected positive and negative peaks of Vm. Set Vp and Vn equal to the limits of this range.
Vp = 5
Vn = -5
Step 4: calculate R3 and R4
R3 = R1
R4 = R1
# display resistor values
print('R1 = {:.0f}'.format(R1))
print('R3 = {:.0f}'.format(R3))
print('R4 = {:.0f}'.format(R4))
Step 5: Calculate R2
Vr = 5 #reference voltage used to adjust modulation depth
vm = 2 #modulation input voltage
R2a = R1*(Vp-2)/abs(vm)
R2b = R3*(Vp-2)/abs(Vr)
# display resistor values
print('R2a = {:.0f}'.format(R2a))
print('R2b = {:.0f}'.format(R2b))
# set R2 to a value lower than R2a or R2b
R2 = 5e3
print('R2 = {:.0f}'.format(R2))
Step 6: Use CMOS switch specification to determine Ron and Roff. Then caluclate R6 through R11
Ron = 580
Roff = 4e8
R6 = sqrt(Ron*Roff)
R7 = R6
R8 = R6
R9 = R6
R10 = R6
R11 = R6
print('R6 = {:.0f}'.format(R6))
Step 7: Calculate R12
vo = 3 #circuit out put vaveform
R12 = (4*R6*R1*vo)/(3*R2*vm)
print('R12 = {:.0f}'.format(R12))
#calculate the DC offset due to A4 bias current
Ib4 = 500e-9 #bias current on op amp A4
vo = Ib4*R12
print('vo = {:.3f}'.format(vo))
If the out put offset voltage is too high, adjust R12
R12 = R12/10.0
R6 = R6/10
R7 = R6
R8 = R6
R9 = R6
R10 = R6
R11 = R6
print('R6 = {:.0f}'.format(R6))
print('R12 = {:.0f}'.format(R12))
#use standard resistor values
R12 = 193e3
R6 = 48e3
R7 = R6
R8 = R6
R9 = R6
R10 = R6
R11 = R6
print('R6 = {:.0f}'.format(R6))
print('R12 = {:.0f}'.format(R12))
Step 8: recalculate vo with new resistor values
von = (-R2*R9*R12)/(R10*(R6+R8))*(vm/R1+vm/(2.0*R3))
vop = (R2*R12)/(R7+R11)*(vm/R1+vm/(2.0*R3))
print('vop = {:.3f}'.format(vop))
print('von = {:.3f}'.format(von))
Step 9: peak to peak output voltage is calculated using switch resistance
voe = (R2*R12*Roff)/((R6+Ron)*(R6+Roff)+R6*Roff)*((vm/R1)+(vm/(2*R3)))
print('voe = {:.3f}'.format(voe))