基於ADS1292芯片的解決方案之源碼解析

接口解析
 A 該芯片和主控使用的是SPI接口通信的。
SPI接口一般有四根線,確保四根線準確連接是對的。
B 該芯片可以有中斷模式數據觸發,所以,主控mcu需要有外部中斷處理流程。
       //DRDY中斷初始化
      EXTI_ClearITPendingBit(EXTI_Line8);//清除中斷標誌
      GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);//選擇管腳
      EXTI_InitStructure.EXTI_Line=EXTI_Line8;                         //選擇中斷線路
      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     //設置爲中斷請求,非事件請求
      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發
      EXTI_InitStructure.EXTI_LineCmd = ENABLE;                         //外部中斷使能
      EXTI_Init(&EXTI_InitStructure);     
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                    //選擇中斷通道
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;    //搶佔優先級 
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;                //子優先級
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //使能外部中斷通道
      NVIC_Init(&NVIC_InitStructure); 
配置解析
 A 硬件配置ok之後,就剩下軟件了。接下來就是接口的配置信息下發了。上電流程如下所示:
void ADS1292_PowerOnInit(void)
{    

    
//        ADS_CLKSEL=1;//啓用內部時鐘
//        ADS_START=0; //停止數據輸出    
//        ADS_RESET=0; //復位
//        delay_ms(1000);
//        ADS_RESET=1;//芯片上電,可以使用    
//        delay_ms(100);    //等待穩定
    
        ADS1292_Send_CMD(SDATAC);//發送停止連續讀取數據命令
        delay_ms(100);    
        ADS1292_Send_CMD(RESET);//復位
        delay_s(1);        
        ADS1292_Send_CMD(SDATAC);//發送停止連續讀取數據命令
        delay_ms(100);        
        //ADS1292_Send_CMD(STANDBY);//進入待機模式
}

B 初始化完成之後,就可以進行數據讀取和解析了。這部分的數據如下所示:

        while(Set_ADS1292_Collect(0))//0 正常採集  //1 1mV1Hz內部側試信號 //2 內部短接噪聲測試
        {    
//                printf("ADS1292寄存器設置失敗\r\n");//串口打印調試使用
                delay_s(1);
                DS3 =!DS3;//PC13端口接LED,用於指示ADS1292 初始化狀態
        }

C 該adc有三種數據採集模式,具體如下所示,三種模式,對應的不同調試信息。

//配置ads1292採集方式
u8 Set_ADS1292_Collect(u8 mode)
{
        u8 res;
        
        delay_ms(10);
        switch(mode)//設置採集方式
        {
                case 0:
                    res =ADS1292_Single_Read();
                break;
                case 1:
                    res =ADS1292_Single_Test();
                break;
                case 2:
                    res =ADS1292_Noise_Test();
                break;
        }
        if(res)return 1;            //寄存器設置失敗
        ADS1292_Send_CMD(RDATAC);     //啓動連續模式
        delay_ms(10);
        ADS1292_Send_CMD(START);    //發送開始數據轉換(等效於拉高START引腳)
        delay_ms(10);
        return 0;
}
算法解析
   A 採集到的數據一般需要進行濾波和算法處理,
這裏一般需要用到fir濾波器,過濾掉數據過來的噪聲信號。
                        //使能FIR帶通濾波
                        ecg_fir_res = ecg_fir_tilter(ecg_avr);        //FIR帶通濾波    
                        ecg_avr_long=filter1(ecg_fir_res);  //濾除50Hz,1秒滑窗內的平均值,作爲去直流的基線
                        ecg_fir_res = ecg_fir_res - ecg_avr_long; //去直流
總結備忘
A 採集到的數據其實需要多種算法濾波處理的。根據不同的應用,需要使用不同的算法的。這個後面根據實際需求再進行分析和解析。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章