基于多色光电二极管的颜色识别装置 - 图文

更新时间:2024-04-24 05:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

清华大学2012届毕业设计说明书

目录

1 绪 论 .............................................................. 1 1.1 研究的意义 ........................................................ 1 1.2 研究的背景 ........................................................ 2 1.3 国内外颜色识别技术的发展现状 ...................................... 2 1.3.1 国外颜色识别技术的发展 .......................................... 2 1.3.2 国内颜色识别技术的发展 .......................................... 3 1.4 本论文研究的主要内容 .............................................. 4 1.5 本章小结 .......................................................... 4 2 颜色理论及颜色识别技术基本算法 ..................................... 5 2.1 颜色的定义 ........................................................ 5 2.2 物理的现象 ........................................................ 5 2.2.1单色和混合色 ..................................................... 6 2.2.2 颜色与波动方程 .................................................. 6 2.2.3 人对颜色的感知 .................................................. 6 2.3 三基色原理 ........................................................ 8 2.4 颜色的三要素 ..................................................... 10 2.5颜色识别一般算法 ................................................... 10 2.5.1 RGB计色原理 ................................................... 10 2.5.2 白平衡 ......................................................... 11 2.6 本章小结 ......................................................... 11 3 本设计主要器件介绍 ................................................ 12 3.1 LCD1602 液晶显示器 ............................................. 12 3.1.1 LCD1602的基本参数及引脚功能 .................................. 13 3.1.2 1602LCD的指令说明及时序 ...................................... 14 3.1.3 LCD1602的RAM地址映射 ...................................... 15 3.1.4 LCD1602的初始化过程 .......................................... 16 3.2 颜色传感器TCS230 .............................................. 17

第 I 页 共II页

清华大学2012届毕业设计说明书

3.2.1 TCS230芯片的结构框图与特点: .................................. 17 3.3 光电二极管的工作原理 ............................................ 20 3.3.1 光电二极管的定义及原理 ......................................... 20 3.3.2 光电二极管的种类、特性与用途 ................................... 20 3.4 STC89C51 单片机 ................................................ 21 3.4.1 STC89C51的性能参数和主要功能 .................................. 21 3.4.2 STC89C51单片机的引脚功能说明 ................................. 22 3.5 本章小结 ......................................................... 24 4 颜色识别装置硬件设计 .............................................. 25 4.1 颜色识别装置系统的框架 ........................................... 25 4.2 TSC230颜色传感器模块与单片机的接口电路 .......................... 26 4.3 四个高亮白光LED ................................................ 27 4.4 LCD1602液晶显示器与单片机的接口电路 ............................. 27 4.5 颜色识别装置总原理图 ............................................. 28 4.6 本章小结 ......................................................... 29 5 颜色识别装置的软件设计 ............................................ 30 5.1 TCS230颜色传感器模块的软件设计 .................................. 30 5.2 LCD1602液晶显示模块软件设计 ................................... 33 5.3 本章小结 ......................................................... 36 6. 测试与分析 ........................................................ 37 7 结论与展望 ........................................................ 41 7.1 结论 ............................................................. 41 7.2 展望 ............................................................. 41 附录 A .............................................................. 42 参考文献 ............................................................ 49 致谢 ................................................................ 51

第 II 页 共II页

清华大学2012届毕业设计说明书

1 绪 论

1.1 研究的意义

随着现代工业生产向高速化、自动化方向的发展,颜色识别广泛应用于各种工业检测和自动控制领域,而生产过程中长期以来由人眼起主导作用的颜色识别工作将越来越多地被相应的颜色传感器所替代。由于人体的自身生理原因和疲劳所造成颜色识别的误差已经对工业的发展和人们的生活影响越来越大,所以人们对一种代替人眼来对颜色进行识别的智能装置的需求就越来越大了。现阶段已经研究出响应的颜色识别装置,并且已经应用到人们的生活中了[1][3]。如:在包装行业,产生包装利用不同包装和装潢来表示不同的性质和用途;在医用方面可以较准确的帮助医生判断病因,通过各个器官不同病变时期来诊断病情的发展情况;图书馆使用颜色区分对各类文献进行分类,这样能够极大地提高排架管理和统计工作;还有各种物体表面颜色识别(产品包装色标检测,产品外表特征颜色的检测,液体溶液颜色变化过程的检测与控制等)。目前的颜色传感器通常是在独立的光电二极管上覆盖经过修正的红、绿、篮滤光片,然后对输出信号进行相应的处理,才能将颜色信号识别出来;有的将两者集合起来,但是输出模拟信号,需要一个A/D电路进行采样,对该信号进一步处理,才能进行识别,增加了电路的复杂性,并且存在较大的识别误差,影响了识别的效果。美国TAOS(Texas Advanced Optoelectronic Solutions)公司生产的TCS230颜色传感器是一种可编程彩色光到频率的转换器,它对光的动态响应范围大于250,000~1,标准输出频率范围为2Hz~500kHz,TCS230有两个可编程的引脚,使用者可以对100%、20%、2%或者是电源关断模块的输出量程进行选择使用。TCS230是业界第一个有数字兼容接口的RGB彩色传感器,TCS230的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其他逻辑电路相连接,由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单[6][7]。TCS230可以用于彩色打印机、\\液体颜色识别、医疗诊断、LED检测、颜色产品加工控制、油漆、纺织品、电脑彩色监控标准、化装品及打印材料的彩色搭配等颜色检测产品。因为颜色识别在现代生产中的应用越来越广泛,无论是遥感技术,材料分拣识别,工业过程控制,图像处理,机器人视觉系统,产品质检,还是某些模糊的探测系统

第 1 页 共 51 页

清华大学2012届毕业设计说明书

都需要对颜色进行探测,而且随着颜色传感器的飞速发展,为了提高颜色识别的高效性和精确性,高能的颜色传感器装置必将代替原始的由人眼起主导作用的颜色识别工作。 1.2 研究的背景

颜色识别兴起的时间较晚,但在实时检测系统及自动控制方面具有重要意义,

单片机及微机的引入提高了颜色识别的速度及智能化程度。国内与国外尚存在较大差距,识别的精度,灵敏度,颜色范围,快速性成为颜色识别的主要问题。深入研究传统颜色识别系统十分必要,同时对国外先进的颜色识别仪器进行研究,对我国颜色识别技术有很大的帮助。

颜色识别是新兴的测控技术,普通的工业应用如材料分拣,商标识别等已广泛应用。但高精密的颜色识别技术仍掌握在少数发达国家如美国,日本手中。我国在机器人视觉系统方面已取得了举世瞩目的成就,但在摄取数码影像,高分辨率的颜色识别方面仍缺乏自主研发的能力。随着颜色传感器的广泛应用,颜色识别技术已成为仪器自动化,智能化的重要组成部分,发展前景十分广阔[3]。

颜色传感器也叫色彩识别传感器。标准的颜色测量方法是采用光谱光度测色仪,通过测量样品的三刺激值,从而得到样品的颜色。目前,基于各种原理的颜色识别传感器有两种基本类型: 其一是RGB(红绿蓝) 颜色传感器, 检测的是三刺激值; 其二是色差传感器,检测被测物体与标准颜色的色差。这类装置许多是漫反射型、光束型和光纤型的, 封装在各种金属和聚碳酸酯外壳中。 1.3 国内外颜色识别技术的发展现状 1.3.1 国外颜色识别技术的发展

美国TAOS(Texas Advanced Optoelectronic Solutions)公司新推出的可编程彩色光到频率转换器的颜色传感器TCS230,该传感器具有分辨率高,可编程的颜色选择与标定,单电压供电等特点,输出为数字量,可直接与微处理器连接。基于TSC320颜色传感器的颜色识别装置是目前主要应用的颜色识别装置,这种可编程的彩色光到频率转换器适合于色度计测量应用领域,如彩色打印、医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制和色彩配合。

