Saturday, March 6, 2021

CV refresh issues

Argh, I thought it would be much easier to get stable CVs than it has turned out to be so far.

I spent a long time messing around with clock chips, until I realised that I probably only need to clock eight steps, and that can be done directly using three pins on the microcontroller. This means I won't have to wait for the clock to stabilise, no need to reset it afterwards etc - it just frees up a lot of time.

After this, I realised that I won't have time to update four DACs sequentially and still wait for the last one to settle/sample before moving on. I could solve this with separate address lines and enable lines to each mux, but that would quadruple the needed pins, so I did the only sensible thing - I bit bang the DACs in parallel. Doing this I actually managed to get an SPI speed of 50MHz, though it seems a bit sensitive to noise from my logic probes etc.

Next up, I did not account for the long DAC settle time. The DAC8830 needs at least 1uS to properly settle after a change (it seems it may even be a little more). It then has to stay on until the sample and hold cap is fully charged and even a little longer, until the mux has been turned off again. All this eats of the charge time and means I must use a smaller cap.

Finally, I want to do 16CVs per DAC channel. This means I need to clock the MUX'es at 384kHz to get 24ksps per channel. The total time available to update one channel is thus 2.6uS, meaning we are quickly running out of time.

I've had a lot of problems making this work in practice. I also have had a lot of false alarms due to noise on the scope from neighbouring probes. After reducing the cap size and increasing the time available for the DAC to settle, I'm starting to see some good results. But one stupid issue remains:




When using a Vishay DG408 8ch mux, whenever the mux is turned off, the output jumps up by approximately 200mV! When the mux is turned off again it instantly jumps down to the DACs level. It is always UP however, even if the CV before/after is lower, so it's not crosstalk or similar.

I tried switching back to using a CD4051 but got even worse results then. But there I got LOWER output when the next CV is lower, and HIGHER output when the next is higher, leading me to belive that it is a different issue.


Anyway, I posted a question about this on electro-music.com (https://electro-music.com/forum/viewtopic.php?p=448370#448370) and got a tip that this could possibly be due to charge injection. The poster even linked to more info about it here: https://www.analog.com/en/analog-dialogue/articles/ask-the-applications-engineer-26.html#

Basically, the remedy is to 

- Increase the cap size - Now, I had actually tried this already, and it definitely helps, but it also increases the charge time so I can't reach my goal of 24ksps. 

- Use a slower switching time - this is as far as I know something that is built into the mux so I would have to change to a different mux

- Use a mux with HIGHER on resistance. This also means changing to a different mux.


Soo. 

After posting the question, I revisited the awesome video from Abstrakt Instrument that explains in detail what the OB-6 is doing: https://youtu.be/4WwXlRYw_S0?t=1937

It actually has quite a few important details.

- First of all, the OB-6 uses two 8 channel dacs to update approx 120 channels, meaning each channel only updates 8 CVs. This gives twice the time to do updates so the caps can be doubled.

- Second, the OB-6 actually uses the 4051 mux, but from the video it looks like it is the 74HCT4051.

- It says that the op amp buffers are placed on the voice cards themselves. I've found some closeups of those too (https://www.sequencer.de/syns/davesmith/OB6.html), and it looks like all op amps are in fact TL06x! Those have a very slow slew rate of 3v/uS, perhaps that can affect things too?

I've asked a couple of friends to help me chase down an OB-6 or Prophet-6 to get some even more detailed pics of the circuits, but it really looks like Sequential is doing things the old fashioned way and not with some fancy sample and hold circuit. That makes me so relieved! They even use the cheaper 4051 mux'es. So if Sequential means this is good enough, it's good enough for me - I just need to make it work...


At the moment I'm really in doubt about my next steps. Should I order more parts to test on a breadboard or should I design some circuits and have them produced by JLCPCB? Doing the latter would definitely result in a less noisy board, but it is also much more expensive, and nearly impossible to fix if something is wrong. I consider separating the DACs from both the voice controller and the sample and hold buffers, meaning I would have three cards. Doing this I could replace only parts of the circuit if something doesn't work.

Also, I need to figure out exactly what caps to use.

DAC notes: I thought I could use the DAC8562 dual 16 bit dac, but it has a 10uS settle time (50MHz SPI though). 8552 is even worse, 12uS and 30MHz SPI. In comparison DAC8830 has 1uS settle time and 50MHz SPI

More on OB-6:

The OB 6 uses two 8 channel DAC and each channel updates 8 CVs. Running at 24kHz, each channel must be updated in 5.2uS, this includes dac settle time and capacitor charging.

From the video we can see that a 0 to 5V charge takes around 3uS. This leaves as little as 2uS for charging the cap, so either they accept that the cap isn't fully charged in one cycle in the extreme cases OR they use a very small cap; it would be very interesting to known which one it is. It is also entirely plausible that they never go rail to rail during an update. As the 24kHz refresh rate is to be able to do fast envelopes, they WANT some intermediate steps. If we limit the step size to, say, 1/4th of the max amplitude (5V), we only need 1/4 of the charge time. I think I may have to consider this. If I can quadruple the cap size, effects of charge injection will definitely be reduced. Oh how I wish I could see the labelings on the Abstrakt Instruments DAC board...

Update: 

Now I'm confused. On the AI site it says that they update 16bit CVs 4000times per second...: https://www.kickstarter.com/projects/abstraktinstruments/vs-1-polyphonic-analog-synthesizer


In the video however, he says 48kHz in High resolution mode, and 85 control voltages from an 8ch DAC, meaning more than 8CVs per channel. Maybe some are 48kHz and some slower...

No comments:

Post a Comment