微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 关于ADS1299参考电压的问题

关于ADS1299参考电压的问题

时间:10-02 整理:3721RD 点击:

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

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

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);

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

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

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

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 */

}

谢谢大家了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top