| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
openbench:fgen [2007/04/13 04:16] ladyada |
openbench:fgen [2016/01/28 18:05] (current) |
||
|---|---|---|---|
| Line 2: | Line 2: | ||
| A completely open design for a function/waveform generator: hardware, firmware, software | A completely open design for a function/waveform generator: hardware, firmware, software | ||
| - | for more info, read about [[]] | + | for more info, read about [[start|openbench]] |
| For collected links, try [[http://del.icio.us/ladyada/dds|DDS link on delicious]] and [[http://del.icio.us/ladyada/fgen|Function Gen link on delicious]] | For collected links, try [[http://del.icio.us/ladyada/dds|DDS link on delicious]] and [[http://del.icio.us/ladyada/fgen|Function Gen link on delicious]] | ||
| Line 9: | Line 9: | ||
| ===== Design constraints ===== | ===== Design constraints ===== | ||
| - | |||
| One or two designs: Low cost, high cost. | One or two designs: Low cost, high cost. | ||
| * Low cost is ~$50-75 | * Low cost is ~$50-75 | ||
| Line 17: | Line 16: | ||
| * Sine wave | * Sine wave | ||
| * Square wave (with variable PWM) | * Square wave (with variable PWM) | ||
| - | * Triangle wave | + | * Triangle wave (with variable PWM?) |
| * Sawtooth (possibly a modification of triangle wave???) | * Sawtooth (possibly a modification of triangle wave???) | ||
| - | * arbitrary waveform (sync, envelopes, etc) | + | * Arbitrary waveform (sync, envelopes, etc) |
| + | * Noise (white noise, pink noise, brown noise, etc) | ||
| + | |||
| + | Modulation (in order of importance) | ||
| + | * Sweep (actually is FM) | ||
| + | * AM | ||
| + | * FM | ||
| Frequency range: | Frequency range: | ||
| - | * 1 Hz -> 100 KHz required (must cover audio ranges) | + | * 1Hz to 100KHz required (must cover audio ranges) |
| - | * 1mHz -> 10MHz is ideal (digital/analog ranges) | + | * DC to 10MHz is ideal (digital/analog ranges) |
| - | USB control? Panel control? Both? | + | Output capabilities: |
| + | * 50ohm/inf impedance | ||
| + | * 1mv to 10V amplitude | ||
| + | * 0 to 10V DC offset | ||
| + | * trigger output | ||
| + | |||
| + | USB control? Serial control? Panel control? All of the above? | ||
| Vpp? (+-12V is pretty 'standard') | Vpp? (+-12V is pretty 'standard') | ||
| 100mA is not a bad current capability to shoot for | 100mA is not a bad current capability to shoot for | ||
| - | |||
| - | 50 ohm/inf impedance? | ||
| PCB is doublesided, 10/10 rule | PCB is doublesided, 10/10 rule | ||
| Line 38: | Line 47: | ||
| ===== Waveform generation ===== | ===== Waveform generation ===== | ||
| - | |||
| Waveforms we want (in order of importance) | Waveforms we want (in order of importance) | ||
| * Sine wave | * Sine wave | ||
| * Square wave (with variable PWM) | * Square wave (with variable PWM) | ||
| - | * Triangle wave | + | * Triangle wave (with variable PWM?) |
| * Sawtooth (possibly a modification of triangle wave???) | * Sawtooth (possibly a modification of triangle wave???) | ||
| - | * arbitrary waveform (sync, envelopes, etc) | + | * Arbitrary waveform (sync, envelopes, etc) |
| + | * Noise (white noise, pink noise, brown noise, etc) | ||
| Frequency range: | Frequency range: | ||
| - | * 1 Hz or lower | + | * 1Hz to 100KHz required (must cover audio ranges) |
| - | * 100 KHz or higher (must cover audio ranges) | + | * DC to 10MHz is ideal (digital/analog ranges) |
| - | * 1mHz -> 10MHz is ideal (digital/analog ranges) | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| ==== Generator tech ==== | ==== Generator tech ==== | ||
| - | |||
| Two options for chip 'styles' is the all-in-one oscillator (ICL3038, etc) +PLL or DDS | Two options for chip 'styles' is the all-in-one oscillator (ICL3038, etc) +PLL or DDS | ||
| === Oscillators === | === Oscillators === | ||
| - | |||
| All-in-one is nice, although not very stable w/o PLL. Two options available, MAX038 & XR220. | All-in-one is nice, although not very stable w/o PLL. Two options available, MAX038 & XR220. | ||
| Line 69: | Line 70: | ||
| Pros: easy, cheap, simple | Pros: easy, cheap, simple | ||
| Cons: unavailable, PLL required | Cons: unavailable, PLL required | ||
| - | |||
| === DDS === | === DDS === | ||
| - | |||
| Direct-Digital-Synthesis, currently popular. Basically: wavetable + 24 or 32 bit adder and sampling above nyquist to get precision waveforms. | Direct-Digital-Synthesis, currently popular. Basically: wavetable + 24 or 32 bit adder and sampling above nyquist to get precision waveforms. | ||
| - | |||
| * Pros: digital, precise, no PLL needed | * Pros: digital, precise, no PLL needed | ||
| * Cons: hard to get high frequencies because of oversampling | * Cons: hard to get high frequencies because of oversampling | ||
| Line 81: | Line 79: | ||
| == Off the shelf, AD parts == | == Off the shelf, AD parts == | ||
| - | |||
| They come with sync out, very very high speeds. But only sine and square out, and in small packages (TSSOP). | They come with sync out, very very high speeds. But only sine and square out, and in small packages (TSSOP). | ||
| == Roll your own == | == Roll your own == | ||
| - | |||
| **Idea #1**: Get a chunk of SRAM (like, say, CY7C1399B-12VXC), fill it with your wavetable, then clock it with a variable clock ([[http://www.linear.com/pc/productDetail.do?navId=H0,C1,C1010,C1096,P2415|LTC6903]] 1KHz->68MHz !!) maybe use along with adder/scaler to provide more range at high/low freq. We could get up to 4MHz, nice! | **Idea #1**: Get a chunk of SRAM (like, say, CY7C1399B-12VXC), fill it with your wavetable, then clock it with a variable clock ([[http://www.linear.com/pc/productDetail.do?navId=H0,C1,C1010,C1096,P2415|LTC6903]] 1KHz->68MHz !!) maybe use along with adder/scaler to provide more range at high/low freq. We could get up to 4MHz, nice! | ||
| * Pros: high frequency range | * Pros: high frequency range | ||
| Line 103: | Line 99: | ||
| Other possibilities include going with an SX instead of AVR: SX28 can be clocked up to 75MIPS (maybe give us 500KHz...but will draw an insane 100mA from 5V. jesus!) | Other possibilities include going with an SX instead of AVR: SX28 can be clocked up to 75MIPS (maybe give us 500KHz...but will draw an insane 100mA from 5V. jesus!) | ||
| + | **Idea #4**: A combination of idea #1 and idea #3. Take a simple AVR that is able to calculate waveforms, but not in realtime. Load the wavetable in some external RAM, and clock it at the desired speed. | ||
| + | * Pros: high frequency, adjustable waveform | ||
| + | * Cons: complex | ||
| ===== Power supply ===== | ===== Power supply ===== | ||
| - | |||
| Need 3.3V (probably), 5V, +-12V (@100mA) | Need 3.3V (probably), 5V, +-12V (@100mA) | ||
| Line 112: | Line 110: | ||
| * Cons: need to load down 5V - should look into this | * Cons: need to load down 5V - should look into this | ||
| - | **Idea #2** Use 78xx's with 120V transformer. | + | **Idea #2** Use 78xx's with mains transformer. |
| * Pros: well understood, cheap, safe (isolated), clean power, huge | * Pros: well understood, cheap, safe (isolated), clean power, huge | ||
| - | * Cons: Transformers kind of a pain, unsafe (to build, wiring 120V yuk) | + | * Cons: Transformers kind of a pain, unsafe (to build, wiring mains yuk) |
| **Idea #3** Use a regulated power supply/wall wart with multiple outputs (see [[http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&storeId=10001&catalogId=10001&productId=154624|Jameco#154624]] 5V @0.5A +-12V @0.13A each $13) | **Idea #3** Use a regulated power supply/wall wart with multiple outputs (see [[http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&storeId=10001&catalogId=10001&productId=154624|Jameco#154624]] 5V @0.5A +-12V @0.13A each $13) | ||
| Line 123: | Line 121: | ||
| * Pros: simple, regulated, ultra compact | * Pros: simple, regulated, ultra compact | ||
| * Cons: expensive, noisy | * Cons: expensive, noisy | ||
| + | **Idea #4b** Build your own DC/DC converter, a bit like [[http://spritesmods.com/?art=ucboost&page=2|sprite_tm]] did. Have the processor generate the PWM needed for the converter. | ||
| + | * Pros: cheap, same as idea #4 | ||
| + | * Cons: noisy | ||
| ====== Planned versions ====== | ====== Planned versions ====== | ||
| - | |||
| ===== Inexpensive kit ===== | ===== Inexpensive kit ===== | ||
| Line 141: | Line 141: | ||
| 2x16 LCD and some buttons & rotary encoders for UI. | 2x16 LCD and some buttons & rotary encoders for UI. | ||
| Maybe an 'm88? at 12MHz does the UI work and USB nonsense. (USB "serial" (or raw) interface using USBtiny.) and sends just raw serial/spi commands to DDS chipset | Maybe an 'm88? at 12MHz does the UI work and USB nonsense. (USB "serial" (or raw) interface using USBtiny.) and sends just raw serial/spi commands to DDS chipset | ||
| - | |||
| ==== Chipset ==== | ==== Chipset ==== | ||