Tuesday, June 25, 2024

All things voice card related ordered

 ...well, almost - the digital parts remain.

But still - tonight I placed a huge order with JLCPCB, 5 copies of every card needed for a voice:

VCO

Pre-filter FX

Bus mixer

Bus mixer angled connector

Juno filter

Moog + JP6-filter

Waveshapers

Mainboard


Ordering 5 instead of just 2 copies is kind of a gamble as I don't know if everything works yet. But the cost (excluding shipping) is only 50% more for five than for 2. I guess I just have to wait and see if the gamble pays off. 

I have yet to sign off on everything, but I expect that part to go smoothly. So while we wait, here are some cool board shots

3D model

I've used Fusion 360 to check that everything fits together and that we have the clearances between cards that we need. 

I COULD have converted the eagle designs into something that Fusion can read, but this is the next best thing:

All the cards making up the voice. To the left is the (yet to come) digital board.


The narrow board closest to the camera is the bus board. To the left is a combined Moog/JP6 board and to the right a dual waveshaper board. Top left is the bit crusher (the only PCB I am not redoing!), below it is the FX board. Below the Waveshapers is the VCO


Under the Moog/JP6 filter board is the Juno filter. I really wonder if this will work out, the spacing is very narrow and it may get hot in there. Also note the vertically mounted board connecting the bus mixer to the mainboard.

On to the PCBs

A panelized board containing two waveshapers, the FX board (ring mod, distortion and noise) plus a special board that will make it possible to mount the bus mixer board parallel to the mainboard but 3cm away from it


Another panelized board, this time it's the VCO, Juno filter and bus mixer boards


The third board is the dual filter PCB, containing the moog-style ladder filter and the extended JP6 state variable filter.


The CV board - made on a four layer card to minimise noise (hopefully). This one has 56 output CVs!


Finally, the mainboard. I've spent six months or close to 200 hours on routing this, I REALLY hope it works.






Tuesday, June 18, 2024

DAC8565 and 16ch sample and hold

I intend to use the DAC8565 quad 16 bit DAC for the XM8, I've even bought 20 of them on breakout board and written a test - but for some reason, I haven't written anything about it.

Right now I'm making the final CV mux board, so I had to retest my program. For some reason though, it doesn't complie anymore?

In my code I'm using SPI.send24 as well as SPI.hasInterruptFlagSet, SPI.clearInterruptFlag and SPI.enableInterrupt. 

I can't find ANYTHING about send24 anywhere, and very little about the others. But I found another SPI project locally, SPI-master, that has the send24 code. It says it is from https://www.pjrc.com/teensy/td_libs_SPI.html, but going there leads nowhere. Not sure what has happened, I feel completely gaslit!

Anyway - I copied the SPI-master into my project to get send24. As for the interrupt stuff, it's not really necessary as it only makes it possible to listen to send completes to trigger Load dac - and this can be done in software without penalty anyway, by adding it to the setting of the last DAC channel.


Ok, so how do we use the DAC8565.

The following pin config works:

pin 1,2, 7 and 8 are the four output channels

pin 3, Vref H, is the high reference voltage. It outputs the internal reference voltage (2.5V) if the internal voltage reference is used, and should be connected to ground through a 150nF cap. If using an external voltage reference instead, it can have an additional 4.8uF (!) cap to ground for reduced noise.

It is important to note that the max output when using the internal reference is 2.5V. To get a 5V output, we need to use an external 5V reference.

It is also important to note that the external reference CANNOT be higher than the Analog voltage AVDD, or the output will be clipped. 

Pin 4, AVdd, power for the analog parts. It may be 3v3 if using the internal 2.5V reference as output, or 5V if using an external reference.

Pin 5, Vref L, the low reference voltage. Usually connected to GND

Pin 6, GND

Pin 9: !Sync. = SPI Chip select

Pin 10: Serial clock

Pin 11: D in, Serial data. Connect to master MOSI

