Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Acquisition du signal d'un pont de Wheastone
#1

J'ai un projet en tête pour lequel j'ai besoin de mesurer une masse à l'aide d'un ou plusieurs capteurs. Le capteur est à jauge de contrainte monté en pont de wheastone (...).
La sensibilité du capteur est de l'ordre de 2mv/V. C'est à dire, si on alimente le pont avec 10V, le signal maximum de sortie sera de l'ordre de 20mV... Pas beaucoup.
Je souhaite amplifier puis convertir A/D et récupérer le tout sur raspberry sur le bus spi ou I2C. Si j'obtiens 1000 points de mesure pour toute l'étendue de mesure du capteur, ça me conviendrait.
Existe-t-il un shield qui fait déjà ça histoire de ne pas avoir à réinventer la roue (et vu mon niveau en électronique...)?

Sinon, un montage avec un ampli INA125 et un convertisseur A/D MCP3008 serait-il techniquement adapté?
EDIT :
le MCP3424 conjugue ampli, convertisseur et sortie I2C en un seul circuit. Avec un gain maxi de 8 mais 18bit de résolution, ça devrait permettre d'obtenir les 1000 points de mesure au minimum. Problème c'est un circuit CMS. Va me falloir une grosse loupe pour souder les papattes...

Je suis preneur de toute vos suggestions...composants, montage, circuits!

Cool
Répondre
#2

Smile Bon, après pas mal de recherche, j'ai fait le choix du montage ina125+mcp3008 . Apparement, le ina125 fournit des tensions de référence utilisable pour l'alimentation du pont et pour la tension de référence du convertisseur A/D. Et d'après ce que j'ai compris, c'est plus mieux. Et ça rentre dans mon budget.

Par contre j'ai quelques autres interrogations sur l'utilisation de SPI sur le raspberry.
Soit on utilise les GPIO pour faire du SPI "logiciel", soit utiliser les pins MISO, MOSI, et SCLK. Mais dans ce dernier cas, ça ne fonctionnerait que sur les cartes version A et/ou pour des versions de noyaux antérieures à celle utilisée par la dernière release de raspbian (par exemple). Qu'en est il réellement?

Cool
Répondre
#3

(C'est un bon topic : je me réponds à moi-même...j'adore)
Je progresse, je progresse... Celui qui me dit que le hacking c'est cool et que ça détend le bulbe, je vais pas le croire tout de suite.
J'ai reçu mes composants, j'ai commencé mon montage et j'ai obtenu quelques résultats. Yep!
D'abord sur le INA125 : ben naïvement, j'ai cru pouvoir utiliser les tensions de ref fournies par le chip (2.5, 5, 10V). Certes oui mais seulement si la tension d'alim du chip est supérieure (V+ > Vref). Sinon, on obtient Vref = V+. Moi qui utilise une alim en 5V, soit 4.8V sur ma carte, je peux au mieux utiliser Vref=2.5V. Pas grave, utilisons Vref=2.5V. Ceci dit avec une alim convenable, je pourrais utiliser Vref=10V ou 5V.
Après ça, j'ai beaucoup bataillé avant de comprendre qu'il fallait mettre la pin SLEEP sur V+ pour activer le bouzin. Dont acte. Maintenant, ben ça marche et j'ai pu obtenir des gains proche de 10000. Du coup, on peut vraiment amplifier de très faible signaux. Comme ceux d'un capteur de pesage. Pour l'instant, j'ai pas de capteur sous la main. J'utilise un "faux" capteurs avec qq résistance fixe et une variable. Mais je crois que je vais dépiauter ma balance de cuisine pour faire mes essais. Tant pis pour les gateaux, dans la vie fô faire des choix.

Cool
Répondre
#4

