Transcript HERE
A DDS Signal generator
By Les MW0SEC
Objectives and requirements
• A stable/accurate signal generator having
a frequency range of:
• 1 c/s – 40 Mc/s
• Amplitude modulation
• Calibrated attenuator giving an output of
100 mV rms max, reducing to -100 dB in
1dB steps.
• Easy operation – particularly fine tuning.
Resources
•
•
•
•
AD9850 DDS module with 125 Mc/s clock
PIC controller 16F628.
822 Voltage controlled amplifier.
A commercial attenuator covering 0-100
dB in 10 dB steps.
• TL071 Op. amp configured as stable
oscillator for amplitude modulation.
Block diagram
Xtal
Display
PSU
Keypad
Set level
summer
∑
Encoder
(Tune)
Programmer
interface
DDS
Module
CPU
Mod.
Gen.
VCA
Attenuator
(Analogue section)
Output
The AD9850 DDS
• This device produces a particular
frequency by synthesising a sinewave
from a crystal clock.
• The frequency is set by loading a binary
word having a value where:
• fOUT = (Δ Phase × CLKIN)/2^32
• This means binary word = (2^32 /
oscillator frequency in c/s).
How to control things
• I used a PIC (16F628). This is a small fast
microprocessor with two 8-bit busses
which can be configured as input/output.
• Due to the limitations of the device, I
increased the address range with a TTL
address decoder.
• I used a diode matrix to scan the keyboard
and encoder.
Address
Strobe 1
The diode matrix
+ve
Pull-up
resistors
D0
D1
D2
Address
Strobe 2
The data lines are held high by the pull-up resistors. When the
address strobe goes low, if a switch is pressed, the data
representing the switch appears on the data bus. The diodes
separate the data paths.
Data bus
Address decoder
S0
S1
Address
000 to
111
(0-7)
A0
Eight possible
Decodes.
A1
74LS138
A2
S7
Expand three pins to eight addresses
Hard sums!
• The PIC is a simple device intended to
control the likes of washing machines.
Making it do multiple precision addition
and multiplication involves a bit of thought.
• Two number bases are required. Decimal,
for the human interface and Binary for the
internal operations. In addition, the display
requires ASCII characters.
Hard work!
• For each click of the encoder, the
processor has to add/subtract the tuning
increment from the 32 bit frequency word,
multiply the result by 34.359738(ish) and
load the result to the DDS. It then has to
convert the number to decimal, format it
and feed it to the display. This requires a
lot of code…….
Tuning
• Tuning is achieved by a rotary encoder.
Data (A)
Strobe
Data (B)
Shaft
The data output when the shaft is turned gives a sequence of numbers:
0 – 2 – 3 – 1 for one direction and 0 – 1 – 3 – 2 for the other, so any data change
Indicates an increment and by analysing the sequence, we can determine if
The increment goes up or down.
I used an encoder with detents, which gives an output of zero when at rest.
Controlling amplitude
• Now we have accurate frequency, we
need accurate amplitude. This is achieved
by a voltage-controlled wide band
amplifier. A meter indicates carrier level
and this can be set by adjusting the VCA
control voltage. Modulation is achieved by
summing an audio voltage with the control
signal.
The attenuator.
• So far we have achieved an accurate
frequency at a known level. We need to be
able to attenuate this down to the microvolt level in convenient steps. I cheated
here and used a commercial device which
was in the junk box. This gives a range of
0 to -100 dB in 10 dB steps, The “inbetween” dB’s can be set on the carrier
level meter.
The attenuator (2)
• The design of an accurate attenuator is a
question of simple arithmetic – all you
need is a network like this:
RA
RA
RB
• The problem arises in terms of screening
to prevent leakage at VHF. This requires
some precision machining for housing.
VCA, Modualtor, PSU.
Credits
• Firstly to Stewart (ETF) for inspiring me to
do the project and for sending through
some examples.
• Secondly to Curtis Preuss, (WB2V) from
whom I ripped off some code in the
multiply routine.
• Lastly to AMD for making a really useful
device!