第 2 页 共 51 页

清华大学2012届毕业设计说明书

德国的MAZeT公司最新推出的颜色传感器MTCSiCS,不仅能够实现颜色的识别与检测,色彩传感器具有高精度的3色测量(CIE),是测量光源系统的出 色解决方案,其控制系统可以捕捉到目前的颜色状况,然后根据图像信号反馈的信息控制并达到相应的Yxy值。相比别的传感器,在温度变化的情况下,MAZET的传感器性能不变,甚至在温度或者能量很高的情况下、MAZET的传感器也不会有任何老化。

德国的ELTROTEC色标传感器可以检测出颜色的差异,ELTROTEC色标检测器具有灵敏度高、响应速度快、抗背景干扰能力强。即使颜色上的细微差异或高光泽目标物也能够被ELTROTEC检测到,产品被广泛的运用于包装机械和印刷机械,造纸机械等自控系统中。ELTROTEC色标检测器适用于必须快速和准确检测色标或其他用颜色对比作记号的场合。在30多种不同的灰度等级中,色标检测器可检测所有类型的色标标记,可给不同的用户界面提供多种对比度检测技术,以满足广泛的应用领域,是业界最佳的色彩辨识仪器。 1.3.2 国内颜色识别技术的发展

创光电子有限公司生产的PDIC903B颜色传感器主要用来检测环境亮度水平,

并通过提供高度线性的成比例输出,来调节显示屏幕或键盘的背光。可帮助便携式显示设备降低功耗,延长LCD屏幕的使用寿命。这些经济型传感器可以根据制造商预先设定的模式来控制便携式LCD显示器的背光。广泛应用于:移动设备 PDA、移动电话、笔记本电脑和数码相机的键盘和显示屏背光控制。

Red Fox公司推出的MCS颜色传感器是最小的三原色传感器,由三个Si-PIN光电管以及在片滤波器集成在一起的,每个光电管都各自有三种颜色之一的滤波器。每个光电管对相应光谱滤波器的颜色光最敏感,主要是红色,绿色,蓝色。它具备小尺寸设计,高质量滤波器和三种颜色同步记录的特点。这种光电管是环型排列,适合辅助光纤测量信号的耦合。

上海精电电子设备有限公司生产的颜色识别传感器、色标传感器系列产品,作为国内最专业的光学测量及检测设备研发及生产厂家特别在辨色识别,激光测距,光纤的技术上处于领先地位,它运用了当今先进的数字化背景抑制技术,因而大大提高了测量精度和抗干扰能力,因为有这样的特点,使得该公司产品在国内市场占有很大份额。目前生产的超高功率RGB数字光纤传感器用于检测是很方便的,RGB

第 3 页 共 51 页

清华大学2012届毕业设计说明书

颜色传感器利用数模转换的高精度放大器,成为业界最有竞争力的色彩识别传感器,即使是颜色上有细微差异或者高光泽目标物也能够轻易的检测。 1.4 本论文研究的主要内容

本文所介绍的是基于多色光电二极管的颜色识别装置,本文的目的是设计颜色识别装置及其基本功能的实现。本文所设计的颜色识别装置主要是由STC89C516RD单片机、TSC230颜色传感器以及LCD1602所构成的。该装置在实际的制作过程中做的主要工作如下:

1. 颜色的基本理论及颜色识别的基本原理的研究分析。 2. 硬件设计

(1)单片机的原理及其基本特性。

(2)颜色传感器的基本原理及其特性,传感器和单片机的接口电路。 (3)LCD液晶显示器的基本原理及其应用,LCD与单片机的接口电路。 (4)整个颜色识别装置的电路。 3. 软件设计

(1)初始化: LCD、TSC230颜色传感器的初始化,定时器的初始化。 (2)数据采集: 利用TSC230颜色传感器进行被测物颜色信息的采集。 (3)数据处理: 将采集的信息通过单片机的处理,转化成RGB值,再根据三基色原理计算出相应的颜色,并在LCD液晶显示器上显示出来。 1.5 本章小结

本章主要介绍了颜色识别装置研究的目的和意义,研究的背景,国内外颜色识别技术的发展现状,以及本论文研究的主要内容。通过对颜色识别技术的深入了解,分析出其发展有着重大意义。而且随着颜色传感器的发展和广泛的应用,颜色识别技术已成为仪器自动化,智能化的重要组成部分,因此颜色识别装置的发展前景十分广阔。

第 4 页 共 51 页

清华大学2012届毕业设计说明书

2颜色理论及颜色识别技术基本算法

2.1 颜色的定义

颜色或色彩是通过眼、脑和我们的生活经验所产生的一种对光的视觉效应。人对颜色的感觉不仅仅由光的物理性质所决定,还包含心理等许多因素,比如人类对颜色的感觉往往受到周围颜色的影响。有时人们也将物质产生不同颜色的物理特性直接称为颜色。美国光学学会(Optical Society of America)的色度学委员会曾经把颜色定义为:颜色是除了空间的和时间的不均匀性以外的光的一种特性,即光的辐射能刺激视网膜而引起观察者通过视觉而获得的景象。在我国国家标准GB5698-85中,颜色的定义为:颜色是光作用于人眼引起除形象以外的视觉特性。根据这一定义,颜色是一种物理刺激作用于人眼的视觉特性,而人的视觉特性是受大脑支配的,也是一种心理反映。所以,色彩感觉不仅与物体本来的颜色特性有关,而且还受时间、空间、外表状态以及该物体的周围环境的影响,同时还受各人的经历、记忆力、看法和视觉灵敏度等各种因素的影响[13][14][15]。 2.2 物理的现象

电磁波的波长和强度可以有很大的区别,在人可以感受的波长范围内(约380纳米至780纳米),它被称为可见光。假如我们将一个光源各个波长的强度列在一起,我们就可以获得这个光源的光谱。一个物体的光谱决定这个物体的光学特性,包括它的颜色。不同的光谱可以被人接收为同一个颜色。虽然我们可以将一个颜色定义为所有这些光谱的总和,但是不同的动物所看到的颜色是不同的,不同的人所感受到的颜色也是不同的,因此这个定义是相当主观的。一个弥散地反射所有波长的光的表面是白色的,而一个吸收所有波长的光的表面是黑色的。虹所表现的每个颜色只包含一个波长的光。我们称这样的颜色为单色的。虹的光谱实际上是连续的,但一般来说,人们将它分为七种颜色:红、橙、黄、绿、青、蓝、紫。单色光的强度也会影响人对一个波长的光所感受的颜色,比如暗的橙黄被感受为褐色,而暗的黄绿被感受为橄榄绿,等等[13][14]。

第 5 页 共 51 页

清华大学2012届毕业设计说明书

图 2.1 可见光光谱

2.2.1单色和混合色

大多数光源的光谱不是单色的,它们的光是由不同强度和波长的光混合组成的。人眼将许多这样的混合光的颜色与单色光源的光的颜色看成是同样。比如橙色,实际上就不是单色的600纳米的光,实际上它是由红色和绿色的光混合组成的。出于眼睛的生理原理,我们无法区分这两种光的颜色。另外有许多颜色是不可能是单色的,因为没有这样的单色的颜色。如黑色、灰色和白色等等。

不同波长的光会引起人眼不同的色彩感觉,两种不同光谱成分经过混合,能引起人眼产生与某种单色光相同的感觉,即单色光的颜色可以由几种颜色的混合光来等效,这一现象称为混色。 2.2.2 颜色与波动方程

波动方程是用来描写光的方程,因此通过解波动方程我们应该可以得到颜色的信息。在真空中光的波动方程如下:

utt?c(uxx?uyy?uzz)