(Bon je continue...on n'est jamais mieux servi que par soi-même)
Le branchement du MCP3008 : no problemo au vu de l'abondante documentation. Par contre l'interface avec le raspberry a été un peu plus compliquée à réaliser. J'ai fini par comprendre qu'il était nécessaire d'activer le bus (?), pour enfin avoir /dev/spidev0.0 et /dev/spidev0.1, les deux liaisons SPI maître du raspberry. Puis de connecter correctement les broches MISO, MOSI, SCLK et CE0 pour l'adressage du brave esclave MCP3008. Grosso modo, je maîtrise maintenant la partie hardware et ma breadboard ressemble à une forêt touffue peuplé de drôle de végétaux multicolores et de quelques mille-pattes.
À ce propos, j'ai fait un petit schéma approximatif avec kicad. Si ça intéresse...

Cool
Répondre
#5

Donne ton schéma ouais Smile. Bien joué !
Répondre
#6

(La suite...va-t-il arriver à afficher un truc sur son rasp?)
Tout d'abord, moi je souhaite avoir une conversion entre 0V et Vref (2.5V) pour 1024 points. Or tous les tutos que j'ai compulsé utilise le MCP3008 en mode single-end (ou un truc approchant). Du coup, on a une conversion entre -Vref/2 et +Vref∕2. Et ça, c'est pas cool, car pour ce que je veux faire, je perds la moitié de la précision de mesure, hein! (à vérifier quand même : je suis pas trop sur de ce que j'avance...)
Du coup, pour utiliser le mode differential input mode faut gratter un peu, et vu que j'y panne rien en codage et divers reptile, j'ai utilisé ce tuto en modifiant le câblage et le soft.
À savoir :
Vout ---> CH0
IAref ---> CH1, ça c'est pour le cablage différentiel provenant de l'ampli INA125 vers le MCP3008.
Puis, modifier la ligne 37 du p'tit prog de test en remplaçant '0b10000000' par '0b00000000'. De cette façon, le premier bit est à zéro, c'est la configuration differanti...machin entre les entrées CH0 et CH1 du MCP3008 (tout ça d'après le tableau 5.2 du datasheet). On compile comme c'est dit et hop. J'ai bien vérifié au multimètre, j'obtiens 1023 sur ma console lorsque je m'approche de Vref. Et c'est bien linéaire. Mission accomplie!
Au passage, en suivant le datasheet, il suffirait de placer '0b00100000' pour pouvoir utiliser CH2 | CH3, etc...

Cool
Répondre
#7

@Jeoffrey : Euh, si je fais passer le fichier en texte comme ça, ça va?
Code :
EESchema Schematic File Version 2
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:burr-brown-3
LIBS:microchip-dspic
LIBS:w_analog
LIBS:loadcell-cache
EELAYER 27 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 2
Title ""
Date "20 may 2014"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
$Comp
L R RG1
U 1 1 5376FD69
P 2650 4150
F 0 "RG1" V 2730 4150 40  0000 C CNN
F 1 "121Ohms" V 2657 4151 40  0000 C CNN
F 2 "~" V 2580 4150 30  0000 C CNN
F 3 "~" H 2650 4150 30  0000 C CNN
    1    2650 4150
    0    1    1    0  
$EndComp
$Comp
L MCP3008 U1
U 1 1 537712AB
P 6450 4100
F 0 "U1" H 6650 4650 60  0000 C CNN
F 1 "MCP3008" H 6800 4550 60  0000 C CNN
F 2 "" H 6450 4100 60  0000 C CNN
F 3 "" H 6450 4100 60  0000 C CNN
    1    6450 4100
    -1   0    0    -1  
$EndComp
$Comp
L INA125P IC1
U 1 1 53770CA2
P 4100 3450
F 0 "IC1" H 3600 4575 50  0000 L BNN
F 1 "INA125P" H 3600 1950 50  0000 L BNN
F 2 "burr-brown-3-DIL16" H 4100 3600 50  0001 C CNN
F 3 "" H 4100 3450 60  0000 C CNN
    1    4100 3450
    1    0    0    -1  
$EndComp
Wire Wire Line
    4600 3350 5150 3350
Wire Wire Line
    5150 3350 6600 3350
$Comp
L AGND #PWR01
U 1 1 53771F97
P 2400 2400
F 0 "#PWR01" H 2400 2400 40  0001 C CNN
F 1 "AGND" H 2400 2330 50  0000 C CNN
F 2 "" H 2400 2400 60  0000 C CNN
F 3 "" H 2400 2400 60  0000 C CNN
    1    2400 2400
    1    0    0    -1  
$EndComp
Wire Wire Line
    4600 2450 5600 2450
Wire Wire Line
    2400 1350 2400 2100
Wire Wire Line
    2400 2100 2400 2400
Wire Wire Line
    6600 1150 6600 3350
Wire Wire Line
    6600 3350 6600 3600
Wire Wire Line
    5200 3850 4600 3850
Wire Wire Line
    5200 3650 5200 3750
Wire Wire Line
    5200 3750 5200 3850
Wire Wire Line
    5200 3750 6050 3750
Wire Wire Line
    4600 3650 5200 3650
Connection ~ 5200 3750
Wire Wire Line
    4600 4450 5900 4450
Wire Wire Line
    5900 4450 5900 3850
Wire Wire Line
    5900 3850 6050 3850
Wire Wire Line
    4600 3250 5150 3250
Wire Wire Line
    5150 3250 5150 3350
Connection ~ 5150 3350
Wire Wire Line
    2900 4150 3400 4150
Wire Wire Line
    2400 4150 2400 3750
Wire Wire Line
    2400 3750 3400 3750
Wire Wire Line
    5600 2450 5600 1350
Wire Wire Line
    5600 1350 2400 1350
$Comp
L CONN_4 P2
U 1 1 5377284A
P 1250 2900
F 0 "P2" V 1200 2900 50  0000 C CNN
F 1 "LOAD CELL" V 1300 2900 50  0000 C CNN
F 2 "" H 1250 2900 60  0000 C CNN
F 3 "" H 1250 2900 60  0000 C CNN
    1    1250 2900
    -1   0    0    -1  
$EndComp
Wire Wire Line
    1600 2950 3100 2950
Wire Wire Line
    3100 2950 3100 3550
Wire Wire Line
    3100 3550 3400 3550
Wire Wire Line
    1600 3050 2150 3050
Wire Wire Line
    2150 3050 2150 4350
Wire Wire Line
    2150 4350 3400 4350
Wire Wire Line
    1600 2850 3100 2850
Wire Wire Line
    3100 2850 3100 2100
Wire Wire Line
    3100 2100 2400 2100
Connection ~ 2400 2100
Wire Wire Line
    6600 1150 1900 1150
Wire Wire Line
    1900 1150 1900 2750
Wire Wire Line
    1900 2750 1600 2750
Connection ~ 6600 3350
$Comp
L AGND #PWR02
U 1 1 53772A79
P 5100 5150
F 0 "#PWR02" H 5100 5150 40  0001 C CNN
F 1 "AGND" H 5100 5080 50  0000 C CNN
F 2 "" H 5100 5150 60  0000 C CNN
F 3 "" H 5100 5150 60  0000 C CNN
    1    5100 5150
    1    0    0    -1  
$EndComp
Wire Wire Line
    4600 4750 5100 4750
Wire Wire Line
    5100 4750 5100 5050
Wire Wire Line
    5100 5050 5100 5150
$Comp
L +5V #PWR03
U 1 1 53772B1C
P 5550 4950
F 0 "#PWR03" H 5550 5040 20  0001 C CNN
F 1 "+5V" H 5550 5040 30  0000 C CNN
F 2 "" H 5550 4950 60  0000 C CNN
F 3 "" H 5550 4950 60  0000 C CNN
    1    5550 4950
    1    0    0    -1  
$EndComp
$Comp
L CSMALL C1
U 1 1 53772C92
P 5200 4950
F 0 "C1" H 5225 5000 30  0000 L CNN
F 1 "0.1µF" H 5225 4900 30  0000 L CNN
F 2 "~" H 5200 4950 60  0000 C CNN
F 3 "~" H 5200 4950 60  0000 C CNN
    1    5200 4950
    0    1    -1   0  
$EndComp
Wire Wire Line
    4600 4550 5300 4550
Wire Wire Line
    5300 4550 5300 5150
Wire Wire Line
    5300 5150 5550 5150
Wire Wire Line
    5550 5150 5550 4950
$Comp
L GND #GND04
U 1 1 53772F1C
P 5100 5500
F 0 "#GND04" H 5100 5500 30  0001 C CNN
F 1 "GND" H 5100 5430 30  0001 C CNN
F 2 "" H 5100 5500 60  0000 C CNN
F 3 "" H 5100 5500 60  0000 C CNN
    1    5100 5500
    1    0    0    -1  
$EndComp
Wire Wire Line
    6450 4600 6450 5800
Wire Wire Line
    6450 5800 4750 5800
Wire Wire Line
    4750 5800 4750 5350
Wire Wire Line
    4750 5350 5100 5350
Wire Wire Line
    5100 5350 5100 5500
Wire Wire Line
    6600 4600 6600 5950
Wire Wire Line
    6600 5950 4650 5950
Wire Wire Line
    4650 5950 4650 5050
Wire Wire Line
    4650 5050 5100 5050
Connection ~ 5100 5050
$Comp
L +5V #PWR05
U 1 1 53772FED
P 6450 3500
F 0 "#PWR05" H 6450 3590 20  0001 C CNN
F 1 "+5V" H 6450 3590 30  0000 C CNN
F 2 "" H 6450 3500 60  0000 C CNN
F 3 "" H 6450 3500 60  0000 C CNN
    1    6450 3500
    1    0    0    -1  
$EndComp
Wire Wire Line
    6450 3500 6450 3600
$Comp
L CONN_13X2 P1
U 1 1 53773C9C
P 10050 2600
F 0 "P1" H 10050 3300 60  0000 C CNN
F 1 "CONN_13X2" V 10050 2600 50  0000 C CNN
F 2 "" H 10050 2600 60  0000 C CNN
F 3 "" H 10050 2600 60  0000 C CNN
    1    10050 2600
    1    0    0    -1  
$EndComp
Wire Wire Line
    6850 3950 9450 3950
Wire Wire Line
    9450 3950 9450 3100
Wire Wire Line
    9450 3100 9650 3100
Wire Wire Line
    6850 4050 9350 4050
Wire Wire Line
    9350 4050 9350 3000
Wire Wire Line
    9350 3000 9650 3000
Wire Wire Line
    6850 4150 9250 4150
Wire Wire Line
    9250 4150 9250 2900
Wire Wire Line
    9250 2900 9650 2900
Wire Wire Line
    6850 4250 10650 4250
Wire Wire Line
    10650 4250 10650 3100
Wire Wire Line
    10650 3100 10450 3100
$Comp
L +5V #PWR06
U 1 1 53773FC0
P 8300 1100
F 0 "#PWR06" H 8300 1190 20  0001 C CNN
F 1 "+5V" H 8300 1190 30  0000 C CNN
F 2 "" H 8300 1100 60  0000 C CNN
F 3 "" H 8300 1100 60  0000 C CNN
    1    8300 1100
    1    0    0    -1  
$EndComp
$Comp
L GND #GND07
U 1 1 53773FCF
P 8700 2050
F 0 "#GND07" H 8700 2050 30  0001 C CNN
F 1 "GND" H 8700 1980 30  0001 C CNN
F 2 "" H 8700 2050 60  0000 C CNN
F 3 "" H 8700 2050 60  0000 C CNN
    1    8700 2050
    1    0    0    -1  
$EndComp
$Comp
L AGND #PWR08
U 1 1 53773FDE
P 8300 2050
F 0 "#PWR08" H 8300 2050 40  0001 C CNN
F 1 "AGND" H 8300 1980 50  0000 C CNN
F 2 "" H 8300 2050 60  0000 C CNN
F 3 "" H 8300 2050 60  0000 C CNN
    1    8300 2050
    1    0    0    -1  
$EndComp
Wire Wire Line
    10450 2000 10600 2000
Wire Wire Line
    10600 1350 10600 2000
Wire Wire Line
    10600 2000 10600 2100
Wire Wire Line
    10600 1350 8300 1350
Wire Wire Line
    8300 1350 8300 1100
Wire Wire Line
    10600 2100 10450 2100
Connection ~ 10600 2000
Wire Wire Line
    10450 2200 10700 2200
Wire Wire Line
    10700 2200 10700 1450
Wire Wire Line
    10700 1450 8700 1450
Wire Wire Line
    8700 1450 8300 1450
Wire Wire Line
    8700 1450 8700 2050
Wire Wire Line
    8300 1450 8300 2050
Connection ~ 8700 1450
Text Notes 1200 4750 0    60   ~ 0
Load cell : wheastone bridge\n1 : V in +\n2: V in  -\n3: V out +\n4: V out -\n\nSensibilité 2mV/V Emax=200kg
Text Notes 1200 5800 0    60   ~ 0
Amplification INA125\nG = 4 + 60e3/R1\nR1 = 121 Ohms G =500\nVref=10V SxVrefxG= 10V
Text Notes 1250 6400 0    60   ~ 0
Conversion 10bit\nLSB=Vref/1024 Vref=10V\nLSB=10mV\nn = 10V/10mV = 1000 point ou 0.2kg
$Sheet
S 8700 5250 500  150
U 537B2B50
F0 "picobber.sch" 50
F1 "picobber.sch" 50
$EndSheet
$EndSCHEMATC

Cool
Répondre
#8

(le retour du topic sans fin...de la mesure et du filtre)

Je progresse, je progresse.
Ma balance (de cuisine) a eu à faire avec mon fer à souder et après quelques réglages du gain de l'ampli, hop j'ai un (presque...) joli signal numérisé.
Vu que j'utilise node-red, je me suis fait un petit node spécialisé pour le mcp3008. Ça me permet de régler le channel, le mode (single ou diff) la fréquence de lecture puis d'envoyer le tout vers un websocket par exemple.

Ben là, je me rends compte que le signal est passablement bruité, un peu comme au bistrot qu'en y a du monde et que j'entends pas mon pote d'à coté. La solution première, c'est d'améliorer mon montage pour éliminer les poivrots (uh...) bruits. Mais là, j'ai déjà tout donné de mon savoir d'électronicien... Du coup, après quelques recherches sur le sujet, j'ai trouvé une soluce intéressante : le filtrage numérique. Allez savoir : ça peut servir à d'autres, hein?
Bref, tout ça sort de ce blog. Attention, ya du level en maths. Mais pour résumer la pensée magique et pour faire de l'algorithme efficient, voilà en gros les prototypes de quatre filtres numériques peu gourmand en calcul (oui parce que filtre =calcul = temps = ça rame sur ton rasp) :

On considère a(k) comme la k ieme valeur mesurée = entrée du filtre , c(k) comme la k ieme valeur calculé par le filtre = sortie du filtre, du coup a(k-1) est la valeur précédente, etc...

filtre par moyenne arithmétique le plus intuitif : on fait la moyenne des n dernières mesures. Plus n est grand, plus ça filtre, mais plus le décalage entre une variation significative du signal a et la sortie c du filtre est important. Nécessite de conserver la valeur précédente c(k-1) entre chaque calcul de c(k).
c(k) = c(k-1) + ( a(k) - c(k-1) ) / n

filtre rectangulaire Très efficace, mais nécessite de conserver (n+1) mesures glissantes et la valeur précédente c(k-1). De même, il faut trouver un compromis entre un n grand et le retard du signal.
c(k) = ( a(k) - a(k-n) ) / n + c(k-1)

filtre exponentiel Efficace et peu gourmand, il n'a besoin de conserver que c(k) -> c(k-1) entre chaque calcul. alpha est un nombre compris entre 0 et 1 à ajuster en fonction du besoin = fô essayer.
c(k) = ( 1 - alpha) * a(k) + alpha x c(k-1)

filtre triangulaire Le plus sophistiqué à mettre en oeuvre. j'y suis pas arrivé, mais je soupçonne une couille dans l'énoncé. J'ai pas contacté l'auteur du blog pour confirmer, mais bon, vu qu'il est analyste, je voudrais pas faire dévisser l'action de la société générale (c'est là qu'il bosse...)

Je ne donnerai pas mon code sauf si on me le demande et en mp : je code avec les pieds et j'ai trop honte du résultat. Pareil pour le node mcp3008.
Mais c'est facilement implantable quelque soit le language (dans mon cas javascript). Et c'est efficace.

Cool
Répondre
#9

(de la mesure et du filtre...le schéma)

J'ai fini par refaire mon schéma kicad. Comme je suis trop cool, le voici au format png :

[Image: 1402555821-loadcell.png]

C'est mon premier schéma sur kicad,... et mon premier schéma tout court. À prendre tel que.

Cool
Répondre
#10

(de la mesure et du filtre...à l'oscilloscope)

Suite à mon monologue sur les filtres numériques, une illustration par l'image des prototypes sus-mentionnés :
[Image: 1402558629-acquisitionloadcell.png]

Je diminue le bruit d'un facteur 2~3 (techniquement, ça représente un bruit de fond de l'ordre de qq µV...chose que mon multimètre ne sait pas mesurer) .

Au premier abord, on pourrait penser tout ça pour ça. Mais en fait, les filtres sont réglés avec des paramètres minimum. Je peut obtenir beaucoup mieux. Le revers du truc, parce qu'il y en a forcément un, c'est que si je filtre trop, le signal filtré peut être très en retard sur le signal brut lorsqu'on modifie la charge du capteur. L'illustration du truc :

[Image: 1402559428-acquisitionfront.png]

Pour ce test, je pose ma bouteille de punch-coco sur ma balance. Si je mate rapidement le signal filtré par moyenne (la courbe en bleue), je pourrais penser t'a déjà trop abusé du truc. Alors qu'en réalité, je pouvais me resservir! En conclusion, il faut faire un compromis entre le choix du filtre et son réglage pour éviter ce genre de catastrophe.

Pour la technique, j'ai généré ces graphiques avec l'excellent toolkit rickshaw, basé sur le non moins excellent d3. J'utilise ces deux bibli dans une page web avec un peu de javascript (que j'ai pas tout compris, mais ça marche). Le screenshot est réalisé avec screenshot {filename} dans la barre de commande de Firefox (MAJ+F2). Les données sont acquises en direct live façon oscilloscope par l'intermédiaire d'un websocket. Le websocket est propulsé par un flow node-red sur le raspberry :
[Image: 1402562632-flownode-red.png]

Cool
Répondre
#11

Je ne connaissias pas rickshaw, je vais regarder cela.. merci Wink
Répondre
#12

Bonjour.
Pour un soit disant type qui n'y connais rien en électronique c'est du beau boulot!!
Bon pour le problème de filtrage je vais faire une suggestion au vu du shéma électronique..
Il se peut que je me trompe étant moi même un charlatant.
Il est peut être plus judicieux de commencer par nettoyer le signal analogique avant d'utiliser un filtre numérique qui coûte en ressource sur la Framboise.
Pour cela des condensateurs, reliés à la masse, savamment mis sur les entrées différentielles (+) pour éliminer la HF et le 50Hz. Quelques pF ou nF pour la HF et ou uF pour le 50Hz avec un oscilloscope à la sortie de l'amplificateur ( broches 10 ou 11 du INA125P) pour voir et valider la modification puis un condensateur sur cette même sortie.
Seules problèmes:
-dans le temps les condensateurs peuvent dériver et encore seulement les chimiques.
-la sortie analogique réagira avec un temps de retard suivant les valeurs de condensateurs ajoutés mais l'ensemble réagira sûrement plus vite qu'un filtre numérique mais je pense que la vitesse de réaction n'est pas primordiale ici.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)