ForewordI'm not sure whether this topic should belong to 'Projects' section, but perhaps voltnuts will be pleased by this 'voltnutter-ish' specific project too, so I entered it here. Mods have all the power to move it elsewhere.
BackgroundIt all started few years ago, when all the DMMs I had were UT-61E and DT830. I have to admit I was quite happy with those instruments for my daily hobby use.
Friend of mine had old Czechoslovakian Metra M1T242 [1]. This one probably isn't well known to folks from the better part of ex-iron curtain and in fact, it isn't something stellar after all. Four digit multimeter with nixie tubes (manufactured up to 80's!, later modified to LED displays and sold as M1T242A) but there is still quite a few of those instruments among hobbyists. I was able to cheaply acquire this meter too, and after quick repair it worked as expected. During the repair I noticed how much the meter suffers from having to use early 70's technology and thought of reworking the instrument to modern ICs, hoping to decrease loss heat and improve stability of the meter. Doing too deep cuts into existing meters (having some historical value, too) seemed somehow brutal, so I decided to build a replica with modern components. I started reverse engineering and redrawing of the meter with aforementioned friend, but after a while the initial enthusiasm evaporated, leaving me halfway in the project. I realized investing too much time into 4-digit meter has little to no practical value, on the other hand the knowledge I acquired really called for building something related. I built 1000 count integrating AD converter few years ago [2], made of a few opamps, handful of 74xx chips and beefy 5V power supply, but realm of 5+ digit AD converters was very hazy to me. So, scope creep happened, I tossed the old 4-digit meter plans and decided to better understand how the integrating converters do work and i started with 6-digit voltmeter, being at the borderline between practical tool and low-end voltnutt-ery gadget.
ImplementationThe design I present here is far from being elegant or efficient. This is hobby project and I took all the freedom to make the meter as exciting to me as i wished to. Despite my long experience with Microchip MCUs I decided to increase fun factor of this project by using MCUs I had not much of experience with, namely MSP430 and HCS08. I decided to implement integrating AD converter, with multislope runup (this decision wasn't random, I protoboarded classic double slope method and also build sigma-delta converter), driven by CPLD logic, communicating with main MCU on "earthy" digital board. This is my first Verilog project longer than dozen of lines. The main MCU would also have coprocessor on display/keypad board. See attachment 1
Power supplyPower supply has the luxury of custom toroidal transformer with lower flux density and six separate LM317 circuits to form four separated power rails for my project:
+-22V for input amplifier
+-15 for analog portion ADC
3,3V fpr digital portion of ADC
12V for relay
and finally 10V for earthy logic and display board.
Power input boardUnlike Weller, I included fuse into primary circuit of the transformer, as well as MOV on a piece of PCB. The IEC60320 type C8 socket has integrated RF filter. Power switch is of classic clicky-clacky rocker sort.
Display boardMain part of user interface is driven by MC9S08AP16A, eight yellow LED displays (vintage Tesla LQ370 and LQ470) of classic 7,62mm 'MAN72-like' style is driven by series of 16-bit serial registers with current drive outputs - STP16DPS05 or alternatively SCT2024. The 10V rail is regulated down to 2,6V (just above Vol of drivers plus Vf of displays to reduce loss heat) for display using TPS54331 step-down converter and MCU is fed by MCP1703 regulator.
Interesting enough, the display actually displays 7,5 digits, that is 1uV resolution from 10V input. I'm displaying it for testing purposes now and probably will blank it after the voltmeter will be finished... one day.
Digital boardMain digital board is build around MSP430FR5994. There is also FT231XS acting as serial-to-USB converter or alternatively MAX3232 for classic RS232 communication. Onboard bluetooth module isn't powered for now and I'm not sure whether it's good idea to have RF source in precise instrument anyway. I'll investigate this question later.
ADC+referenceThe main course of this project is ADC, with schematics in attachment 2. In some multislope ADC implementations, the integrator has numerous of switching sources - either input voltage, ground or Vref+/Vref- inputs via one or more resistors. This typically leads to composite custom resistor network, where most of the precision of the ADC is hidden. This is viable way for mass production, but not that much for one-off hobby prototype. Resistor networks with good tracking like LT5400 are available, with four resistors per package. In my original concept I'd need five resistors - one for input current integration, two for fast runup integration and two for slow rundown integration. Aside from resistors, I needed to solve another important decision - integration switches. With five resistors I need six (five plus integrator reset) switches. That is unfortunate, because switches like DG211B have only four channels per package. I can add more IC packages, but it takes more PCB area (not that much of a problem), but what is worse, requires longer tracks of sensitive signals and more convoluted guarding etc...
I solved this 6-switches problem by not having six switches: Unlike usual situation with four runup/rundows resistors feeding different integration currents from single Vref+/Vref- level, I opted for only two resistors and two different Vref+/Vref- levels, see attachment 2 and timing signals in attachment 3. This way I divided the problems into two smaller ones: Three resistors network with good tracking at integrator (marked as Ry resistors) input and another two resistors network with good matching in the Vref divider (marked as Rx resistors). Those two networks doesn't need to have good tracking to each other, however. There is third resistor network in Vref invertor. After Vref switch actions I leave quite bit of time for switched voltage to settle down and it doesn't seem to produce problems.
I opted for polystyrene capacitor into integrator, after I built dedicated tool to somehow compare dielectric absorption in capacitors [3] and also because I stocked plenty of them. Since the integration frequency is relatively high, it's possible that other types would be OK into this application, I left this as exercise for later.
For runup I implemented simple algorithm to exercise both Vref+ and Vref- switches once per cycle, in effort to decrease charge injection nonlinearity errors.
Onboard reference is good old LM399AH. I designed plastic cover serving two functions - at first it decreases loss heat from LM399, this also decreases temperature generated on ADC board, lowering temperature gradients and problems linked with it. Above that, it seems to decrease low frequency noise, probably due to air turbulences. I need to investigate this more.
I employed CPLD for timing and control of ADC. I never really did any major project in Verilog and this was the my first. First protoboard versions of my integrating ADC used MCU for timing and calculations, but I believed using PLD is the right way to go, so it was strong reason (excuse?) to dig into Verilog more seriously than modifying simple blink-a-LED example. I am pretty sure my code is far from being flawless, though.
Input boardThis one, together with ADC, is sitting in metallic floating shielded box. Its main purpose is to increase impedance of ADC input (opamp follower), perform AZ function (by attaching follower input either to ground or to input signal) and allow selection of 10M or high-impedance input mode.
I have to admit I spent more time around this input board than I expected. First incarnation used LTC2057HV and I failed badly with it - due to my mistake in noise calculations; especially current noise of this AZ opamp was way too high for high-impedance circuits. Later I rewired the board, employed OPA134 for this task and things got much better. OPA140 performed even better. This input board is quite rudimentary and currently I'm working on replacing it with with somehow different topology built around good AZ opamp and bootstrapped power supply.
ValidationValidating 6,5 digit voltmeter is far from being trivial.
ADC noise is around 0,18ppm, with digital filter in main board I can get one order of magnitude lower with last digit on my 7 and half display (microvolts on 14V range) being rather stable. I believe there is room for improvement in noise.
At first I performed first INL check against old 5 digit boat anchor multimeter ([4], [5]) and it seems to be linear within its possibilities, but this is only reality check to rule out major design issues and doesn't say a lot about real INL.
Later I made INL test using Time electronics type 2003S and Solartron 7150+, voltage from calibrator was measured by both voltmeters and INL characteristic was calculated in spreadsheet editor. Results were not as good as I hoped for, ranging from -4 to +5ppm. I believe this is partially due to somehow unstable dial switches on calibrator, inducing slight drift and noise in the output voltage.
A bit later I obtained HP34401A, with good and known INL [7] and used different methodology. I took 10V low-noise source and setup voltage divider from precise 3,01kOhm resistor and resistor decade with clean and stable contacts. Measured was INL in range approximately -1 to +2ppm. Considering the LSB of each meter is 1ppm, I can call it OK-ish until I get my hands on some real HP3458A.
Lessons learnedThis project was really refreshing for me. I started with UT61E as my most precise meter, spent a few weeks absorbing service manuals and patents, another few weeks protoboarding ADCs, acquired quite a bit of precise components, got my hands on a few cheap meters (HP3465B, Fluke 8050A, HP3478, HP34401A, Solartron 7150+ and Keithley 177) during the process, learned how lousy Verilog programmer I am, built a few test tools for myself (capacitor DA checker, nanoampermeter) and ended up with my own voltmeter. As classic music author Ian Kilmister would say - the chase is better than the catch.
More picturesIn link [6]
TODOA lot of to do, namely:
- By now, AZ switching is asynchronous to ADC conversion, so I have to toss out first AD result after switching action. AZ should be directed by ADC itself.
- Rework input amplifier. Version with good AZ opamp and bootstrapped power supply is in works.
- Perform better INL check.
- Finish firmware for digital board.
- Add comments to sources, beautify schematics.
Materials included in attachmentsAttachments 1 to 3 are referred in text and illustrate inner working of the instrument.
In attachment 4 you can find sources for ADC CPLD, also simple version of sources for MSP430 and HCS08. I'm working on those, more refined versions will come later. But data handling should be obvious from those. Before looking into sources, read this warning: the sources are dirty and comments are sparse. I assume there is quite a bit of errors. On the other hand, I really don't expect anyone to build verbatim copy of my design.
Above that, in attachment 5 you can find PCB source data, as well as PDF schematics.
Attachment 6 contains mechanical files, for now just LM399 cover. Front/back panel drawings will be added later.
Attachment 7 are two data logs of LT1021D-10 voltage reference captured by instrument, approximately one minute long each. One captures raw ADC data with digital filter off, one with digital filter on.
Attachment 8 - INL tests against HP34401A, see text above
Links[1] -
https://www.radiomuseum.org/r/metra_blan_digital_multimeter_m1t_24_2.html[2] -
https://imgur.com/a/Os0PRQU[3] -
https://www.eevblog.com/forum/projects/multislope-design/msg2117578/#msg2117578[4] -
https://www.radiomuseum.org/r/metra_blan_digital_multimeter_m1t_29.html[5] -
https://www.eevblog.com/forum/reviews/czechoslovakian-measure-equipment-collection/msg85687/#msg85687[6] -
https://www.eevblog.com/forum/projects/multislope-design/msg2378133/#msg2378133[7] -
https://xdevs.com/fix/hp34401a/-----------------------------------
EDITS:
29.05.2019 - I made mistake in ADC timing waveforms, corrected it and uploaded correct picture; plus added attachment 7 and two more photos.
30.05.2019 - Typos corrected
18.06.2019 - Added crude INL test against Solartron 7150+
02.07.2019 - Added somehow better test against HP34401A