2c是光速,x、y和z是空间的坐标,t是时间的坐标,u(x,y,z)是描写光的函数,下标表示取偏导数。在空间固定的一点(x、y、z固定),u就成为时间的一个函数了。通过傅里叶变换我们可以获得每个波长的振幅。由此我们可以得到这个光在每个波长的强度。因而我们可以从波动方程获得一个光谱。但实际上要描写一组光谱到底会产生什么颜色,我们还得理解视网膜的生理功能才行。 2.2.3 人对颜色的感知[13][14][15]

第 6 页 共 51 页

清华大学2012届毕业设计说明书

尽管亚里士多德就已经讨论过光和颜色之间的关系,但真正阐明两者关系的是牛顿。歌德也曾经研究过颜色的成因。托马斯·杨在1801年第一次提出三元色的理论,后来亥姆霍兹将它完善了。1960年代人们发现了人眼内部感受颜色的色素,从而确定了这个理论的正确性。

人眼中的锥状细胞和棒状细胞都能感受颜色,一般人眼中有三种不同的锥状细胞:第一种主要感受黄绿色,它的最敏感点在565纳米左右;第二种主要感受绿色,它的最敏感点在535纳米左右;第三种主要感受蓝紫色,其最敏感点在420纳米左右[13][14]。杆状细胞只有一种,它的最敏感的颜色波长在蓝色和绿色之间。每种锥状细胞的敏感曲线大致是钟形的,锥状细胞依照感应波长不同由长到短分为L、M、S三种(图2.2)。因此进入眼睛的光一般相应这三种锥状细胞和杆状细胞被分为4个不同强度的信号。因为每种细胞也对其他的波长有反映,因此并非所有的光谱都能被区分。比如绿光不仅可以被绿锥状细胞接受,其他锥状细胞也可以产生一定强度的信号,所有这些信号的组合就是人眼能够区分的颜色的总和。如我们的眼睛长时间看一种颜色的话,我们把目光转开就会在别的地方看到这种颜色的补色。这被称作颜色的互补原理,简单说来,当某个细胞受到某种颜色的光刺激时,它同时会释放出两种信号:刺激黄色,并同时拟制黄色的补色蓝色。事实上,某个场景的光在视网膜上细胞产生的信号并不是完全百分之百等于人对这个场景的感受。人的大脑会对这些信号处理,并分析比较周围的信号。例如,一张用绿色滤镜拍的白宫照片——白宫的形象事实上是绿色的。但是因为人大脑对白宫的固有印象,加上周围环境的的绿色色调,人脑会把绿色的障碍剔除——很多时候依然把白宫感受成白色。这现象在英文中被称作“Retinex”——合成了视网膜(retina)和大脑皮层(cortex)两个单词。梵高就曾使用过这个现象作画。

图 2.2人类(S,M和L类型的)锥状细胞对单色光谱刺激的规范化典型反应

第 7 页 共 51 页

清华大学2012届毕业设计说明书

人眼一共约能区分一千万种颜色,不过这只是一个估计,因为每个人眼的构造不同,每个人看到的颜色也少许不同,因此对颜色的区分是相当主观的。假如一个人的一种或多种锥状细胞不能正常对入射的光反映,那么这个人能够区别的颜色就比较少,这样的人被称为色弱。有时这也被称为色盲,但实际上这个称呼并不正确,因为真正只能区分黑白的人是非常少的。人在看颜色时总是试图补偿光源本身的颜色。因此我们在不同的光源下看到的同一种颜色实际上是不同的。

图2.3 CIE1931色彩空间色品图

图2.3外侧曲线边界是光谱(或单色光)轨迹,标注了纳米波长。注意所描述的颜色依赖于你看到这个图象所在的设备的色彩空间,所以特定位置的颜色、特别是单色光的颜色可能不是精确的表示。 2.3 三基色原理

三基色是指红,绿,蓝三色,人眼对红、绿、蓝最为敏感,大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生。同样绝大多数单色光也可以分解成红绿蓝三种色光。这是色度学的最基本原理,即三基色原理[14]。红绿蓝三基色按照不同的比例相加合成混色称为相加混色,除了相加混色法之外还有相减混色法,可根据需要相加相减调配颜色。红,绿,蓝三色分别用R、G、B表示,按国际上统一规定:

R——红光,波长为700 nm [R为Red(红)的缩写] G——绿光,波长为546.1 nm [G为Green(绿)的缩写] B——蓝光,波长为435.8 nm [B为Blue(蓝)的缩写]

第 8 页 共 51 页

清华大学2012届毕业设计说明书

三基色就是指这三种色中的任意一色都不能由另外两种原色混合产生,而其它色可由这三色按照一定的比例混合出来,色彩学上将这三个独立的色称为三基色。自然界中的绝大部分彩色,都可以由三种基色按一定比例混合得到;反之,任意一种彩色均可被分解为三种基色。作为基色的三种彩色,要相互独立,即其中任何一种基色都不能由另外两种基色混合来产生。由三基色混合而得到的彩色光的亮度等于参与混合的各基色的亮度之和。三基色的比例决定了混合色的色调和色饱和度。

红绿蓝三基色按照不同的比例相加合成混色称为相加混色。 红色+绿色=黄色 绿色+蓝色=青色 红色+蓝色=品红 红色+绿色+蓝色=白色

黄色、青色、品红都是由两种及色相混合而成,所以它们又称相加二次色。另外:

红色+青色=白色 绿色+品红=白色 蓝色+黄色=白色

所以青色、黄色、品红分别又是红色、蓝色、绿色的补色。由于每个人的眼睛对于相同的单色的感受有不同,所以,如果我们用相同强度的三基色混合时,假设得到白光的强度为100%,这时候人的主观感受是,绿光最亮,红光次之,蓝光最弱。

除了相加混色法之外还有相减混色法。在白光照射下,青色颜料能吸收红色而反射青色,黄色颜料吸收蓝色而反射黄色,品红颜料吸收绿色而反射品红。也就是:

白色-红色=青色 白色-绿色=品红 白色-蓝色=黄色

另外,如果把青色和黄色两种颜料混合,在白光照射下,由于颜料吸收了红色和蓝色,而反射了绿色,对于颜料的混合我们表示如下:

颜料(黄色+青色)=白色-红色-蓝色=绿色 颜料(品红+青色)=白色-红色-绿色=蓝色

第 9 页 共 51 页

清华大学2012届毕业设计说明书

颜料(黄色+品红)=白色-绿色-蓝色=红色

以上的都是相减混色,相减混色就是以吸收三基色比例不同而形成不同的颜色的。所以有把青色、品红、黄色称为颜料三基色。颜料三基色的混色在绘画、印刷中得到广泛应用。在颜料三基色中,红绿蓝三色被称为相减二次色或颜料二次色。 2.4 颜色的三要素

1.亮度

是光作用于人眼时引起的明亮程度的感觉。对于发光物体来说,它所含的能量大则显得亮,反之则暗。

2.色调

是指光的颜色。红、橙、黄、绿、青、蓝、紫等不同颜色分别表示不同的色调,是彩色的重要属性。

3.色饱和度

色饱和度又称色浓度,是指彩色所呈现的深浅程度。色饱和度越高,颜色越深,反之则越浅。

色调和色饱和度又合称为色度。它既反应了颜色的类别,又反应了颜色的深浅程度。

2.5 颜色识别一般算法 2.5.1 RGB计色原理

通常所看到的物体的颜色, 实际上是物体表面吸收了照射到它上面的白光中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。任何一种颜色都可以用三种基本颜色按照不同的比例混合得到。

这里介绍一种最典型的颜色模型,即RGB模型。如图2.4所示,在这个颜色模型中, 3个轴分别为R、G、B。原点对应的为黑色(0, 0, 0),离原点最远的顶点对应白色(255, 255, 255)。 由黑到白的灰度分布在从原点到最远顶点间的连线上, 正方体的其他六个角点分别为红、 黄、绿、青、蓝、和品红。需要注意的一点是,RGB颜色模型所覆盖的颜色域取决于显示设备因光电的颜色特性。每一种颜色都有唯一的RGB值与它对应[15]。

