Création d'un ADC "médical"

Règles du forum
Cette section est dédié a vos projets, descriptions et demandes d'aide.
Merci de limiter le nombre de sujet par projets.
Lorsqu'un sujet deviens long vous pouvez éditer le premier message pour maintenir à jour le descriptif et garder en lisibilité
Avatar de l’utilisateur
jaj
Electrolab::Membre
Messages : 22
Enregistré le : 09 oct. 2018, 11:25

Création d'un ADC "médical"

Messagepar jaj » 14 nov. 2020, 13:46

Bonjour!
j'ai un petit projet sur lequel j'ai un peu du mal à avancer et je voulais demander si quelqu'un aurait envie de participer.
L'idée est de créer un ADC qui balance le signal sur un moniteur patient que nous utilisons à l'hôpital à des fins de recherche.
Ils s'agit de moniteurs Philips qui ressemblent à ça: https://www.youtube.com/watch?v=S7-RsqsrLwQ
Ces moniteurs disposent d'interfaces série qui permettent d'interconnecter des appareils tiers.
Pour plusieurs projets de recherche clinique, nous enregistrons les signaux du moniteur pour les analyser en offline a posteriori. L'avantage est que tous les signaux sont synchronisés et arrivent dans une même base de données. Le problème est que certains appareils que nous utilisons se contentent d'une sortie analogique et ne peuvent donc pas être connectés sur le moniteur. Nous devons donc enregistrer ces appareils en parallèle et ils se posent des questions de synchronisation avec les signaux des moniteurs. En effet, pour analyser certains signaux de manière conjointe ils doivent être synchronisés à la milliseconde près.
L'idée que j'ai eu est de créer une petite boîte avec un ADC qui parle avec le moniteur sur le port série pour balancer les signaux analogiques sur le moniteurs pour avoir tous les signaux sur un même écran et pouvoir les enregistrer synchronisés. Sur un port série je peux sortir jusqu'à 4 signaux à 125 Hz.
Petit bémol, le protocole série est proprio et j'ai du signer un NDA pour avoir la doc....
J'ai commencé à travailler sur ce projet l'année dernière et j'ai fait un petit proof of concept avec une implémentation du protocole sur AVR et un draft de PCB pour protéger les entrées analogiques. Malheureusement, je n'arrive pas à avancer sur tous les projets (COVID, encadrement des étudiants, etc., etc.). Et c'est dommage parce qu'on pourrait vraiment profiter de disposer de ce type de device...
Du coup, je me demandais si quelqu'un était intéressé pour travailler sur ce projet avec moi.

