Platino-based simple LC meter [130341]

Here is a small project that shows how to measure inductances and capacitances with a microcontroller and a few extra parts.
Measuring resonances
Various methods can be employed to measure inductance and capacitance; in this article we will use the resonance approach. This means that we use the device under test (DUT) to create an oscillator and then measure the frequency of the oscillator’s output signal. Because we know the oscillator’s characteristics it is possible to use this frequency calculate the inductance or capacitance value of the DUT.Two oscillators and clever software is all we need
The oscillators are shown in the schematic below. There are two, one for inductance and one for capacitance. IC1.A and IC1.B together with Lx, C1 and C2 form a digital Colpitts oscillator. When the two capacitors have the same value, as they do here, the oscillating frequency is calculated as:f = 1/(2π∙√(0.5∙Lx∙C))
We can work this equation around to obtain:
Lx = 1/(2∙π2∙f2∙C)
Because the frequency is a bit high when Lx is small, it is divided by 16 by IC2.A before being sent to the microcontroller.
Resistor R1 makes sure that the oscillator does not oscillate in the absence of Lx whereas P1 is available to calibrate the frequency with a known Lx.
The second oscillator is of the relaxation type. The frequency of this oscillator is given as:
f = 1/(2∙R4∙Cx∙ln(1+2∙R2/R3))
Swapping f and Cx gives:
Cx = 1/(2∙R4∙f∙ln(1+2∙R2/R3))
This equation is pretty precise but the switching levels of IC3.A do influence it. Even though it is powered from a symmetrical power supply this does not solve the problem completely. Luckily the software can compensate for this after calibration.
Rectifier D1 together with IC1.D ensure an output signal between 0 and 5 volts. The negative supply for IC3 is created by IC5, a popular voltage inverter IC.
The multiplexer built with IC4.A and IC4.B lets the MCU select the best capacitor test frequency for both a rapid response (the larger the capacitor value, the lower the frequency and thus a longer measurement period) and best precision. Those who prefer simplicity can leave IC4 off the board and strap its pins 1 and 2.
The software does the hard work
From here the MCU takes. It is programmed as an Arduino sketch making it easy for anyone to modify and play with. As is usual for a device with a nice user interface (UI), most of the program is dedicated to the UI. Displaying values with the right units, at the right position on the display; handling the rotary encoder and its integrated pushbutton, at least 80% of the programming effort ends up in the UI.To measure the frequency produced by the DUT, the sketch uses the Arduino pulseIn function. This is a rather precise way of doing things as it returns values accurate to the microsecond. The inconvenience is that it is a blocking function, meaning that the MCU cannot do anything else while it is executing it. In our case this is not a problem, because the MCU doesn’t have to do anything else in the meantime.
Except in the case when COUT is measured directly, the signal has a theoretical 50% duty cycle due to the dividers IC2.A and IC2.B. Measuring only the pulse width therefore would be enough, but for better precision, and because things are never ideal, the signal period is measured too. The obtained frequency value, corrected for any division factors, is plugged into one of the equations (Lx or Cx) above and the value of the DUT comes out. It is that easy.
Build the LC meter
Finally, a word on assembling the LC meter. The add-on board is not very difficult to populate. The only thing to keep in mind is that K1 (optional) and K4 to K7 are to be mounted on the solder side of the board.Also an assembled Platino is required (see below). Because the add-on board does not need K1 (it is there just in case), the board can also be used with an Arduino Uno. If you do, you will have to change the user interface, of course. Controlling the LC meter over a serial port is possible and would make for a good coding exercise.
A quick word about Platino
Platino is a universal circuit board for AVR microcontrollers in DIP28 or DIP40 packages. It can be equipped with user interface objects like pushbuttons, LEDs, buzzer, and displays. Everything, and we mean everything, about Platino can be found on the Elektor Labs website (see below) and on the GitHub repository of Elektor Labs.Experience has shown us that Platino users find it hard to configure its solder jumpers. This is understandable, as there are many. This table shows the settings for this project. The Position column corresponds to the labels printed on Platino PCB version 150555-1 v1.4. Note that we recommend setting solder jumpers before mounting any parts.
And while we’re on the subject of parts: for this project we need a fully assembled Platino with a 28-pin MCU (ATmega328P-PU) — so no need for a 40-pin socket —, a 2x16 alphanumerical LCD with backlight, a rotary encoder with integrated pushbutton on position S5A or S5C (depending on your preference).
Click here for the Platino bill of materials.
Jumper | Position | Function |
JP1 | C | PB4 is used by add-on board |
JP2 | - | does not exist |
JP3 | C | LCD backlight on PC5 |
JP4 | C | Rotary encoder A on PC0 |
JP5 | C | Rotary encoder B on PC1 |
JP6 | C | Rotary encoder pushbutton on PC2 |
JP7 | C | PB3 is used by add-on board |
JP8 | DIP28 | PC6 is reset input |
JP9 | XTAL | Use 16 MHz crystal |
JP10 | XTAL | Use 16 MHz crystal |
JP11 | DIP28 | ISP SCK on PB5 |
JP12 | DIP28 | ISP MISO on PB4 |
JP13 | DIP28 | ISP MOSI on PB3 |
JP14 | B | LED1 blue is standard Arduino LED |
JP15 | D | LCD RS on PD2 |
JP16 | D | LCD E on PD3 |
Add-on board component List
ResistorsR1 = 47 kΩ
R2 = 4.7 kΩ
R3,R5 = 1 kΩ
R4 = 8.2 kΩ
R6 = 10 kΩ
P1 = 10 kΩ trimpot
Capacitors
C1,C2 = 27 nF, 5 mm pitch
C3,C4,C7 = 100 µF 50 V, 3.5 mm pitch
C5,C6,C8,C9 = 100 nF, 5 mm pitch
Semiconductors
D1 = 1N4148
D2 = 1N4007
IC1 = HEF4011
IC2 = SN74HC393
IC3 = LM393
IC4 = CD40676BE
IC5 = MAX660CPA+
Miscellaneous
LX, CX = 2-way terminal block, 3.5 mm pitch
K2 = 2-way terminal block, 5.08 mm pitch
K1 = 10-way (1x10) pinheader socket, 0.1" pitch (optional, mount on solder side)
K4,K5 = 8-way (1x8) pinheader socket, 0.1" pitch (mount on solder side)
K6,K7 = 6-way (1x6) pinheader socket, 0.1" pitch (mount on solder side)
Optional: 14-way DIL socket for IC1, IC2 & IC4
Optional: 8-way DIL socket for IC3 & IC5
PCB # 130341-1
Discussion (2 comments)
fbi3147 5 years ago
J'ai aussi utilisé le réglage de P1 qui ne sert malheureusement qu'a règler la forme du signal envoyé au diviseur. Trouver l'amplitude minimum qui donne encore un signal bien rectangulaire sans quoi les retours de "pulse_in()" sont très variables pour une mêm inductance.
J'ai ajouté au sketch la possibilité de paramétrer les valeurs des composants ayant une influence sur la précision. A Savoir R2, R3, R4 pour la mesure des capas, et C1, C2 pour les inductances. Celà entraine 2 séries de calculs de constantes en plusieurs lignes dans le SETUP qu'il faut conserver en l'état afin d'éviter des problèmes entre les constantes littérales et l'utilisation par défaut du INT par le compilateur.
Sur mon exemplaire, R4 est une 1% mais ce n'est pas indispensable. Si votre multimêtre vous inspire confiance, mesurez les valeurs des 3 résistances et saisissez les dans les #define correspondants du sketch.
Si vous disposez de condensateurs à 1% vérifiez ensuite les mesures avec le sketch ci-joint et ajustez le #define "capa_calibr" en conséquence.
Si vous n'avez pas de capa 1% (c'est introuvable dans le commerce), achetez un lot de condensateurs neufs de mêmes valeurs et procédez par analyse statistique du lot avec le LC mêtre.
Par définition, aucune valeur ne doit sortir de la fourchette de tolérances (tolérances à faire préciser par le vendeur) et la moyenne des mesures doit être très proche de la valeur nominale. Si ce n'est pas le cas, mofifiez "capa_calibr" ou changez de vendeur. Les valeurs affichées seront proportionnelles a "capa_calibr". Si vous vous éloignez trop de la valeur par défaut, il y a un autre problème à identifier.
En principe la correction apportée à la mesure des capa en fonction de la fréquence ne devrait pas être affectée par les modifications de "capa_calibr" tant que la valeur reste entre 950 et 1050. Pour vérifier cette correction,voici la procédure à suivre:
- prendre 2 capacités dans votre fond de tiroir dans des valeurs relativement peu éloignées les plus petites possibles disons entre 500 et 100 pF.
- les souder ensemble par une de leur patte de telle manière à pouvoir metter en contact ou séparer les deux autres pattes sans les brutaliser. Ainsi on peut mesurer leurs valeurs propres et leur mise en parrallèle ou en série.
- les mesurer individuellement et notez les mesures
- les mettre en série et noter la mesure
- les mettre en // et noter la mesure
En série, C théorique = C1xC2/(C1+C2)
En parrallèle C théorique = C1+C2.
Si C mesuré est plus grand que C théorique diminuez la constante dans l'expression de calcul de la valeur de la correction (variable "V") et inversement dans le cas contraire sans dépasser 32767. Par défaut c'est 30000. Ne pas regrouper les deux lignes de calcul, il en découlerait des erreurs de calcul. Il s'agit d'une astuce pour obliger le compilateur à calculer avec une constante en FLOAT au lieu d'INT.
Voilà, vous disposez d'un capacimêtre précis à + ou - 2% entre10 pF et 13 µF. Alors vous mesurez 2 capacités marquées 470 nF destinées à devenir C1 et C2 (vérifiez l'écartement des broches) et notez les valeurs dans les #define C1 et C2. Vous pouvez les souder sur le shield. Vous téléversez le sketch et vous avez en plus un inductancemêtre précis à + ou - 2% entre 1 µH et 10 H. Pour être franc, je n'ai pas testé au dessus de 200 mH mais j'ai une inductance à air marquée 700 nH que je mesure à 654 nH. Ce qui n'est pas si mal pour un appareil aussi simple et aussi bon marché.
A priori, je ne peux pas garantir la tenue dans le temps de ces réglages mais ce sera comme tout appareil de mesure, un recalibrage de temps en temps ne sera pas du luxe.
Ah, j'allais oublier, j'ai francisé les constantes affichées sur le LCD, si le français vous énerve, elles sont regroupées avec les valeurs des composants et c'est le seul endroit où il est nécessaire de les modifier.
N'oubliez pas de télécharger le sketch version 1.2FB
Si un anglophone, et francophone à la foi, veut traduire ce texte, c'est ok pour moi car je n'ai pas le niveau en langue de Sheakespeare pour expliquer cela en anglais et encore moins en flamant, hollandais, allemand et chinois pas plus qu'en italien, espagnol ou portugais. Je suis comme Clemens, je suis plus à l'aise en cobol, fortran, pli, basic et assembleur.
fbi3147 6 years ago
fisrt: for inductor, the work frequency is too high. I have replaced both c1 and c2 by two 100nF and the the low capacitance to measure is 1 µH.
Second: for inductor or capacitor, with lower values, a jitter comme and the read is not accurate. I have added in software an integration système of several measure.
See my 1.2 version in attach.