打印
[应用相关]

STM32设计的一款AED 体外除颤器的详细资料

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
61
goodluck09876|  楼主 | 2019-6-22 11:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
62
goodluck09876|  楼主 | 2019-6-22 11:24 | 只看该作者
    自动体外除颤器系统运行流程如图4.1所示。系统在上电以后,首先进行自检,
自检的项目有:电池电量、除颤电极片类型(成人或儿童)、除颤电极是否安放正确
  (通过检测经胸阻抗,判断其值是否在20^}200SZ正常范围内),若自检不通过,则
通过语音提示哪一项不正常,继续自检,若自检各个项目均正常,即开始进行心电信
号的采集,同时进行心电信号的分析,使用基于样本嫡的算法检测是否发生室颤,若
结果正常,则继续心电信号的采集与分析,若结果异常,即设定除颤能量(成人依次
按照120J, 150J, 200J的除颤能量),开始对电容高压充电,微控制器输出PWM控
制高压充电电路进行快速充电,并实时采集电压,调整PWM频率和占空比,直到充
电结束,使用语音提示按压除颤按键,通过按压除颤按键,则对患者进行一次双相波
电除颤,除颤结束后继续采集心电以及分析、判断,如果正常,即急救成功,如果继
续异常,则增加除颤能量,继续对患者进行除颤放电,进行3次除颤放电以后,若患
者心电继续异常,则急救失败,结束急救。

使用特权

评论回复
63
goodluck09876|  楼主 | 2019-6-22 11:24 | 只看该作者

使用特权

评论回复
64
goodluck09876|  楼主 | 2019-6-22 11:27 | 只看该作者
    系统的除颤能量成人分别是:120J, 150J, 200J,儿童分别是SOJ, 70J, 85J。双
相波除颇时间为正向6ms,反向4ms。除颤充电电压是根据测量的经胸阻抗以及除颤
能量、放电时间推算出来的。

使用特权

评论回复
65
goodluck09876|  楼主 | 2019-6-22 11:28 | 只看该作者
4.3.2高压充电程序
      (1)充电流程
    高压充电流程如图4.2所示,当系统进入到充电模式时,首先,进行充电前的一
些设置,如:ADC初始化、TIMER初始化;对充电时间进行实时记录,如果充电时
间超过50秒,则充电失败,即充电硬件电路出现问题,一般充电时间约10秒左右。
充电过程,一边采集充电电压,根据其大小所在的范围,调整PWM波输出的频率或
占空比,最后,根据采样电压判断电容上的电压是否达到设定值,若达到,则关闭
PWM波输出,关闭定时器,若没达到,则继续进行充电,直到完成充电。



使用特权

评论回复
66
goodluck09876|  楼主 | 2019-6-22 11:28 | 只看该作者

使用特权

评论回复
67
goodluck09876|  楼主 | 2019-6-22 11:29 | 只看该作者
    除颤放电流程如图4.3所示,系统进入放电模式时,首先,也需要一些初始化操
作,如:GPIO端口模式设置、定时器PWM模式输出设置、定时器定时功能设置等;
其次,打开正向电桥1, 3,开始计数,判断时间是否到6ms,如果在6ms以内,则
需控制数控电桥,调整机内电阻的阻值变化,从阻值最大变化到最小阻值,即机内电
阻全部被短路。如果定时己到6ms,则需要关断电桥1, 3,关断时间为1个时间计
数单位,即200us,这是为了完全关闭IGBT,电桥关断有死区。等待200us以后,则
打开反向电桥2, 4,继续计数;最后,再等待反向除颤4ms后,关闭电桥2, 4,关
闭定时器。则整个除颤过程结束。
    系统机内电阻调整的顺序。经胸阻抗SOS2,除颤能量120J与150J对应的IO端
口依次输出为:0x09, 0x19, 0x39, OxB9, 0x59;除颤能量200)时的IO端口变化顺
序:0x19, 0x39, OxB9, 0x59。经胸阻抗7552,除颤能量120)与150)对应的IO端
口依次输出为:0x09, 0x19, 0x39, OxB9, 0x59;除颤能量200)时的IO端口变化顺
序:OxB9, 0x59。经胸阻抗10052,  12552, 15052,  17552,除颤能量120)与150)对
应的IO端口依次输出为:0x19, 0x39, OxB9, 0x59;除颤能量200)时的IO端口不
改变。

使用特权

评论回复
68
goodluck09876|  楼主 | 2019-6-22 11:32 | 只看该作者

使用特权

评论回复
69
goodluck09876|  楼主 | 2019-6-22 12:20 | 只看该作者

使用特权

评论回复
70
goodluck09876|  楼主 | 2019-6-22 12:20 | 只看该作者

使用特权

评论回复
71
goodluck09876|  楼主 | 2019-6-22 12:20 | 只看该作者

使用特权

评论回复
72
goodluck09876|  楼主 | 2019-6-22 12:21 | 只看该作者

使用特权

