The C_Controller subdirectory contains the code for Controller v2 that is currently being tested on the final hardware (mechanic+electronic).
Integration is performed on master using Pull Requests from feature/fix branches that can be contributed from anyone with an accompanying issue describing the fix/enhancement contributed.
Merge into master is based after verification on either the simulated environment (for highlevel code with unit tests) or the final hardware available at MinMaxMedical premises. Verification priorities are set by MinMaxMedical but can always be discussed by mail or on teams/discord channels.
- Board: STM32 Nucleo
- IDE: STM32Cube : https://www.st.com/en/development-tools/stm32cubeide.html
- Toolchain: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads/7-2018-q2-update
- Compiler: GCC 7
NB: C_Controller project allows to test part of the code in simulated environments more or less close to the target based on C99 GCC 7 compiler
Sensors, electro-valves and controller
![recovid-synoptique](image/high level synoptique.jpg)
Nom | definition | range | resolution |
---|---|---|---|
Paw | pression voie aerienne (en cmH20) | -2 ; 100 | 0.1 |
QPatientSLM | debit patient a 21°C et 1013hPa | -200 ; 200 | 0.1 |
QPatientBTPS | debit Patient a 37°C, Pression ambiante et 100% Humidite (breath Temperature and pressure saturated) | -200 ; 200 | 0.1 |
RawO2 | tension qui sort de la cellule O2 | ||
PAtmo Pression atmospherique (exprime en hpa) | 0-1200 | 1 | |
VTi | volume tidal inspiratoire (ml) | 0-1500 | 1 |
VTe | Volume tidal expiratoire (ml) | 0-1500 | 1 |
Nom | definition | range | resolution | defaut |
---|---|---|---|---|
VT | Volume (de marée) (ml) | 300 ; 800 | 10 | 500 |
PEPs | Pression expiratoire positive setting(cmH2O) | 0(off) ; 15 | 1 | 5 |
FR | Frequence Respiratoire (bpm) | 12 ; 35 | 1 | 15 |
VMax | Debit de pointe (L/Min) | 30 ; 90 | 1 | 60 |
TPlat | Temps de plateau (ms) | 0 ; 200 | 10 | 50 |
Setting calculé:
Nom | definition | range | resolution |
---|---|---|---|
Ti | Temps d'inspiration(seconde) = VT(en L)/VMax(L/Min) | 0;2 | 0.01 |
Nom | definition | range | resolution | defaut |
---|---|---|---|---|
VTe Min | Volume expiratoire minimum (en ml) | 0 ; 800 | 10 | 400 |
Pmin | Pression de pointe minimum (cmH2O) | 2 ; 60 | 1 | 20 |
Pmax | Pression de pointe maximum (cmH2O) | 12 ; 90 | 1 | 60 |
en continu (1kHz) on lit Paw et QPatientSLM
en continu (1Hz) on lit RawO2 et PAtmo
- O2Concentration = RawO2*Gain
- QPatientBTPS = QPatientSLM * 1013/(Patmo-62,66) * (310°K/294°K)
- VTi = integral de QPatientBTPS durant toute l'inspiration et a l'expiration jusqu'a ce que le debit repasse en negatif
- VTe = integrale de QPatientBTPS durant le reste du temps (Q negatif et positif)
- VMi = somme des 8 derniers VTi * frequence respiratoire/8
- VMe = somme des 8 derniers VTe * frequence respiratoire/8
- PEP = moyenne de Paw durant les 100 derniere ms de l'expi
- PPlat = moyenne de Paw durant les 50 derniere ms du plateau ou de la pause inspiratoire
- PPeak = max de Paw durant inspiration + 100ms
- FiO2 = moyenne de O2Concentration sur le cycle
- Vol_ = integrale QpatientBTPS entre le debut de l'inspiration et celle du cycle d'apres
Inspiration :
- on ferme l'electovalve I/E (Valve expi connecte a la sortie du ballon)
- on actionne le ballon pendant le temps Ti a la vitesse determiné (pas de controle durant le cycle)
- apres le Ti on commence a faire revenir le ballon mais on garde l'electrovanne fermé durant le temps de plateau ou le temps de la pause inpiratoire (tant que le medecin a le bouton appuyé et au maximum durant 5s) puis passage a l'expiration.
- si Paw > PMax alors on passe directement en expiration.Attention pas de regulation du volume a part a la baisse dans ce cas là
Expiration
- On ouvre l'electrovanne (plutot simple)
- si le medecin appuie sur pause expiratoire on ferme l'electrovanne tant qu'il est appuye dessus. Quand il relache on repart en inspi directement. la duree maximum de la pause expiratoire est de 5s.
cycle a cycle pour la PEP et le VT
- on ajuste la commande de PEP une fois qu'on a la mesure du cycle (a la fin de l'expi pour avoir le temps d'atteindre la pression de commande)
- pour le VT on va ajuster le nombre de tour de consigne (attention a ne pas compenser tout d'un coup)
Pour le moment je pense qu'il faut avoir une vitesse constante. je ne pense pas qu'il soit necessaire de viser une forme de debit precise.
une alarme est compose de deux elements :
- une alarme audible en utilisant https://www.digikey.fr/product-detail/fr/mallory-sonalert-products-inc/MSS5MMG/458-1405-ND/5418608
- une alarme visuelle
pour le moment (avant formalisation de l'analyse de risques) on a deux niveaux d'alarme: l'alarme audible est gere entierement par le composant mallory (il suffit d'activer la bonne entree) l'alarme visuelle est gere en pilotant des LED
Priorite | couleur | Fréquence de clignotement | Rapport cyclique |
---|---|---|---|
High | rouge | 1,4 Hz à 2,8 Hz (on va dire 2Hz) | 20 % à 60 % en marche (on va dire 50%) |
Medium | Jaune | 0,4 Hz à 0,8 Hz (on va dire 0.5Hz) | 20 % à 60 % en marche (on va dire 50%) |
attention il faut que le voyant soit visible à 4 m
Priorite | Activation | deactivation | Action |
---|---|---|---|
Haute | on alarme si durant 2 cycle consecutif Paw >= max(PMax, PEPs+10). | on arrete l'alarme si durant un cycle complet Paw <PMax | si Paw > max(PMax, PEPs+10) alors on passe directement en expiration. Attention pas de regulation du volume a part a la baisse dans ce cas là |
Priorite | Activation | deactivation | Action |
---|---|---|---|
High | on alarme si durant 15s consecutive PPeak < Max(PMin, PEPs+2). | on arrete l'alarme si PPeak >Max(PMin, PEPs+2) |
Priorite | Activation | deactivation | Action |
---|---|---|---|
High | on alarme si durant 3 cycle consecutif PEP > PEPs + 2 cmH2O. | on arrete l'alarme si PEP < PEPs + 2 cmH2O |
Priorite | Activation | deactivation | Action |
---|---|---|---|
Medium | on alarme si apres les 8 premiers cycle de la ventilation, durant 3 cycle consecutif PEP < PEPs - 2 cmH2O. | on arrete l'alarme si PEP > PEPs - 2 cmH2O |
Priorite | Activation | deactivation | Action |
---|---|---|---|
Medium | on alarme si durant 3 cycle consecutif VTe < VTe Min. | on arrete l'alarme si VTe > VTe Min |
Priorite | Activation | deactivation | Action |
---|---|---|---|
Medium | on alarme si durant 3 cycle consecutif VTe < VT+100mL. | on arrete l'alarme si VTe < VT+100mL |
c'est une procedure a part ou l'on met la cellule O2 à l'air (pendant 2minute au minimum) et on prend la valeur RawO2 et Patmo a la fin des 2 minutes. a faire avant le debut de la ventilation probablement en assurant un passage d'air devant la cellule pour flusher toute trace d'O2.
Effects of gas mixtures and humidity on the sensor signal
Connector Interface for SFM3x00-AWand SFM3300-DFlow Sensors
Pneumotach setup with a differential pressure sensor. According to the datasheet, de pressure difference is around 5mbar @ 180L/min.
Note : the pneumotach mentioned above has a flexible flapper. Hence, its deltaP response is not linear to flow. We might have to calibrate thoroughly if high flows are to be accurately measured. ref
Differential pressure sensors ordered:
HSCDRRD006MDSA3 SPI, +-6mbar
SP610-500pa I2C, +-5mbar
Honeywell HSC series (all selected are i2c):
1psi differential: HSCDDRD001PD2A3, HSCDRRN001PD2A3
1psi gage: HSCDLND001PG2A3, HSCDRRD001PG2A5
Honeywell APB series:
Amphenol:
1psi differential : NPA-700B-001D
1psi gage : NPA-700B-001G
All are I2C/SPI MM5611
Bosh bmp280
Bosh bme280