第 10 页 共 51 页

清华大学2012届毕业设计说明书

图 2.4 RGB色彩立方体颜色

2.5.2 白平衡

颜色实际就是物体对光的反射或投射而表现出来在人眼中的反映,而 TCS230颜色传感器就是通过分别检测一种颜色反映出来的光的红、绿、蓝分量,通过把光强线性转换为频率信号,量化出R、G、B值,从而计算出颜色。值得注意的是,不同的光线通过物体反映出来的光强是不同的,而且非标准白光(RGB三者不相等)在物体上反映出来的光强分量也是不同的。

为解决这个问题,就要进行白平衡,即首先测量出基准光源的RGB光强值, 再测量出在标准光源下物体所反映出的光强值,两者之比就是物体的反射(或透射)性质,即物体的实际颜色,公式如下:

R=P物红/P源红 G=P物绿/P源绿 B=P物蓝/P源蓝

由于在RGB坐标下的颜色标准坐标为0-255之间,所以把所得结果乘以 255,即得到标准的RGB值。透明物体直接测量光源的光强-频率值,不透明物体需要用白纸测量反射光源[9]。 2.6 本章小结

本章主要介绍了颜色的定义,颜色的物理现象,单色和混色,人眼对颜色的感知,三基色的基本原理,颜色的三要素,以及颜色识别技术中的RGB原理和白平衡。通过对上述理论的学习和研究,能对颜色的特性有深入的认识和理解,是颜色识别技术的基础。

第 11 页 共 51 页

清华大学2012届毕业设计说明书

3 本设计主要器件介绍

本设计主要是研究和设计颜色识别装置。该系统是STC89C51单片机为核心,以TCS230颜色传感器和LCD1602为子系统建立起来的。下面将详细介绍主要器件的基本特性和功能。 3.1 LCD1602 液晶显示器

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机系统中应用晶液显示器作为输出器件有以下几个优点:

1. 显示质量高

由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

2. 数字式接口

液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。 3. 体积小、重量轻

液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

4. 低功耗

相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还

第 12 页 共 51 页

清华大学2012届毕业设计说明书

有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动、单纯矩阵驱动和主动矩阵驱动三种。

本设计采用的LCD型号是HJ1602A,它是一种工业字符型液晶,能够同时显示16x02即32个字符(16列2行)。实图如下:

图 3.1 LCD1602

3.1.1 LCD1602的基本参数及引脚功能[5][22] 1.1602LCD主要技术参数: 显示容量: 16×2个字符 芯片工作电压: 4.5—5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 2. 引脚功能说明

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.1所示: 编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据 数据 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极 表3.1 各引脚接口说明表

引脚1:VSS为地电源。

第 13 页 共 51 页

清华大学2012届毕业设计说明书

引脚2:VDD接5V正电源。

引脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

引脚4:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

引脚5:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

引脚6:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 引脚7~14:D0~D7为8位双向数据线。 引脚15:背光源正极。 引脚16:背光源负极。 3.1.2 1602LCD的指令说明及时序

1602液晶模块内部的控制器共有11条控制指令,如表3.2所示: 序号 指令 1 2 3 4 5 6 7 8 9 清显示 光标返回 置输入模式 显示开/关控制 光标或字符移位 置功能 置字符发生存贮器地址 置数据存贮器地址 读忙标志或地址 RS R/W D7 D6 D5 D4 D3 D2 D1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 DL 0 0 0 1 N 0 0 D F 0 1 C * D0 1 * S B * * 1 I/D 1 S/C R/L * 1 字符发生存贮器地址 1 显示数据存贮器地址 BF 计数器地址 10 写数到CGRAM或DDRAM) 11 从CGRAM或DDRAM读数 0 要写的数据内容 1 读出的数据内容 表 3.2 控制命令表

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)

指令1:清显示,指令码01H,光标复位到地址00H位置。

第 14 页 共 51 页

清华大学2012届毕业设计说明书

指令2:光标复位,光标返回到地址00H。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。 与HD44780相兼容的芯片时序表如下表3.3所示: 读状态 写指令 读数据 写数据 输入 RS=L,R/W=H,E=H 输出 D0—D7=状态字 输入 RS=L,R/W=L,D0—D7=指令码,E=高脉冲 输出 无 输入 RS=H,R/W=H,E=H 输入 RS=H,R/W=L,D0—D7=数据,E=高脉冲 表 3.3 基本操作时序表

输出 D0—D7=数据 输出 无 3.1.3 LCD1602的RAM地址映射

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3.1是1602的内部显示地址。

第 15 页 共 51 页

清华大学2012届毕业设计说明书

图3.1 LCD1602内部显示地址

例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 3.1.4 LCD1602的初始化过程

延时15ms ;

写指令38H(不检测忙信号); 延时5ms ;

以后每次写指令、读/写数据操作均需要检测忙信号; 写指令38H:显示模式设置 ; 写指令08H:显示关闭 ; 写指令01H:显示清屏 ; 写指令06H:显示光标移动设置 ; 写指令0CH:显示开及光标设置 ;

第 16 页 共 51 页

清华大学2012届毕业设计说明书

3.2 颜色传感器TCS230

随着现代工业生产向高速化、自动化方向的发展,生产过程中长期以来由人眼起主导作用的颜色识别工作将越来越多地被相应的颜色传感器所替代。 3.2.1 TCS230芯片的结构框图与特点:

图3.2 TCS230颜色传感器芯片

TCS230(图 3.2)是TAOS公司推出的可编程彩色光到频率的转换器,它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上集成了红绿蓝(RGB)三种滤光器,是业界第一个有数字兼容接口的RGB彩色传感器,TCS230的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入,因此可直接与微处理器或其他逻辑电路相连接,由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单,图3.3是TCS230的引脚和功能框图[6][7]。

图3.3 TCS230的引脚和功能框图

图3.3中,TCS230采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管,这些二极管分为四种类型,其16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器,其余16个不带有任何滤波器,可以透过全部的光信息,这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方

第 17 页 共 51 页

清华大学2012届毕业设计说明书

面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。工作时,通过两个可编程的引脚来动态选择所需要的滤波器,该传感器的典型输出频率范围从2Hz-500kHz,用户还可以通过两个可编程引脚来选择100%、20%或2%的输出比例因子,或电源关断模式。输出比例因子使传感器的输出能够适应不同的测量范围,提高了它的适应能力。例如,当使用低速的频率计数器时,就可以选择小的定标值,使TCS230的输出频率和计数器相匹配。

从图3.3可知:当入射光投射到TCS230上时,通过光电二极管控制引脚S2、S3的不同组合,可以选择不同的滤波器;经过电流到频率转换器后输出不同频率的方波(占空比是50%),不同的颜色和光强对应不同频率的方波;还可以通过输出定标控制引脚S0、S1,选择不同的输出比例因子,对输出频率范围进行调整,以适应不同的需求。

下面简要介绍TCS230芯片各个引脚的功能及它的一些组合选项。

S0、S1用于选择输出比例因子或电源关断模式;S2、S3用于选择滤波器的类型;OE反是频率输出使能引脚,可以控制输出的状态,当有多个芯片引脚共用微处理器的输出引脚时,也可以作为片选信号,OUT是频率输出引脚,GND是芯片的接地引脚,VCC为芯片提供工作电压,表3.4是S0、S1及S2、S3的可用组合。

S0 L L H H S1 L H L H 输出频率关断电源 2% 20% 100% S2 L L H H S3 L H L H 滤波器类红色 蓝色 无 绿色 表3.4 S0、S1及S2、S3的组合选项