评论回复
73
goodluck09876|  楼主 | 2019-6-22 12:21 | 只看该作者
4. 4. 3经胸阻抗检测程序
      (1)AD5933软件代码
    AD5933初始化:
    void AD5933es Init(void)
    {//写入起始扫描频率1 OKHz
      IIC一yteWrite(Ox82,Ox04);
      IIC多yteWrite(Ox83,OxE2);
      IIC多yteWrite(Ox84,Ox 18);
      //写入频率增量O.SHz
        IIC一yteWrite(Ox85,Ox00);
      IIC ByteWrite(Ox86,Ox00);
      IIC ByteWrite(Ox87,Ox10);
      //写入增量数2
      IIC一yteWrite(Ox88,Ox00);
        IIC_ByteWrite(Ox89,Ox02);
      //写入控制寄存器设置参数
        IIC多yteWrite(Ox80,OxB 1);
//start frequency
//1 OkHz
//frequency
//O.SHz
//number of increments
//2点
IICse ByteWrite(Ox81,Ox00);
IIC ByteWrite(Ox81,Ox10);
IIC多yteWrite(Ox81,Ox00);
//初始化起始频率Initialize
IIC一yteWrite(Ox80,Ox11);
//PLACE THE AD5933 INTO STANDBY MODE;
//输出电压范围:典型值2.OVpp;PGA增益:*1
  //选择内部系统时钟MCLK=16.776MHZ
  //Reset
with Start Frequency
//建立等待周期数NUMBER OF SETTLING
IIC ByteWrite(OxBA,Ox02); TIME CYCLES
IICes ByteWrite(OxBB,Ox08);   //16个周期
//启动频率扫描Start frequency sweep
IIC ByteWrite(Ox80,Ox21);

使用特权

评论回复
74
goodluck09876|  楼主 | 2019-6-22 12:22 | 只看该作者
void AD5933GetImpedance(void)
{
  unsigned char i;
  AD5933一nitU;
  for(i=O;i<16;i=i+4)
    {
      while(!((IICes ByteRead(OxBF))&0x02));//读状态寄存器,等待转换完成
      一INTQ;
      //读取阻抗的实部和虚部寄存器
      ImpedanceBuff}i]=IIC_ByteRead(Ox94);
      ImpedanceBuf}i+1]=IIC ByteRead(Ox95);
      ImpedanceBuff[i+2]=IICes ByteRead(Ox96);
      ImpedanceBuff[i+3]=IIC ByteRead(Ox97);
      一INTQ;
      //读状态寄存器,判断扫描是否完成
      if((IIC_ByteRead(OxBF)&0x04))
            break;
        else
          IIC ByteWrite(Ox80,Ox31);   //Increment frequency command
    }
}

使用特权

评论回复
75
goodluck09876|  楼主 | 2019-6-22 12:22 | 只看该作者
  (2)经胸阻抗计算软件代码
#define M  PI   3.14159265358979323846
double  g Impedance=0;
void Dischargeee CalcRes()
{
    uint8 t dispBufj128]={0},dispCnt=();
    int   im二0, re = 0;//实部和虚部
  double Magnitude=0;//幅值
  double TestImpedance=0;   //测量阻抗
  double TestPhase=0;       //}J量相位
  double ImpedancePhase=0;   //阻抗相位二测量相位一系统相位
  double RImpedance=0;//电阻
double CImpedance=0;//容抗
uint8 t resBu红4]={0};
uint8一i=仇
for(i=O;i<4;i++)
{
  resBufti]=g orderStringsRX[18][i+3];
}
re=(resB峻0] * 256+resBu红1D}
加=(resBu红2] *256+resBu红3]);
if (re>32768)
    re二65536;
if (im>32768)
    im一=65536;
//计算幅值
Magnitude=sqrt((double)(re*re+im*im));
//计算测量阻抗
TestImpedance=1/Magnitude/(2.180040E-06);
//计算测量相位
if ((re>0)&&(im>0))
    TestPhase=atan( (double)((double)im/(double)re));
else if ((re<0)&&(im>0))
    TestPhase=M  PI+atan( (double)((double)im/(double)re));
else if((re<0)&&(im<0))
    TestPhase=Mwe  PI+atan( (double)((double)im/(double)re));
else if((re>0)&&(im<0))
    TestPhase=2.0*M- PI+atan( (double)((double)im/(double)re));
//计算阻抗相位
ImpedancePhase=TestPhase一4.85946787645025201114;
//计算阻抗
RImpedance=TestImpedance*cos(ImpedancePhase)一100.0;
CImpedance=TestImpedance*sin( fabs(ImpedancePhase))一261.0;
g Impedance=sqrt((double)( RImpedance*RImpedance+
CImpedance*CImpedance));
  刀通过测量阻抗值判断电极片是否贴好在患者身上
    g SysErrorByte&=Oxfff9ffff;  //bit18=0 } bit19=0,
  if(g Impedance>looo){
      g SysErrorByte }= 0x00020000;//电极没按到病人身上bitl 8=1
    }else if(g Impedance>800){
      g SysErrorByte }= 0x00040000;//电极和病人接触不好bitl9=1
    }
    dispCnt= sprintf(dispBuf," %.2f ",g_Impedance);
    GLJI_DispStringAt((const char*)dispBuf,200,200);
}

使用特权

评论回复
76
goodluck09876|  楼主 | 2019-6-22 12:23 | 只看该作者

使用特权

评论回复
77
goodluck09876|  楼主 | 2019-6-22 12:26 | 只看该作者

使用特权

评论回复
78
goodluck09876|  楼主 | 2019-6-22 12:27 | 只看该作者

使用特权

评论回复
79
goodluck09876|  楼主 | 2019-6-22 12:28 | 只看该作者

使用特权

评论回复
80
goodluck09876|  楼主 | 2019-6-22 12:28 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则