完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我目前在使用ADS1256,实测结果显示误差很到,输入模拟电压值 = 2.5000V,AD实际采集值 = 2.5320V, 相差约32mV;在其它几点测量,误差也较大。
不知道是不是因为没有设置好自校准参数?请专家帮忙分析原因,谢谢。 程序代码如下: 延时子程序: void delay_12clk(void) { unsigned char i; for(i=0;i<24;i++) ; } 写寄存器子程序: static void write_register(unsigned char reg,unsigned char wdata) { SPI1_send(WREG|reg); //选择写入寄存器 SPI1_send(0x00); //写入1个寄存器 SPI1_send(wdata); //写入数据 } 读寄存器子程序: static unsigned char read_register(unsigned char reg) { static unsigned char x; while(ADRDYB); //DRDY信号低时才能读寄存器 SPI1_send(RREG|reg); //选择写入寄存器 SPI1_send(0x00); //写入1个寄存器 delay_10us(); //延时10us 20130413添加 delay_10us(); //延时10us 20130413添加 x = SPI1_TranByte(0xFF); //读出寄存器值 return (x); } 读ADS1256测量值程序: unsigned long read_data() { unsigned char rx_dat[4]; long x; while(ADRDYB); rx_dat[0] = SPI1_TranByte(0xFF); rx_dat[1] = SPI1_TranByte(0xFF); rx_dat[2] = SPI1_TranByte(0xFF); x = (long)rx_dat[0]*65536+(long)rx_dat[1]*256 +(long)rx_dat[2]; return (x); } 初始化ADS1256子程序: void INIT_ADS1256(void) { CS_SPI1 = 0; //选通SPI0 delay_100us(); //延时100us while( ADRDYB); //20130417添加 SPI1_send(RESET); //复位 20130313 write_register(STATUS,0x06); //输出高位数据在前 write_register(MUX, 0x18); //MUX寄存器为默认值 write_register(ADCON, 0x20); //ADCON寄存器为默认值 write_register(DRATE,0xa1); // 1000sps 采样率 write_register(IO,0x00); write_register(OFC0,0x00); write_register(OFC1,0x12); write_register(OFC2,0x02); SPI1_send(SELFCAL); delay_2us(); delay_2us(); delay_2us(); delay_2us(); } ADS1256测试子程序: void ADS1256_test(unsigned char *ADS1256_data_point) { unsigned long v = 0; unsigned char i = 0; CS_SPI1 = 0; SPI1_send(SELFCAL); delay_2us(); delay_2us(); delay_2us(); delay_2us(); while(ADRDYB); //DRDY信号低时才能读寄存器 write_register(MUX,0x38); //选择#3 channel SPI1_send(SELFCAL); SPI1_send(SELFOCAL); SPI1_send(SYNC); //启动转换 delay_12clk(); //延时12clk SPI1_send(WAKEUP); delay_12clk(); //延时12clk SPI1_send(SELFOCAL); SPI1_send(RDATA); delay_12clk(); //延时12clk v = read_data(); *ADS1256_data_point = ((v & 0x00FF0000) >> 16); ++ADS1256_data_point; *ADS1256_data_point = ((v & 0x0000FF00) >> 8); ++ADS1256_data_point; *ADS1256_data_point = ((v & 0x000000FF) ); } |
|
相关推荐
2个回答
|
|
|
电路中ADS1256的晶体为10MHz,对转换精度有何影响?
|
|
|
|
|
|
ADS1256测量误差较大的原因可能有以下几点:
1. 参考电压不准确:ADS1256的测量精度受到参考电压的影响。如果参考电压不准确,可能会导致测量误差。请检查您的参考电压是否准确。 2. 输入信号阻抗不匹配:ADS1256的输入阻抗较高,如果输入信号阻抗不匹配,可能会导致测量误差。请确保输入信号阻抗与ADS1256的输入阻抗相匹配。 3. 模拟滤波器设置不当:ADS1256内部有一个模拟滤波器,用于滤除高频噪声。如果滤波器设置不当,可能会导致测量误差。请检查您的滤波器设置是否正确。 4. 采样率设置不当:ADS1256的采样率会影响测量精度。如果采样率设置不当,可能会导致测量误差。请检查您的采样率设置是否合适。 5. 自校准参数设置不当:ADS1256支持自校准功能,可以提高测量精度。如果自校准参数设置不当,可能会导致测量误差。请检查您的自校准参数设置是否正确。 6. 电源电压不稳定:ADS1256的测量精度受到电源电压的影响。如果电源电压不稳定,可能会导致测量误差。请检查您的电源电压是否稳定。 7. 代码问题:请检查您的代码是否正确实现了ADS1256的初始化、配置和读取数据等功能。如果代码有误,可能会导致测量误差。 建议您根据以上原因逐一排查,找出导致测量误差的原因,并进行相应的调整。希望对您有所帮助! |
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:23 , Processed in 0.695650 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
10143