D223的DIO数字接口:边沿检测、外部触发与工业接线方案
数据采集卡不只是采集模拟量数字I/O同样是核心功能。本文解析D223的8路DI/8路DO接口设计以及DIN外部触发如何与SRAM记录仪联动。一、DIO硬件架构1.1 数字输入DID223提供8路数字输入通道[note_63][img_147]参数规格通道数8路输入类型非隔离逻辑电平5V扫描周期1msD223的DI为非隔离设计适用于5V逻辑电平场景。与之对比DABL-G511的DI为隔离型输入逻辑电平12-24V硬件响应时间100μs[word_6]。1.2 数字输出DOD223的DO采用达林顿开漏输出[word_6][img_147]参数规格通道数8路与PWM共用引脚输出类型达林顿开漏NPN型驱动能力100mA/通道负载电压5-24V DC响应时间≤10μs过流保护板内串接10Ω限流电阻达林顿开漏输出需要外部上拉负载才能工作。典型负载包括继电器线圈、光耦输入、指示灯等[word_6]。续流保护提醒达林顿管内置续流功能但建议用户在继电器、电磁阀就近放置续流二极管。达林顿只能辅助续流不能完全替代外部续流二极管[note_259]。二、DIO软件实现2.1 DIO结构体定义D223固件中DIO的数据结构[note_63][word_4]typedefstruct{u8 dout[8];// 数字输出状态 (DO1-DO8)u8 din[8];// 数字输入状态 (DI1-DI8)u8 dinAll;// 8位DI打包值u8 pwmEnable[6];// PWM使能 (PWM1-PWM6)u16 pwmPulseNum[6];// PWM脉冲数 (0连续)u8 uploadFinshFlag;// 上传完成标志}dioParam;2.2 dio_tim_task()1ms定时任务DIO的核心处理在dio_tim_task()函数中由TIM12提供1ms定时中断驱动[note_63]voiddio_tim_task(){// 1. 刷新数字输出HAL_GPIO_WritePin(DOUT_1_GPIO_Port,DOUT_1_Pin,_dioParam.dout[0]);HAL_GPIO_WritePin(DOUT_2_GPIO_Port,DOUT_2_Pin,_dioParam.dout[1]);// ... DOUT 3-8 ...// 2. 设置ADC量程HAL_GPIO_WritePin(AD_RANGE_GPIO_Port,AD_RANGE_Pin,_framDatas._adcParam.adcRange1);// 3. 读取8路DI输入边沿检测u8 currentDin0;for(u8 i0;i8;i){u8 currentStateHAL_GPIO_ReadPin(DIN_GPIO_Port[i],DIN_Pin[i]);// 光耦导通时MCU引脚为低电平取反后din1表示有效currentState!currentState;if(currentState!_dioParam.din[i]){// 状态变化_dioParam.din[i]currentState;// SRAM记录模式下的外部触发if(SRAM记录模式配置了DIN触发上升沿检测){fun_dinTrig_StartSramRecord();}}}_dioParam.dinAllcurrentDin;// 4. PWM加减速计算每100msmotorAccDiv;if(motorAccDiv100){...}}2.3 GPIO引脚分配D223的GPIO引脚定义[note_63]宏名引脚功能USB_RST_PinPE3USB芯片复位FPGA_SPI_CS_PinPA4FPGA SPI片选AD_RESET_PinPD8ADC复位AD_RANGE_PinPD9ADC量程切换DA_CS_PinPA10DAC芯片片选DOUT_1_PinPA11数字输出1DOUT_2_PinPA12数字输出2FRAM_CS_PinPA15FRAM芯片片选三、DIN外部触发与SRAM记录仪联动3.1 触发原理D223的SRAM记录仪支持外部DIN触发功能[word_5]。当配置了DIN触发后dio_tim_task()每1ms扫描8路DI输入状态检测到配置的触发边沿后调用fun_dinTrig_StartSramRecord()启动记录[word_4]。触发流程上位机配置采样率、采集时间 → 使能DIN触发 → FPGA进入待触发状态 → DIN信号变化上升沿/下降沿→ fun_dinTrig_StartSramRecord() → FPGA开始将ADC数据写入SRAM → 采集完成 → STM32读取SRAM → USB上传3.2 DIN触发接线方案D223的DIN输入为PNP型[word_5]。以下是几种常见的接线方案方案1NPN型传感器触发传感器NPN输出 ──→ DIN输入 ↑ 内部上拉到5VNPN型传感器输出低电平有效D223的DIN输入检测到下降沿触发。方案2简单开关触发最简单的NPN接口通过一个开关将DIN输入与GND短接 板载DIN输入灯亮的瞬间触发记录仪开始采集方案3继电器触点触发继电器常开触点 ──→ DIN输入 GND 继电器吸合时 → 触点闭合 → DIN接地 → 触发3.3 触发响应时间DIN扫描周期为1msdio_tim_task每1ms执行一次因此外部触发的响应延迟最大为1ms[note_63]。但对于SRAM记录仪模式一旦触发条件满足FPGA立即开始写入SRAM数据采集本身的响应是硬件级的纳秒响应。1ms的延迟仅存在于检测到DIN变化这一环节。四、DIO命令协议4.1 设置数字输出上位机发送命令设置DO状态[note_63]case_cmdId_setOutputIO:fun_msgSetOutputIO(rxData);break;fun_msgSetOutputIO()解析数据段中的8位DO状态写入_dioParam.dout[]数组。下一次dio_tim_task()执行时自动刷新到GPIO引脚[note_63]。4.2 读取数字输入上位机可以随时读取DI状态。DI状态打包在ADC数据帧中一起上传8位DI状态用一个字节表示bit0bit7分别对应DI1DI8[word_6]。五、DIO在工业场景中的应用场景1限位开关检测限位开关 → DIN1 当机械臂触碰限位开关 → DIN1变为高电平 → 上位机检测到 → 停止PWM输出场景2急停按钮急停按钮常闭触点→ DIN2 按下急停 → 触点断开 → DIN2状态变化 → 上位机报警场景3电磁阀控制DO1 → 继电器线圈 → 电磁阀 上位机发送DO11 → 继电器吸合 → 电磁阀动作场景4SRAM触发记录光电传感器 → DIN3配置为SRAM触发源 物体经过光电传感器 → 触发SRAM记录仪 → 捕获完整波形六、与其他型号的DIO对比型号DI通道DI隔离DO通道DO类型PWM路数DABL76068路非隔离8路达林顿开漏4路DABL76898路非隔离8路达林顿开漏4路DABL-G5116路隔离8路达林顿开漏7路DABM-D2238路非隔离8路达林顿开漏6路DABL-G511是唯一提供DI隔离的型号适合高压工业环境。D223的DI为非隔离设计适合低压5V逻辑场景[img_147]。七、单位自定义功能D223支持丰富的单位自定义功能可以支持几十上百种单位最大支持256个单位并且可以任意修改[note_259]。这意味着用户可以根据实际应用场景将ADC原始值转换为任意工程单位如温度、压力、位移等。八、总结D223的DIO数字接口实现了8路DI输入1ms扫描周期支持边沿检测8路DO输出达林顿开漏100mA驱动能力DIN外部触发与SRAM记录仪联动1ms检测响应PWM共用引脚6路PWM与DO灵活复用256种自定义单位支持任意工程单位转换下篇预告《D223的USB通信协议设计帧格式、CRC16校验与命令分发机制》