工业显示触控防误触编程:在油污、手套操作场景下保证触控可靠
工业现场触控不可靠,多数不是屏坏了,而是把消费电子单指逻辑直接搬过来:裸手调好的阈值,戴上劳保手套信号衰减;屏面沾切削液形成水膜,控制器看到“一大片触点”就乱报。 防误触不是把灵敏度拉到最高,而是在驱动层做介质区分、在HMI层做区域和确认约束。
一、物理根因先搞清楚
投射式电容靠手指耦合电场引起互电容下降来定位。两条失效路径相反:
厚手套:指尖与电极间多一层介质,ΔC低于阈值→无响应
油污/水膜:表面形成半导电薄层,多点同时变化→鬼影误触
所以“调高灵敏度兼容手套”的代价是水膜更易误报,正确做法是模式可切换:裸手/手套/防水三套阈值,由HMI设置或PLC信号切换。
二、驱动层:斑点检测+面积阈值
触控IC给出原始电容矩阵后,先基线消除再做斑点(blob)提取:
#define MAX_BLOB 5
typedef struct {
int cx, cy; // 质心
int area; // 超过阈值的节点数
int peak; // 最大ΔC
int life; // 稳定帧数
} blob_t;
blob_t blobs[MAX_BLOB];
int blob_detect(int16_t diff[][RX_N], int thresh){
int n=0;
for(int i=0;i<TX_N;i++)
for(int j=0;j<RX_N;j++){
if(diff[i][j] > thresh){
/* 连通域合并到就近blob */
update_blob(&blobs[n], i, j, diff[i][j]);
}
}
return n;
}
判断是不是“真手指”看三个特征:
面积:手套按压面积大但ΔC弱;水膜面积大且边缘模糊
稳定性:手指位置连续几帧稳定,水会随倾角漂
形状:手指斑点集中,水膜连成片
int is_valid_finger(blob_t*b){
if(b->area < MIN_AREA) return 0; // 噪声
if(b->area > PALM_AREA) return 0; // 掌压/水膜
if(b->life < 2) return 0; // 单帧抖动丢弃
return 1;
}
水膜抑制别靠“全屏禁触”,而是屏蔽大面积斑点、保留稳定小斑点——湿手还能划。
三、手套模式:提增益+降去抖帧数
切换手套模式时:
触摸阈值下调、扫描增益提高
去抖确认帧从3帧降到2帧(手套信号弱,多帧会更钝)
水膜抑制阈值同步放宽,否则水膜误报暴涨
void touch_set_mode(touch_mode_t m){
if(m==MODE_GLOVE){
tp_set_threshold(GLOVE_TH);
tp_set_gain(GAIN_HIGH);
debounce_frames=2;
}else{
tp_set_threshold(NORMAL_TH);
tp_set_gain(GAIN_NORMAL);
debounce_frames=3;
}
}
厚皮/防割手套超过0.5mm基本别硬靠电容屏,单点工位直接上电阻屏更稳。
四、HMI层:禁用区域+关键动作确认
驱动层筛完点,HMI还要兜底:
1. 禁用区域(Touch Zone)
系统状态栏、返回桌面、关机区域直接不派发事件,避免袖口扫过退出HMI。
int in_disabled_zone(int x,int y){
for(int i=0;i<N_ZONE;i++)
if(pt_in_rect(x,y,&zone[i])) return 1;
return 0;
}
/* 事件分发前 */
if(is_valid_finger(b) && !in_disabled_zone(b->cx,b->cy))
ui_dispatch(b->cx,b->cy);
2. 按钮尺寸与间距
工业HMI按钮至少比裸手设计大一号,相邻控件留间隙,启动/停泵/开阀不挨着普通按钮。
3. 关键命令二次确认
启停设备、开阀、改设定值→先弹确认条,单点误触变“点+确认”两步。
4. 按压过滤(Alone模式)
屏上已有接触点再激活按钮不算新按,必须抬起重按——防手掌压屏边误触发。
五、EMI与结构别漏
变频器/伺服干扰会让坐标漂,软件再好也救不了:
触控板独立屏蔽地,FPC加磁环
触控信号线远离动力线30cm以上
整机PE接地可靠,浮地必飘
疏水AF涂层让水成珠不成膜
六、落坑清单
灵敏度一把梭拉满→水膜狂误触
手套模式不重新标阈值→要么点不动要么乱跳
只信单帧峰值→切削液点滴误报
重要按钮放屏幕边缘→线性度差点偏
系统栏不禁用→袖口扫出HMI
开阀按钮和页码键挨着→fat-finger误触
关键动作不确认→手掌蹭一下泵启动
校准用裸手、现场戴手套→整体偏
触控线和伺服线绑一起→带载就飘
上电时屏压着扳手→那块区域永久失灵
七、落地顺序
触控IC开三模式:裸手/手套/防水
每帧基线跟踪+斑点提取
面积/稳定帧/形状三维过滤
水膜抑制保留稳定小斑点
HMI设禁用区域屏蔽系统区
启动/开阀类按钮加确认
按压过滤防掌压误触
动力线屏蔽+PE接地+涂层选型同步做
工业防误触的本质是“分层拒假”:驱动层把水膜和手套信号认出来,HMI层把致命误操作挡住。只调灵敏度是伪解,水膜和手套是互斥工况,必须模式切换+面积判据;屏上逻辑再补禁用区和二次确认,才算把“油污+手套+袖口蹭屏”三件事都兜住。真现场验收别在实验室裸手点,戴现场同款手套、喷一层切削液再测,才有参考价值。