3.2.2 TCS230识别颜色的原理

这种可编程的彩色光到频率转换器适合于色度计测量应用领域,如彩色打印、

医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制和色彩配合。 1. 三原色的感应原理

通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)

中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。白色是由各种

第 18 页 共 51 页

清华大学2012届毕业设计说明书

频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P)。根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的[12]。 2. TCS230识别颜色的原理

由三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其他原色的通过。例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就可以得到红色光的光强;同时,选择其他的滤波器,就可以得到蓝色光和绿色光的光强。通过这三个值,就可以分析投射到TCS230传感器上的光的颜色。 3. 白平衡和颜色识别原理

白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和

蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于TCS230的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS230的RGB输出并不相等,因此在测试前必须进行白平衡调整,使得TCS230对所检测的\白色\中的三原色是相等的。进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS230上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的3个调整参数。

当TCS230识别颜色时,就用这3个参数对所测颜色的R、G和B进行调整。

这里有两种方法来计算调整参数:

(1)依次选通三颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。当计数到255时停止计数,分别计算每个通道所用的时间,这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。

(2)设置定时器为一固定时间 (例如10ms),然后选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子

第 19 页 共 51 页

清华大学2012届毕业设计说明书

可以把这些脉冲数变为255。在实际测试时,室外同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值。 4.应用中需要注意的问题

(1)颜色识别时要避免外界光线的干扰,否则会影响颜色识别的结果,最好

把传感器、光源等放置在一个密闭、无反射的箱子中进行测试。

(2)对光源没有特殊的要求,但是光源发出的光要尽量集中,否则会造成传

感器之间的相互干扰。

(3)当第1次使用TCS230时,或TCS230识别模块重启、更换光源等情况时,

都需要进行白平衡调整。 3.3 光电二极管的工作原理 3.3.1 光电二极管的定义及原理

光电二极管(Photo-Diode)和普通二极管一样,也是由一个PN结组成的半导体器件,也具有单方向导电特性。但在电路中它不是作整流元件,而是把光信号转换成电信号的光电传感器件。

光电二极管是将光信号变成电信号的半导体器件。它的核心部分也是一个PN结,和普通二极管相比,在结构上不同的是,为了便于接受入射光照,PN结面积尽量做的大一些,电极面积尽量小些,而且PN结的结深很浅,一般小于1微米。光电二极管是在反向电压作用之下工作的。没有光照时,反向电流很小(一般小于0.1微安),称为暗电流。当有光照时,携带能量的光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子——空穴对,称为光生载流子。它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。这种特性称为“光电导”。光电二极管在一般照度的光线照射下,所产生的电流叫光电流。如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。光电二极管和普通二极管一样具有一个PN结,不同之处是在光电二极管的外壳上有一个透明的窗口以接收光线照射,实现光电转换,在电路图中文字符号一般为VD。 3.3.2 光电二极管的种类、特性与用途

第 20 页 共 51 页

清华大学2012届毕业设计说明书

1. PN型

特性:优点是暗电流小,一般情况下,响应速度较低。

用途:照度计、彩色传感器、光电三极管、线性图像传感器、分光光度计、照相机曝光计。

2. 发射键型

特性:使用Au薄膜与N型半导体结代替P型半导体 。 用途:主要用于紫外线等短波光的检测。 3. PIN型

特性:缺点是暗电流大,因结容量低,故可获得快速响应 。

用途:高速光的检测、光通信、光纤、遥控、光电三极管、写字笔、传真。 4. 雪崩型

特性:相应速度非常快,因具有倍速做用,故可检测微弱光。 用途:高速光通信、高速光检测。 3.4 STC89C51 单片机[22]

STC系列单片机是美国STC公司最新推出的一种新型51内核的单片机。片内含有Flash程序存储器、SRAM、UART、SPI、A\\D、PWM等模块。该器件的基本功能与普通的51单片机完全兼容。 3.4.1 STC89C51的性能参数和主要功能

1.内置标准51内核,机器周期:增强型为6时钟,普通型为12时钟; 2.工作频率范围:0~40MHZ,相当于普通8051的0~80MHZ; 3.STC89C5xRC对应Flash空间:4KB\\8KB\\15KB; 4.内部存储器(RAM):512B; 5.定时器\\计数器:3个16位; 6.通用异步通信口(UART)1个; 7.中断源:8个;

8.有ISP(在系统可编程)\\IAP(在应用可编程),无需专用编程器\\仿真器; 9.通用I\\O口:32\\36个;

第 21 页 共 51 页

清华大学2012届毕业设计说明书

10.工作电压:3.8~5.5V;

11.外形封装:40脚PDIP、44脚PLCC和PQFP等。 3.4.2 STC89C51单片机的引脚功能说明

STC89C51引脚分布如图3.4所示。

图 3.4 单片机引脚图 图3.5 单片机实物图

1. VCC:电源电压 2. GND:接地

3. P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时可作为高阻抗输入端用。

4. P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTE逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P 1.1/T2EX ),如表3.5。Flash编程和程序校验期间,P1接收低8位地址。

引 脚 号 功能特性 P1.0 T2(定时/计数器2外部计数脉冲输入),时钟输出 第 22 页 共 51 页

清华大学2012届毕业设计说明书

P1.1 T2EX(定时/计数2捕获/重装载触发和方向控制) 表3.5 P1.0和P1.1的第二功能

5. P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

6. P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表3.6所示。

端口引脚 第二功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD(串行输入口) TXD(串行输出口) INT0(外中断0) INT1(外中断1) T0(定时/计数0) T1(定时/计数1) WR(外部数据存储器写选通) RD(外部数据存储器读选通) 表3.6 P3口的第二功能

7. EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH ) 。EA反端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA反端状态。

8. RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

9. XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 10. XTAL2:振荡器反相放大器的输出端。

11. 数据存储器:89C51有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器地址是重叠的,也就是高128。字节的RAM和特殊功能寄存器的地

第 23 页 共 51 页

清华大学2012届毕业设计说明书

址是相同的,但在物理上它们是分开的。当一条指令访问7FH以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128字节。RAM还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。

12. 中断:89C51共有6个中断向量:两个外中断(INT0和INT1),3个定时器中断(定时器0,1,2)和串行口中断。

13. 时钟振荡器:89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路如图3.6所示。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路,对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF士10pF,而如果使用陶瓷谐振器,建议选择40pF士l0pF。

用户也可以采用外部时钟。采用外部时钟的电路(图3.7)。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。

由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。

图3.6 内部振荡电路 图3.7 外部振荡电路

3.5 本章小结

本章主要讲解了LCD1602液晶显示器、TCS230传感器及STC89C51单片机,对他们的内部结构和各个管脚以及它们的功能作了详细说明,另外对光电二极管工作原理也进行了介绍,本章为后面整个系统的具体设计提供了理论基础。

第 24 页 共 51 页

清华大学2012届毕业设计说明书

4 颜色识别装置硬件设计

4.1 颜色识别装置系统的框架

本设计的颜色识别装置是在89C51单片机控制的基础上,增加了TCS230颜色传感器模块,LCD1602液晶显示器,在颜色传感器模块上采用了四个高亮白色LED,用来补偿光,通过这些模块组合实现了颜色识别装置,本装置的设计框架如图4.1所示。

传感器驱动 被测物颜89C51单片机 颜色传感器 色信息的系统 (TSC230) 采集 使用四个高亮白色LED灯的反射光 LCD1602液晶 显示器 LCD显示器驱动 图 4.1 颜色识别装置的系统框架

本设计的实物图如图4.2所示。

图 4.2 颜色识别装置的实物图

第 25 页 共 51 页

清华大学2012届毕业设计说明书

4.2 TSC230颜色传感器模块与单片机的接口电路

