SeanLib系列函数库-ADS1118 查看其它库函数说明请点击此处跳转到SeanLib主页1. 本篇内容ADS1118是一款16位模数转换器采用SPI接口通信支持2路差分信号测量或4路单端信号测量内置参考电源集成片内温度传感器内置可编程增益放大器PGA。本篇详细介绍这套面向ADS1118的C语言驱动库的使用方法。2. 使用说明要使用该库请将ADS1118.lib和ADS1118.h添加到项目工程中另外需要在SeanLib.c中实现Sean_Send和Sean_SendRecv两个外部函数。2.1 头文件说明头文件中定义了一些枚举类型以及一个ADS1118设备结构体如下typedefenum//输入多路开关选项{ADS1118_MUX_P0_N1,//000 AINP is AIN0 and AINN is AIN1 (default)ADS1118_MUX_P0_N3,//001 AINP is AIN0 and AINN is AIN3ADS1118_MUX_P1_N3,//010 AINP is AIN1 and AINN is AIN3ADS1118_MUX_P2_N3,//011 AINP is AIN2 and AINN is AIN3ADS1118_MUX_P0_NG,//100 AINP is AIN0 and AINN is GNDADS1118_MUX_P1_NG,//101 AINP is AIN1 and AINN is GNDADS1118_MUX_P2_NG,//110 AINP is AIN2 and AINN is GNDADS1118_MUX_P3_NG//111 AINP is AIN3 and AINN is GND}ADS1118_MUX_t;typedefenum//增益选项{ADS1118_PGA_6144,//000 FSR is ±6.144 VADS1118_PGA_4096,//001 FSR is ±4.096 VADS1118_PGA_2048,//010 FSR is ±2.048 V (default)ADS1118_PGA_1024,//011 FSR is ±1.024 VADS1118_PGA_512,//100 FSR is ±0.512 VADS1118_PGA_256//101 FSR is ±0.256 V}ADS1118_PGA_t;typedefenum//转换模式选项{ADS1118_Mode_Contious,//连续转换模式ADS1118_Mode_Signle//单次转换模式}ADS1118_MODE_t;typedefenum//数据速率选项{ADS1118_DR_8SPS,ADS1118_DR_16SPS,ADS1118_DR_32SPS,ADS1118_DR_64SPS,ADS1118_DR_128SPS,ADS1118_DR_250SPS,ADS1118_DR_475SPS,ADS1118_DR_860SPS}ADS1118_DR_t;typedefenum//测试模式选项{ADS1118_TSMODE_ADC,//ADC模式ADS1118_TSMODE_Tmpr//内部温度传感器模式}ADS1118_TSMODE_t;typedefstruct//定义一个ADS1118芯片的器件类型{unsignedintTag;//提供一个变量可存储一些额外的信息如设备类型unsignedintCS_Pin;//指定该芯片使用的CS引脚的BITBAND地址unsignedintDRdy_Pin;//指定该芯片使用的数据就绪引脚的BITBAND地址void*ComDev;//提供一个万能指针可存放与该器件通讯的SPI设备指针struct//配置寄存器类型定义{unsignedcharPULLUP:1;//设置是否使能DRDY引脚的内部上拉ADS1118_TSMODE_t TS_MODE:1;//测试选项选择测量ADC还是内部温度传感器ADS1118_DR_t DR:3;//数据速率设置ADS1118_MODE_t MODE:1;//器件测试模式设置选择连续转换还是单次转换ADS1118_PGA_t PGA:3;//增益配置ADS1118_MUX_t MUX:3;//多路开关配置}Config;//器件配置字void(*Start)(void);//函数指针启动转换float(*ReadData)(void);//函数指针读转换结果内部温度模式时返回温度值ADC模式时返回电压值(mV)}ADS1118_t;2.2 创建设备并配置参数使用如下函数创建设备指针/******************************************************************************* * 功 能: 创建ADS器件设备指针 * 参 数: * PinAddr_CS 片选引脚如 BITBAND_ADDR(GPIOD-ODR, 5) * 返回值创建成功返回设备指针否则返回空指针NULL *******************************************************************************/externADS1118_t*NewADS1118(unsignedintPinAddr_CS);示例代码voidADS_Init(void){Tmpr1NewADS1118(SPI_CS1);if(Tmpr1NULL){Error_Handle(0,Creat Tmpr1 failed!\r\n);}Tmpr1-ComDevhspi4;Tmpr1-Config.PULLUP1;Tmpr1-Config.MODEADS1118_Mode_Signle;Tmpr2NewADS1118(SPI_CS2);if(Tmpr2NULL){Error_Handle(0,Creat Tmpr2 failed!\r\n);}Tmpr2-ComDevhspi4;Tmpr2-Config.PULLUP1;Tmpr2-Config.MODEADS1118_Mode_Signle;}MSH_INIT_EXPORT(0,ADS_Init,Creat ADS1118 chip);一些使用过程中不需要修改的配置可以在初始化时直接写好。2.3 启动转换并读取结果ADS1118仅通过两个字节的配置字完成所有设置、启动转换、读取结果。启动转换请直接调用Start方法启动转换但需要提前设置好模式、通道、增益等参数等待转换完成将CS拉低若转换完成DRdy引脚会拉低调用ReadData方法获取数据需要注意的是ReadData函数的返回值当测量模式选择的是内部温度传感器即芯片温度时返回值为温度值当测量模式选择的是ADC即外部输入的模拟量时返回结果为外部输入的电压值单位为mV。3. 例程建议的等待转换完成方法voidWaitForFinish(ADS1118_t*Dev){unsignedintTick_Start;*(unsignedint*)(Dev-CS_Pin)0;//拉低CS引脚osDelay(pdMS_TO_TICKS(20));//建议释放CPU一小段时间后再死等时间长度根据数据速率设置Tick_StartHAL_GetTick();while(HAL_GetTick()-Tick_Start5)//等待DOUT给出数据有效信号-从高变低{if(ADS_RDY0)break;//DRdy引脚拉低时表示转换已完成}}测量芯片温度floatGet_ChipTmpr(ADS1118_t*Dev){Dev-Config.TS_MODEADS1118_TSMODE_Tmpr;//内部温度传感器模式Dev-Config.DRADS1118_DR_64SPS;//设置数据速率Dev-Start();WaitForFinish(Dev);returnDev-ReadData();}测试外部输入信号floatGet_Voltage(ADS1118_t*Dev,ADS1118_MUX_t Channel){Dev-Config.TS_MODEADS1118_TSMODE_ADC;//ADC模式Dev-Config.DRADS1118_DR_64SPS;//设置数据速率Dev-Config.PGAADS1118_PGA_256;//设置增益Dev-Config.MUXChannel;//设置转换通道Dev-Start();WaitForFinish(Dev);returnDev-ReadData();}测量K型热电偶的温度floatTmpr,Tmpr_Chip;Tmpr_ChipGet_ChipTmpr(Tmpr1);//获取芯片温度作为冷端温度TmprGet_Voltage(Tmpr1,ADS1118_MUX_P2_N3);//配置通道并启动一次转换TmprThermo_Calc_Tmpr(THERMO_TYPE_K,Tmpr_Chip,Tmpr);//计算热电偶的温度