李 磊 李晓斌 李玲玲
(西安电子工程研究所 西安 710100)
查线工作是产品调试之前的一道关键工序,它能防止因接线错误、接线短路造成的电路功能故障或损坏。目前,我所的生产现场还普遍采用人工查线的方式进行导线连接正确性检查,这对于比较复杂的接线系统而言,不但耗时费力,且经常出现漏查、错查的情况,影响生产进度。因而应用自动化的查线方式渐渐成为一种趋势,但市场上现有的自动查线装置主要针对接线规模很大的产品,一般使用继电器作为查线通道切换装置,应用面向对象的语言开发人机界面,其体积大、价格高、还必须使用通用计算机作为显示控制设备,所以此类装置在使用灵活性和性价比上对于一些接线规模中等或偏小的产品不具有很好的适用性。
本设计主要是以单片机和多通道模拟开关芯片为硬件基础开发的自动查线装置,以集成化的设计方式在一块印制板上实现了查线装置的主体设计,通过C 语言对单片机进行开发只用14 个按键开关和1 个12864 型小型字符液晶显示屏就构成了该装置的人机操作界面,以极为低廉的成本和简单可靠的技术方式开发了一种便携式的自动查线装置,具有对150 根导线的产品进行自动查线的能力。可以适用于我所在产的大多数产品,能大大减轻查线操作人员的劳动强度,并能保证查线结果的准确性。
自动查线系统的组成框图如图1所示,共由5个部分组成:单片机、按键开关阵列、液晶显示部分、输出开关阵列、输入开关阵列。
图1 自动查线系统组成框图
从图1 中可以看出系统主要通过两组开关阵列及C8051F040 单片机来实现:用单片机作为核心控制器件完成测试信号的自动读取功能;通过输入、输出两组开关的共同作用,将测试信号送入指定导线的输入端,并通过相应的输出端子发送回单片机。具体过程如下:系统对被查电缆中的所有导线进行编号,输出开关阵列与导线的输入端相连;输入开关阵列与导线的输出端相连。当需要对某根导线进行通断检查时,通过按键输入该导线的编号值,单片机对输入编号进行解算后将其转换为对输入开关阵列的控制信号,同时控制输出开关阵列进行扫描切换,使每根导线的输出端逐个与单片机的测试信号读取接口相连,单片机若在某根导线的输出端读取到该测试信号,就将该导线的编号值输出到显示器上,若输出编号值与输入编号值一致,说明是该导线连通,若输出值与输入值不一致,说明被该导线存在短路情况;若导线输入端与任何输出端都不连通,则查线结果显示为“悬空”,也就是说该导线存在断路情况。从而,整个查线过程实现了以自动的方式完成电缆指定端子的测量和结果判读。
本系统选用C8051F040 型单片机具有64 个通用I/O 接口,可运行于25MHz 时钟频率下,同时该单片机本身具有的流水线指令结构也使其拥有更高的运行速度。针对本装置带有按键开关阵列、液晶显示器、输入、输出开关阵列等多个外围设备,至少需要56个控制接口的要求,该单片机满足最低使用要求。
单片机作为该系统的核心,需要完成以下三个功能:
(1)按键值读取:读取按键开关阵列的输入值(导线编号),并将相应编号显示在液晶显示器上;
(2)输出开关阵列的控制信号:对按键输入值进行解算,将其转换为对输入、输出开关阵列的控制信号,使输入、输出开关阵列分别切换到指定的通道上;
(3)查线结果显示:将读取到测试信号的通道编号显示在液晶显示屏上,并对导线悬空、输入导线编号值超出范围等情况进行相应的错误提示。
以下将逐一介绍系统各功能的实现过程:
按键开关阵列由16 个点触式开关组成,图2 为其原理图。通过将单片机的P0 口接至该开关阵列,采用“线反法”可以读取16 个开关的状态。
图2 按键开关矩阵原理图、功能图
在按键值读取的过程中,为了防止发生输入错误,设定最多只能输入3 位编号(系统最大查线数量为160 根导线),当一次输入的编号值大于3 位时,显示部分会清除原有的输入值,重新从第一位输入开始显示;另外为了方便使用,输入编号时不但可以直接通过数值按键进行输入,还设定有两个步进按键,这样可以方便的使当前导线编号值加一或者减一,在以顺序方式进行查线时这一点会带来明显的效率提升。
按键值读取部分程序框图如图3所示,操作人员每触发一次按键,单片机首先对被触发按键的类型进行一次判断,以便调取不同的操作。另外程序中设置有一个变量C,其作用是对输入编号的位数进行计数,当输入位数大于3 时,程序会清除当前的显示。具体过程如下:
图3 按键值读取部分程序框图
(1)如果被触发的是数值按键,C 的值会加1,当C 的值大于3 时(输入编号大于3 位),程序会清除当前的显示值,C 的值被清0,这样,输入位数将从1 开始重新计数;
(2)当被触发的按键是步进按键时,程序会对当前的显示编号值进行相应的加减操作;
(3)当被触发的按键是“确认”按键时,程序会认为本次编号的输入已经完成,C 的值被清0,并且,编号值将会被单片机解算成输出开关阵列的控制信号发送出去;
(4)“复位”按键被触发时,单片机的程序将重新加载,系统进行重启。
对编号值进行显示时尤其需要注意的一点是,向液晶屏发送显示内容时只能以字符变量的形式进行发送。例如,要显示“121”这个编号值,不能直接向液晶屏发送“121”这个数字,因为液晶屏不能识别这种整形变量,最终的显示结果会变成乱码;正确的方法是定义三个字符变量‘1’、‘2’、‘1’并逐个发送到液晶屏上进行显示。
为了满足160 根导线的查线规模要求,系统的输入、输出开关阵列一共由20 个“16 选1 模拟开关”组成,每一个开关由一位使能信号来控制工作状态:使能信号为低电平时开关处于关断状态,16个通道与开关的公共端都不连通;使能信号为高电平时,开关进入16 选1 工作模式。开关中的通道选择是通过4 位2 进制编码来实现的,编码规则为“8421 码”,从0000 到1111。开关阵列的原理图如图4所示:
本设备在解算开关控制信号时使用如下算法:
(1)先将三个用于显示编号值的字符型变量转换为整形数值;
(2)判断该编号值对应于哪个16 选1 开关,并使该开关的使能位置高;
(3)判断该编号对应于该开关中的哪一个选通通道,然后产生相应的选通编码使开关切换到该通道上。
如前所述,显示在液晶屏上的编号值实际上是三个独立的字符型变量,而不是一个完整的整数形数值,所以需要通过如下办法将其转换为一个整数型数值:
首先将三个显示字符变量array[0]、array[1]、array[2]转换为三个整形变量n[0]、n[1]、n[2],这三个整形变量分别对应于编号值中的百位、十位、个位数值,然后通过公式100 ×n[0]+10 ×n[1]+1×n[2]计算出实际的编号值。
图4 开关阵列工作原理图
这部分功能由一个名为show_num 的函数实现,该函数的输入参数为显示变量数组array,返回值为编号值num,程序中的digit 数组是与16 个按键对应的字符数组,该函数的完整程序如下:
接下来,通过对编号的简单运算就可以完成对开关和选通通道的选择:
(1)计算开关编号的公式:b=int(a/16)(a-导线编号值,b-开关编号值,int(a/16)表示对运算a/16 得到的结果取整数);
(2)计算选通通道的公式:c=a%16(a-导线编号值,c-开关选通通道编号值,a%16 表示a对16 取余数);
查线结果的显示,实际是编号值解算的一个逆过程,依照以下步骤进行:
(1)单片机控制输入开关阵列进行扫描,在每一个通道都进行一次测试信号的读取;
(2)对于读取到测试信号的通道,将该通道的编号值转换为可显示的字符型变量;
在转换字符变量时,首先将编号值中的百位、十位、个位数值分别解算出来,然后将其逐个转换为字符变量,送至液晶显示器。
该系统以一种简单的硬件原理实现了查线工作的自动化,通过软件设计上的优化实现了良好的人机交互界面,使得查线结果能够清晰、准确的得到表达。目前该系统已投入使用,经过1年多的实践,证明该查线系统可以准确无误的进行导线通、断、短路检查,彻底消除了人工查线带来的漏查隐患。
本文重点介绍了该系统的软、硬件实现原理,系统软件部分使用C 语言进行编程,因程序较长在文中只进行了部分罗列,并对其中的主要实现原理、算法进行了讲解。
图5 自动查线系统实物图
图6 自动查线系统工作状态示意图
[1]范立南,李荃高,李雪飞.单片机原理及应用教程[M].
[2]潘琢金,孙德龙,夏秀峰译,C8051F 单片机应用解析[M].北京:北京航空航天大学出版社.
[3]盛伟荃,曾连荪,基于C8051F040 的CAN 总线与RS-232 通信设计[J].电子设计工程,2014,22(13):191-193.
[4]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,1998.
[5]张辉.基于C8051F040 单片机的CAN 总线测试模式研究[J].现代电子技术,2012,35(6):43-48.
[6]严蔡郁知.两种LED 显示方式应用对比[J].福建电脑.2010,(9):77-78.
[7]张毅刚,修林成,胡振江.MCS-51 单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1992.