登录/注册

ads1118例程

更多

以下是一个基于STM32 HAL库的ADS1118模数转换器例程,包含初始化、配置和读取电压值的完整代码:

1. 硬件连接

// STM32与ADS1118连接引脚定义
#define ADS1118_CS_GPIO_PORT    GPIOA
#define ADS1118_CS_PIN          GPIO_PIN_4   // 片选引脚
#define ADS1118_SPI_HANDLE      hspi1        // SPI句柄

2. 寄存器配置宏

// 配置寄存器设置(根据需求修改)
#define ADS1118_CONFIG \
  (0x4000 |  // MUX[2:0]=100 (AIN0-GND单端输入) \
   0x0200 |  // PGA[2:0]=010 (±2.048V量程) \
   0x0000 |  // MODE=0 (连续转换模式) \
   0x00E0 |  // DR[2:0]=111 (860SPS采样率) \
   0x0000)   // TS_MODE=0 (ADC模式)

3. ADS1118初始化函数

void ADS1118_Init(void) {
  // 初始化CS引脚
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = ADS1118_CS_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(ADS1118_CS_GPIO_PORT, &GPIO_InitStruct);

  // 拉高片选(不选中)
  HAL_GPIO_WritePin(ADS1118_CS_GPIO_PORT, ADS1118_CS_PIN, GPIO_PIN_SET);
}

4. 读取ADC值函数

float ADS1118_ReadVoltage(uint8_t channel) {
  uint16_t tx_data = ADS1118_CONFIG;
  uint16_t rx_data = 0;
  float voltage;

  // 修改通道配置位(bit14-12)
  tx_data &= ~(0x7 << 12);        // 清除原有通道设置
  tx_data |= (channel << 12);     // 设置新通道

  // 开始SPI传输
  HAL_GPIO_WritePin(ADS1118_CS_GPIO_PORT, ADS1118_CS_PIN, GPIO_PIN_LOW);
  HAL_SPI_TransmitReceive(&ADS1118_SPI_HANDLE, 
                          (uint8_t*)&tx_data,
                          (uint8_t*)&rx_data,
                          1,       // 传输16位=2字节
                          100);    // 超时时间ms
  HAL_GPIO_WritePin(ADS1118_CS_GPIO_PORT, ADS1118_CS_PIN, GPIO_PIN_SET);

  /* 
  数据处理说明:
  1. rx_data包含16位转换结果(高位在前)
  2. 实际有效数据在bit15-bit4(12位有效值)
  3. 右移4位得到完整16位补码
  */
  int16_t adc_value = (int16_t)(rx_data >> 4);  // 转换为带符号整数

  // 转换为电压值(±2.048V量程)
  voltage = (adc_value * 2.048) / 32768.0f;

  return voltage;
}

5. 主函数中使用示例

int main(void) {
  // 初始化HAL库和SPI
  HAL_Init();
  SystemClock_Config();
  MX_SPI1_Init();

  // 初始化ADS1118
  ADS1118_Init();

  while (1) {
    // 读取AIN0通道电压
    float voltage = ADS1118_ReadVoltage(4); // 通道0对应二进制100

    printf("Voltage: %.4f V\r\n", voltage);

    HAL_Delay(500); // 500ms采样周期
  }
}

关键配置说明:

  1. 输入通道选择(MUX位):

    • 4 = AIN0单端 (二进制100)
    • 5 = AIN1单端 (101)
    • 6 = AIN2单端 (110)
    • 7 = AIN3单端 (111)
  2. 量程设置(PGA位):

    • ±6.144V → 0x0000
    • ±4.096V → 0x0200
    • ±2.048V → 0x0400(默认推荐)
  3. 采样率选择(DR位):

    • 8SPS → 0x0000
    • 128SPS → 0x0080
    • 860SPS → 0x00E0(示例配置)

注意事项:

  1. SPI配置要求

    • 模式:CPOL=1, CPHA=1 (SPI Mode 3)
    • 数据大小:16位传输
    • MSB First(高位在前)
    • 时钟频率建议 ≤ 4MHz
  2. 数据格式

    • 返回的16位数据中,高12位是有效转换结果
    • 结果以二进制补码格式存储
    • 单端输入时结果始终为正
  3. 温度传感器模式: 如需读取片内温度,设置TS_MODE=1:

    #define ADS1118_TEMP_CONFIG (ADS1118_CONFIG | 0x0010)

    温度计算:

    float temp = (int16_t)(rx_data >> 4) * 0.03125; // 单位℃

