Controller v2
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.
Controller Target
- 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
Controller Specifications (partial)
Sensors, electro-valves and controller
Recovid-synoptique
![recovid-synoptique](image/high level synoptique.jpg)
lexique
Mesure
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 |
Setting
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 |
Alarme
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 |
principe de fonctionement
sensing
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
therapie
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.
regulation
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.
Alarme
general
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
Pmax
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à |
Pmin
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) |
PEP Haute
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 |
PEP basse
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 |
VTmin
Priorite | Activation | deactivation | Action |
---|---|---|---|
Medium | on alarme si durant 3 cycle consecutif VTe < VTe Min. | on arrete l'alarme si VTe > VTe Min |
VTmax
Priorite | Activation | deactivation | Action |
---|---|---|---|
Medium | on alarme si durant 3 cycle consecutif VTe < VT+100mL. | on arrete l'alarme si VTe < VT+100mL |
Calibration O2 (si on a une cellule O2)
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.
Sensors
Airflow Sensor
Embedded high end solution
Effects of gas mixtures and humidity on the sensor signal
Connector Interface for SFM3x00-AWand SFM3300-DFlow Sensors
DIY solution
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
Paw sensor
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
Patmo, Tatmo sensor
All are I2C/SPI MM5611
Bosh bmp280
Bosh bme280