在本设计中,TCS230颜色传感器模块使用的是89C51单片机的P1口和P3口。P1口是准双向口,能作通用I/O接口使用。P1口的输出只由一个场效应管与内部上拉电阻组成。其输入输出原理特性与P0口作为通用I/O接口使用时一样,当其输出时,可以提供电流负载,不必像P0口那样需要外接上拉电阻。P1口具有驱动4个LSTTL负载的能力。

P3口除了作为准双向通用I/O接口使用外,它的每一根线还具有第二种功能,当P3口作为第二功能使用时,锁存器的Q输出端必须为高电平,否则场效应管导通,引脚将被钳位在低电平,无法实现第二功能。当锁存器Q端为高电平,P3口的状态取决于第二功能输出线的状态。单片机复位时,锁存器的输出端为高电平。P3口第二功能中输入信号RXD、INT0、INT1、T0、T1经缓冲器输入,可直接进入芯片内部。

本设计中,TSC230用于控制输出频率的S0、S1引脚与单片机的P1.0、P1.1相连,用于控制滤波类型的S2、S3引脚与单片机的P1.3、P1.4相连,控制频率输出使能的OE引脚与P1.2相连,频率输出引脚OUT与P3.2(INT0)相连。它们具体的接口电路原理图如图4.3所示。

图 4.3 TSC230与单片机的接口原理图

第 26 页 共 51 页

清华大学2012届毕业设计说明书

4.3 四个高亮白光LED

为了TCS230颜色传感器更好的采集到被测物的颜色信息,所以需添加一个稳定的光源。本模块主要是用4个高亮白色的LED灯,照在被检测物上,然后反射到TCS230颜色传感器上,以达到稳定的光强的结果,增加检测的准确性。电路设计图如图4.4所示。

图 4.4 LED电路图

4.4 LCD1602液晶显示器与单片机的接口电路

本设计中选择了89C51单片机的P0口和P2口与LCD1602液晶显示模块相连接。VSS、VO、K管脚接地,VDD、A管脚接+5V电源,RS管脚接P2.6管脚,RW管脚接P2.5管脚,E管脚接P2.7管脚,D0-D7管脚依次与P0.0-P0.7管脚相连。

P0口是一个三态双向口,可作为地址/数据分时复用接口,也可作为通用的I/O接口。它由一个输出锁存器、两个三态缓冲器、输出驱动电路和输出控制电路组成。

P2口也是准双向口,它有两种用途:通用I/O接口和高8位地址线。与P1口相比,它只在输出驱动电路上比P1口多了一个模拟转换开关MUX和反相器。

单片机与LCD1602液晶显示模块的接口电路图如图4.5所示。

第 27 页 共 51 页

清华大学2012届毕业设计说明书

图 4.5 89C51单片机与LCD1602液晶显示器连接的电路图

4.5 颜色识别装置总原理图

整个系统具体的工作过程:当器件接通电源后,颜色传感器正常工作,颜色传感器TCS230将光信号转换成脉冲频率电信号,输出频率2HZ—500KHZ之间。脉冲信号接单片机的P3.2口,输入进单片机中。经过处理后,颜色信息由单片机的P0口送到LCD,再显示出来。系统总原理图如图4.6所示。

第 28 页 共 51 页

清华大学2012届毕业设计说明书

图4.6 系统总原理图

4.6 本章小结

本章主要介绍了颜色识别装置各个模块的硬件设计原理,本系统主要由TCS230颜色传感器模块和LCD1602液晶显示模块组成。TCS230颜色传感器对被测物的颜色信息进行数据采集,以数字量输出,再经过89C51单片机进行数据处理,最后由LCD1602液晶显示器显示出来。

第 29 页 共 51 页

清华大学2012届毕业设计说明书

5 颜色识别装置的软件设计

5.1 TCS230颜色传感器模块的软件设计

在本设计中TCS230颜色传感器颜色的采集采用的是89C51单片机的外部中断INT0和定时器/计数器T0来实现的。该模块流程图如图5.1所示。

系统初始化 进行白平 白平衡 N 分别选择衡调整 调整 RGB三通道 Y 调用测频 外部脉冲信号 定时器初始化 率程序 N 计算出相 时间到否 外部中断计数 应的比列 Y 输出结果

图 5.1 TCS230颜色传感器采集模块的流程图

定时器/计数器:51单片机有两个16位的可编程定时器/计数器,分别为定时器/计数器T0和定时器/计数器T1。每个定时器/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式。

在方式0下,16位的加法计数器只用了13为,分别是TL0的低5位和TH0的8位。计数时,若TL0的低5位计满时向TH0进位,当TH0溢出是,置位TCON中TF0标志,向CPU发出中断请求。另外也可通过查询TF0判断是否溢出。由于定时器方式0采用13位的计数器,因而最大能装载的数是2的13次方,即8192。在使用时,先根据计数值计算出初值,然后按位置置入到初值寄存器中。如定时/

第 30 页 共 51 页

清华大学2012届毕业设计说明书

计数器T0的计数值为1000,则初值为7192,转换成二进制数为1110000011000B,则TH0=11100000,TL0=00011000B。在方式0计数的过程中,当计数器计满溢出,计数器的计数过程并不会结束,计数脉冲来时同样会进行加1计数。只是这时计数器是从0开始计数,是满值的计数。如果要重新实现N个单位的计数,则应该重新定初值。

在本设计中,选择了T0的工作方式为方式0,定时1ms,则赋初值为TH0=0xe0,TL0=0x18,在定时器函数void timer0(void)中重新给定时器/计数器T0赋初值,并且设定了一个变量lck,用来计定时器/计数器T0中断的次数,当变量lck达到1000时,表明定时了1秒钟,而外部中断0的中断函数void int0(void)中定义的变量disp_count在定时1秒的时间达到时的值就是此时所选择的某种颜色通道的频率值。程序如下:

void initTimer(void) //定时器初值1ms { }

void timer0(void) interrupt 1 //定时1秒,所记得disp数就是频率 { }

第 31 页 共 51 页

TMOD = 0x0; //选择定时器/计数器T0 工作方式0 计数位数13位 TH0 = 0xe0; TL0 = 0x18;

TH0 = 0xe0; TL0 = 0x18; lck++; if(lck == 1000) { }

disp = disp_count; lck = 0; disp_count = 0;

清华大学2012届毕业设计说明书

本设计是采用单片机的外部中断请求INT0来接收传感器的输出值。TCS230颜色传感器的OUT端与外部中断INT0(P3.2)管脚连接,在外部中断INT0的中断函数void int0(void)中定义了一个变量disp_count,当接收一个脉冲信号时,disp_count就会加1,在定时器/计数器T0设定的1秒时间内所累计的数值就是频率。程序如下:

void int0(void) interrupt 0

//外部中断0,TCS230的OUT端口接到

{ INT0端口

}

红、绿、蓝(R、G、B)三色通道的数据采集:建立三个函数void red_channel() 、void green_channel()、void blue_channel(),分别代表红、绿、蓝三通道。在void red_channel()函数中,S2、S3为低电平0,表示选择红色滤波器。在void green_channel()函数中,S2、S3为低电平1,表示选择绿色滤波器。在void blue_channel()函数中,S2为低电平0,S3为高电平1,表示选择蓝色滤波器。三个函数中S0都为高电平1,S1都为低电平0,表示输出频率因子为20%。程序如下:

void red_channel() {

P1 = 0x01; //选择红色滤波器类型 delay(1050); date_red = disp/100;

disp_count++; //每一次中断,计数加一

}

void green_channel() {

P1 = 0x19; //选择绿色滤波器类型 delay(1050);

date_green = disp/100;

}

void blue_channel() {

第 32 页 共 51 页

清华大学2012届毕业设计说明书

P1=0x11; //选择蓝色滤波类型 delay(1050); date_blue = disp/100;

}

