My apologies for the hiatus. I have had, and still have, a number of current things that will stall me.
I have been getting quite far into bringing together the bits of design, and getting into KiCAD. So here I discuss a little, and ramble on a little, and I have a question.
One thing I have discovered is no matter where the source, be it DigiKey, Mouser, Analog.com, even though one is purchasing their product anyway, none can bring themselves to simply provide the pin-outs, footprints, and even simulation models without wrapping it behind the need to run a executable on one's PC to access it. They all have their various names for it. It seems there are good reasons KiCAD do not bundle the DigiKey KiCAD library.
Thus, I have made my own symbol, and linked footprint for the analog-to-digital converter.
AC noise reject filter
The gain of the transimpedance amplifier is enormous, no matter what configuration, and it is actually quite difficult to eliminate the hum from magnetically and voltage field induced interference. I suppose in many places, things are electrically quiet enough for it not to be a problem, but in my design, I push the limits right to the noise floor. The ambition is try for the lowest energies between 1.2keV and 2keV. The absorption probabilities are between 1% and 10%. Magnesium and aluminium are just about possible, and getting the proportions of silicon in the iron might also happen.
I intend to add in my version of the Twin-T AC 50Hz -60Hz filter at a place where I might exploit the presence of a buffer-driver pair that has to be there anyway. At worst, the filter gets it's own dual op-amp, costing about $4. Do not take fright at the look of it. Several components are in parallel, and a pair can be replaced by one part. Some shown are not connected anyway.
If the opinion is that something like this should be an included feature, then we get to why I designed it to do 50Hz as well as 60Hz. I thought it may as well be universal. As seen in the plot, one notch takes out 50Hz, and the other hits the 60Hz.
Bit Banging the Raspberry Pi
It was a little experiment. We decided to throw out various Pi libraries. I will spare the detail, and just say we ran a little C program which when compiled, was only about 8K, devoted to wiggling a pin as if sending data. We tried it up to about 66 MHz, and clearly could have gone much further, but it had reached the loop speed of the little C program. I don't understand where the program execution boundary is, but the program was trying for 100MHz, and can be persuaded to do it. We could have modified the program max out on the GPIO pins, etc, but there seemed little point. 2MHz is all we need for ADC clocking, and we can use (say) 20MHz or something for serial data transfer. The traces came out somewhat over-bright exposed on the Samsung Galaxy phone camera, but anyway, you get the idea.
Above is 66MHz off a GPIO pin. We never have to go anything like that fast!
Try for some real data..
Here I am sending the data hexadecimal CF21 into the un-terminated GPIO pin. I switched on the "connect the dots" display. On this old scope, it does 1GSample/sec if on a single channel mode. With the right resistor, and correct pF capacitor, the overshoots and ringing goes away, and it turns into a prettier square wave. The code in there is 0xCF = 11001111 followed by 0x21 = 00100001. This is still clocking out at 66MHz.
The little C program I used is here ..
I can't really figure out why so many examples I see are a mess of libraries and bloated code.
The advice here is "
Don't use the default Python" unless its an undemanding application like zillions you can find on the net. I am not after educational demos here. The Pi does it easily. Comparing to C program as the reference set to 1, a compiled Java program manages about 1.2. Python is at around 75!. Old-style C might be a bit wild-West, and needs careful discipline in making and using space, (like using those "malloc" instructions), but it lets you do nearly anything.
Conversion Rate - and "looking into the past"
I am going to try for the conversion clock to run all the time at 2MHz, driven by the Pi, to provide 20 samples out of the 10nS pulse duration, capturing perhaps 1/2 a second's worth at a time in a cyclic buffer. I decided to save on the components and not build in the hardware comparator to provide the "pulse is here" trigger. The detection of a pulse, and it's recent past, is taken from the cyclic buffer. It's an all-software trigger with a certain amount of false pulse weeding out ability.
Noise- again!
The quality of the conversion, and it's signal-to-noise ratio also depends on the speed, cleanliness, and low jitter of the conversion initiation signal from the Pi. I hope the signal from the Raspberry Pi GPIO can be dressed up nice enough to do this. The test circuit on the Pi is now mostly together. The darn stuff is just a bit small = "I need better soldering kit" !
Stuff that, (I think) needs to be in there.
Several kinds of noise-conditioned power sources. I choose 10V or 12V diode bias, driven by a tiny charge pump like LT1317B (£4.91) or similar, at 600kHz. If not then simply a couple of lithium cells. The size of the pulse is much decided by the capacitance it has to spread itself into, and the benefit of having 75pF at 12V bias instead of 190pF at 2V, or a disastrous 500pF at near zero bias, outweigh the small increase in dark current from 1.5nA to 2.5nA.
We have to not allow the DC component dark current in anyway, which is why I choose AC coupled at the transimpedance amplifier. That would be the only place it happens. The circuit does not have any return-to- baseline overshoots, nor ambiguities.
The 5V supply will ultimately come from a USB. It has to see at least a filter, with common mode and differential surface mount choke inductors, and the usual associated capacitors. In this design, a 2.5V separate low noise LDO regulated supply is needed for the analog part of the ADC converter. That too, gets filtered, with only one place common to the digital zero.
The 3.3V digital supply is stolen from the Raspberry Pi, but also filtered, and digital bit energy ground bounce limited with resistors in the digital signal line, and all the usual sensible precautions.
In the end, there is not much physical stuff on the circuit, and, (when they again become available), I hope to use the tiny Raspberry Pi Zero 2C in there, with only a USB line, or BlueTooth link to the phone or PC for display. The plot is on a live web page in the Raspberry Pi. No software app needed on the phone. Only a browser.
Vary the gain?
I plan to include one of those op-amps that have 3-Bit control of gains, to allow a "zoom-in" option on the low energy regions of the plots. The amplifier can hopefully see down into the 30pA to 100pA range (where the noise is). Most arrival energies should be in the range 100pA to several hundred pA, and some up to around 1.3nA. The Pi can control which gain range is selected. Of course, this gain stage is right at the end of the chain, where the outputs are given to the ADC using a 2.5V reference for the full resolution.
The Question..
Mostly for Mark - given that you have already tried it, just asking what sort of "tick rate" can we expect? I would hope at least some Hertz.
What we have here is that the pulse events may not come by very often, but when they do, it's all over in 15uS. The one quantity that sets the pulse length is the photodiode biased capacitance (75pF in my plan). The pulse has a near exact relationship to the energy in it. The delay distortion in extreme low pass filtering of all other kinds of pulse-stretching blur this relationship. I would love it is we would be getting a high speed buzz, but somehow, I think that might be unlikely.
That's it for now folks. I know this is extreme nerd stuff, especially if encountered by HM members who don't quite get it that this stuff is directly machining-interest related. I will get back when I have the proto together. I am OK to mail (a few) bare PCBs, but I will check in here before I commit to making them.