[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