最近在调ADS1248 读取K型热电偶的板子 寄存器都能配置, 就是读取的AD值一直在调 而且调的范围很大 不知道什么原因?还有 如何把AD值转换成温度值 有没有什么计算公式啊?
Iven Xu:
您好,这里有个参考代码,您参考一下,谢谢!
Carter Liu:
你好,这个转换值和外部的电路、电源等均有一定关系,你可以上传你的电路以便更好分析。另外AD值转换温度值跟你的参考电压及采样得到的电压值有关
li kai:
回复 Iven Xu:
你好 我用的是stm32片上的SPI 按照现象寄存器是可以正常配置的 就是读取的AD值在跳变。附上程序
/******************************************************************************** Function Name : ADS1248SPI* Description : SPI读写一个字节(发送完成后返回本次通讯读取的数据)* Input : u8 TxData 待发送的数* Output : None* Return : u8 RxData 收到的数*******************************************************************************/u8 ADS1248SPI(u8 TxData){ //等待发送缓冲区空 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){;} //发一个字节 SPI_I2S_SendData(SPI1, TxData); //等待数据接收 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){;} //取数据 return SPI_I2S_ReceiveData(SPI1); }/*************************************************************************** Function Name :ADS1248 写数据* Description : * Input :* Output: :* Return :* 备 注 : 向ADS1248中地址为regaddr的寄存器写入一个字节databyte***************************************************************************/void ADS1248WREG(unsigned char regaddr,unsigned char databyte){ //向寄存器写入数据地址 ADS1248SPI(ADS1248_CMD_WREG+(regaddr & 0xF)); //写入数据的个数n-1 ADS1248SPI(0X00); //向regaddr地址指向的寄存器写入数据databyte ADS1248SPI(databyte);}/*************************************************************************** Function Name :ADS1248 读数据* Description : * Input :* Output: :* Return :* 备 注 : 向ADS1248中地址为regaddr的寄存器读一个字节databyte***************************************************************************/unsigned char ADS1248RREG(unsigned char regaddr){ //从ADS1248中地址为regaddr的寄存器读出一个字节 unsigned char r=0; //写入地址 ADS1248SPI(ADS1248_CMD_RREG+(regaddr & 0xF)); //写入读取数据的个数n-1 ADS1248SPI(0X00); //读出regaddr地址指向的寄存器的数据 r=ADS1248SPI(ADS1248_CMD_NOP); return r;//返回数据}/******************************************************************************** Function Name : ADS1248ReadData* Description : 读adc转换数据* Input : * Output : 24位 3个字节* Return : *******************************************************************************/u32 ADS1248ReadData(void){ unsigned long r=0,ls=0; ls=ADS1248SPI(0xff); r=ls<<8; ls=ADS1248SPI(0xff); r=r+ls; r=r<<8; ls=ADS1248SPI(0xff); r=r+ls; return r;}/*************************************************************************** Function Name :* Description : * Input :* Output: :* Return :***************************************************************************/void Ads1248_Result(void){ //发送单次读数据命令 ADS1248SPI(ADS1248_CMD_RDATA); //读取ADC转换完成的数据 ads1248_results=ADS1248ReadData(); //发送空操作指令,强迫D_OUT变高 ADS1248SPI(ADS1248_CMD_NOP); // CS_TEMP_REF1_HIGH;}/*************************************************************************** Function Name :ADS1248 初始化程序1* Description : * Input :* Output: : * Return :***************************************************************************/void InitADS1248(void){ CS_TEMP_REF1_HIGH;
SPI2_NSS_LOW; //所有芯片复位 复位引脚 ddelay(90000); SPI2_NSS_HIGH; ddelay(ddelay_10ms);
cTEMP_REF_START1_LOW; CS_TEMP_REF1_LOW; //片选1 ddelay(20);
ddelay(ddelay_10ms);
// 初始化MUX0多路复用控制寄存器// 00 000 001 AIN0+ AIN1- 0x01// 00 010 011 AIN2+ AIN3- 0x13// 00 100 101 AIN4+ AIN5- 0x25// 00 110 111 AIN6+ AIN7- 0x37// Bit7-6:传感器电流源检测不使用 Bit5-3:正输入为AIN0 Bit2-0:负输入为AIN1 ADS1248WREG(ADS1248_REG_MUX0,0x01); This_text[0] = ADS1248RREG(ADS1248_REG_MUX0); if(This_text[0]==0x01) {GPIO_ResetBits(GPIOF,GPIO_Pin_6);} else{GPIO_SetBits(GPIOF,GPIO_Pin_6);}
// ddelay(600);// 初始化MUX1多路复用控制寄存器// 0 01 00 000// Bit7:启用内部晶振 Bit6-5:内部基准一直打开 Bit4-3:输入基准为片上基准 00:REF0输入 01:REF1输入 Bit2-0:000普通模式 011 温控二极管 ADS1248WREG(ADS1248_REG_MUX1,0x30); This_text[1] = ADS1248RREG(ADS1248_REG_MUX1); if(This_text[1]==0x30) {GPIO_ResetBits(GPIOF,GPIO_Pin_7);} else{GPIO_SetBits(GPIOF,GPIO_Pin_7);}
// 延时等待10ms,等待内部基准稳定 ddelay(6*ddelay_10ms);
// 初始化VBIAS偏压寄存器// 00000000// Bit7-0:偏置电压选择关闭(默认) ADS1248WREG(ADS1248_REG_VBIAS,0x00); This_text[2] = ADS1248RREG(ADS1248_REG_VBIAS); if(This_text[2]==0x00) {GPIO_ResetBits(GPIOF,GPIO_Pin_8);} else{GPIO_SetBits(GPIOF,GPIO_Pin_8);}
// ddelay(600);// 初始化IDAC0控制寄存器// 0000 0000// Bit7-4:只读 Bit3:DRDY/DOUT功能复用Dout线 Bit2-0:关闭内部恒流源 ADS1248WREG(ADS1248_REG_IDAC0,0x00); This_text[3] = ADS1248RREG(ADS1248_REG_IDAC0); if(This_text[3]==0x90) {GPIO_ResetBits(GPIOF,GPIO_Pin_9);} else{GPIO_SetBits(GPIOF,GPIO_Pin_9);}
// ddelay(600);// 初始化IDAC1控制寄存器// 0000 0000// Bit7-4:断开内部第一恒流源的连接 Bit3-0:断开内部第二恒流源的连接 ADS1248WREG(ADS1248_REG_IDAC1,0xff); This_text[4] = ADS1248RREG(ADS1248_REG_IDAC1); if(This_text[4]==0xff) {GPIO_ResetBits(GPIOF,GPIO_Pin_10);} else{GPIO_SetBits(GPIOF,GPIO_Pin_10);}
// ddelay(600);// 初始化SYS0系统控制寄存器// 0 000 1000// Bit7:必须设置为0 Bit6-4:选择1倍增益 Bit3-0:1000: 1000SPS测量速度 1001-1111: 2000SPS测量速度 ADS1248WREG(ADS1248_REG_SYS0,0x08); This_text[5] = ADS1248RREG(ADS1248_REG_SYS0);
ddelay(600); CS_TEMP_REF1_HIGH; //芯片1失能 // cTEMP_REF_START1_LOW;}
li kai:
回复 Carter Liu:
供电采用的 ACDD+5V AVSS 0V DVDD3.3V, 参考电压 为REFP0 +2.048 REFN0 0 (程序中用的内部参考) AIN0 AIN1 接热电偶正负两端。
TI中文支持网





