Bootstrap

PCF8591

在这里插入图片描述


一、PCF8591简介

PCF8591 是一款集成了模数转换(ADC)和数模转换(DAC)功能的 I²C 总线接口芯片,由 NXP 公司(原飞利浦半导体)设计。它广泛应用于需要模拟信号与数字信号相互转换的嵌入式系统中,例如传感器数据采集或模拟设备控制。

基本特性

1)模数转换(ADC)

4 路模拟输入:支持单端输入或差分输入模式,分辨率 8 位(0-255)。
采样速率:典型转换时间约 100μs,适合低速传感器(如温度、光强)的数据采集。
Ps:
单端输入(Single-Ended)
原理:每路输入(AIN0-AIN3)的电压以 芯片的地(GND) 为参考点。
差分输入(Differential)
原理:通过 两组输入引脚(如 AIN0 & AIN1) 测量两者之间的 电压差,而非以地为参考。
分辨率表示 ADC 能将模拟信号划分成多少个离散的等级,8位=2^8=256个等级,参考电压(Verf)设置为5V,最小电压步进=5v/256=19.53mv,例-如果输入2.5v电压,ADC输出值为2.5v/19.53mv≈128,则可以看出,最小电压步进越小,ADC转换越精准

2)数模转换(DAC)

1 路模拟输出:支持 8 位分辨率,输出电压范围由参考电压(VREF)决定。

I²C 总线接口

地址可配置:通过 A0/A1/A2 引脚设置从机地址,最多支持 8 个设备共用总线。
PS:这里PCF8591作为唯一从机,主机是微控制器为STC15F2K60S2

3) 其他

通信速率:标准模式(100 kHz)或快速模式(400 kHz)。

供电电压
工作电压范围:2.5V 至 6V,兼容 3.3V 和 5V 系统。

典型应用场景:
传感器读取:连接光敏电阻、热敏电阻等模拟传感器,将信号数字化。
模拟控制:通过 DAC 输出控制 LED 亮度、电机速度等。
多设备扩展:I²C 总线支持多设备级联,适合资源有限的微控制器(如 Arduino、ESP8266)。

基本引脚说明:
AIN0-AIN3:模拟输入通道。
AOUT:模拟输出通道。
SDA/SCL:I²C 数据线与时钟线。
VREF:参考电压输入(决定 ADC/DAC 的量程)。
在这里插入图片描述

二、PCF8591基本架构

(1) 核心模块组成

1)模拟输入多路复用器(MUX)
功能:4 路模拟输入通道(AIN0-AIN3)通过 MUX 选择其中 1 路接入 ADC。
控制方式:由主机发送的 控制字(Control Byte) 中的通道选择位(低 2 位)决定。

2)8 位逐次逼近型 ADC
工作原理
采样保持电路捕获输入电压。

通过逐次逼近寄存器(SAR)逐步比较输入电压与内部 DAC 生成的电压,最终输出 8 位数字值。

具体步骤如下:
初始阶段: 逐次逼近 ADC 将输入的模拟电压与一个参考电压(通常是 Vref)进行比较,初始时会将数字输出设置为 128(即中间值,2^7),这对应于最大范围的一半。
逐次逼近过程: 在每个比较步骤中,ADC 会将输入电压与一个由当前数字值表示的电压进行比较,并根据结果逐步逼近最终的数字值。这个过程是通过逐位比较进行的,直到找出最接近输入电压的数字值。
数字输出: 经过 8 次比较后,逐次逼近型 ADC 会得到一个 8 位的数字输出(0 到 255之间的值),表示输入电压在参考电压范围内的比例。
转换时间:约 100μs,受 I²C 通信速率限制。
如图:假如输入电压为5V
在这里插入图片描述
3)8 位电阻网络 DAC
功能:将主机发送的 8 位数字值转换为模拟电压输出(AOUT 引脚)。
输出范围:0V 至参考电压 (Verf引脚)​ 。

4)I²C 总线接口
从机地址:固定地址 + 3 位可配置地址(A0/A1/A2 引脚)+读写位,支持多设备级联。
在这里插入图片描述

通信协议:完全遵循 I²C 标准,支持标准模式(100kHz)和快速模式(400kHz)。

5)控制逻辑与寄存器
控制字(Control Byte):主机发送的指令,用于配置:
bit0~1:通道选择(AIN0-AIN3)
bit2:自动增量模式(自动切换通道)
bit4~5:ADC 输入模式(单端/差分)
bit6:DAC 使能状态
在这里插入图片描述

(2)工作流程示例(ADC 读取)

1、主机发起通信
2、发送起始条件 + PCF8591 地址(0x90)(写模式)。
3、PCF8591 应答(ACK)。
4、发送控制字
5、PCF8591 应答(ACK)。
6、重启通信并读取数据(0x91)
7、PCF8591 应答(ACK)。
8、PCF8591 返回上一次 ADC 转换结果(8 位数据)。
9、完成转换
10、主机发送停止条件(NACK),结束通信。

(3)工作流程示例 (DAC 输出)

1、主机发起通信
2、发送起始条件 + PCF8591 地址(写模式)。
3、PCF8591 应答(ACK)
5、控制字启用 DAC(0x41是光敏电阻可以通过改变输出电压范围)
6、PCF8591 应答(ACK)
6、写入 8 位数字值(0-255),芯片立即更新 AOUT 引脚电压。
Ps:输出电压计算:模拟电压 = 数字值*最小电压步进(5/255=1/53)
7、PCF8591 应答(ACK)
8、结束通信

;