Boite à Résistance numérique de précision
A diy Precision Digital Resistance Box
A diy Precision Digital Resistance Box
Nous avons réalisé une boite à résistance numérique de précision.
La beauté de la chose, c'est que nous avons rentré dans le programme de l'Arduino les valeurs "exactes" mesurées des 25 résistances qui permettent de générer toutes les valeurs entre presque 0Ω et 1.67MΩ au pas de 0.1Ω. L'afficheur affiche ainsi, non pas la valeur calculée avec les relais mais la valeur calculée d'après les mesures des résistances. De la sorte, la précision est beaucoup plus élevée. Par exemple, si vous voulez une résistance de 100kΩ, vous allez tourner la molette jusqu'à afficher 100kΩ même si les relais, eux vont déterminer une valeur, par exemple, de 99.6kΩ. La mesure tient aussi compte de la résistance de contact (la 25e : ~0.4Ω) (qui empêche d'atteindre 0Ω).
Pour peu que l'on possède un ohmmètre de précision ou des résistances étalons et que les résistances soient stables, on peut réaliser une boite de précision élevée avec des résistances assez ordinaires. (on peut avoir une idée de la stabilité en température d'une résistance en la mesurant pendant la soudure...)
Nota : les résistances couche métal (dont le boitier est souvent vert) à 1% ou 2% ne sont pas seulement plus précises que les résistances à couche carbone (dont le boitier est souvent jaune), elles sont aussi beaucoup plus stables en température...
Le boitier alimenté en USB-C qui contient :
1 afficheur 8x7segments (80x14mm) avec son circuit de commande MAX7219 1.34€
3 carte 8 relais 5V (131x49.5mm) à 4.59€ pièce soit 13.77€
1 roue encodeuse 10.49€
1 rallonge USB-C 2€16
1 Arduino Nano USB-C 1.50€
1 coffret (profilé aluminium de fenêtre de récupération et tôle aluminium de récupération)
3 PCF8574 ou PCF8574A 1.4€. Chaque support de PCF8574 est soudé directement sur les entrées de chaque carte relais.
Au total, environ 30€ sans le coffret
Les E/S Arduino Nano :
2 pour la roue codeuse (A et B)
2 pour les relais en I2C (SDA SCL)
3 pour l'afficheur (CS, CK, DIN)
Principe : Tous les relais sont en série et chaque relais est relié à une résistance entre les contacts NO et COM. Les valeurs de résistance évoluent en puissance de 2 avec une puissance "la plus élevée possible". Ceci dit, il est difficile de trouver des résistances de puissance précises et stables
8 relais : 0.1Ω, 0.2Ω, 0.4Ω, 0.8Ω, 1.6Ω, 3.2Ω, 6.4Ω, 12.8Ω
8 relais : 25.6Ω, 51.2Ω, 102.4Ω, 204.8Ω, 409.6Ω, 819.2Ω, 1638.4Ω, 3276.8Ω
8 relais : 6554Ω, 13107Ω, 26214Ω, 52429Ω, 104858Ω, 209735Ω, 419 430Ω, 818 860Ω
Ainsi on peut parcourir toutes les valeurs de 0 Ω (en pratique, avec les contacts, 0.4Ω) à 1.6MΩ.
A la mise sous tension, Les relais sont réglés pour 20kΩ (valeur réelle).
Si on fait tourner la roue codeuse, la valeur diminue ou augmente par pas de 1000Ω puis, au bout de 10 impulsions dans le même sens, de10kΩ, puis au bout de 10 impulsions dans le même sens, de100kΩ etc. Pour redescendre à 0, il faut "seulement" 80 impulsions.
Au bout de 10 impulsions dans le même sens on multiplie l'incrément par 10
A chaque changement d'impulsion, on divise l'incrément par 10 (sauf pour les faibles valeurs)
Au-dessus de 10 000Ω, l'afficheur n'affiche pas de décimales : ex: 12345Ω
le symbole Ω est affiché en allumant les 3 segments du bas de l'afficheur de droite
Entre 9999Ω et 1000Ω, l'afficheur affiche une décimale : ex : 1234.5Ω
Entre 999Ω et 100Ω, l'afficheur affiche deux décimales : ex : 123.45Ω
En dessous de 100Ω, l'afficheur affiche trois décimales : ex : 12.345Ω
L'Arduino Nano fait le calcul pour activer les relais.
En fait, pour éviter de faire "vibrer" les relais : modifier en permanence la valeur, l'Arduino calcule rapidement les valeurs à envoyer aux relais et met rapidement l'affichage à jour mais les relais ne sont activés qu'environ 2 fois par seconde : suffisamment vite pour ne pas gêner l'utilisateur mais pas trop vite pour ne pas les faire "vibrer".
L'Arduino Nano contient une table des 25 valeurs "exactes" mesurées des résistances (que l'on aura entrées manuellement dans le code) (chaque résistance sera forcément en peu différente de la valeur théorique). L'Arduino envoie sur l'afficheur, non pas la valeur déterminée par la roue et son calcul, mais la valeur déterminée par les valeurs exactes rentrées. Ainsi, il y a une espèce de compensation numérique de la valeur des résistances que l'on peut finement ajuster. De même, au minimum, l'afficheur n'affichera pas 0.000, à cause des câblages mais un peu moins de 1Ω (0.343Ω) que l'on aura mesuré auparavant (la 25e).
Nota : si on retouche une résistance, il faut penser à modifier sa valeur dans le programme...
Ainsi, pour peu que les résistances ne dérivent pas, on peut avoir une boite de haute précision avec des résistances ordinaires suffisamment stables. On suppose aussi que l'on a un ohmmètre précis pour ajuster tout ça...
Vue 3D :
Le dessus et les côtés ont été masqués. Les cartes à relais ont été fixées sur le fond par des petites équerres en aluminium de 70° pour accéder facilement aux borniers et aux résistances.
Il faut prévoir de la place et un accès aisé aux 24 résistances (Sans parler des combinaisons séries ou parallèles pour atteindre les valeurs exactes).
A noter que nous n'avons pas prévu de protection, à moins d'installer un fusible en série sur chaque résistance, nous ne voyons pas comment protéger la boite des erreurs de manipulation. Ceci dit, en cas de fausse manipulation, c'est probablement la résistance la plus élevée de la combinaison en cours qui va flamber : il y aura donc une seule résistance à changer et à ajuster.
La face arrière est totalement nue.
La face avant de gauche à droite : La partie femelle de la rallonge USB-C qui alimente les 24 relais et absorbe 1.3A max quand tous les relais sont alimentés (0.343Ω). Il faut donc relier la boite à une alimentation USB qui fournit au moins 1.5A.
L'Arduino Nano est fixé sur le morceau de PCB parallèle à la face avant et qui maintient l'afficheur.
L'afficheur 8x7 segments piloté par 3 fils.
Les embases banane noire et rouge (au pas "secteur" 19mm). Les embases ont chacune un fil indépendant. Les 2 fils de même couleur sont reliés au niveau des relais. Les quatre embases permettent aussi une mesure de précision "en 4 fils".
La roue codeuse (un peu chère ~10€) mais épatante.
Nota : Il faut prévoir les ponts entre chaque relais avec un fil de section suffisante : tous les ponts, même ceux des résistances élevées sont traversés par le courant de la charge, même si la charge est réglée, par exemple, sur 1Ω et encaisse 1A.
Schéma électrique :
Notre étalon AOIP RD6 B pour mesurer précisément les résistances :
(Précis mais pas très pratique, lourd et encombrant : 430x110x90, 2.9kg)
Étendue de mesure : 0.1Ω à 122 222.1Ω par bond de 0.1Ω
Précision :
Décades 100 000, 10 000, 1000, 100, 10 Ω : +-0.03%
1Ω : +-0.1%
0.1Ω : +-0.5%
0.01Ω : +-5%
Dérive en température < 10-5/°C
Nota : notre multimètre ET3240 est précis à 0.05% pour la mesures des résistances (entre 500Ω et 50kΩ). (Il permet la mesure à 4 fils pour les résistances de faibles valeurs)
Pour l'étalonnage, on trouve à bas prix (~4E) ces cartes avec des résistances (et des condensateurs) de précision et leur valeurs "exactes" indiquées, par exemple, chez Aliexpress
Une partie des composants nécessaires :
L'Arduino Nano (USB-C), 3 PCF8574A avec leurs supports, les petites équerres aluminium, la carte relais avec les résistances de valeurs les plus élevées, les autres résistances, les bornes rouge et noire, les pieds adhésifs, la visserie, le profilé aluminium et la roue encodeuse.
Il manque 2 cartes relais, les tôles du boitier et l'afficheur.
Une bonne partie des résistances ont été préparées et ajustées. Il faudra sans doute les ajuster finement sur place.
La boite en cours de fabrication : Face avant, face arrière, dessous. Une carte à relais (celle des résistances les plus élevées) fixée avec les 2 équerres. Les 4 embases banane noire et rouge. La roue codeuse fixée par 3 vis M3.
Il manque principalement 2 cartes relais avec leurs résistances et leurs équerres, l'Arduino Nano et l'afficheur.
Le code Arduino en cours de réalisation fait environ 600 lignes...
Vue de l'intérieur de la face avant (il manque l'afficheur). Le morceau de circuit imprimé, fixé par 2 vis M2 sur le profilé, maintient l'afficheur d'un côté et l'Arduino Nano de l'autre. A noter que l'Arduino Nano n'est pas soudé : on peut l'ôter sans rien dessouder.
Nota : Avec juste ce morceau (et avec l'afficheur), on peut tester déjà un bon morceau du code...
Nota : sur la photo, il n'y a pas de rallonge USB mais un simple connecteur USB-C ce qui oblige à ouvrir le boitier pour reprogrammer ou réétalonner.
Il n'y a pas beaucoup de câbles dans la boite :
Il faut rajouter les 5 fils (très courts) pour alimenter et commander l'afficheur (Gnd, +5V, CLK, DIN, CS)
Les 4 fils pour alimenter les cartes relais (les 4 fils sont reliés aux 3 cartes, ce sont les adresses des PCF8574A qui font la distinction) (Gnd, +5V, SDA, SCL)
Les 2 fils noirs de section suffisante pour aller à une carte relais
Les 2 fils rouges de section suffisante pour aller à une autre carte relais
2 fils de section suffisante pour relier les cartes relais entre elles
Et, évidemment, les 23 résistances à ajuster et les 21 petits ponts (de section suffisante) correspondants
La face avant de la boite avec son afficheur :
La boite de résistances presque finie à la mise sous tension. Pas mal de résistances de faibles valeurs sont provisoires.
Les PCF8574A (invisibles sur la photo) et les relais sont câblés. On voit certaines Leds rouges des relais qui sont allumées.
Deux fils monobrins rouge 1.5² réunissent les cartes relais entre elles. A noter que l'on peut évidemment relier les cartes relais entre elles dans n'importe quel ordre.
21 ponts en fil de cuivre nu de 1.5² sur lesquels sont soudés les résistances relient les relais. Rappelons que tous les ponts en cuivre sont traversé par le courant qui peut, dans le cas de résistance très faible, dépasser 1A.
Sur le relais avant gauche, 2 fils rouges reliés ensemble sur la borne du relais, chacun relié à une borne rouge. De même, sur le relais arrière gauche, 2 fils noirs reliés ensemble sur la borne du relais, chacun relié à une borne noire.
Pour information, la résistance (minimum) de la boite, tous relais activés, est 0.343Ω. (Ce qui nous fait 0.343Ω/24=~14mΩ/contact de relais+pont). En doublant les pistes du circuit imprimé des cartes relais avec un fil en cuivre, on peut descendre autour de 0.25Ω.
Attention à bien serrer les 48 vis des borniers des cartes relais !
Pour mesurer les résistances inférieures à 6.4Ω, nous utilisons notre Milliohmètre (un générateur de courant d'exactement 1A) connecté aux 2 bornes rouge et noire et notre multimètre relié aux deux autres.
La boite à résistance est précise (ET3240 et mesure en 4 fils) :
A la mise sous tension, la boite affiche 8.8.8.8.8.8 pour tester l'afficheur, puis le numéro de version du programme et enfin la date de calibration (ici 15 03 25) puis la valeur par défaut : 20 000.0 : 20kΩ.
(Nous avons augmenté la section des fils de connexion et un film plastique isolant a été collé sous le capot aluminium pour éviter un contact avec les connexions des résistances).
Les valeurs théoriques des résistances ont été inscrites sur les borniers pour faciliter les réglages.
Attention : la mesure en étuve de 20°C à 60°C nous a montré que les résistances 1% chinoises ne dérivent pas thermiquement forcément moins que les résistances 5% traditionnelles.
Les "bonnes" résistances "traditionnelles" dérivent de 0.2% tous les 10°C. Les moins bonnes de 0.5% tous les 10°C. Reste à trouver des résistances qui dérivent peu et suffisamment puissantes...
La table d'étalonnage (qui a été rentrée dans le programme Arduino) :
Pour chacune des 24 valeurs :
lignes du haut : la valeur mesurée de chaque résistance avec le Owon XDM1041
Lignes du milieu : la valeur théorique exacte
Lignes du bas :valeur mesurée de la résistance AOIP RD6B réglée à la valeur théorique exacte lue par le XDM1041 pour que le programme puisse faire la compensation (l'AOIP RD6B ne permet pas d'aller au-delà de 122kΩ)
En théorie, de 1000Ω à 100kΩ, la boite devrait être précise à mieux que 0.05%...
En principe, en laboratoire on étalonne et on utilise les instruments à 23°C.
Affichages et décimales selon la valeur de la résistance, du minimum au maximum, avec le symbole Ω sur le dernier afficheur :
(Pour passer du minimum au maximum, il faut 7.5 tours de roue.)
Nous avons modifié le logiciel : si on fait tourner la roue pendant la mise sous tension, il passe en mode étalonnage et, à ce moment-là, la roue enclenche les relais un par un, un seul à la fois. L'afficheur affiche 00 (aucun relais) à 24 (dernier relais : résistance de valeur la plus élevée). Jusqu'au prochain démarrage. Pratique pour l'étalonnage.
Grâce à l'utilisation d'une rallonge USB-C en face avant, Il n'est même pas nécessaire d'ouvrir le coffret pour l'étalonner...
La boite à résistances entièrement finie avec son capot en aluminium peint en noir :
Mesure en 4 fils (Kelvin) :
Rappelons que, pour mesurer précisément des résistances de faibles valeurs, il est indispensable de faire une mesure en 4 fils (Kelvin) : 2 fils pour le générateur de courant et 2 fils pour mesurer la tension. Les fils ne sont pas connectés entre eux, ils sont reliés à la résistance à mesurer. Ainsi, on s'affranchit des résistances des fils de mesure.
Si on espère une précision de l'ordre de 0.05% et que la résistance mini est de l'ordre de 0.5Ω cela veut dire qu'il faut faire une mesure à 4 fils jusqu'à quelques kΩ.
Les multimètres de précision (ainsi que la boite à résistance) sont équipés de 4 bornes de mesure pour les résistances :
Un exemple de capteur à 4 fils économique (à base de pinces à linge et de tige laiton Ø2) :
Deux tiges laiton L=100, chauffées sur la gazinière, traversent les 2 parties d'une pince à linge. Chaque tige est étamée d'un côté et soudée à une embase banane de l'autre. La colle à chaud les maintient. Les embouts en laiton sont légèrement coudés pour être en contact au repos. Notez que les embouts laiton ne se touchent pas, ils sont en contact par le biais du fil de la résistance à mesurer.
On pourrait transformer la boite à résistance en ohmmètre de précision : il faut réaliser un pont de Wheatstone constitué de 2 résistances parfaitement appairées d'un côté, la boite à résistance en série avec la résistance à mesurer de l'autre. Il faut alimenter le pont avec une résistance série pour éviter les courant très élevés pour la mesure des résistances faibles.
On connecte les deux entrées d'un amplificateur opérationnel des deux côtés du pont (il faut choisir un AOP à très faible courant d'entrée, faible offset et avec un réglage d'offset. La sortie de l'AOP est reliée à l'Arduino. Si la différence de tension entre l'entrée + et l'entrée - est positive, l'Arduino augmente ou diminue (plusieurs fois par seconde) la valeur de la résistance, comme si on faisait tourner la roue dans un sens, sinon dans l'autre sens. Au bout d'un court instant, l'afficheur affiche la valeur exacte de la résistance. (On peut rajouter un bout de code pour éviter à L'Arduino de faire osciller indéfiniment les relais autour de la bonne valeur).
Nota : pour mesurer précisément une résistance avec une boite de résistance de précision et un voltmètre moins précis que la boite de résistance de précision :
Il faut d'abord fabriquer 2 résistances les plus égales possible.
Méthode : nous allons fabriquer 4 résistances les plus égales possibles :
Récupérer 4 résistances 1% ou mieux, couche métal, stables, de la même valeur, même série si possible, par exemple 10kΩ
Ajouter en série à chaque résistance un potentiomètre ajustable 10 tours de 100Ω réglé à mi-course
Numéroter chaque résistance obtenue
Fabriquer un point de Wheatstone avec les 4 résistances et alimenter en 10V environ
Mesurer la (faible) tension aux bornes du pont v1 (éviter de toucher les résistances, les courants d'air, les effets de thermocouple...)
Faire faire une rotation d'un quart de tour au pont
Mesurer la tension v2 aux bornes du nouveau pont, et ainsi de suite v3, v4
calculer les écarts : r1=(V1−V2+V3−V4/Valim, r2=(−V1+V2−V3+V4)/Valim, r3=(V1-V2-V3+V4)/Valim, r4=(−V1−V2+V3+V4)/Valim
Mesurer chaque ajustable pour régler la nouvelle valeur corriger selon (r1*100)...
Réitérer si besoin
De cette manière, on doit obtenir 4 résistances de valeurs environ 10kΩ mais précisément égales entre elles (à 0.01% près ?)
On peut ensuite récupérer 2 de ces 4 résistances pour fabriquer un pont de Wheatstone avec la résistance étalon et la résistance à mesurer.
Photo : Un pont de Wheatstone avec des résistances de 30kΩ équilibrées. Les résistances de 30k sont collées au mastic silicone sur un petit morceau d'aluminium (non relié thermiquement au boitier) pour essayer d'égaliser leurs températures. Quatre résistances ajustables de 50Ω permettent de finement équilibrer le pont
Nota : on pourrait construire le même type de boite "à l'envers" : On raisonne en conductance au lieu de raisonner en résistance et on dispose chaque relais en série avec une résistance et toutes les résistances en puissance de 2 et tous les ensembles relais + résistance en parallèle. Ça diminuerait énormément la résistance minimum qui serait de l'ordre de 20mΩ.
Mais le gros défaut de cette solution, (à moins de rajouter beaucoup de relais) : peu de valeurs à disposition pour les résistances de valeurs élevées. Par contre, on pourrait descendre au µΩ de résolution pour les résistances de faibles valeurs. Ce qui n'a aucun intérêt...
Mais on pourrait, de cette manière, construire une boite à condensateurs, par exemple de 10pF à 20µF ou une boite à inductances...
That's All Folks !
Commencé le 03/03/2025
A jour au 04/07/2025