adc采样的值跳动_请帮忙分析下ADS1248测PT100,读取的ADC值跳动较大?是什么原因?

adc采样的值跳动_请帮忙分析下ADS1248测PT100,读取的ADC值跳动较大?是什么原因?本帖最后由chen849928055于2018-3-2016:12编辑碰到的问题:1.在调试过程中,首先是采集的ADC值乱跳,都几百1000多的跳,后来发现把增益PGA设置为16以上,读到的值总为0x007FFFFF;PGA设置为1时,读取的ADC值接近自己实际计算的值;查手册我的PGA设置为16以下,共模电压(ADCINP+ADCINN)/2在共模范围之内。VIN=ADC…

adc采样的值跳动_请帮忙分析下ADS1248测PT100,读取的ADC值跳动较大?是什么原因?

本帖最后由 chen849928055 于 2018-3-20 16:12 编辑

碰到的问题:1.在调试过程中,首先是采集的ADC值乱跳,都几百1000多的跳, 后来发现把增益PGA设置为16以上,读到的值总为0x007FFFFF;PGA设置为1时,读取的ADC值接近自己实际计算的值;

查手册我的PGA设置为16以下, 共模电压(ADCINP + ADCINN)/2在共模范围之内。V IN = ADCINP – ADCINN是差模输入电压,可正可负,但它的绝对值要<=VREF/PGA

0.5

2:用示波器测试波形,SCK  DIN   DO写入读出的寄存器的值都是正确的;读取的ADC值波动这问题找了一个多星期了还没找到,望使用过ADS1248这类芯片的网友多指点指点,提提建议,先谢谢了!!!

1.先上原理图

2.下面是我的程序初始化:

/*********************************************************************************************************

* @Function Name: SPI_FLASH_Init

* @Description  : SPI和GPIO初始化

* @param                : void

* @retval                   : void

* @date                           : 2018/03/04  PA4->SPI0_SCK  PA5->SPI0_MOSI PA6->SPI0_MISO PA7->SPI0_SEL

#define ADS1248_RST                        GPIO_PIN_2  PA

#define ADS1248_READY                GPIO_PIN_3  PA

#define ADS1248_SCK                        GPIO_PIN_4  PA

#define ADS1248_DO                        GPIO_PIN_5  PA

#define ADS1248_DIN                        GPIO_PIN_6  PA

#define ADS1248_CS                        GPIO_PIN_7  PA

#define ADS1248_START                PC12

注意一点:SCK时钟不能太快,必须小于2MHz,程序实际采用的时钟约1MHz. ADS1248芯片是在SCK下降沿采样数据.

********************************************************************************************************/

void SPI_FLASH_Init(void)

