Function Signal Generator
Universal Digital Function Generator, based on DAC-0800 (DAC-0808) and EPROM-2732 for lookup table data to generate any function signals.
Why it's universal?
Because you can add the patterns as you wish.
I. PREFACE
After already done with EPROM programmer, you really don't know where to go next, what to do next, etc...etc. Here is the example of EPROM implementation, Universal Digital Function Signal Generator. We can use it as a collection of our R&D laboratory instrument, beside that you can learn how to use a Digital to Analog Converter (DAC) type DAC-0800 or DAC-0808, an 8-bits resolution DAC. The circuit we want to build, I got it from "Electronic Project Magazine" made by "Shailesh M. Patkar & Prashant P. Kelkar" from India. Thanks to both of them, for their great idea.
This signal generator, generate its signal wave form from look up table data. This data reside in EPROM type 2716 (2k X 8-bit) or 2732 (4k X 8-bit). Each signal used 1 block of data (about 256 byte of data each). So for 2716 type, it can be store up to 8 function signals, while for 2732 type, it can be store up to 16 function signals. This signal data still in digital type. Then we used DAC to convert this data to become analog signal. Because we can programmed what kind of signal we want to, it is why we named it as Universal Digital Function Signal Generator (UDFG).
II. SCHEMATIC
The original version use 2716 EPROM type, while I prefer using 2732 type. The first one may be already hard to find, while the last one also can load more signals data (it can feed more signals 16 types), you can create more than 8 signal types.
To generate the address lines, the circuit use cascaded binary counters. By cascading this 2 binary counters up to 2 power by 8 (256) address line covered. This is all the data we need for 1 block or 1 function signal. The rest of address lines connect to binary selector switch. It is better if you could find a thumb wheel switch (digital switch). So it is easy to select the function type that you want. But thumb wheel switch only preserve for 10 function types. You need another one selector switch to select the upper and lower half of 8 signals. By store this data in EPROM, the circuit becomes less complicated and less expensive and gives high fidelity. The clock use a simple clock generator from IC 555 which configured as an astable multivibrator. The timing is adjusted by the equation :
T = 0.693 (R1 + VR1) C
By using the values give in the drawing, the frequency varied from 10Hz to 1kHz. Besides that we preserved also for external clock generator. Because the sampling frequency for DAC-0800 minimum as little as 100 nsec, we can do experiment about the speed of this function generator (in theory up to 10 MHz, this is the limitation of TTL IC clock). Digital output of EPROM 2732 tired to DAC-0800 and convert it to be an analog signal gradation from -10V to +10V, because the reference voltage is tired to +10V. Data for each point of signal rose by 2 IC counters (74163 & 74193) wired cascaded, 4-bit each to become 8-bit counter. These 8-bit counters produces the output data from 00h to FFh totaling 256 states. These 8-bit output counters then wired to the low address of EPROM, while the rest high address connect to digital switch and selector switch to select each signal generator types.
As told before, each signal divided by 256 data point. So for a complete 1 cycle (360 degree) signal, each data point must rounded to the nearer number. This data for each signal then combine to make it a data look up table and programmed to the EPROM. We don't cover the programming section for this EPROM. For detail explanation about programming the EPROM go to another pages. These Data look up table will be explained later.
None further explanation needed for the power supplies, because it all using a simple IC regulator. The +10V supply inherited from +15V supply because we don't need this to much power (Iref is about 1.7 mA only) and used to give the reference voltage to DAC-0800, so the output will vary from 0 to +10V by 256 gradation and then feed to op-amp comparator to make the output voltage vary from 0 to +/-15V. That is the output range. You can decrease the output voltage by adding divider resistors.
III. LAYOUT
Original circuit completed with PCB layout. But to accommodate the modification, I already drawn another layout to make it comfort and fit the modification option. So it can fit at a box about (100 x 100 x 30) mm. Only single side needed, the rest will connect through cable and jumper. Note that except the 10 jumpers from the picture, there are 4 connections by cable for power supply. Also not included IC10 and the pull up resistors, because when I designed this layout, the switch never thought about. I put it later.
IV. PART LISTS
Component parts lists to build the complete set are :
1. Resistors :
R1 = 330k ......................................................... 1 pcs R2 = 680k ......................................................... 1 pcs R3, R4 = 45k6 ..................................................... 2 pcs R5 = 1k. .......................................................... 1 pcs R6 = 470 Ohm ...................................................... 1 pcs R7 = 47 Ohm / 20W ................................................. 1 pcs R8 ~ R11 = 4k7 .................................................... 4 pcs
2. Capacitors :
C1 ~ C4 = 100 nF .................................................. 4 pcs C5, C6, C8 = 10 nF ................................................ 3 pcs C7 = 10 uF/16V (elco) ............................................. 1 pcs C9, C10 = 2200 uF/35V (elco) ...................................... 2 pcs C11 ~ C14 = 1000 uF/25V (elco) .................................... 4 pcs
3. Semiconductors :
D1 ~ D4 = 1N4007 (Silicon diode) .................................. 4 pcs DZ1 = 10V / 0.25W ................................................. 1 pcs Led1 = Red Led (3 mm) ............................................. 1 pcs IC1 = 2732 (4kByte EPROM) ......................................... 1 pcs IC2 = 74HC193 (Synchronous 4-bit binary counter) .................. 1 pcs IC3 = 74HC163 (Synchronous 4-bit binary up/down counter) .......... 1 pcs IC4 = DAC0800 or DAC0808 (Digital to analog converter 8-bit) ...... 1 pcs IC5 = 555 (Timer) ................................................. 1 pcs IC6 = LM324 (Low power Quad Op-Amp) ............................... 1 pcs IC7 = 7805 (Voltage regulator) .................................... 1 pcs IC8 = 7815 (Voltage regulator) .................................... 1 pcs IC9 = 7915 (Voltage regulator) .................................... 1 pcs IC10 = 74HC04 (Hex inverter) ...................................... 1 pcs
4. Others :
VR1 = 100k (trimpot) .............................................. 1 pcs VR2 = 10k (trimpot) ............................................... 1 pcs VR3 = 1k (trimpot) ................................................ 1 pcs CON1 = 2-pin terminals PCB type ................................... 1 pcs CON2 = 6-pin terminals PCB type ................................... 1 pcs CON3 = 3-pin terminals PCB type ................................... 1 pcs S1, S2 = Switch spdt .............................................. 2 pcs S3 = Thumbwheel switch (BCD switch) ............................... 1 pcs T1 = 220V to 30V, sec. 500mA (Transformer) ........................ 1 pcs Box = about 12 x 12 x 4 cm ........................................ 1 pcs Single side PCB = 10 x 10 cm ...................................... 1 pcs
V. DATA LOOK UP TABLE
To display a signal on an oscilloscope using microprocessor is a very difficult and time consuming task. Say that for example a digital sine wave signal :
03 05 07
sin 0 = 0 - ---- + ---- + ---- + . . .
3! 5! 7!
sin 0 = 0 - ---- + ---- + ---- + . . .
3! 5! 7!
Using microprocessor, the sine function can be displayed at the output by incrementing 0 at every step and outputting the sine value of the 0 to the DAC. The sin 0 can either be calculated by software or by using floating point arithmetic cards. As this method is complicated, the simple and accurate method is to make the look up table. The value for each 0 is stored in memory in a sequential manner. For outputting code to the DAC, the memory for the 0 is then accessed. That is why we use a look up table to store the data.
The original version already put data for 6 signals, ie: sine wave, ramp (saw tooth), triangular wave, square wave, staircase and particular wave. Here is the explanation of 2 steps from look up table data for sine wave signal :
The original version already put data for 6 signals, ie: sine wave, ramp (saw tooth), triangular wave, square wave, staircase and particular wave. Here is the explanation of 2 steps from look up table data for sine wave signal :
Address | 0 =(360/256) x Memory Address | | | Value (Base 80h + Bits) | Value |
| | | | | |
| | | | | |
| | | | | |
The value of sine function = 1 at 90 degree. The amplitude is 128 units above the zero (reference) level. So for X sin function = ? above zero level.
So ---- x 128 = X.128
1
(sin 0 x 128) Round off
%Error = -------------------------------- x 100
(sin 0 x 128)
Digital value calculation :
360 360
0 = ------ x Memory Address = ------ x 0001 = 1.40625
256 256
sin 0 = 0.02454
Bits = sin 0 x 128 = 3.14127
Therefore the digit before decimal point is 3.14127 = 3 (decimal) = 0000 0011 (binary, Bits)
Binary value to be stored to the EPROM is = 1000 0000 (Base value of DAC) + 0000 0011 (rounded point value) = 1000 0011 (83h).
Binary value to be stored to the EPROM is = 1000 0000 (Base value of DAC) + 0000 0011 (rounded point value) = 1000 0011 (83h).
The %Error can be calculated to get the exact sine wave representation which improves the accuracy.
Here is the rest of the look up table data for these sine wave signal. To make it simple for me and for you to design the patterns, I already make the simple editor program, works in graph mode or text mode. So it is easy to see the result and the more important things that it can be saved to disk. Here is the result for the six pattern signal that I already inputted :
- Sine wave (sine.sig)
- Saw tooth (ramp) wave (ramp.sig)
- Ramp reverse wave (ramprev.sig)
- Triangular wave (triangle.sig)
- Square wave (square.sig)
- Staircase wave (stair.sig)
- Negative staircase wave (stairneg.sig)
- Particular wave (partculr.sig)
The signal then can be combined to become one big data to loaded into EPROM. Just use copy command from DOS like this :
COPY /B sine.sig+ramp.sig+triangular.sig+square.sig+stair.sig+...(more pattern signals)...+particle.sig all.sig
You can add the spare address locations of EPROM to fit your need. Up to 10 signals free for your imagination. Please explore it and have fun !!!
VI. PROTOTYPE
My prototype size about 100mm x 100mm x 30mm (LWT), with the switches, thumb wheel and connector put on the top side of the box. Made from plastic and PVC. By using thumb wheel switch, only 10 function signals can be covered. If you don't want this, you can change the system by using a decoder type switch (1 to 16 lines), so the location can be covered all. Here is my prototype and sample of its wave form generate (This capture from a simple selfmade oscilloscope). I will published it later.
No comments:
Post a Comment