在智能硬件项目中,很多输入信号并不是简单的开关状态,而是连续变化的模拟量。电位器旋钮、光敏电阻、温度传感器、压力传感器这类模块,经常会输出随环境或操作变化而变化的电压信号。对于程序来说,这些变化不能直接变成可计算的数据,需要经过 ADC 模数转换,才能被代码读取、判断和处理。本实验使用 CanMV K210 开发板通过 I2C 总线连接 PCF8591 模块,读取电位器接入 AIN0 后产生的模拟电压变化。程序会把 PCF8591 读取到的 0~255 原始 ADC 数值转换成百分比、电压估算值和状态等级,并通过串口持续打印。同时,代码还会把读取到的数值写入 PCF8591 的 AOUT,使模拟输出跟随旋钮变化,可用于控制外接 LED 亮度或观察模拟电压输出效果。学习目标说明理解模拟量输入认识电位器旋转如何产生连续变化的模拟电压掌握 ADC 采集使用 PCF8591 将 AIN0 输入电压转换成 0~255 数字量理解数据换算将 ADC 原始值转换成百分比、电压估算值和状态等级掌握 AOUT 输出使用 PCF8591 的模拟输出端跟随电位器输入变化建立采集闭环思路形成“模拟输入采集 → 程序处理 → 模拟输出反馈”的实验链路这类实验的价值在于建立“真实信号进入程序”的理解方式。电位器旋转时,硬件层产生的是连续变化的电压;PCF8591 将电压转换为数字量;Python 程序再把数字量转换成百分比、电压和状态等级。这个过程非常接近真实传感器项目中的数据采集、数据清洗、状态判断和输出控制逻辑。文章目录理论基础硬件设施软件代码扩展应用总结理论基础电位器可以理解成一个可调电阻器。旋转旋钮时,输出端电压会随旋钮位置发生变化。这个变化不是简单的高电平或低电平,而是一段连续变化的模拟电压。普通 GPIO 更适合读取开关量,例如按键是否按下、传感器是否触发;而电位器这种连续变化的信号,需要 ADC 模数转换模块才能被程序稳定读取。PCF8591 在本实验中承担 ADC 和 DAC 两个角色。AIN0 用于读取电位器输出电压,属于模拟输入;AOUT 用于输出一个跟随 ADC 数值变化的模拟电压,属于模拟输出。程序通过pot_adc.read(ADC_CHANNEL)获取 AIN0 的采样值,再通过pot_adc.write(value)把采样值写入 AOUT。这样就形成了从模拟输入到数字处理,再从数字值回到模拟输出的简单闭环。本实验中,CanMV K210 通过软件 I2C 与 PCF8591 通信。物理引脚 6 作为 SCL,物理引脚 7 作为 SDA。电位器输出端接入 PCF8591 的 AIN0,程序读取到的 ADC 原始值通常在 0~255 范围内变化。VREF = 3.3用于估算电压,表示程序默认把 ADC 最大值 255 对应到 3.3V。如果模块实际使用 5V 供电,电压估算值需要把VREF改成5.0。