Voici comment j'imagine le tout:
- 4 entrées analogiques avec des prises Cinch / RCA et/ou Jack 3.5 mm.
- un circuit qui gère les entrées ADC (protection surtensions, etc) et qui le fait entrer dans l'AVR. Pourquoi pas un IC ADC dédié si c'est mieux que d'utiliser l'ADC de l'AVR. Je n'ai pas beaucoup d'expérience en la matière.
- l'AVR gère le protocole série et le temps réel.
- un linux embarqué sur un ARM (j'ai commandé un lichee pi zero avec un Allwinner V3S pour prototyper, pas encore reçu) qui communique avec l'AVR et aussi avec un ordinateur connecté en wifi pour injecter d'autres informations sur l'AVR (des états discrets, etc). Potentiellement j'ai envisagé qu'on puisse reprogrammer l'AVR en SPI depuis le système embarqué linux pour faire des mises à jour facilement.

Voici ce que j'ai fait jusqu'à là:
L'implémentation du protocole série sur AVR:
https://framagit.org/jaj/avr_ivoi

PCB pour les entrées analogique qui s'emboîte sur un Teensy++ 2.0:
https://framagit.org/jaj/pcb_ivoi

Dites-moi ce que vous en pensez.

Amicalement,
Jona
Avatar de l’utilisateur
Flax
Electrolab::CA
Messages : 1592
Enregistré le : 01 mars 2017, 20:46
Contact :

Re: Création d'un ADC "médical"

Messagepar Flax » 17 nov. 2020, 11:17

Salut,

Donc, si je comprend bien, l'idée est de faire une mini centrale d'acquisition avec 4 entrées analogique qui transmet les mesures sur le port série pour que le moniteur y affiche. Et si je comprend bien l'idée est que les signaux à synchroniser sont tous en analogique et donc l'interface va tous les acquérir ensemble pour qu'ils soient synchrone, et il n'y a pas d'autre système qui aurait des signaux numériques à synchroniser avec ces signaux analogiques, c'est bien ça ? Je pose la question parce que j'ai un doute en lisant ta description.

Pour ce qui est des choix techniques d'archi et autres, ce qui compte c'est de connaître le besoin en bande passante, plage de tension d'entrée, précision de la synchro, précision et résolution de la mesure.

Sur les MCUs standards, en général les ADCs intégrés ne sont pas terribles (12 bits, voir 10 bits de résolution, sampling à quelques dizaines de kHz pas plus, erreur de mesure élevée) mais peuvent suffire pour des applications simples. Mettre un ADC externe est nécessaire si il faut beaucoup d'entrées en plus (pas le cas ici, et même ça peut se gérer avec des multiplexeurs), ou plus de bande passante, ou plus de résolution, ou plus de précision.

Ici si tu es de toutes façons limité sur la bande passante en sortie. Donc si tu augmentes la résolution ça fait plus de bits à transmettre et donc moins de bande passante, mais je suppose que le moniteur est limité en résolution aussi ? A combien de bits ? Bon, acquérir à un fréquence et une résolution plus élevé que l'affichage final n'est pas inutile, c'est de l'over-sampling, et ça permet de garder de la marge et d'éviter les erreurs d'aliasing. Après, pas besoin non plus de trop surdimensionner. Généralement, on fait du Shannon et on double : fréquence d'échantillonnage x2 et résolution +1 bits (au moins).

Pour la syncrho, si le besoin c'est la milliseconde je pense que les ADCs intégrés seront suffisants. En général les acquisitions durent quelques dizaines de µs donc ça devrait passer large. A vérifier quand-même (je n'ai pas les valeurs en tête pour les AVR, je n'ai pas l'habitude de ces composants). Si il y a besoin de mieux, il faut regarder ce qu'il se fait en ADC dédié. La méthode "bourrine" classique c'est d'avoir un ADC dédié par canal et de gérer les acquisitions avec un FPGA, mais je pense que ça serait ultra-overkill vu les ordres de grandeur que tu donnes.

Pour l'archi rien de spécial, le MCU pour le temps-réel / la fonction principale et un carte de commande / remote avec un OS c'est ce qu'il faut faire.

Pour l'interface électrique il faut voir quels types de signaux il faut acquérir, quelles sont les plages de tensions, est-ce qu'il faut mettre des calibres réglables, ça dépend de l'usage. Et après il faut mettre quelques protections (des transils au moins pour les ESDs + limitation de courant en entrée pour les sur-tension), et un peu de conditionnement, qui dépend des signaux à mesurer.

Ça m'intéresse comme projet, je peux te filer un coup de main sur la partie électronique. Côté SW, AVR je connais pas trop (du tout) et Raspi idem, jamais joué avec donc je ne vais pas trop pouvoir t'aider. Mais il y a d'autres membres qui s'y connaissent mieux que moi.

Il y a quelques designs de pseudo-oscilloscopes (avec des bandes passantes ridicules genre 40kHz) +/- open-source dispo sur le net, basés sur Arduino. Ça peut servir de base.
Avatar de l’utilisateur
marc
Electrolab::Membre
Messages : 840
Enregistré le : 14 mars 2017, 15:05

Re: Création d'un ADC "médical"

Messagepar marc » 19 nov. 2020, 06:05

Bonjour
Il y a également des trucs "tout faits" également lourdement overkill, mais comme tout est compris, de l'ADC 14 ou 16 bits 125 MSPS, le fpga et un ARM associé, autant considérer cette option
https://www.redpitaya.com/Catalog/p20/s ... it?cat=c99
Marc
Avatar de l’utilisateur
lo2
Electrolab::Référent
Messages : 166
Enregistré le : 09 avr. 2016, 17:51

Re: Création d'un ADC "médical"

Messagepar lo2 » 19 nov. 2020, 19:00

Hello,

En ce moment je bricole un thermostat "IoT" avec des ESP32 sur le SDK arduino, c'est impressionnant de simplicité. En deux heures de tutos j'avais un thermomètre connecté en Wifi HTTP.