5.2 LCD1602液晶显示模块软件设计

本设计中的LCD1602液晶显示模块主采用的是字符串方式来输出显示。该模块的流程图如图5.2所示。

经单片机处理后的数据

打印经处理后的信息到屏上 图5.2 LCD1602液晶显示模块流程图

设置光标的显 示位置 LCD的初始化 和清屏 将整形数转化成字符型

首先,通过uchar *int_to_str(uint d)函数将单片机处理后的整形数据转化成字符型数据并保存在char型数组里,用于LCD液晶显示器的输出显示。具体程序如下:

uchar *int_to_str(uint d) {

memset(str_buf,'\\0',sizeof(str_buf)); if(d >= 255)

第 33 页 共 51 页

清华大学2012届毕业设计说明书

}

其次,对LCD1602屏进行初始化和清屏,两行显示,使用5*7的字型,显示器打开,关闭光标闪烁,光标自动右移一位,输出方式为字符不动。则程序如下:

void init_LCD(void) //初始化lcd函数 {

LCD_w_cmd(0x38); //16*2显示,5*7点阵,8位数据 { } else { }

return str_buf;

str_buf[0]='0'+d/100; str_buf[1]='0'+d0/10; str_buf[2]='0'+d; d = 255;

str_buf[0]='0'+d/100; str_buf[1]='0'+d0/10; str_buf[2]='0'+d;

delay(1);

LCD_w_cmd(0x0c); //显示开,关光标

delay(1);

LCD_w_cmd(0x06); //光标向右移动一位 }

void clear_LCD() {

LCD_w_cmd(0x01); //清屏

delay(1);

第 34 页 共 51 页

delay(1);

//清屏函数

清华大学2012届毕业设计说明书

LCD_w_cmd(0x02); //光标归位 }

最后,通过忙检测函数uint lcd_bz(void)检测LCD是否忙;通过写命令函数void LCD_w_com(unsigned com)向LCD1602液晶显示器写命令;通过写数据函数void LCD_w_dat(uchar dat)向LCD1602液晶显示器写数据;通过字符串输出函数void display_LCD_string(uchar *p)在LCD上显示显示处理后的数据;通过光标定位函数void gotoxy(unsigned x,unsigned y)决定数据的显示位置。具体程序如下:

uint lcd_bz(void) // 测试LCD忙碌状态 { }

void LCD_w_cmd(unsigned com) //写命令函数,写入指令数据到LCD,com {

为要写的指令

uint result;

RS = 0;RW = 1;E = 1;

_nop_();//延时1us,即一个机器周期=12*时钟周期(晶振频率分之一) _nop_(); _nop_(); _nop_();

result = (BOOL)(P0 & 0x80); //BF=D7 高电平表示忙,此时模块不接受 E = 0;

命令和数据

return result;

while(lcd_bz()); //检测忙信号 RW=0; RS=0; E=1;

P0=com;

delay(1); //延时1ms E=0; RW=1; }

void LCD_w_date(uchar date) //写数据函数,写要LCD显示的数据 {

while(lcd_bz()); //检测忙信号 RW=0; RS=1; E=1;

第 35 页 共 51 页

清华大学2012届毕业设计说明书

P0=date;

delay(1); //延时1ms E=0; RW=1; }

void gotoxy(uint x,uint y) {

if(x==1)

LCD_w_cmd(0x80+y);

//定位函数 x为行 y为列

else }

void display_LCD_string(uchar *p) //字符串输出 {

while(*p)

LCD_w_cmd(0xC0+y);

{ } 5.3 本章小结

本章主要介绍了颜色识别装置系统的软件设计,给出了TCS230颜色传感器模块和LCD液晶显示模块的程序流程图。重点分析了实现这两模块功能的主要函数。

}

LCD_w_date(*p); p++; delay(10);

第 36 页 共 51 页

清华大学2012届毕业设计说明书

6. 测试与分析

本设计所设计的颜色识别装置检测物体颜色的具体操作如下:首先将单片机开发板接通电源,其次进行白平衡调整,侧出在当前光照条件下白色物体的RGB值,并计算出比例因子。最后把颜色传感器放在被测物上方(一厘米处最佳)测试物体的颜色,并将测试的结果通过LCD显示出来。

在本测试实验过程中对几种颜色的物体进行了多次的测量,测得的一些数据如表6.1所示。实验实物图如图6.1,6.2,6.3所示。

颜色 白色 红色 绿色 蓝色 黑色 第一次 第二次 第三次 第一次 第二次 第三次 第一次 第二次 第三次 第一次 第二次 第三次 第一次 第二次 第三次 R 248 255 246 192 201 196 96 83 86 87 89 92 17 18 21 表 6.1 实验测试数据

G 255 253 250 115 110 107 127 130 134 83 83 80 17 15 22 B 247 255 253 62 58 61 60 59 54 136 139 140 11 19 17

第 37 页 共 51 页

清华大学2012届毕业设计说明书

图 6.1 测白色图

图 6.2 测红色图

第 38 页 共 51 页

清华大学2012届毕业设计说明书

图 6.3 测绿色图

第 39 页 共 51 页

清华大学2012届毕业设计说明书

图 6.4 测黑色图

从上表的实验数据可以看出,当被测物的红色成分占得比较多,那么在显示的输出结果中的R值就越大。同理,如果绿色成分多,那么G值就大,如果蓝色成分多,那么B值也就大。若物体是黑色,则它的RGB值都很小,趋于0。若物体是白色,则它的RGB值都很大,趋于255。把上表格的RGB值与理论值相比较可以看出,实际测得值与标准值之间存在着一定的误差,产生这些误差的原因有很多,如:外界光的干扰、颜色传感器对光的敏感性不同、补光模块中的发光二极管发出的光不稳定、单片机的处理数据误差较大、测试程序不够完善等等。

减小误差的方法:利用稳定的白光光源、提高单片机及其晶振的精度、完善测试程序、在稳定环境下进行测试、采用高灵敏度的颜色传感器等等。

第 40 页 共 51 页

清华大学2012届毕业设计说明书

7 结论与展望

7.1 结论

随着科学技术的高速发展,智能化即成为一种趋势。因而颜色识别系统的发展和应用越来越广泛,从普通的色敏光电传感器到成型的颜色识别器,以及更高级的摄像及图像传输处理系统,展现了人类对信息的采集和处理技术在不断的提高。在本论文中只是实现了简单的颜色识别,由于本人的知识水平有限、光源等外界条件的不稳定、颜色的连续变化性而没有精确的范围值等,导致了本装置精确度不高。不足之处,还望老师们多多指正。

本文首先介绍了颜色识别技术的国内外发展动态及其研究的目的和意义,然后介绍了有关光与颜色的理论知识,再根据理论基础建立了颜色识别系统的模型,确立了颜色识别的基本算法,而后又介绍了组成该颜色识别装置的各个模块及各模块的主要器件的功能和用法,之后介绍了该颜色识别系统的硬件设计,最后介绍了该系统的软件设计,并编写程序,通过计算RGB值来确定被测物的颜色。

本论文是以STC89C51单片机为基础,再加上LCD1602液晶显示器模块和TCS230颜色传感器模块,设计与实现了本颜色识别系统。本论文着重研究了上述三个模块的实现和颜色识别的算法。 7.2 展望

在现代工业化、自动化社会中颜色识别技术是一门重要技术。通过几个月对本颜色识别系统的研究,在以下几方面还有待于进一步的研究和完善:

1. 光信号的准确接收和抗其他光干扰方面,缺乏更精准措施。

2. 实现颜色识别的算法不够完善,程序还有待于进一步优化,以应对更多的识别场合,以增强普适性。

