Many months later and many days of tinkering with the whole system, including installing everyting in a 19 inch case, I can say the the individual modules work as expected (well, mostly - see below) and that basically 2 big problems remain:
- Signal integrity on the SPI-Bus
- Software (Especially UI and calibration routines to compensate for the frequency dependent losses)
While I can't say much about the software-part, as I haven't really started developing a new UI yet, apart from a rudimentary interface that allows setting the most important parameters via serial commands, I can say quite a lot about the hardware.
The biggest problem so far has been signal integrity on the SPI-Bus, which has been not only frustrating but also actually drove me away from the project for quite some time.
I haven't identified all the issues, but I'm pretty sure that one of the major culprits is the LCD-Controller, which, according to a few forum posts, does not properly tri-state its output and screws up readbacks from other chips (which cost me at least 2 weeks of head scratching and chasing ghosts). Another issue are the cables. Due to the location of the SMA-Connectors the boards are pretty far apart in the case and connected via 10 to 15cm long cables that are bundled together with zip ties and tape. This causes quite extensive overshoot on the Clock and Data-Lines of the SPI-Bus, as well as reflections (the cables are going out in a star-pattern from the CPU-Board).
While the LCD doesn't care and the AD9910 can work with the overshoot most of the time (not always - another ghost I was chasing), the ADF4351 simple crashes when it is confronted with spikes up to 3.7V on the data-lines.
The solution that finally fixed this problem (I tried different resistor-values for the series termination on the CPU-Board with basically negligible results) was a buffer-board that uses a 74AC14 to buffer the signals and catch the spikes. This board also includes over 2000uF of capacitance to filter the power-supply and catch any remaining traces of the spikes.
After installing that, I finally managed to talk to all the chips and tell them what to do - I couldn't really listen to them, due to the stupid LCD-Controller, but I reliably (well, 90% of the time) got the expected results from the entered commands.
So I finished my drivers for the Chips and continued testing, when I noticed rather nasty traces on my Scope: Everytime there's activity on the SPI-Bus, I see a bit of noise on the waveforms. Btw. I built all the modules in a way that the mounting holes are connected to ground and the case is grounded as well, so there's basically a big ground-plane 1cm beneath each board.
But despite all these problems, I was able to verify the basic concept of the system:
- Using several switched filters works (although using a more highly integrated switch would reduce the losses that are created by these switches) and attenuates the higher harmonics to a sufficient degree
- I can (with some difficulty, depending on the frequency) fine-tune the amplitude with the ALC-Circuit
- Switching signal sources in and out works
- The Mixer-board works (I had to make a few adjustments to the circuit however - using just a resistor doesn't yield satisfying results)
- CPU and Keyboard-Interface works
- Communication between the chips works (after overcoming the difficulties described above)
- A basic prototype of the UI works
Which brings me to what I have been doing for the last 3 weeks: The ARSG - Mark III Mainboard.
I've combined all the functionality into one board and also did some changes:
- Replaced the STM32F103 with a STM32F407
- Optimized the SDRAM-Interface for the FPGA to make the traces shorter (which should allow me to increase the SDRAM-Clock to the maximum of 166 MHz)
- FOUR-LAYER-BOARD - No more 2-Layer crap
- Replaced the ADF4351 with the ADF5355 (13,6 GHz
)
- Replaced the AD9910 with the AD9957 (basically the same chip with large portions of the datasheet copy and pasted, but it also has digital I/Q Modulator capability and it can also work as a simple DAC driven by a data-source, whereas the AD9910 could only use the Output Scale Factor for this)
- Improved the Master Clock and used differential clocks wherever possible to reduce noise.
- Changed the power-supply to a +14 / -14V-Scheme with local regulators for the individual circuit-blocks.
I haven't started with the board-layout yet, but I think I might be able to put everything on a 200 by 150mm board.
So, in essence after a rather long hiatus, this project is back on my in progress-list