Apparemment l'ADC n'est pas top niveau linéarité, mais en calibrant avec une boucle DAC-ADC c'est beaucoup mieux il parrait. D'après la doc, il fait du multi canaux et peut sampler avec une périodicité donnée. Et possibilité upgrade du firmware OTA (Over The Air, donc mise à jour via wifi).

Tout dépend de la précision de la numérisation du signal que tu veux, mais ça peut peut-être suffire de prendre un module avec wifi type ESP32 ou autre (avec le circuit qu'il faut pour le signal analogique), plutôt que de brancher une raspi linux en plus.
Avatar de l’utilisateur
Flax
Electrolab::CA
Messages : 1592
Enregistré le : 01 mars 2017, 20:46
Contact :

Re: Création d'un ADC "médical"

Messagepar Flax » 20 nov. 2020, 10:26

Ouais les ADCs internes ce n'est pas très bon niveau métrologie. Après ça dépend aussi de la précision de la référence de tension utilisée. Et, oui, les erreurs de linéarité ça ne bouge pas trop dans le temps, donc ça se compense en software par calibration.
Ça rentre dans les critères pour décider ce qui est nécessaire : est-ce que la précision absolue est un paramètre important, est-ce que la linéarité est importante ? Ce n'est pas forcément facile à définir, il faudrait brainstormer un minimum sur les usages. Est-ce que l'on a besoin de précision dans l'absolu sur les valeurs de tensions mesurées, ou bien est-ce que l'on observe simplement des formes d'onde ? Je suspecte le deuxième cas. Et quelle est la déformation acceptable sur les formes d'onde ? Je suspecte que les signaux sont lents et que les éventuelles erreurs de linéarité d'ADCs standards intégrés seraient mesurables mais pas forcément dommageables. Si c'est pour faire du monitoring visuel, je pense que ça pourrait passer large.
Mais, encore une fois : il faut voir l'usage exact, peut-être que j'ai une vision trop optimiste et simpliste.
Avatar de l’utilisateur
jaj
Electrolab::Membre
Messages : 22
Enregistré le : 09 oct. 2018, 11:25

Re: Création d'un ADC "médical"

Messagepar jaj » 20 nov. 2020, 18:06

C'est bien au niveau hardware que j'ai besoin d'aide, côté soft ça va, j'ai déjà un proof of concept qui tourne.
Je reviens sur les besoins. Pour l'instant j'ai 3 appareils que je voudrais connecter:
- un appareil qui sort 0-2 V et sur lequel j'ai besoin d'une précision de 0.1 V
- un autre qui sort -0.6 jusqu'à 3.6 V sur lequel j'ai aussi besoin d'une précision de 0.1 V
- un autre qui sort du son audio line level, donc de l'ordre de 1.5V RMS (si je me souviens bien) mais qui est donc AC avec une moyenne à 0. Sur ce signal j'ai besoin de pouvoir dire quand le son démarre et quand il se termine, pas plus.
A chaque fois je suis limité en sortie à 125 Hz sur 16 bits maximum.
Donc les contraintes de performances sur l'ADC sont relativement faibles.
Par contre, dans les contraintes j'ai surtout.
- les tensions d'entrée peuvent être positives ou négatives, ce que je ne sais pas encore comment gérer
- j'ai besoin d'avoir de la fiabilité sur la valeur absolue de la mesure (à 0.1V près sur ces 3 exemples) et la forme de l'onde
- je veux que la protection soit bonne pour pas que quelqu'un le crâme à la moindre connerie

Je vais vous sortir quelques specs de constructeurs.

L'utilisation principale est de mesurer des flux dans des vaisseaux avec des dopplers qui sortent de l'analogiques. Le son c'est pour un projet avec l'IRCAM où on étudie l'influence de certains sons sur l'EEG et on veut savoir avec précision à quel moment le son commence pour voir à quel endroit chercher sur l'EEG.
Avatar de l’utilisateur
Flax
Electrolab::CA
Messages : 1592
Enregistré le : 01 mars 2017, 20:46
Contact :

Re: Création d'un ADC "médical"

Messagepar Flax » 22 nov. 2020, 19:01

0.1V ce n'est pas très exigeant. Sur de l'ADC standard en 5V / 10 bits on a une résolution de ~4mV, 5V / 12 bits on est au mV, avec quelques LSBs d'erreur, donc on est à 20mV d'erreur "typique" pour l'ADC seul. Et une précision absolue à 0.1V ... Ok, on est à plusieurs années lumière e la métrologie, donc ça va :p donc les ADCs intégrés d'un MCU devraient suffire largement.

Pour ce qui est des signaux négatifs, il faut soit utiliser des ADCs différentiels avec une alimentation différentiel, soit faire un petit circuit qui ajoute un offset. Dans le premier cas je doute que le petit AVR de l'Arduino n'ait ça. La deuxième solution nécessite tout de mème une alimentation symétrique, mais ça se fait bien avec des modules DC-DC tout faits genre chez Traco / Murata, et un peu de régulation derrière pour filtrer le bruit de découpage. Et comme c'est pour du signal, il y a besoin de peu de courant donc un petit module fera le taf. Le circuit d'offset c'est un simple additionneur à résistances ou à ampli-op, pour re-centrer le signal autour d'une valeur positive. Je pense qu'il y en a pour moins de 10€ sur un tel circuit, tout compris.

Recherche en 2-2 sur google pour avoir une idée : https://forums.parallax.com/discussion/download/90087/analog.jpg version "simple" avec offset passif.

Le schéma de celui-là est pas mal : https://www.instructables.com/DPScope-Build-Your-Own-USBPC-Based-Oscilloscope/ ya tout ce qu'il faut en mise à l'échelle et protections, au lieu d'entrer sur un ADC on peut entrer en direct sur l'ADC du MCU. Réglage de l'offset avec un DAC c'est luxueux, potentiomètre ou trimmer + ampli-op pour faire buffer ça suffit. A moins que le réglage de l'offset par SW soit utile ? Dans ce cas j'aurais tendance à vouloir le faire avec juste PWM + filtrage, mais ça va peut-être rajouter du bruit, donc DAC ptet mieux.

Pour l'alim : https://fr.farnell.com/murata-power-solutions/nma0512sc/convertisseur-dc-dc-1w-12v/dp/1021431 pour faire du +/-12V à partir de 5V repiqués sur l'arduino + 7805 / 7905, ou 7809 / 7909 pour avoir +/-9V en entrée, ce qui donnerait un peu de marge (et diminuerait les contraintes sur les ampli-ops).

Pour la détection du signal audio, comptes-tu faire la détection en SW ? Ou il faut un détecteur de crête ? Et quelle est la bande passante, les seuils éventuels et le temps de réponse requis ? Un détecteur de crête ça peut être très simple (AOP + diode + capa) ou très compliqué, tout dépende de la perf' qu'on veut. Et quel est le "format" de la détection ? (genre juste un seuil et on a un signal qui passe à 1 quand on dépasse le seuil ou plus compliqué ?)
Avatar de l’utilisateur
jaj
Electrolab::Membre
Messages : 22
Enregistré le : 09 oct. 2018, 11:25

Re: Création d'un ADC "médical"

Messagepar jaj » 27 nov. 2020, 11:58

Merci beaucoup Flax pour ces renseignements.

Pour l'ADC différentiel, j'ai l'impression que le MCU en dispose:

https://ww1.microchip.com/downloads/en/ ... asheet.pdf

Page 268 on peut lire
26. ADC – Analog to Digital Converter
26.1 Features
[...]
14 Differential input channels
4 Differential Input Channels with Optional Gain of 10× and 200×
[...]

Peut-être que ça serait pratique d'avoir un offset réglable mais il faut pouvoir connaître l'offset avec précision parce que je dois connaître la grandeur des valeurs mesurées. Donc un potentiomètre c'est peut-être trop pifométrique? Surtout je dois pouvoir mettre l'offset à 0. Peut-être la solution serait un circuit qui met l'offset au milieu de la plage de mesure et un bouton pour shunter le circuit. Ainsi avec le bouton on choisit de mesurer en AC ou DC.

Peut-être qu'il faudrait aussi une référence externe pour l'ADC? L'alim 5V vient souvent d'un DC-DC avec beaucoup de bruit et la référence interne du MCU à 2,56V n'est pas très fiable en valeur selon la doc et réduit la plage de mesure de 0-5V à 0-2,56V.

Pour le son mon but était uniquement d'enregistrer le signal brut et après je fais une analyse en SW en offline pour détecter les crètes. Donc je dois uniquement m'assurer de pouvoir détecter le signal avec l'ADC, pas le traiter.
Avatar de l’utilisateur
NicoM
Electrolab::Membre
Messages : 175
Enregistré le : 01 mars 2017, 16:05
Localisation : Paris
Contact :

Re: Création d'un ADC "médical"

Messagepar NicoM » 27 nov. 2020, 12:57

jaj a écrit :Pour l'ADC différentiel, j'ai l'impression que le MCU en dispose:
[...]
26. ADC – Analog to Digital Converter
26.1 Features
[...]
14 Differential input channels
4 Differential Input Channels with Optional Gain of 10× and 200×
[...]


Je pense qu'il y a confusion sur le terme "différentiel". Flax l'employait dans le sens où le convertisseur doit pouvoir accepter des tensions négatives, dans le cas du microcontrôleur il s'agit de paires d'entrée et la tension convertie est la différence entre les deux entrées. Je pense que si tu cherches les caractéristiques électriques du composant tu trouveras que les tensions sur ces entrées ne doivent pas descendre sous 0 V (peut-être même 0,7 V) ni dépasser la tension d'alimentation.

Nico M.
Avatar de l’utilisateur
Flax
Electrolab::CA
Messages : 1592
Enregistré le : 01 mars 2017, 20:46
Contact :

Re: Création d'un ADC "médical"

Messagepar Flax » 27 nov. 2020, 21:44

Oui, je confirme ce que dit NicoM : les entrées "différentielles" sur un ADC de MCU c'est assez courant, mais en fait ça veut juste dire qu'il permet de faire la mesure entre deux points plutôt qu'entre un point et la masse, ce qui peut être préférable pour faire de l'instrumentation - ce qui est sans doute le cas ici. Par contre ça ne veut absolument pas dire qu'il peut mesurer des tensions négatives. Sauf cas particuliers dont les ADCs ne font pas partie, un composant actif ne peut traiter sur ses entrées que des signaux qui sont à l'intérieur de sa plage d'alimentation. Un composant alimenté en 0-5V ne pourra jamais traiter de signaux inférieurs à sont 0V ou supérieurs à sont 5V. Le seul moyen de "voir" ces signaux c'est:
- Soit de couper la composante continue et de re-polariser le signal quelque part au milieu de sa plage d'alim. C'est très utilisé pour les signaux audio, et d'ailleurs le choix des condensateur de filtrage du DC sont souvent sujet à controverse. L'inconvénient de cette méthode c'est qu'on fait un passe bas à très basse fréquence et on perd totalement la valeur moyenne du signal. Il n'y a que le signal AC qui passe. Ca ne pose pas de problème en audio vu que l'oreille humaine ne "capte" pas le DC (rien en-dessous de ~20Hz), mais pour d'autre signaux ...
- Soit il faut décaler le signal, soit en passif avec un pont résistif - ce qui peut interagir avec l'impédance du "capteur" - soit avec un circuit actif qui va ajouter un offset, ce que j'envisageais dans mon message précédent. Cette méthode a l'avantage d'être plus fidèle, mais de devoir connaître à l'avance l'offset à corriger, et aussi il faut que le circuit d'offset puisse traiter le signal négatif, donc il doit avoir une alim "décalée" par rapport à l'ADC qui est consommateur du signal "offsetisé".
Donc tout dépend du signal que tu dois observer. Soit tu ne t'intéresse qu'au signal AC, et que la moyenne du signal ne t'intéresse pas, dans ce cas condo en série pour couper le DC et on re-polarise avec un pull-up à la moitié de la tension d'alim de l'ADC (classique en audio), soit il te faut l'offset d'une façon ou d'une autre et là il faut un circuit d'offset. Mais vu ce que tu dis, visiblement la moyenne ne t'intéresse pas, juste la forme d'onde, donc ptet la première solution te conviendrait ?

Pour ce qui est des références de tensions, je ne l'ai pas évoqué parce que si ton besoin c'est 0.1V de résolution, le bruit de l'alim a peu de chances d'être un problème. Mais bon, oui on peut ajouter une ref de tension pour être plus précis, genre LM4040 ou LM4050.

Retourner vers « Les Projets »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité