24位模拟-数字转换器ADS1246/7/8:高精度温度/压力/工业过程解决方案

需积分: 38 14 下载量 143 浏览量 更新于2024-07-09 收藏 2.72MB PDF 举报
本文档详细介绍了ADS1246、ADS1247和ADS1248这三种高性能的24位模拟-数字转换器(ADC)。它们作为高集成度和高精度的解决方案,特别适合于温度、压力和工业过程测量等应用场景。这些ADC的主要特点包括: 1. **高精度转换**:24位分辨率,能够实现无丢失代码转换,确保数据的准确性。 2. **高速数据传输**:可配置高达2kSPS(数千样本每秒)的输出速率,能满足快速数据采集需求。 3. **灵活性**:支持可调节的数据速率和氮循环设置,以及内置的50/60Hz抑制功能,有效降低外部干扰。 4. **多通道输入**:ADS1248提供4种差分和7个单端输入,ADS1247为2种差分和3个单端输入,而ADS1246则提供1种差分输入,满足多种信号输入需求。 5. **低噪声设计**:配备低噪声可编程增益放大器(PGA),在增益为128时,噪声水平低至48nV,有助于提高信号质量。 6. **高稳定性**:具有超低漂移的内置参考电压,如10ppm/°C,确保长期稳定性能。 7. **高级特性**:传感器失效检测功能,内置温度传感器,电源和参考电压监测,自动系统校准,以及SPI兼容的串行接口。 8. **宽工作电压和温度范围**:工作电压支持单级(+3.3V to +5V)或双极(±2.5V),温度范围可达–40°C到+125°C,适应各种环境条件。 9. **应用广泛**:适用于温度测量(包括热电偶和热敏电阻)、压力测量和工业过程监控,以及实时数字仿真系统和应变计。 10. **封装形式**:ADS1246采用微型TSSOP-16封装,ADS1247同样为TSSOP-16,而ADS1248使用更大的TSSOP-20封装,以容纳更多的引脚。 ADS1246、ADS1247和ADS1248是高效能的模拟到数字转换工具,为工业级应用提供了强大且精确的数据转换能力。通过了解这些特性,工程师们可以更好地选择和利用这些设备来优化他们的系统设计。
2022-01-14 上传
STM32单片机(STM32F429)读写(8通道带PGA的24位ADC)ADS1256软件例程源码,可以做为你的学习设计参考。 int main(void) { uint8_t i; bsp_Init(); PrintfLogo(); /* 打印例程Logo到串口1 */ bsp_DelayMS(100); /* 等待上电稳定,等基准电压电路稳定, bsp_InitADS1256() 内部会进行自校准 */ bsp_InitADS1256(); /* 初始化配置ADS1256. PGA=1, DRATE=30KSPS, BUFEN=1, 输入正负5V */ /* 打印芯片ID (通过读ID可以判断硬件接口是否正常) , 正常时状态寄存器的高4bit = 3 */ #if 0 { uint8_t id; id = ADS1256_ReadChipID(); if (id != 3) { printf("Error, ASD1256 Chip ID = 0x%X\r\n", id); } else { printf("Ok, ASD1256 Chip ID = 0x%X\r\n", id); } } #endif ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_30SPS); /* 配置ADC参数: 增益1:1, 数据输出速率 1KHz */ ADS1256_StartScan(); /* 启动中断扫描模式, 轮流采集8个通道的ADC数据. 通过 ADS1256_GetAdc() 函数来读取这些数据 */ while (1) { bsp_Idle(); /* 空闲时执行的函数,比如喂狗. 在bsp.c中 */ /* 打印采集数据 */ for (i = 0; i < 8; i++) { int32_t iTemp; iTemp = ((int64_t)g_tADS1256.AdcNow[i] * 2500000) / 4194303; /* 计算实际电压值(近似估算的),如需准确,请进行校准 */ if (iTemp < 0) { iTemp = -iTemp; printf("%d=%6d,(-%d.%03d %03d V) ", i, g_tADS1256.AdcNow[i], iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000); } else { printf("%d=%6d,( %d.%03d %03d V) ", i, g_tADS1256.AdcNow[i], iTemp/1000000, (iTemp%1000000)/1000, iTemp%1000); } } printf("\r\n"); bsp_DelayMS(500); /* 每隔500ms 输出一次数据 */ } }