完全集成模拟前端AFE4400的脉冲血氧仪应用

来源:http://blog.csdn.net/devintt/article/details/72639993  


随着人们越来越重视医疗健康,相对应的产品也随之推出。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);  

    单片机用郭天祥的买个锐志单片机开发板,他们的程序写的很好,但是也要用郭天祥的教程,学半年左右,到了i2c之后,再就是液晶显示之后就可以开始嵌入式学习了。可以用韦山东的嵌入式开发板学习。

  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

确定后,我们就可以单击下载了。说了这么多,主要是有好些朋友依然没有试过下载到真正的单片机中测试,希望看完之后,自己尝试下,会发现,仿真和现实还是不一样的。

生成海报
点赞 0

thePro

我还没有学会写个人说明!

相关推荐

51单片机——定时器

为什么使用定时器? 之前我们的led灯每隔1s循环左移点亮的时候,使用的定时方法是在c程序执行若干次空循环,这样会耗费很多cpu资源,因为空轮询。本篇博客将使用51单片机内置的定时器中断

晶振时钟原理图、PCB设计指南

在一个电路系统中,时钟是必不可少的一部分。时钟电路相当关键,在电路中的作用犹如人的心脏的作用,如果电路系统的时钟出错了,系统就会发生紊乱,因此在PCB 中设计一个好的时钟电路