I/O端口有四种标准分类:
DI (Digital Input - 数字量输入):接收一个离散的、通常是两态的开关信号。例如:按钮是否按下、接近开关是否检测到物体、继电器的通断状态。
典型值:0 (OFF) 或 1 (ON),有时是 0/24V, 0/5V 等。
DO (Digital Output - 数字量输出):输出一个离散的、控制外部设备的开关信号。例如:点亮指示灯、启动继电器、控制蜂鸣器。
典型值:输出 0 (OFF) 或 1 (ON)。
AI (Analog Input - 模拟量输入):接收一个连续变化的物理量信号。这个信号需要被转换成数字值才能被计算机处理。
典型信号:4-20mA电流,0-10V电压,热电偶的毫伏信号等。
典型值:一个范围内的整数值(如0-4095对应12位ADC)或一个工程单位的浮点数(如25.6°C, 103.5kPa)。
AO (Analog Output - 模拟量输出):输出一个连续变化的控制信号。
典型信号:输出4-20mA电流,0-10V电压。
典型值:接收一个范围内的整数值(如0-4095)或一个工程单位的浮点数(如50.0%的开度),然后由硬件转换为相应的模拟信号。
ARM + Linux架构,集成的io控制模块的方法:
第一部分:硬件集成
ARM Linux板子(如树莓派、RK3399、i.MX6ULL等)本身通常只有有限的GPIO引脚。要控制工业上常见的更多、更专业的I/O模块(如多路DI/DO、AI/AO卡),需要通过以下方式集成:
1)片上GPIO (最直接)
直接使用主芯片引出的GPIO引脚。功能简单,数量有限。
连接方式:通过排针引出,直接连接简单的传感器(如按钮、LED)或通过光耦、继电器模块驱动大负载。
2)总线扩展 (最常用)
通过板载的标准总线协议连接专门的I/O扩展芯片或模块。这是扩展I/O能力的主流方式。
常见协议:
I²C (Inter-Integrated Circuit): 2根线(数据线SDA、时钟线SCL),适合中低速、短距离、连接多个从设备(每个设备有唯一地址)。常见I/O扩展芯片如PCA9554/9555(8位I/O)、MCP23008/23017(8/16位I/O)。
SPI (Serial Peripheral Interface): 4根线及以上(时钟SCLK、主出从入MOSI、主入从出MISO、片选CS),全双工、高速。常见I/O扩展芯片如MCP23S08/23S17(SPI接口的I/O扩展器)。
UART (串口): 2根线(TX、RX),通过连接协议转换模块(如Modbus RTU协议转I/O的模块)来控制远程I/O。在工业领域非常普遍。
专用功能扩展 (针对性强)
通过如PCIe、USB等接口连接功能更强大的外部I/O控制卡。这种方式性能高,但成本和复杂度也高。
第二部分:软件控制
软件控制的核心:为硬件I/O找到或创建其在Linux系统中的软件接口。有以下三种层次的方法,从上到下,难度和灵活性递增。
方法一:使用Sysfs (用户空间最常用)
这是最简单的方法,无需编写内核代码。Linux内核的GPIO子系统提供了一个通过文件系统(/sys/class/gpio/)访问GPIO的接口。
控制步骤(以控制GPIO Pin 18为例):
导出GPIO:告诉系统你要使用哪个GPIO。
echo 18 > /sys/class/gpio/export
执行后会出现 /sys/class/gpio/gpio18 目录。
设置方向:设置为输出(out)或输入(in)。
echo "out" > /sys/class/gpio/gpio18/direction
读写值:
输出高电平/低电平:
echo 1 > /sys/class/gpio/gpio18/value # 输出高电平
echo 0 > /sys/class/gpio/gpio18/value # 输出低电平
读取输入值:
cat /sys/class/gpio/gpio18/value
取消导出(完成后):
echo 18 > /sys/class/gpio/unexport
对于AI和AO的使用解释:
AI (Analog Input) - 模拟量输入 【主要功能:读】
AI通道的本质是一个测量器。它的工作流程是:
物理信号 -> 数字值 -> 工程值
物理信号:来自现场的传感器,是一个连续变化的电压或电流信号。
常见范围:0-10V, 0-5V, ±10V, 4-20mA 等。
例如:温度传感器(PT100)输出 4-20mA 电流,对应温度范围 0-100°C。
数字值 (Raw Value):
AI模块内部的ADC(模数转换器) 将物理信号转换成一个整型的数字值。
这个值的范围取决于ADC的分辨率(位数)。
例如:一个12位的ADC,转换后的数字值范围是 0 - 4095。
工程值 (Engineering Value / Scaled Value):
数字值对人类来说没有直接意义,需要通过一个量程转换公式,将其转换成具有实际物理单位的数值。
转换公式:工程值 = (数字值 - 数字下限) / (数字上限 - 数字下限) * (工程上限 - 工程下限) + 工程下限
接上例:4mA (对应数字值0) ~ 20mA (对应数字值4095) 对应 0°C ~ 100°C。
当读到的数字值 = 2048时,计算:温度 = (2048 - 0) / (4095 - 0) * (100.0 - 0.0) + 0.0 ≈ 50.0°C
AO (Analog Output) - 模拟量输出 【主要功能:写】
AO通道的本质是一个设定器。它的工作流程是AI的逆过程:
工程值 -> 数字值 -> 物理信号
工程值:你希望输出的具有物理单位的数值。
例如:你希望控制阀门的开度为 65.5%。
数字值 (Raw Value):
AO模块内部的DAC(数模转换器) 会根据量程转换公式,将工程值转换成一个整型的数字值。
接上例:0.0% (对应数字值0) ~ 100.0% (对应数字值4095) 。
数字值 = (65.5 - 0.0) / (100.0 - 0.0) * (4095 - 0) + 0 ≈ 2683
物理信号:
DAC根据数字值2683输出一个对应的模拟电压或电流信号。
例如:输出一个 (2683 / 4095) * 10V ≈ 6.55V 的电压信号去驱动阀门定位器。
644

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