完整工程请参考ADS1118数据手册调整配置参数以适应具体应用场景。

ADS1118 16 位低功耗 SPI 模数转换器(ADC)技术文档总结

ADS1118是一款高精度、低功耗、16位模数转换器(ADC),具备测量最常见传感器信号所需的所有功能,采用超小型无引线X2QFN-10封装或VSSOP-10封装。该ADS1118集成了可编程增益

2025-11-18 17:20:10

ADS1118温度读数错误是什么原因引起的?

我现在在用DSP宇ADS1118IDST进行温度测试,读取ADS118里面的温度值时,始终是3752,对比说明书,算出环境温度为90多度,请问是否哪有问题] 1 我的DSP与

2025-01-24 06:13:08

ADS1118的硬件SPI通讯问题如何解决

ADS1118的硬件SPI通讯问题 Other Parts Discussed in Thread: ADS1118我是使用一个8位的MCU与ADS111

2025-01-20 07:26:16

FS-MCore-F800E STM32例程

FS-MCore-F800E STM32例程

资料下载 jf_19000309 2024-11-18 15:10:28

ADS1118具有内部基准和温度传感器的兼容SPI的16位模数转换器数据表

电子发烧友网站提供《ADS1118具有内部基准和温度传感器的兼容SPI的16位模数转换器数据表.pdf》资料免费下载

资料下载 杨海清 2024-07-15 09:37:31

ADS1118模块资料热电偶测量文档资料硬件参考设计及MSP430软JDEMO代码 430BOOS

ADS1118模块资料热电偶测量文档资料硬件参考设计及MSP430软JDEMO代码 430BOOS(单片机原理及应用答案)-ADS1118模块资料热电偶测量文档资料硬件参考设计及MSP430软

资料下载 370217 2021-07-22 13:08:26

STM32F103系列ADS1118驱动的资料免费下载

本文档的主要内容详细介绍的是STM32F103系列ADS1118驱动的资料免费下载。

资料下载 unique216b 2021-02-24 08:00:00

实现频率VF变换器的C51例程免费下载

本文档的主要内容详细介绍的是实现频率VF变换器的C51例程免费下载。

资料下载 佚名 2020-07-23 18:27:50

ADS1118如果程序中采集多个通道的电压,就会发现通道错位的情况,为什么?

USCI_A0 RX,TX interrupt } /*MODE 0: Only write config regist to ADS1118 MODE 1: Write config regist

2025-01-02 06:07:51

请问ADS1120在热电偶测温度能否完全代替ADS1118

目前想测一种K型热电偶,测温范围约为1000度,看中了ADS1118这款芯片。然后偶然间发现了ADS1120这款芯片,简单对比了一下性能指标,ADS

2024-08-27 07:13:07

SPI协议详解(以ADS1118

一开始先分析了SPI的协议特点,使用ADS1118这个器件作为承载物进行分析,后面用逻辑分析仪从位到字节进行解码,最后使用TI给的demo移植到STM32平台。

2024-05-07 14:58:32

ADS1115和ADS1118的主要区别是什么?

ADS1115和ADS1118的主要区别是什么

2023-10-09 06:39:03

低功耗高精度16位Sigma-Delta ADC CM1106,对标ADS1118系列

士模微推出高性能低功耗Sigma-Delta ADC CM1106,对标ADS1118系列

2023-03-03 22:05:22

采用ADS1118和两个热电偶的温度测量电路设计

本指导手册的设计介绍采用 ADS1118 和两个热电偶的温度测量电路。该设计使用 ADS1118 内部电压基准进行热电偶电压测量,而使用板载温度传感器进行冷端补偿 (CJC) 测量。ADC 的两个

2022-11-28 09:55:23

小白求助,求ADS1118的调试笔记

小白求助,求ADS1118的调试笔记

2021-11-18 07:31:05
7天热门专题 换一换
相关标签