发 帖  

Max30003驱动

2513 心电检测
2019-11-18 15:33:20   评论 分享淘帖 邀请回答 举报
2个回答
2019-11-18 17:41:48 1 评论

举报

1 条评论
  • 2019-11-18 23:09

    Github上 下载的arduino程序:

    void setup()
    {
        Serial.begin(115200); //Serial begin
       
        pinMode(MAX30003_CS_PIN,OUTPUT);
        digitalWrite(MAX30003_CS_PIN,HIGH); //disable device

        SPI.begin();
        SPI.setBitOrder(MSBFIRST);
        SPI.setDataMode(SPI_MODE0);
      
      //please enable the below lines if you are using older version of Protocentral_max30003 board without 32k f-clock generator
        /*SPI.setClockDivider(SPI_CLOCK_DIV4);
        pinMode(CLK_PIN,OUTPUT);
         
         //Start CLK timer
        Timer1.initialize(16);              // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
        Timer1.attachInterrupt( timerIsr ); // attach the service routine here
    */
        MAX30003_begin();   // initialize MAX30003
    }

    void loop()
    {
        MAX30003_Reg_Read(ECG_FIFO);

        unsigned long data0 = (unsigned long) (SPI_temp_32b[0]);
        data0 = data0 <<24;
        unsigned long data1 = (unsigned long) (SPI_temp_32b[1]);
        data1 = data1 <<16;
        unsigned long data2 = (unsigned long) (SPI_temp_32b[2]);
        data2 = data2 >>6;
        data2 = data2 & 0x03;
       
        data = (unsigned long) (data0 | data1 | data2);
        ecgdata = (signed long) (data);

        MAX30003_Reg_Read(RTOR);
        unsigned long RTOR_msb = (unsigned long) (SPI_temp_32b[0]);
       // RTOR_msb = RTOR_msb <<8;
        unsigned char RTOR_lsb = (unsigned char) (SPI_temp_32b[1]);

        unsigned long rtor = (RTOR_msb<<8 | RTOR_lsb);
        rtor = ((rtor >>2) & 0x3fff) ;
      
        float hr =  60 /((float)rtor*0.008);
        unsigned int HR = (unsigned int)hr;  // type cast to int

        unsigned int RR = (unsigned int)rtor*8 ;  //8ms

         /*Serial.print(RTOR_msb);
         Serial.print(",");
         Serial.print(RTOR_lsb);
         Serial.print(",");
         Serial.print(rtor);
         Serial.print(",");
         Serial.print(rr);
         Serial.print(",");
         Serial.println(hr);      */

          DataPacketHeader[0] = 0x0A;
          DataPacketHeader[1] = 0xFA;
          DataPacketHeader[2] = 0x0C;
          DataPacketHeader[3] = 0;
          DataPacketHeader[4] = 0x02;
       
          DataPacketHeader[5] = ecgdata;
          DataPacketHeader[6] = ecgdata>>8;
          DataPacketHeader[7] = ecgdata>>16;
          DataPacketHeader[8] = ecgdata>>24;
       
          DataPacketHeader[9] =  RR ;
          DataPacketHeader[10] = RR >>8;
          DataPacketHeader[11] = 0x00;
          DataPacketHeader[12] = 0x00;

          DataPacketHeader[13] = HR ;
          DataPacketHeader[14] = HR >>8;
          DataPacketHeader[15] = 0x00;
          DataPacketHeader[16] = 0x00;
            
          DataPacketHeader[17] = 0x00;
          DataPacketHeader[18] = 0x0b;
      
          for(i=0; i<19; i++) // transmit the data
          {
            Serial.write(DataPacketHeader);
      
           }   

        delay(8);      
    }

    void MAX30003_Reg_Write (unsigned char WRITE_ADDRESS, unsigned long data)
    {

        // now combine the register address and the command into one byte:
         byte dataToSend = (WRITE_ADDRESS<<1) | WREG;
      
         // take the chip select low to select the device:
         digitalWrite(MAX30003_CS_PIN, LOW);
         
         delay(2);
         SPI.transfer(dataToSend);   //Send register location
         SPI.transfer(data>>16);     //number of register to wr
         SPI.transfer(data>>8);      //number of register to wr
         SPI.transfer(data);      //Send value to record into register
         delay(2);
         
         // take the chip select high to de-select:
         digitalWrite(MAX30003_CS_PIN, HIGH);
    }

    void max30003_sw_reset(void)
    {
        MAX30003_Reg_Write(SW_RST,0x000000);     
        delay(100);
    }

    void max30003_synch(void)
    {
        MAX30003_Reg_Write(SYNCH,0x000000);
    }

    void MAX30003_Reg_Read(uint8_t Reg_address)
    {
        uint8_t SPI_TX_Buff;
       
        digitalWrite(MAX30003_CS_PIN, LOW);
       
        SPI_TX_Buff = (Reg_address<<1 ) | RREG;
        SPI.transfer(SPI_TX_Buff); //Send register location
         
        for ( i = 0; i < 3; i++)
        {
           SPI_temp_32b = SPI.transfer(0xff);
        }
      
        digitalWrite(MAX30003_CS_PIN, HIGH);
    }

    void MAX30003_Read_Data(int num_samples)
    {
        uint8_t SPI_TX_Buff;
      
        digitalWrite(MAX30003_CS_PIN, LOW);   
      
        SPI_TX_Buff = (ECG_FIFO_BURST<<1 ) | RREG;
        SPI.transfer(SPI_TX_Buff); //Send register location
      
        for ( i = 0; i < num_samples*3; ++i)
        {
          SPI_temp_Burst = SPI.transfer(0x00);
        }
       
        digitalWrite(MAX30003_CS_PIN, HIGH);  
    }

    void MAX30003_begin()
    {   
        max30003_sw_reset();
        delay(100);
        MAX30003_Reg_Write(CNFG_GEN, 0x081007);
        delay(100);
        MAX30003_Reg_Write(CNFG_CAL, 0x720000);  // 0x700000  
        delay(100);
        MAX30003_Reg_Write(CNFG_EMUX,0x0B0000);
        delay(100);
        MAX30003_Reg_Write(CNFG_ECG, 0x805000);  // d23 - d22 : 10 for 250sps , 00:500 sps
        delay(100);
      
        MAX30003_Reg_Write(CNFG_RTOR1,0x3fc600);
        max30003_synch();
        delay(100);
    }