Pin 12, IOVdd. This should match the logic level of the MCU, which for the Teensy is 3v3. However, I had some success setting this to 5V even with 3v3 output, but I get glitches when running the SPI bus at 50MHz. Also, it says in the spec sheet that 3v3 logic has a max bus speed of 25MHz (I have successfully used 50MHz on the current breadboarded circuit, and 46MHz earlier, but IOVdd must be 3v3.

I will try using 5V logic but that requires a high speed level shifter between the Teensy and the DAC.

Pin 13: !RST - when set to 0, all DAC outputs are reset to the value of RSTSEL

Pin 14: RSTSEL - reset select. If 0, DACs power up and reset to 0, if 1 they reset to the middle of the reference voltage.

Pin 15: !Enable - "Connects the SPI interface to serial port". This is currently confusing me though connecting it to 0 works fine.

Pin 16: LDAC: Load Dac. Connect to GND and control this through software or connect to MCU


Running a loop with IOVdd at 3v3, AVdd at 5V and using a 5V external reference

50MHz SPI works fine


There is significant noise on the output

The noise is however only while the SPI bus transfers. This may make it bearable even if present in the real circuit, as we can transfer the data and let the signal settle before turning on the output muxes that load the sample and hold caps.

5V IOVdd also works...

Unfortunately, we get glitches at 5V IOVdd

The glitches go away when reverting to 3v3IOVdd


With MUX

I spent a long time trying to get my 16ch CV buffer to work with the DAC. Turns out I had mislabeled pin D0, it should be next to D1, not next to GND. 

Anyway, once I got that out of the way, the 16ch board works fine:

DAC Output through opamp buffer and 470R to mux. Works great!

Output is very stable. DAC slightly overshoots when switching (meastured after the buffer I think)


I tried various combinations:

5V external reference, 470Ohm resistor directly to DAC

5V external reference, no resistor, DAC directly to mux. DAC has no problem driving the charging

2.5V internal reference, 2x positive gain op amp, 470R input resistor

5V external reference, 470R input, no buffer. Something is very wrong! Not sure exactly what.

Some closeups

Extreme closeup of 2.5V ref through 2x gain and 470R resistor.

Extreme closeup of 5V ref, buffered and 470R resistor. Pretty much the same

Extreme closeup of 5V ref direct from dac without resistor. A tad noisier?

Then some charge times:

Dac output when run as 5V ref direct from DAC without resistor. Rise time is around 5.5uS

5V ref direct from DAC without resistor. Charge time 0 to 5V for CV buffer cap. Around 1.5uS

This is as far as I got, because here I somehow killed the Teensy :-( I would have liked to have the same two checks when running with 2.5V internal reference and 2x gain through 470R. Have to look for a new Teensy

...oh, I found one. Let's go on

Cap charge time through 470R resistor, around 3.4uS

But what if we change to a 220R instead?

Cap charge time through 220R resistor, around 2.2uS

 

That's pretty good. Let's look at the DAC settling time:

Rise time from 0 to 5V, as seen at the output of the buffer after the DAC, is around 2.9uS. The drops in voltage coincides with the charging of the caps and are not present at the DAC output.

All in all, this looks very promising. For my first production version I will use a 2x positive gain buffer with a 220R charging cap.

Saturday, June 8, 2024

AS3364 CV response revisited

 I've measured the CV response of the AS3364 quad VCA before, but I still had a feeling I'm not getting unity gain so I decided to do it again.

I'm using a resistor voltage divider to drop the input CV from 0-5V to 0-2V, as max gain is at 1.8V to 2V according to the datasheet.

In my test, I've connected the audio inputs to a 5V reference voltage through 47k resistors. The output goes directly to the negative input of an op amp, with a 47k feedback resistor. According to the datasheet, this should give us unity gain.

The reference resistor is measured to 98.4Ohm (I later tried a 100Ohm here but nothing changed).

The response of a 0-5V input is shown as Out 1 and Out 2 (I tried three chips and they all respond the same). 

As in my previous tests, there is a deadband at each end - An input CV of 250mV at the chip (640mV before the resistor divider) is necessary to get the chip going. It tops out when the CV is 1.8V at the chip (4.6V before the divider).

Input CV must be > 640mV before the VCA opens

 

Max gain when Cv (at chip) is 1.8V, not entirely unexpected

The max output is 4.9V, slightly less than output gain. By increasing the output op amp feedback resistor to 48.8 (adding a 1.8k resistor) I am able to get 5V out. 

47k + 1.8k output feedback resistors

47k + 3.3k

Increasing the resistance to 50.3k gives an output of 5.18. Choosing a 50k output resistor will be a simple way to ensure that the output is at least unity.

 

Consequences

For the "normal" usecases, the offsets and early max-out of the CV just means that there are parts of the CV range that is not doing anything. It can be trimmed out in software if that is necessary. As there may be chip and/or temperature variations, I don't think I'll try modifying it. It's better to have a deadband at the start than losing the ability to completely shut the VCA off.

As for the wave mixers, the deadbands mean that there are parts of the pot travel where the waveform doesn't change much. I'm not too worried about this either, I haven't noticed in my prototype. 

The final place where this has an effect is in the panner and wet/dry pots. These will have deadbands at both ends. Again, not sure it matters much.