1.体积足够小,足够便携。让用户对他的体积重量的感知尽可能的低。
2.设备足够安全。所有与医疗有关的设备,无论是医疗东西,还是赞助诊断设备,都要担保不对利用者的安全有不好的影响。更不能有危险的存在。
3.设备代码有保护,不会轻易被别人所复制。不会产生设计了一个产品,然后被人轻易读出代码,然后抄板复制。

基于以上几点,我设计了这一款12导联的心电仪。
硬件部分,采取STM32F103作为主控,ADS1298作为心电波形采样主芯片。美信的DS2411R作为软件加密芯片。ADI的ADP151作为供电的LDO。利用3节干电池作为供电,这样安全性比较高。利用蓝牙进行通信,支持TF卡功能。
软件部分:可利用蓝牙实时上传采集到的心电数据,并可以利用对应的吸收软件解析出来。也可将心电数据保存到TF卡里面,然后把文件读出来解析出干系数据。板子预留一个按键可以作为扩展功能利用,比如紧急呼叫,一键停息或者开始,关照设备上传数据到云端。
上位机部分:利用C#编写,可以吸收设备上传的旗子暗记,能够显示12条导联波形,显示设备当前电量,得到按键状态等功能。用于赞助测试以及演示利用。该项目原来操持还有一个手机真个软件,受限于韶光并没有完成。
最开始操持利用ADAS1000加MAX32660然后利用LTC6655作为仿照部分基准芯片,放弃的缘故原由也很大略,本钱太高了,远远超出预算。末了选择了当前展示的方案。
项目用到的仪器器件仪器
1.心电仿照器:可产生1Hz的方波旗子暗记,60BPM的正常心电波形,100BPM心电波形。
2.示波器:用于采集仿照端输出的旗子暗记,以及判断通信波形是否正常。
3.万用表:用于丈量板子电源是否正常事情,以及干系功耗性能测试。
器件1.ADI的ADP151
超低功耗,超低压差的LDO芯片,用于给ADS1298供应3.3V的仿照电源。性能非常精良。200 mA负载时事情电源电流低至265 μA,因此ADP151适宜电池供电的便携式设备。
2.美信的DS2411R
非常经典的加密芯片,通过单总线接口可以巷设备供应一个唯一ID用于加密功能,当然,比起目前可以将部分代码放到加密芯片里面的新型加密芯片来说,DS2411R是有一点掉队,不过SOT23-3的封装,加上目前出开盖外没啥有效的破解手段的缘故原由。利用这个芯片还是完备能够应对此项目的需求的。
3.ADS1298:
8通道、24位仿照前端。与普通的模/数转换芯片比较,ADS1298更多的上风在于其便携性、紧凑性、低功耗性。该芯片的集成特性包括8路独立的PGA和24b ADC,右腿驱动电路以及电极检测等。
关键代码与解释1.ADS1298驱动代码
ADS1298_SPI_Init();ADS1298_CS_L;delay_us(1);SPIx_ReadWriteByte(ADS1298_SDATAC);while(device_id != 0x92) //识别芯片型号,1298为0x92{ device_id = ADS1298_SPIReadReg(ADS1298_ID);// printf("ID:0X%02X\n",device_id); delay_ms(100);}ADS1298_SPIWriteReg(ADS1298_CONFIG1, 0X46); //LP 250 0XC6); //HR 500 //ADS1298_SPIWriteReg(ADS1298_CONFIG2, 0X34);ADS1298_SPIWriteReg(ADS1298_CONFIG3, 0XCC);ADS1298_SPIWriteReg(ADS1298_LOFF, 0X33);ADS1298_SPIWriteReg(ADS1298_CH1SET, 0X60); //12 正常ADS1298_SPIWriteReg(ADS1298_CH2SET, 0X60); ADS1298_SPIWriteReg(ADS1298_CH3SET, 0X60); ADS1298_SPIWriteReg(ADS1298_CH4SET, 0X60); ADS1298_SPIWriteReg(ADS1298_CH5SET, 0X60); ADS1298_SPIWriteReg(ADS1298_CH6SET, 0X60); ADS1298_SPIWriteReg(ADS1298_CH7SET, 0X60); ADS1298_SPIWriteReg(ADS1298_CH8SET, 0X60); ADS1298_SPIWriteReg(ADS1298_RLD_SENSP, 0X00);ADS1298_SPIWriteReg(ADS1298_RLD_SENSN, 0X00);ADS1298_SPIWriteReg(ADS1298_LOFF_SENSP, 0X00);ADS1298_SPIWriteReg(ADS1298_LOFF_SENSN, 0X00);ADS1298_SPIWriteReg(ADS1298_PACE, 0X01);ADS1298_SPIWriteReg(ADS1298_CONFIG4, 0X02);ADS1298_SPIWriteReg(ADS1298_WCT1, 0X0A);ADS1298_SPIWriteReg(ADS1298_WCT2, 0XE3);SPIx_ReadWriteByte(ADS1298_RDATAC);ADS1298_START_H; //转换开始
2.DS2411R驱动代码
//初始化DS2411的IO口 DQ 同时检测DS的存在//返回1:不存在//返回0:存在 uint8_t DS2411_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED0-->PA.8 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_2); //PA.8 输出高 DS2411_Rst(); return DS2411_Check();} //从DS2411得到SNshort DS2411_Get_SN(void){ uint8_t SN[8]; DS2411_Rst(); if(DS2411_Init())printf("DS2411 Check Failed!"); DS2411_Write_Byte(0x33);// Read ROM SN[0]=DS2411_Read_Byte(); //0 SN[1]=DS2411_Read_Byte(); //1 SN[2]=DS2411_Read_Byte(); //2 SN[3]=DS2411_Read_Byte(); //3 SN[4]=DS2411_Read_Byte(); //4 SN[5]=DS2411_Read_Byte(); //5 SN[6]=DS2411_Read_Byte(); //6 SN[7]=DS2411_Read_Byte(); //7 printf("%.2X-%.2X-%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",SN[0],SN[1],SN[2],SN[3],SN[4],SN[5],SN[6],SN[7]); return 0; }
3.代码主逻辑
void TIM3_IRQHandler(void) //TIM3中断{ static uint8_t flag = 0; static uint8_t s = 0; if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检讨指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //打消TIMx的中断待处理位:TIM 中断源 if(SWITCH == 1) { if(flag == 0) mode = 0; else flag = 0; } else { if(flag == 1) mode = 1; else flag = 1; } if(mode == 0) { if(ble_ecg.state != 0) { LED0 = 1; LED1 = 0; } else { LED0 = 1; LED1 = s%2; } } else { if(sd_ecg.state != 0) { LED0 = 0; LED1 = 1; } else { LED0 = s%2; LED1 = 1; } } s++; }}
功能演示
1.接心电仿照器
1Hz的方波旗子暗记
60BPM的正常心电波形
100BPM心电波形
2.丈量人体心电
未在身上涂酒精,而且为了方便录制视频是坐着丈量的。如果涂酒精且平躺静止,效果要好很多。
项目碰着的问题与办理
1.丈量不到波形不知道哪里问题。
查阅芯片寄存器手册得知有测试模式,将其调度为测试模式后,由内部产生1Hz方波,得知是接口配置问题,改动后办理。
2.丈量到的波形在一些条件下会涌现非常严重的跳变
ADS1298的数据为24位补码,需针对这个情形对读出的原始数据进行转化。
3.基线漂移非常严重
在上位机代码里面追加滤波算法,追加动态y轴范围。显示效果好了很多。
4.对12导联输出不太理解怎么回事
查阅干系资料才知道,aVR、aVL、aVF是打算出来的。
事理图 & 程序
分享