TI中文支持网
TI专业的中文技术问题搜集分享网站

关于ADS1299参考电压的问题

各位朋友大家好,我最近在调ADS1299和STM32的通信,采用的是如下图所示参考电压接线示意图。按照手册上面写的初始化的,powerdown低电平拉高->延时1s->reset信号->延时1s->SDATAC->写0xe0到CONFIGURE3寄存器->START->RDATAC, 各寄存器读写都正常,就是电压输出总是0x00,而VREFP引脚一直都是-2.5v,无法拉高到2v,我手头有一块ADS1299评估板,在开机后,VREFP迅速从-2.5v拉高到2v,不知道我的程序有什么问题,还有什么没做到的,请大家指教,谢谢。

Kailyn Chen:

看下寄存器0X03h bit7是否将内部reference buffer给disable掉了。

ming liu24:

回复 Kailyn Chen:

configure3的值已经设为0xe0了,第一位置1的话是使用内部参考电压的,是吧。下面是我的程序。

//CS1 HIGH HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_SET);

//CS2 LOW HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_RESET); //SDATAC data = SDATAC; HAL_SPI_Transmit(&hspi2,&data,1,50); //WRITE 0xE0 TO CONFIG3 address = 0x43; HAL_SPI_Transmit(&hspi2,&address,1,50); data = 0x00; HAL_SPI_Transmit(&hspi2,&data,1,50); data = 0xE0; HAL_SPI_Transmit(&hspi2,&data,1,50); HAL_Delay(1000);

ming liu24:

回复 Kailyn Chen:

多谢关注,现在Vrefp的电压已经上来了,与Vrefn之间电压为4.5v。但是输出都是0x00,用的是RDATAC模式,能够根据DRDY进入中断,有sclk信号,我在中断里面先采集数据,再采集寄存器的值,从示波器上能看到波形,如下图所示。   在RDATAC模式下是不是检测到了DRDY信号后直接读入27个数据就行了,还要发送RDATA命令吗?

ming liu24:

回复 Kailyn Chen:

你好,现在VREFP参考电压已经有了,但是现在很奇怪的是,我采用RDATAC模式,每次进入中断,都采不到数据,ads1299输出都是0x00,而可以读出寄存器的数值,但是用RDATA模式的话,就可以读出电压值,请问这是怎么回事,RDATAC模式下,DRDY都有信号产生,和设置的采样频率一样,就是输出都是0x00。

ming liu24:

回复 ming liu24:

下面是我的程序,请哪位大神麻烦看一下,有什么问题没有,多谢了。

int main(void){

uint8_t address,data,i; volatile uint32_t raw_DATA_32[8]={0,0,0,0,0,0,0,0}; volatile uint32_t temp_32; uint8_t ADS1299_DATA_RAW1[27]; double ADS1299_VOLTAGE[8];

HAL_Init();

/* Configure the system clock */ SystemClock_Config();

/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_SPI2_Init();

//POWER UP HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); HAL_Delay(2); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); HAL_Delay(2); HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);

HAL_Delay(1000); //RESET HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_SET); HAL_Delay(2); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_RESET); HAL_Delay(2); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_SET); HAL_Delay(1000);

//cs1 low HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,GPIO_PIN_RESET);

//SDATAC data = 0x11; HAL_SPI_Transmit(&hspi2,&data,1,1000);

//CS2 LOW HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_RESET); //SDATAC data = SDATAC; HAL_SPI_Transmit(&hspi2,&data,1,1000); //WRITE 0xE0 TO CONFIG3 address = 0x43; HAL_SPI_Transmit(&hspi2,&address,1,1000); data = 0x00; HAL_SPI_Transmit(&hspi2,&data,1,1000); data = 0xE0; HAL_SPI_Transmit(&hspi2,&data,1,1000); HAL_Delay(1000);

address =0x40; HAL_SPI_Transmit(&hspi2,&address,1,1000); data=0x17; HAL_SPI_Transmit(&hspi2,&data,1,50); HAL_SPI_Transmit(&hspi2,ADS1299Reg_Conituous_Setting,0x18,1000); HAL_Delay(1000); address = 0x20; HAL_SPI_Transmit(&hspi2,&address,1,1000);

data = 0x17; HAL_SPI_Transmit(&hspi2,&data,1,1000); HAL_SPI_Receive(&hspi2,ADS1299_REG_2,24,1000); //READ THE REGISTERS DATA TO CHECK HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_RESET); //START PIN SET LOW HAL_Delay(10); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,GPIO_PIN_SET); //START PIN SET HIGH

data = RDATAC; HAL_SPI_Transmit(&hspi2,&data,1,1000); //CS2 HIGH HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_SET);

while(1) {

}

}

下面的是中断服务程序。

void EXTI9_5_IRQHandler(void){ /* USER CODE BEGIN EXTI9_5_IRQn0 */ //uint8_t address,data,i; //uint8_t reg[0x18];

HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_RESET); HAL_SPI_Receive(&hspi2,ADS1299_DATA_RAW,27,50); address = 0x20; //READ THE REGISTER DATA TO CHECK HAL_SPI_Transmit(&hspi2,&address,1,50); data = 0x17; HAL_SPI_Transmit(&hspi2,&data,1,50);

HAL_SPI_Receive(&hspi2,ADS1299_REG_2,0x18,50); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_9,GPIO_PIN_SET); /* USER CODE END EXTI9_5_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8); /* USER CODE BEGIN EXTI9_5_IRQn 1 */ }

谢谢大家了

赞(0)
未经允许不得转载:TI中文支持网 » 关于ADS1299参考电压的问题
分享到: 更多 (0)