3. 可控性方面缺乏对光源的可调节性和识别灵敏度的可调性的设计。 本论文设计的色彩识别系统从理论到实际的产品,还有很多的不足之处,如:需要考虑系统的稳定性、抗干扰能力、电源等问题,因此必将有大量的问题,需要进行更深入的研究。随着社会的进步,智能化,制动化的发展,颜色识别系统必将被广泛应用于各行各业之中。

第 41 页 共 51 页

清华大学2012届毕业设计说明书

附录 A

程序代码:

#include #include #include

#define uchar unsigned char #define uint unsigned int uchar str_buf[3];

uint date_red,date_green,date_blue; //定义全局变量记录RGB值 uint disp_count=0; //中断计数 uint lck=0; //定时器计数 uint disp=0; //频率值 sbit RS=P2^6; //数据/命令选择端,高电平-数据寄存器,低电平-指令寄存器 sbit RW=P2^5; //读/写选择端,高-读操作,低-写操作 sbit E=P2^7; //使能端 sbit K1 = P2^0; sbit K2 = P2^1; sbit K3 = P2^2;

/************************************************* 延时函数,延时1ms 误差范围为1us

**************************************************/ void delay(uint i) { uint j; while(i--) { for(j = 0;j < 69;j++) { _nop_(); _nop_(); } } }

/************************************************* 定时器初始化函数

**************************************************/ void initTimer(void) // 定时器初值1ms { TMOD = 0x0; //选择定时器/计数器T0 工作方式0 计数位数13位 TH0 = 0xe0; TL0 = 0x18;

第 42 页 共 51 页

清华大学2012届毕业设计说明书

}

/************************************************* 定时器函数

**************************************************/

void timer0(void) interrupt 1 //定时1秒,每一秒中断一次,所记得数就是频率 { TH0 = 0xe0; TL0 = 0x18; lck++; if(lck == 1000) { disp = disp_count; lck = 0; disp_count = 0; } }

/************************************************ 中断函数

*************************************************/ void int0(void) interrupt 0 //外部中断0,TCS230的OUT端口接到INT0端口 { disp_count++; //每一次中断,计数加一 }

/*********************************************** 函数功能:整型数转化成字符串,以便LCD输出显示 ************************************************/ uchar *int_to_str(uint d) { memset(str_buf,'\\0',sizeof(str_buf)); if(d >= 255) { d = 255; str_buf[0]='0'+d/100; str_buf[1]='0'+d0/10; str_buf[2]='0'+d; } else { str_buf[0]='0'+d/100; str_buf[1]='0'+d0/10; str_buf[2]='0'+d; } return str_buf;

第 43 页 共 51 页

清华大学2012届毕业设计说明书

}

/************************************************ LCD显示模块

*************************************************/ uint lcd_bz(void) // 测试LCD忙碌状态 { uint result; RS = 0; RW = 1; E = 1; _nop_(); //延时1us,即一个机器周期=12*时钟周期(晶振频率分之一) _nop_(); _nop_(); _nop_(); result = (P0 & 0x80); //BF=D7 高电平表示忙,此时模块不接受命令和数据 E = 0; return result; }

void LCD_w_cmd(unsigned com) //写命令函数,写入指令数据到LCD { while(lcd_bz()); //检测忙信号 RW=0; RS=0; E=1; P0=com;

delay(10); //延时10ms E=0; RW=1; }

void LCD_w_date(uchar date) //写数据函数,写要LCD显示的数据 { while(lcd_bz()); //检测忙信号 RW=0; RS=1; E=1; P0=date; delay(10); //延时10ms E=0; RW=1; }

void init_LCD(void) //初始化lcd函数 {

第 44 页 共 51 页

清华大学2012届毕业设计说明书

LCD_w_cmd(0x38); //16*2显示,5*7点阵,8位数据 LCD_w_cmd(0x0c); //显示开,关光标 LCD_w_cmd(0x06); //光标向右移动一位 delay(1); }

void clear_LCD() //清屏函数 {

LCD_w_cmd(0x01); //清屏

LCD_w_cmd(0x02); //光标归位 delay(1); }

void display_LCD_string(uchar *p) //字符串输出 { while(*p) { LCD_w_date(*p); p++; delay(5); } }

void gotoxy(uint x,uint y) //定位函数 x为行 y为列 { if(x==1) LCD_w_cmd(0x80+y); else LCD_w_cmd(0xC0+y); }

/*********************************************** RGB三种颜色通道选择模块

************************************************/ void red_channel() { P1 = 0x01; //选择红色滤波器类型 delay(1050); date_red = disp/100; }

void green_channel() { P1 = 0x19; //选择绿色滤波器类型 delay(1050); date_green = disp/100; }

void blue_channel()

第 45 页 共 51 页

清华大学2012届毕业设计说明书

{ P1=0x11; //选择蓝色滤波类型 delay(1050); date_blue = disp/100; }

/************************************************** main函数

**************************************************/ void main(void) { uchar *p_value; int show=0; int R_actual=0,G_actual=0,B_actual=0; IT0=1; EX0=1; initTimer(); TR0=1; ET0=1; EA=1; init_LCD(); clear_LCD(); while(1) { if(K1==0) show = 1; if(K2==0) show = 2; if(K3==0) show = 3; switch(show) { case 1: gotoxy(1,0); display_LCD_string(\ red_channel(); p_value = int_to_str(date_red); display_LCD_string(p_value); gotoxy(1,8); display_LCD_string(\ green_channel(); p_value = int_to_str(date_green); display_LCD_string(p_value); gotoxy(2,0);

//INT0下降沿中断//允许INT0中断 //定时器初始化 //开定时器T0 //允许T0中断 //中断总控制 //LCD初始化 //清屏 第 46 页 共 51 页

清华大学2012届毕业设计说明书

display_LCD_string(\ blue_channel(); p_value = int_to_str(date_blue); display_LCD_string(p_value); break; case 2:

R_actual=date_red; //R_actual是在纯白情况下测得的红色通道

频率值

G_actual=date_green; //G_actual是在纯白情况下测得的绿色通 道频率值 B_actual=date_blue; //B_actual是在纯白情况下测得的蓝色通 道频率值 delay(1000); clear_LCD(); gotoxy(1,0); display_LCD_string(\ break; case 3: delay(1000); clear_LCD(); gotoxy(1,0); display_LCD_string(\ gotoxy(1,6); display_LCD_string(\ gotoxy(1,11); display_LCD_string(\ gotoxy(2,0); display_LCD_string(\ red_channel(); //调用红色通道并显示色彩值 date_red = (255.0/R_actual)*date_red; gotoxy(1,2); p_value = int_to_str(date_red); display_LCD_string(p_value); green_channel(); //调用绿色通道并显示色彩值 date_green = (255.0/G_actual)*date_green; gotoxy(1,8); p_value = int_to_str(date_green); display_LCD_string(p_value); blue_channel(); //调用蓝色通道并显示色彩值 date_blue = (255.0/B_actual)*date_blue; gotoxy(1,13); p_value = int_to_str(date_blue); display_LCD_string(p_value);

第 47 页 共 51 页

}

}

}

清华大学2012届毕业设计说明书

if((date_red>=230)&&(date_green>=230)&&(date_blue>=230)) { gotoxy(2,9); display_LCD_string(\}

if((date_red<=40)&&(date_green<=40)&&(date_blue<=40)) { gotoxy(2,9); display_LCD_string(\}

if((date_red>(date_green+30))&&(date_red>(date_blue+30))) { gotoxy(2,9); display_LCD_string(\}

if((date_green>(date_red+30))&&(date_green>(date_blue+30))) { gotoxy(2,9); display_LCD_string(\}

if((date_blue>(date_green+30))&&(date_blue>(date_red+30))) { gotoxy(2,9); display_LCD_string(\}

break;

第 48 页 共 51 页

本文来源:https://www.bwwdw.com/article/rvrp.html

Top