[sdiy] Digital VCO update
Eric Brombaugh
ebrombaugh at earthlink.net
Sun Apr 30 05:18:44 CEST 2006
Thanks to everyone on the list for the great response to my post last
week about the Cypress PSoC-based Digital VCO. There were a lot of
interesting suggestions and encouragement. I spent some more time
working on it and I thought I'd give a quick update on what's been added:
* 11-bit ADC for CV input. This gives about 0.5% resolution across
20Hz-20kHz.
* ~11-bit DAC output. Approximate because the DAC is really only spec'd
to 9 bits, but I'm driving a few extra LSBs into it that seem to help in
reducing the aliases on the sine output. The sine output is not perfect,
but it is pretty clean within the audible frequency range.
* New waveforms selectable with a 3-bit digital code:
- Square, Triangle, Sawtooth, Pulse. These all have fast edges and/or
discontinuities in the higher-order derivatives and I'm not using
band-limited techniques so there are strong aliases in the upper
frequency range. Maybe that's a problem, maybe that's an advantage...
- Noise! I added a 24-bit PRN generator and I clock it at the NCO
overflow rate. This gives an old-school video-game tuned noise effect.
- Noise pulse - this is a narrow pulse of random value running at the
NCO overflow rate. It provides an interesting sound that starts out with
a definite pitch and blends into noise as the pitch increases.
- You might notice that's only 7 waveforms. Currently Sine is
repeated. Any suggestions for a different one?
I tried to make the waveform selection via a control voltage.
Unfortunately, the driver code for the two ADCs conflicted and then
nothing worked. Would have been sooo cool.
All of this fits (barely) into a $4.00 8C84123-PXI 8-pin DIP with one
unused pin left over.
I'm presently working on the CV input circuits. One of the challenges is
protecting the input circuits from over/under voltage since the PSoC is
a 5V device and the op-amps I use are running off of +/-12V. An earlier
post also mentioned this, and I've found that most traditional clamping
circuits tend to mess with the linearity - not a good thing. Right now
I'm just running it through a 10k resistor and hoping the on-chip ESD
diodes will suffice as OVP. Thoughts?
Next step is to add a 4th-order reconstruction LPF on the output. I'll
probably put the cutoff at around 20kHz since that's the top of the range.
One final upgrade I'm considering is to use a 3ppm crystal as a timebase
for the oscillator. The PSoC's internal oscillator is spec'd for 2.5%
accuracy over temperature, which seems a bit sloppy for musical
applications. If I do this, I'll only have 2 inputs available for
defining the waveform. Which 4 of the 7 listed above would be most
useful? I'd probably keep the sine, triangle, sawtooth and noise. The
square could be generated in analog by clipping the sine, which might
actually give fewer aliases if it's clipped after the reconstruction filter.
Thanks for your thoughts!
Eric
More information about the Synth-diy
mailing list