SeanLib系列函数库-ADS1220

发布时间:2026/7/13 19:22:33
SeanLib系列函数库-ADS1220 查看其它库函数说明请点击此处跳转到SeanLib主页1. 本篇内容ADS1220是德州仪器推出的一款精密24位Δ-Σ型模数转换器集成了可编程增益放大器PGA、电压基准、振荡器和两个可编程电流源非常适合热电偶、RTD、热敏电阻和桥式传感器等小信号测量应用。本篇详细介绍这套面向ADS1220的C语言驱动库的使用方法。2. 使用说明要使用该库请将ADS1220.lib和ADS1220.h添加到项目工程中另外需要在SeanLib.c中实现Sean_Send和Sean_SendRecv两个外部函数。2.1 头文件说明头文件中定义了增益选项、通道选项、数据速率选项三个枚举列表以及ADS1220的设备结构体如下//定义输入多路复用器配置类型//对于 AINN AVSS 的设置PGA 必须禁用 (PGA_BYPASS 1)并且仅可使用增益1、2和4。typedefenum{ADS1220_MUX_P0_N10,//AN0接正AN1接负ADS1220_MUX_P0_N2,//AN0接正AN2接负ADS1220_MUX_P0_N3,//AN0接正AN3接负ADS1220_MUX_P1_N2,//AN1接正AN2接负ADS1220_MUX_P1_N3,//AN1接正AN3接负ADS1220_MUX_P2_N3,//AN2接正AN3接负ADS1220_MUX_P1_N0,//AN1接正AN0接负ADS1220_MUX_P3_N2,//AN3接正AN2接负ADS1220_MUX_P0_NG,//单独测量AN0ADS1220_MUX_P1_NG,//单独测量AN1ADS1220_MUX_P2_NG,//单独测量AN2ADS1220_MUX_P3_NG,//单独测量AN3ADS1220_MUX_VREF,//监视参考电压的1/4(VRef - Vref-)/4ADS1220_MUX_AVDD,//监视电源电压的1/4(AVDD - AVSS)/4ADS1220_MUX_SHORT,//AINP 和 AINN 短接至 (AVDD AVSS) / 2ADS1220_MUX_NULL//保留}ADS1220_MUX_t;//定义增益选项//在不使用PGA的情况下可使用增益1、2和4。在这种情况下通过开关电容结构获得增益。typedefenum{ADS1220_GAIN_1,ADS1220_GAIN_2,ADS1220_GAIN_4,ADS1220_GAIN_8,ADS1220_GAIN_16,ADS1220_GAIN_32,ADS1220_GAIN_64,ADS1220_GAIN_128}ADS1220_GAIN_t;//定义数据速率选项//下列为正常模式时的速率占空比模式速率是正常模式的1/4TURBO模式下速率是正常模式的2倍typedefenum{ADS1220_DR_20SPS,ADS1220_DR_45SPS,ADS1220_DR_90SPS,ADS1220_DR_175SPS,ADS1220_DR_330SPS,ADS1220_DR_600SPS,ADS1220_DR_1000SPS}ADS1220_DR_t;//定义一个ADS114Sxx芯片的器件类型typedefstruct{unsignedintTag;//提供一个变量可存储一些额外的信息如设备类型unsignedintCS_Pin;//指定该芯片使用的CS引脚的BITBAND地址unsignedintDRdy_Pin;//指定该芯片使用的数据就绪引脚的BITBAND地址void*ComDev;//提供一个万能指针可存放与该器件通讯的SPI设备指针struct{unsignedPGA_ByPass:1;//是否旁路内部PGA设置为1表示不使用PGA仅增益为1、2、4时允许禁用PGA其它增益强制开启ADS1220_GAIN_t GAIN:3;//增益设置增益为1、2、4时若禁用PGA会使用内部开关电容获取增益ADS1220_MUX_t MUX:4;//输入多路复用器配置ADS1220_DR_t DataRate:3;//数据速率unsignedBCS:1;//烧毁电流源使能控制unsignedTS:1;//是否启用内部温度传感器unsignedCM:1;//转换模式0表示单次转换1表示连续转换unsignedMODE:2;//工作模式0正常模式1占空比模式2Turbo模式unsignedVREF:2;//基准电压选择0内部2.048V基准电源1外部REF02外部REF13供电电源unsignedFIR:2;//FIR滤波器配置正常模式下仅20SPS时有效占空比模式下仅5SPS时有效其他速率时均设置为00//FIR滤波器配置00无50Hz或60Hz抑制01同时抑制50Hz和60Hz10只抑制50Hz11只抑制60HzunsignedPSW:1;//低侧电源开关配置0开关始终处于断开状态默认设置unsignedIDAC:3;//IDAC电流源选择unsignedI1MUX:3;//IDAC1路由配置unsignedI2MUX:3;//IDAC2路由配置unsignedDRDYM:1;//DRDY引脚模式0表示仅使用DRDY引脚指示数据就绪1表示同时使用DRDY和DOUT引脚void(*Set)(void);//函数指针使配置字生效}Config;//配置字void(*Dispose)(void);//函数指针释放设备占用的内存void(*Reset)(void);//函数指针控制器件复位void(*Start)(void);//函数指针启动转换void(*Sleep)(void);//函数指针器件休眠当再次发送START时恢复int(*ReadData)(void);//函数指针读转换结果}ADS1220_t;2.2 创建设备并配置使用如下函数创建设备指针/******************************************************************************* * 功 能: 创建ADS器件设备指针 * 参 数: * PinAddr_CS 片选引脚如 BITBAND_ADDR(GPIOD-ODR, 5) * 返回值创建成功返回设备指针否则返回空指针NULL *******************************************************************************/externADS1220_t*NewADS1220(unsignedintPinAddr_CS);示例代码voidADS1220_Init(void){ADS1220NewADS1220(ADC_CS);if(ADS1220NULL){Error_Handle(0,Creat ADS1220 failed!);}ADS1220-ComDevADC_SPI;//创建成功后初始化结构体ADS1220-Reset();HAL_Delay(1);ADS1220-Config.PGA_ByPass0;ADS1220-Config.GAINADS1220_GAIN_1;ADS1220-Config.MUXADS1220_MUX_P2_N3;ADS1220-Config.DataRateADS1220_DR_600SPS;ADS1220-Config.BCS0;ADS1220-Config.TS0;ADS1220-Config.CM0;ADS1220-Config.MODE0;ADS1220-Config.VREF1;//使用外部参考电源ADS1220-Config.FIR0;ADS1220-Config.PSW0;ADS1220-Config.IDAC0;ADS1220-Config.I1MUX0;ADS1220-Config.I2MUX0;ADS1220-Config.DRDYM0;}MSH_INIT_EXPORT(1,ADS1220_Init,Creat ADS1220 device);在配置参数之前强烈建议执行一次复位操作。这可以确保器件处于已知状态特别是当MCU复位而器件未复位时配置寄存器可能保持上次的随机值。2.3 启动转换与读取转换结果单次转换模式下启动转换后需等待DRDY引脚变低然后读取结果ADS1220-Start();while(ADS1220-DRdy_Pin){// 等待或超时处理}int32_trawADS1220-ReadData();读取到的原始数据为24位有符号整数需要转换为电压值floatvoltage(float)raw*4998.0f/0x00800000/(1ADS1220-Gain);其中4998是参考电压单位为mV若要使用连续转换模式将Config.CM设为1即可启动后ADC将持续转换每次DRDY变低时读取最新数据ADS1220-Config.CM1;ADS1220-Config.Set();ADS1220-Start();while(1){if(!ADS1220-DRdy_Pin){rawADS1220-ReadData();// 处理数据}}2.4 测量芯片温度启用内部温度传感器时需要特殊配置PGA必须旁路增益固定为1。示例代码ADS1220-Config.TS1;ADS1220-Config.PGA_ByPass1;ADS1220-Config.GAINADS1220_GAIN_1;ADS1220-Config.Set();ADS1220-Start();// 等待DRDY后读取rawADS1220-ReadData();floattemp_mV(float)raw*4998.0f/0x00800000;floattemperatureADS1220_CALC_ChipTmpr(temp_mV);ADS1220_CALC_ChipTmpr是头文件中提供的函数宏将mV电压值转换为温度值宏定义如下#defineADS1220_CALC_ChipTmpr(mV)(((mV)-129.0f)/0.403f25.0f)3. 共模电压ADS1220对输入信号的共模电压有严格的限制如果电路设计不当将无法得到准确的结果器件手册中有如下说明图中公式8是计算共模电压的公式VCM (VAINP VAINN) / 2最后手册中还总结了关于共模电压的限制要求常见共模问题排查现象可能原因解决方案读数随温度漂移严重共模电压接近限制边界调整偏置到AVDD/2小信号测量不准确共模抑制比下降检查输入源阻抗加缓冲不同通道读数差异大各通道共模不一致统一外部偏置电路读数总在满量程共模超范围输入级饱和降低输入信号或改用旁路PGA共模电压管理是ADS1220应用中的关键环节设计电路时必须仔细计算编程时也要考虑以正确配置增益和通道选择。