{

SPI_InitTypeDef  SPI_InitStructure;

/*  Enable AFIO & SPI SEL pin port & SPI clock                                                            */

CKCU_PeripClockConfig_TypeDef CKCUClock = {
{0}};

CKCUClock.Bit.PA                                         = 1;

CKCUClock.Bit.SPI0                                                                          = 1;

CKCUClock.Bit.AFIO                                                                          = 1;

CKCUClock.Bit.PDMA                                                                          = 1;

CKCU_PeripClockConfig(CKCUClock, ENABLE);

/*  Configure SPI SCK pin, SPI MISO pin, SPI MOSI pin                                                     */

AFIO_GPxConfig(GPIO_PA, ADS1248_SCK        , AFIO_FUN_SPI);

AFIO_GPxConfig(GPIO_PA, ADS1248_DIN,  AFIO_FUN_SPI);

AFIO_GPxConfig(GPIO_PA, ADS1248_DO,   AFIO_FUN_SPI);

AFIO_GPxConfig(GPIO_PC, ADS1248_START , AFIO_MODE_DEFAULT);           //START io初始化

GPIO_DirectionConfig(HT_GPIOC, ADS1248_START, GPIO_DIR_OUT);

AFIO_GPxConfig(GPIO_PA, ADS1248_RST , AFIO_MODE_DEFAULT);             // RST io初始化

GPIO_DirectionConfig(HT_GPIOA, ADS1248_RST, GPIO_DIR_OUT);

GPIO_DirectionConfig(HT_GPIOA, ADS1248_READY, GPIO_DIR_IN);    //输入  DRDY

GPIO_PullResistorConfig(HT_GPIOA, ADS1248_READY, GPIO_PR_UP);  //设置上拉

GPIO_InputConfig(HT_GPIOA, ADS1248_READY, ENABLE);             //上拉使能

/* SEL output inactive level */

//        AFIO_GPxConfig(GPIO_PA, ADS1248_CS , AFIO_MODE_DEFAULT);        //CS io初始化

ADS1248_CS_H();

GPIO_DirectionConfig(HT_GPIOA, ADS1248_CS, GPIO_DIR_OUT);

/*  SPI Configuration */

SPI_InitStructure.SPI_Mode = SPI_MASTER;

SPI_InitStructure.SPI_FIFO = SPI_FIFO_ENABLE;

SPI_InitStructure.SPI_DataLength = SPI_DATALENGTH_8;

SPI_InitStructure.SPI_SELMode = SPI_SEL_SOFTWARE;

SPI_InitStructure.SPI_SELPolarity = SPI_SELPOLARITY_LOW;

SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;

SPI_InitStructure.SPI_CPOL = SPI_CPOL_LOW ;      //  SCK 的下降沿被采集

SPI_InitStructure.SPI_CPHA = SPI_CPHA_SECOND;

SPI_InitStructure.SPI_RxFIFOTriggerLevel = 4;

SPI_InitStructure.SPI_TxFIFOTriggerLevel = 4;

SPI_InitStructure.SPI_ClockPrescaler = 36; /* 原来为2 72/2=36MHz, Normal Read frequency */ // 72/32=24/32=0.75MHz,ADS1248的SCLK最快约2MHz

SPI_Init(FLASH_SPI, &SPI_InitStructure);

SPI_SELOutputCmd(FLASH_SPI, ENABLE);

SPI_Cmd(FLASH_SPI, ENABLE);

}

void ADS1248_Init(void)

{

unsigned char temp;

SPI_FLASH_Init();

ADS1248_RST_L();

ADS1248_START_L();

ADS1248_Delay(4000);

ADS1248_RST_H();

ADS1248_START_H();

ADS1248_Delay(60000); //延时20ms;手册要求延时至少16ms

ADS1248_CS_L();

ADS1248_WriteREG(ADS_MUX0, 0x01);

ADS1248_WriteREG(ADS_MUX1, 0x30);//00110000,Bit7:启用内部晶振,Bit6-5:内部基准一直打开,Bit4-3:输入基准为片上基准,Bit2-0:普通模式

ADS1248_Delay(10000);  //延时10ms

ADS1248_WriteREG(ADS_VBIAS, 0x00); //00000000,Bit7-0:偏置电压选择关闭(默认)

ADS1248_WriteREG(ADS_IDAC1, 0xFF); //11111111,Bit7-4:断开内部第一恒流源的连接,Bit3-0:断开内部第二恒流源的连接  0X8F打开第一内部恒流源

ADS1248_WriteREG(ADS_IDAC0, 0x08); //00001000,Bit7-4:只读,Bit3:DRDY/DOUT功能复用Dout线 ,Bit2-0:关闭内部恒流源

ADS1248_WriteREG(ADS_SYS0,  0x00); //00000000,Bit7:必须设置为0,Bit6-41:选择1倍增益,Bit3-0:选择5SPS测量速度

}

/*******************************************************************************

* @Function Name: ADS1248_ReadREG

* @Description  : 写寄存器的第byteToRead个字节

* @param                : u8 regName

* @param                : u8 byteToRead

* @retval                   : u8

* @date                           : 2014/10/05

*******************************************************************************/

void ADS1248_WriteREG(u8 regaddr, u8 databyte)

{

//向寄存器写入数据地址

ADS1248_WriteByte(ADS_WREG+(regaddr&0x0f));

ADS1248_WriteByte(0x00);

//向regaddr地址指向的寄存器写入数据databyte

ADS1248_WriteByte(databyte);

}

今天的文章adc采样的值跳动_请帮忙分析下ADS1248测PT100,读取的ADC值跳动较大?是什么原因?分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33513.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注