1 概述
在当今的社会生活中,颜色识别得到越来越广泛的应用。各个领域的广泛应用需求使颜色识别技术有了长足的发展,结合其他技术,可为工业控制、产品制造等多个行业更好地服务。
目前,颜色识别技术主要是通过结构简单、使用方便的单片机来实现,而本设计选用FPGA来实现,该系统可应用于印染、油漆、汽车等行业,也可以装在自动生产线上对产品的颜色进行监测。这样选择的好处有以下几点:
① FPGA芯片是并行运算的,每个振荡周期都可以执行任务,而单片机(如8051系列)的每条指令都需要12个振荡周期。例如,单片机I/O端口的变化最快也需要24个振荡周期,而FPGA只需要2个振荡周期,所以同样的振荡周期下,FPGA速度更快。
② FPGA有丰富的I/O资源(一般有数百个I/O口),容易实现大规模系统,可以方便地连接外设(比如多路A/D、D/A等)。而单片机的I/O口有限,要进行仔细的资源分配、总线隔离。
③ FPGA可以进行硬件重构,在功能扩展或性能改善方面也非常容易。
本设计选用了Altera公司的NiosII软核,使用SOPC的软硬件综合解决方案。与
传统的设计方法完全不同,从硬件和软件整体设计上进行了极大的改进,使硬件电路更加简单、有效、易于理解,软件设计更轻松、可移植性更强\[2\]。
2 设计原理
如图1所示,颜色识别系统主要由模拟和数字两部分组成。模拟部分主要用来转换光电信号、放大信号和滤除噪声。数字部分主要用来对A/D采样进来的数字信号实现中值滤波、查对数表、求对数比,以及显示等操作。
图1 颜色识别系统总体框图
3 模拟部分
3.1 颜色采集模块
本设计中采用的色敏传感器是CLS9032。该传感器有2个垂直连接的PN结,其厚度可以给色敏传感器起到一个光学滤波器的作用。波长较短的光在硅的表面就被吸收了,而波长较长的光到达深一些的位置才会被吸收。基于这种光谱的敏感性,根据光的波长来选择信号(颜色)。使用2个光电二极管之间的对数电流比作为信号处理的方法。不同颜色的光照射时,该色敏传感器红、绿、蓝区3个引脚都会输出电流信号,但是相应颜色的引脚输出的电流信号会比其他引脚输出的电流信号强。利用这种原理能够有效地避免外界环境造成的输出电流的起伏,因此这种器件具有较高的可靠性。
在距离色敏传感器1.5 cm处,分别用红、绿、蓝3种颜色的光源直接照射,检测经过模拟部分处理后的输出电压信号。实际测试数据如表1所列。
表1 RGB三个通道输出的电压
3.2 放大模块
图2是模拟部分制成PCB后的实物图。选取了有代表性的红、绿、蓝3种颜色,分别用相应颜色的发光二极管来代表。使颜色识别系统有充足的光线照射,便于探测。
图2 模拟部分的PCB实物图
图3 3级放大电路
色敏传感器负责把不同颜色的光信号转换成电流信号,但是电流信号只是几十到几百nA的数量级,需要放大电路来放大到所需要的程度。不同颜色产生的微弱电流信号传送到对应的线路通道上,通过以下3级放大,把nA级的电流信号转换成V级的电压信号。具体电路如图3所示。
① 第1级是在电流放大的模式下工作,运放选用高精度、低噪声的高精密运放OP177。经过放大的信号大致能达到几十mV。这个幅度的电压还太小,不能输入到数字系统,因此还要对电压信号进行进一步的放大。
② 第2级放大为同相的电压放大,选用高精度的集成运放OP07。放大后的电压幅度大致为几百mV,且放大的输出为负。
③ 第3级放大要采用反相的电压放大,运放同样选用OP07。输出的信号幅度为几伏,能够满足输入数字系统的要求。
3.3 滤波模块
经过放大后的直流信号,因为有噪声的干扰,还有一些毛刺。经过查阅参考文献和实际的实验测试,最终采用20 Hz二阶有源低通滤波器,可以为后面的级联使用提供干净的信号。
4 数字部分
本次设计的核心地方是数字部分,系统的搭建是基于Altera公司的NiosII处理器。
电压信号经过滤波处理,被传送到A/D转换器,经过A/D转换得到数字信号,为数字部分对信号的识别处理作准备。根据所选用的色敏传感器的工作原理,用SOPC系统进行控制,对3路模拟电路信号进行同步的A/D转换以增强系统准确性。在保证可靠性和精度的前提下,为降低系统成本,满足对输入数字信号倍数的要求,A/D转换器选用8位串行输出的ADC0809转换器。
采用NiosII软核搭建的FPGA系统处理数字信号,主要经过以下操作:
① 中值滤波,进一步去除干扰信号;
② 查对数表,查数据所对应的对数值;
③ 求对数比,对分别采集到的2个数据求对数比,为判断是哪种颜色提供依据;
④ 显示颜色识别结果,亮不同的灯来表明所识别出来的不同颜色。
4.1 硬件设计
在FPGA芯片上搭建一个NiosII处理器系统,包括可配置的NiosII CPU软核、与CPU相连接的片内设备和存储器,以及与片外设备和存储器相连的接口等。
NiosII处理器是Altera公司的第二代用户可配置的通用32位RISC软核微处理器,是Altera公司特有的基于通用FPGA架构的CPU软核。NiosII系统是在NiosII处理器基础上添加片上(FPGA)设备、存储器以及片外设备和存储器接口所组成的系统。NiosII具有明显的优势[3]:
① NiosII处理器具有灵活的外设配置和地址映射。由于NiosII处理器和片上设备及接口具有软核特性,设计者可以为设计目标量身定做合适的NiosII处理器系统,既可以增加CPU的功能,提高处理器的系统性能,也可以对不必要的处理器性能和外设进行剪裁,以满足低成本的小型系统设计。另外,访问存储器和外设的软件一般与地址分配无关。
② NiosII系统可以自动创建,Altera的SOPC Biulder设计工具使处理器的配置全自动完成,能自动产生并编程FPGA的硬件设计。系统的创建不需要设计者进行任何的底层原理图和硬件描述语言(HDL)设计。
③ NiosII处理器系统可以定制指令,从而增强系统的性能。
正是基于这些优点,本设计最终选用NiosII处理器系统来完成颜色信号的处理和识别[4]。如图4所示,NiosII处理器系统的片上系统包括NiosII CPU、片上RAM、定时器、ADC接口、Avalon总线、Avalon三态桥、PIO、JTAG UART等部分。另外,在片外扩展了Flash(用来存放程序和相应的数据)和SSRAM(相当于内存)。
图4 NiosII处理器系统框图
具体器件的选择如表2所列。
表2 具体器件说明
使用Altera公司的SOPC Biulder创建整个NiosII处理器硬件系统,包括系统的各组成部分,以及时钟频率、地址分配和中断等级。
在QuartusII中调用SOPC Builder中生成的NiosII处理器系统,再添加锁相环,为系统提供时钟,最后编译下载到目标FPGA芯片中。本设计用的是基于EP2C35M672(CycloneII)的GXSOC/SOPCDevLabPlatform开发板[5]。
4.2 软件设计
使用C语言进行软件编程,主要分以下几步:
① 读取A/D转换后的数据。根据ADC0809的时序要求,使用C语言编程,产生时钟、片选和读使能信号,实现对A/D转换后数据的读取。
② 为了消除外界信号的干扰,要对读取的数据进行滤波。本系统采用适合信号变化缓慢的中值滤波法,花费较少的运行时间就能达到很好的滤波效果。中值滤波法如图5所示。先由SOPC控制A/D转换器连续取5组数据,按输入通道(RGB)的不同分别存放在预先给定的数据空间。对数据进行多字节冒泡法排序后取中间值,从而实现SOPC对输入数据的中值滤波。
图5 中值滤波法示意图
③ 在对数表中查找此组数据在Flash中所对应的对数。本设计使用查对数表的方法求对数值,虽然会占用一部分Flash空间用来存放对数表,但是可以大大缩短对数计算的时间,从而提高颜色识别的速度。
④ 对深浅两个结信号的对数值相减,就实现了求信号比的对数。
⑤ 比较计算值与预存颜色值,即可实现对各种颜色的识别;比较计算值与不同时间值,即
可实现对颜色变化的识别。
在使用过程中,总有某些时刻系统处于非探测工作期。但此时系统还处于工作状态,SOPC还会控制A/D转换器进行采样,而SOPC本身也会对转换后的数字信号进行处理,并产生有色差的警报。为了消除这种误报警,需控制放大器的放大倍数。相差几十nm的入射光经过放大后,其电信号的差值很大,经A/D转换后的数值会溢出或接近溢出。利用这一特性,设定一个上限值,如果数值比这个上限值大,则系统做出非探测工作期的判断,程序重新开始执行。
结语
随着新技术、新材料的不断涌现,在现代化工业生产中,颜色识别系统的应用越来越多,也越来越复杂。以色敏传感器为探测器,使用内嵌NiosII软核处理器的FPGA作为运算、控制核心的颜色识别系统,具有结构简单、可靠性高、使用方便、扩展性强等优点。利用FPGA快速强大的处理功能,能够快速、准确地实现颜色的识别。利用现代信息融合技术,采用新型、高灵敏、响应快的色敏传感器,一定能使颜色识别更加精确、更加可靠。