logo
当前位置:首 页 > 硬件技术 > 查看文章

随着人们越来越重视医疗健康,相对应的产品也随之推出。TI就很好的走在前面,对于生理信号采集方面不仅推出了ADS124x系列和ADS129x系列,也推出了集成了光传感器AFE系列。

AFE4400 是一款非常适合于脉冲血氧仪应用的完全集成模拟前端 (AFE)。 此器件包含一个具有集成模数转换器 (ADC) 的低噪声接收器通道、一个 LED 发射部件和针对传感器以及 LED 故障检测的诊断功能。

数据手册介绍到此结束。不废话,接下来介绍电路原理图。原理图也是根据数据手册的典型应用得到的。两个红光和红外LED选用的是DCM05(或者DCM03)

NRST为芯片复位,低电平有效,复位后需要重新配置寄存器。

PD_ALM为光电传感器断开信号,LED_ALM为LED断开信号,DIAG_END是检测终了信号,这3个信号可连接单片机,用于检测器件的连接情况。

AFE_PDN为低功耗引脚,低电平有效。

ADC_RDY为信号采集并转换完成,此时可通过SPI读取转换结果。

PCB布局也非常简单,左边芯片为AFE4400,右边的芯片是stm8L151.

程序方面主要讲一下寄存器配置和数据读取。

  1. void AFE4404_Set_Value(void)
  2. {
  3.   //AFE4400_Set_Register(CONTROL0,        0x04);
  4.   AFE4400_Set_Register(LED2STC,         6050);
  5.   AFE4400_Set_Register(LED2ENDC,        7998);
  6.   AFE4400_Set_Register(LED2LEDSTC,      6000);
  7.   AFE4400_Set_Register(LED2LEDENDC,     7999);
  8.   AFE4400_Set_Register(ALED2STC,        50);
  9.   AFE4400_Set_Register(ALED2ENDC,       1998);
  10.   AFE4400_Set_Register(LED1STC,         2050);
  11.   AFE4400_Set_Register(LED1ENDC,        3998);
  12.   AFE4400_Set_Register(LED1LEDSTC,      2000);
  13.   AFE4400_Set_Register(LED1LEDENDC,     3999);
  14.   AFE4400_Set_Register(ALED1STC,        4050);
  15.   AFE4400_Set_Register(ALED1ENDC,       5998);
  16.   AFE4400_Set_Register(LED2CONVST,      4);
  17.   AFE4400_Set_Register(LED2CONVEND,     1999);
  18.   AFE4400_Set_Register(ALED2CONVST,     2004);
  19.   AFE4400_Set_Register(ALED2CONVEND,    3999);
  20.   AFE4400_Set_Register(LED1CONVST,      4004);
  21.   AFE4400_Set_Register(LED1CONVEND,     5999);
  22.   AFE4400_Set_Register(ALED1CONVST,     6004);
  23.   AFE4400_Set_Register(ALED1CONVEND,    7999);
  24.  
  25.   AFE4400_Set_Register(ADCRSTSTCT0,     0);
  26.   AFE4400_Set_Register(ADCRSTENDCT0,    3);
  27.   AFE4400_Set_Register(ADCRSTSTCT1,     2000);
  28.   AFE4400_Set_Register(ADCRSTENDCT1,    2003);
  29.   AFE4400_Set_Register(ADCRSTSTCT2,     4000);
  30.   AFE4400_Set_Register(ADCRSTENDCT2,    4003);
  31.   AFE4400_Set_Register(ADCRSTSTCT3,     6000);
  32.   AFE4400_Set_Register(ADCRSTENDCT3,    6003);
  33.  
  34.   AFE4400_Set_Register(PRPCOUNT,        7999);
  35.  
  36.   AFE4400_Set_Register(CONTROL1,        0x100);
  37. //  AFE4400_Set_Register(TIA_AMB_GAIN,    0x004481);
  38.   AFE4400_Set_Register(TIA_AMB_GAIN,    0x004141);
  39.   AFE4400_Set_Register(LEDCNTRL,        0x8F8F);
  40.   AFE4400_Set_Register(CONTROL2,        0x100);
  41. }

前面的寄存器是配置芯片的时序的,这里的配置使用的是官方手册给的数值,这里不做讨论,详细意思在手册上能查阅。由于我们使用的是8M的晶振,寄存器PRPCOUNT的值为7999,意味着一个周期为1ms,这里采样率为1000Hz,对于采集血氧饱和度足矣。

AFE4400读取寄存器的方式有些特别,根据手册所述需要设置CONTROL0的读写位之后才能读取数据。

 

  1. void AFE4400_Set_READABLE(u8 isReadable)
  2. {
  3.   SPI_WriteByte(CONTROL0);  //写入寄存器地址
  4.   SPI_WriteByte(0x00);
  5.   SPI_WriteByte(0x00);
  6.   SPI_WriteByte(isReadable);
  7. }
  8.  
  9. u32 AFE4400_Read_Register(u8 reg_address)
  10. {
  11.   u32 temp0=0, temp1=0, temp2=0;
  12.   u32 temp=0;
  13.  
  14.   AFE_CS_L;
  15.   AFE4400_Set_READABLE(1);
  16.  
  17.   SPI_WriteByte(reg_address);  //写入寄存器地址
  18.   temp0 = SPI_ReadByte();
  19.   temp1 = SPI_ReadByte();
  20.   temp2 = SPI_ReadByte();
  21.   AFE_CS_H;
  22.  
  23.   temp = temp0<<16 | temp1<<8 | temp2;
  24.   return temp;
  25. }
  26.  
  27. void AFE4400_Set_Register(u8 reg_address, u32 data)
  28. {
  29.   AFE_CS_L;
  30.   AFE4400_Set_READABLE(0);
  31.  
  32.   SPI_WriteByte(reg_address);  //写入寄存器地址
  33.   SPI_WriteByte((data>>16)&0xFF);
  34.   SPI_WriteByte((data>>8)&0xFF);
  35.   SPI_WriteByte((data)&0xFF);
  36.   AFE_CS_H;
  37. }

数据读取通过ADC_RDY信号的下降沿触发之后使用SPI读取。

通过蓝牙发送到手机编写的APP中,画图显示波形。

最后附上驱动代码:http://download.csdn.net/detail/devintt/9849976

说说梦想,谈谈感悟 ,聊聊技术,有啥要说的来github留言吧 https://github.com/cjx2328

—— 陈 建鑫

陈建鑫
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容。站长联系:cjx2328#126.com(修改#为@)
Copyright ©ziao Studio All Rights Reserved. E-mail:cjx2328#126.com(#号改成@) 沪ICP备14052271号-3