2019-11-20 19:47:52 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

厂商专区

飞凌嵌入式

瑞萨单片机论坛

米尔电子

Aigtek安泰电子

斯丹麦德电子

芯佰微电子

其利天下技术小组

道生物联技术社区

视美泰

FCom富士晶振

大大通

合众恒跃

进迭时空

RT-Thread论坛

EASY-EAI灵眸科技

-

技术社区

张飞电子技术社区

KaihongOS技术社区

FPGA开发者技术社区

RISC-V MCU技术社区

HarmonyOS技术社区

-

OpenHarmony开源社区

OpenHarmony开源社区

-

嵌入式论坛

ARM技术论坛

STM32/STM8技术论坛

嵌入式技术论坛

单片机/MCU论坛

RISC-V技术论坛

瑞芯微Rockchip开发者社区

FPGA|CPLD|ASIC论坛

DSP论坛

-

电路图及DIY

电路设计论坛

DIY及创意

电子元器件论坛

专家问答

-

电源技术论坛

电源技术论坛

无线充电技术

-

综合技术与应用

机器人论坛

USB论坛

电机控制

模拟技术

音视频技术

综合技术交流

上位机软件(C/Python/Java等)

-

无线通信论坛

WIFI技术

蓝牙技术

天线|RF射频|微波|雷达技术

-

EDA设计论坛

PCB设计论坛

DigiPCBA论坛

Protel|AD|DXP论坛

PADS技术论坛

Allegro论坛

multisim论坛

proteus论坛|仿真论坛

KiCad EDA 中文论坛

DFM|可制造性设计论坛

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术

传感技术

-

招聘/交友/外包/交易/杂谈

项目外包

供需及二手交易

工程师杂谈|交友

招聘|求职|工程师职场

-

官方社区

发烧友官方/活动

华秋商城

华秋电路

+

元器件搜索引擎

元器件搜索引擎