呼吸机的原理和分类
作者:东兴研究圈
呼吸机为治疗呼吸衰竭患者重要手段。呼吸机用于机械辅助通气,实现帮助患者正常呼吸。当患者呼吸功能失常时,呼吸机可以模仿人的呼吸速率将含氧量不同的气体(21%-100%)送进肺部,并规律性地进行气体交换,帮助患者改善缺氧、二氧化碳滞留状态。
医用呼吸机为三类医疗器械,常规家用呼吸机为二类医疗器械。根据 2017 年版《医疗器械分类目录》来看,家用呼吸支持设备(非生命支持)、睡眠呼吸暂停治疗设备属于二类医疗器械,一般用于家庭;治疗呼吸机(生命支持)、急救和转运用呼吸机、高频呼吸机、家用呼吸机(生命支持)属于三类医疗器械,兼具无创与有创的连接方式,多在医疗机构使用。有创呼吸机主要用于治疗重度呼吸衰竭的无意识患者,无创呼吸机是针对有呼吸意识的呼吸衰竭高危患者。从连接方式来看,主要为有创与无创呼吸机。无创呼吸机主要用于重症家监护病房、普通病房、家庭,治疗轻中度呼吸衰竭患者;有创呼吸机一般用于重症监护病房,治疗重度呼吸衰竭患者。
关键芯片技术壁垒高,决定呼吸机质量优劣与使用效果。以医用有创呼吸机来看,按照核心技术难度、供气方式分为低中高档,关键芯片技术决定了呼吸机质量的优劣。其中高档产品主要为外资产品,高档呼吸机运营的稳定性好,可靠性高,价格约为 35-40 万元,中档价格次之,价格约为 20-25 万元。
美敦力PB560呼吸机的公开资料
作者:朱玉龙/汽车电子设计微信公众号
为缓解呼吸机供应短缺,将便携式的PB560呼吸机设计图纸全部开源,包括了软件、硬件(BOM+PCBA)、和结构图纸。如下图所示,我们可以理解下这个呼吸机包含哪些东西。呼吸机的基本功能为是辅助病人呼吸,包括辅助供氧的气路压力控制、整个回路的压力监控、回路的湿度监控,这些是基于医学的一套需求功能。在实际工作中,由于和人的性命相关,整个系统页包含自身的故障诊断功能,包括供电的高、低压报警、病人的窒息报警、湿度过高/过低报警,流速监控报警、供氧基本管路报警、呼吸机供电系统报警、电池系统故障报警、通讯报警等。
美敦力的呼吸机基本功能
根据PB569里面的几块板子,包括Power Supply Board、Power Pack2、BuzzerBoard、CPU Board和电池板,整个系统结构是比较简单的。核心的就是我们之前汽车ECU里面,输入传感器检测和输出阀门和基于PWM的气泵控制。
美敦力呼吸机电子控制原理图
这个产品的难度,如下图所示,由于这个市场是稳定的,需要强管制的产品。即使是美敦力开源,从PCBA的打样、找部件、烧录软件,这个工作需要挺长一段时间才能把产量提高,而且这些元器件设计选型可能比较老,在当前的条件下,你想批量的按着现有的材料造出来,还比较困难。
呼吸机的供电整理
开源原理图、PCB
作者:公众号作者『strongerHuang』(黄工)
从上面下载的第一部分,解压可以看到这个一个文件夹:Electrical Schematics,这里面就是相关的原理图。包含CPU、电源、蜂鸣器等一些板卡的原理图。
在下载的第二部分里面包含PCB文件,你会发现CPU的封装类型:
通过原理图和PCB,再结合公开的源文件(BOM),可以确定CPU的具体型号为:ST10F276Z5T3.
(当然,开源的PB560呼吸机使用的控制器芯片除了ST10F276Z5T3芯片之外,还使用了另一款MCU (PIC18F66)作为电源管理控制器,同时还使用了CY7C67300控制器作为USB HOST)
通过以上分析可以得出,开源的PB560呼吸机使用的CPU具体型号为ST10F276Z5T3。今天的STM32是在早期的ST10、STR7等产品的基础上发展而来,今天的STM32和早期的产品一样,发展出了多个系列。虽然部分早期的产品现在还在供货,但是,STM32已经替代了早期的产品,一些工具也不再更新,所以,现在不推荐大家使用早期的产品了。
ST10系列是ST意法半导体的具有DSP功能的高性能16位CPU,采用0.18μmCMOS技术,最大64MHz时钟。ST10系列相比之前ST6、ST7系列MCU更新,目前官方还能找到一些相关资料。
ST10F276Z5网址:
https://www.st.com/en/microcontrollers-microprocessors/st10f276z5.html
引脚信息:
通过该引脚信息和上面原理图对比,能发现引脚完全对应,通过上面框图可以看见ST10系列MCU资源还是挺丰富,官方也有资料和推荐开发工具:
Keil C166开发环境
PB560呼吸机公开的源代码(ST10F276)使用的集成开发环境就是Keil C166,这个开发环境和我们使用Keil C51、 MDK差不多,只要你会其中一个,再去使用 Keil C166 就没有难度。
1. Keil C166支持的芯片
Keil C166相对于Keil C51、 MDK要小众一点,主要是支持一些16位的MCU产品:
Infineon(英飞凌)的C16x、 ST10、 XC16x系列;
Micronas(微开半导体)的C16x、 ST10、 XC16x系列;
ST(意法半导体)的C16x、ST10、XC16x系列;
具体请参看:
http://www.keil.com/c166/chips.asp
2. Keil C166开发环境
下载地址:
https://www.keil.com/download/product/
Keil的相关下载安装和使用,可以参看的我整理的Keil系列教程,后台回复“Keil系列教程”查看更多内容。
当然,ST10F276控制器除了Keil,还可以使用Altium的TASKING工具进行开发。
软件源代码
PB560呼吸机公开的源代码有点多,这个工程其实挺大的,占用空间大小约18M,有1400+个文件。
我自认我去年配置的台式电脑配置也不差(9代处理器 16G内存 SSD),结果,编译了1分53秒(当然,与编译器、代码结构等有关):
编译后的代码量:550K左右。
main函数源代码:
- void main(void){ XPEREMU = 0x05AC;
- MAIN_Target_Init();
- #ifdef MEM_TEST PUST_Checks((UBYTE)FALSE, PUST_RAM_CHECK_REQ);
- PUST_Checks((UBYTE)FALSE, PUST_FLASH_CHECK_REQ); #endif
- #ifndef _TASKING
- PUST_Checks((UBYTE)FALSE, PUST_REF_VOLTAGE_CHECK_REQ); #endif
- MAIN_End_of_init = FALSE;
- MAIN_Global_Variables_Init();
- IEN = 1;
- MAIN_Interfaces_Second_Init = FALSE;
- MAIN_Interfaces_Init();
- DRV_NAND_ReadID();
- MAIN_NAND_Flash_Bad_Block_Detection();
- MAIN_NAND_Flash_Bad_Block_Read();
- MAIN_Leds_Backlight_Buzzers_StartControl();
- MAIN_Version_Error_Mngt();
- MAIN_Airox_Symbol_Display();
- TIM_Temporize(1000000);
- MAIN_Interfaces_Second_Init = TRUE; MAIN_Interfaces_Init();
- MAIN_Tasks_Init();
- MAIN_End_of_init = TRUE;
- if ( (INHIB_DETECTED == FALSE) && (EEP_DB_Config[VENTIL_REQ_U16] == FALSE) && (EEP_DB_Config[ADJUST_KEYLOCK_U16] == FALSE) ) { DB_EventMngt(EVENT_MAINTENANCE_MENU_ACCESS); SETUP_HMI_Start(); DB_ControlWrite(MAINTENANCE_MODE_U16, TRUE); while (1) { SCHED_Setup_Main(); } } else if ( (KEY_Touch_Detection(KEY_CODE_NAVIG) == TRUE) && (EEP_DB_Config[VENTIL_REQ_U16] == FALSE) ) { DB_EventMngt(EVENT_CIRCUIT_CHECK_MENU_ACCESS); CIRCUIT_CHECK_HMI_Start(); DB_ControlWrite(CIRCUIT_CHECK_MODE_U16, TRUE); while (1) { SCHED_Setup_Main(); } } else { VENTILATION_HMI_Start(); while (1) { SCHED_Ventilation_Main(); } }}
为什么工程那么大,通过源代码你会发现包含的内容其实挺多:ADC、 SPI、 UART、 USB、TIMER、POWER、存储、显示······等。
美敦力开放的源文件需要遵循一定许可协议,供同行参考和借鉴。设计源文件公开地址:https://www.medtronic.com/us-en/e/open-files.html
填写相关信息,并遵循相关的许可,就可以直接下载公开的设计源文件了。到目前(2020-04-08)公开了5部分设计源文件:
社区本地下载:https://mbb.eet-china.com/download/z/1.html,除了第四部分(BOM表)文件太大没有上传。
包括制造夹具,印刷电路板图纸,BOM和3D CAD文件。 4月1日,发布了软件源代码文件。4月3日发布了带有其他BOM和其他信息的最终文档包。
特斯拉的原型呼吸机
作者:朱玉龙/汽车电子设计微信公众号
特斯拉的工程师团队是非常灵活和有意思的,因为呼吸机的原理如视频所说,其实并不复杂,使用车用的HVAC系统,转变到呼吸机的要求,需要一些时间。他们的做法,就是使用车上的部件,根据系统原理图进行重组,这里分为车用原有部件、其他部件(主要是检测传感器)和医疗部件,下面是特斯拉做的总体结构框图。如上面所说的,核心的问题是控制氧气的输入压力和整体的流量、压力和湿度控制。
图4 特斯拉呼吸机的框图
特斯拉其实跳过了美敦力用嵌入式系统来控制单个控制器,采用了Model 3/Y上的娱乐系统来进行顶层控制(在这个里面,特斯拉基于Linux开发),传感器和驱动部分,使用车身控制器(包含VC Front和VC Right两个,一个是配电功能+一个控制功能)来控制可变阀门交换信息,并且根据自己的系统GUI开发,快速在15寸屏上做系统的交互,进行调节气压、流量、气量的操作。 备注:这套原型系统是具备12V电池+外部接入的电源
图5 特斯拉的呼吸机控制部件
其实我的理解,这种偏向于集成化的系统架构,以后在车上是比较普遍的,大众/奥迪所提倡的End to End(E2E)的架构,开发的核心还是自己的信息系统OS,假定在ID3上这么魔改,我们也能快速的得到一套基于车载域控制器的系统,理论上这个开发时间可能比我们在底层ECU上面改起来更快一些,特别是不算特别实时的任务。
图6 奥迪的E3电子架构
来源:东兴研究圈,朱玉龙/汽车电子设计微信公众号,公众号作者『strongerHuang』(黄工)