ADC 使用教程

IIO子系统

IIO(Industrial I/O)子系统是 Linux 内核中的一个重要组成部分,专门用于处理各种工业和嵌入式应用中的模拟输入和输出设备。这些设备可以包括传感器、ADC(模数转换器)、DAC(数字模拟转换器)以及其他模拟信号处理设备。IIO 子系统的主要目标是提供一个通用的、统一的框架,以便在 Linux 中支持各种不同类型的模拟设备。
IIO 子系统通过 sysfs 文件系统和用户空间提供了统一的接口,允许用户轻松地访问和配置模拟设备。这意味着应用程序可以使用标准的 Linux 文件I/O操作来与传感器和模拟设备进行通信。
查看引脚分布

开发板默认开启了 ADC 接口,测量范围为0V~1.8V。我们通过接口图可以看到,开发板 ADC 接口对应的引脚编号均为144和145。
查看基本信息

1.设备目录
在 /sys/bus/iio/devices 目录中,包含了与系统中检测到的 IIO 设备相关的子目录。每个子目录通常对应一个特定的 IIO 设备,其名称可能包括设备类型和编号。如果您想查看系统存在的 IIO 设备,可以使用如下命令:
2.设备属性
每个设备子目录中包含了一组属性文件,这些文件用于获取和配置 IIO 设备的各种参数和状态。例如,您可以通过读取这些文件来获取传感器的数据,配置采样频率,或者设置中断阈值。
- 查看设备的属性文件
- 属性文件
在这个目录中,主要用到的文件是 in_voltage0_raw 、 in_voltage1_raw 和 in_voltage_scale。
- in_voltage0_raw 文件包含ADC输入通道0的原始电压值,通常以整数形式表示,可以使用 cat 命令来读取它,例如:
- in_voltage1_raw 文件包含ADC输入通道1的原始电压值,通常以整数形式表示,可以使用 cat 命令来读取它,例如:
- in_voltage_scale 文件包含了一个比例因子,可以将原始电压值转换为实际电压值。您可以使用 cat 命令来读取它,例如:
编写shell脚本获取电压值

要获得 ADC 通道0和通道1实际的电压值,您可以编写一个shell脚本分别读取原始电压值 in_voltage0_raw 、 in_voltage1_raw 和比例因子 in_voltage_scale 的值,然后分别将两个原始电压值与比例因子相乘即可,如下所示:
- 使用vi编辑器打开shell脚本
- 编写shell脚本
- 运行脚本
编写读取ADC的C程序




在前文中,我们演示了如何使用 Shell 脚本获取实际的电压值。此外,我们还可以使用C库函数或系统调用来读取设备文件,从而实现获取电压值的目标。请注意,为了在特定的嵌入式系统上运行程序,通常需要使用交叉编译工具来编译代码,以生成可在目标开发板上执行的可执行文件。接下来,让我们一起探讨具体的实施步骤。
1 完整代码
通过附件程序,可以实现获取 ADC 通道0和通道1的电压值。
2 打开文件
这段代码定义了文件路径相关的变量,通过 sprintf 根据 adc_dir 动态构建了三个文件路径并以只读的方式打开这三个文件,分别用于后续读取ADC设备双通道的原始电压值和比例因子。
3 计算电压值
这段代码实现了一个循环,每秒读取一次ADC设备双通道的原始电压值和比例因子,然后计算并显示出实际电压值,保留小数点后六位。文件操作通过fseek确保每次循环都从文件开头读取数据。
交叉编译

- 指定交叉编译工具(如果之前做过实验此步可省略)
首先,我们要将交叉编译工具的路径添加到系统的 PATH 环境变量中,以便可以在任何地方使用交叉编译工具,您可以在shell配置文件中添加以下行(通常是 ~/.bashrc 或 ~/.bash_profile 或 ~/.zshrc,具体取决于您使用的shell),注意 PATH= 后的路径为交叉编译工具所在的目录。
- gcc路径
- 打开shell配置文件
- 将交叉编译工具的路径添加到系统的PATH环境变量中,将 <SDK Directory> 修改为自己的 SDK 路径,如 /home/luckfox/luckfox-pico/
- 重新加载shell配置文件,使更改生效
- 使用交叉编译工具编译程序
- 交叉编译成功后,将在当前目录下生成可在开发板运行的可执行文件
运行程序

- 文件传输
先将 adc 从虚拟机传输到 Windows,再通过 TFTP 或 ADB 传输到开发板,将文件从 Windows 通过 ADB 将文件传输到开发板的步骤如下:
- 运行程序
修改 adc 文件的操作权限后运行程序











