1. 硬件IIC与ADS1115的完美组合
在实际的嵌入式开发中,我们经常需要采集多个传感器的模拟信号。STM32F103系列微控制器自带的硬件IIC接口,配合ADS1115这款16位高精度ADC芯片,可以说是多通道电压采集的黄金搭档。我自己在做智能家居传感器项目时,就深度使用过这个方案,实测下来稳定性和精度都很令人满意。
硬件IIC相比软件模拟IIC有个很大的优势——它不占用CPU资源。STM32的硬件IIC控制器会自动处理起始位、停止位、应答位这些通信细节,你只需要配置好寄存器,它就能在后台自动完成数据传输。这对于需要实时处理多任务的系统来说特别重要,毕竟CPU时间是很宝贵的资源。
ADS1115是TI推出的一款16位精度ADC,内置可编程增益放大器(PGA),支持四路单端或两路差分输入。最高860SPS的采样率对于大多数传感器应用都绰绰有余。最重要的是,它通过IIC接口与MCU通信,只需要两根信号线就能读取四个通道的数据,极大简化了硬件布线。
2. 硬件连接与电路设计
2.1 引脚分配与连接
STM32F103C8T6的硬件IIC接口有两组:I2C1和I2C2。我习惯使用I2C1,因为它的引脚PB6(SCL)和PB7(SDA)位置比较方便布线。但有些开发板可能把这些引脚用作其他功能,所以也可以使用I2C2的PB10(SCL)和PB11(SDA)。
ADS1115模块的接线非常简单:
- VCC接3.3V(注意不要接5V,虽然模块有电平转换,但为了稳定性最好用3.3V)
- GND接共地
- SCL接STM32的SCL引脚
- SDA接STM32的SDA引脚
- ADDR引脚接地(这样器件地址就是0x48)
如果要用多个ADS1115模块,可以通过ADDR引脚设置不同的地址:接地为0x48,接VCC为0x49,接SDA为0x4A,接SCL为0x4B。这样一根IIC总线最多可以挂4个ADS1115,实现16通道采集。
2.2 硬件设计注意事项
我在实际项目中踩过一些坑,这里分享给大家。首先一定要在IIC总线上加上拉电阻,一般是4.7kΩ到10kΩ。虽然有些模块已经内置了上拉电阻,但为了可靠性,最好自己在主板上再加一组。
电源滤波也很重要。ADS1115是16位精度的ADC,电源噪声会直接影响测量精度。我在每个ADS1115模块的VCC和GND之间都加了10μF钽电容和0.1μF陶瓷电容,实测能有效抑制电源噪声。
对于模拟输入部分,如果信号源阻抗较高,可以考虑在输入端加入RC低通滤波,防止高频噪声被采样。但要注意截止频率不能太低,否则会影响正常信号的采集。
3. ADS1115寄存器配置详解
3.1 配置寄存器解析
ADS1115的配置寄存器是控制其工作的核心,地址为0x01。这个16位的寄存器包含了所有工作参数的设置,理解每个位的含义非常重要。
最高位OS[15]是单次转换启动位。写1时启动单次转换,转换完成后自动清零。这个位在单次转换模式下非常有用。
接下来的三位是输入选择位MUX[14:12]:
- 000:AIN0与AIN1差分(默认)
- 001:AIN0与AIN3差分
- 010:AIN1与AIN3差分
- 011:AIN2与AIN3差分
- 100:AIN0与GND单端
- 101:AIN1与GND单端
- 110:AIN2与GND单端
- 111:AIN3与GND单端
PGA[11:9]设置可编程增益放大器的增益:
- 000:FS=±6.144V
- 001:FS=±4.096V
- 010:FS=±2.048V
- 011:FS=±1.024V
- 100:FS=±0.512V
- 101:FS=±0.256V
- 110:FS=±0.256V
- 111:FS=±0.256V
MODE[8]设置工作模式:0为连续转换模式,1为单次转换模式(更省电)。
DR[7:5]设置数据速率:000为8SPS,111为860SPS。速率越高噪声越大,要根据实际需求选择。
3.2 实际配置示例
在我的项目中,通常这样配置:
- 单端输入模式,测量对地电压
- PGA增益设为2.048V量程,平衡精度和量程
- 单次转换模式,降低功耗



被折叠的 条评论
为什么被折叠?



