TCS230颜色传器原理与应用编程.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TCS230颜色传器原理与应用编程

TCS230颜色传感器 1 . 颜色传感器原理 TCS230采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管。这些二极管共分为四种类型。其中16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器;其余16个不带有任何滤波器,可以透过全部的光信息。这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。工作时,通过两个可编程的引脚来动态选择所需要的滤波器。该传感器的典型输出频率范围从2 Hz~500 kHz,用户还可以通过两个可编程引脚来选择100%、20%或2%的输出比例因子,或电源关断模式。输出比例因子使传感器的输出能够适应不同的测量范围,提高了它的适应能力。例如,当使用低速的频率计数器时,就可以选择小的定标值,使TCS230的输出频率和计数器相匹配。 2. 引脚图及其控制与功能 a. 实物图 (芯片的4引脚延伸进去这是区分引脚的标志。) b. 引脚编程设置及其功能 1. 输出频率分频选择 S0 S1 输出频率分频比例 L L 掉电 L H 2% H L 20% H H 100% 2. 滤光颜色选择 S2 S3 光电二极管类型 L L 红色 L H 蓝色 H L 清除(无滤波器) H H 绿色 3. 测量频率的方法 (1) 依次选通三种颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。当计数到25时停止计数,分别计算每个通道所用的时间。这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。 设置定时器为一固定时间(例如10 ms),然后选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255。在实际测试时,使用同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值。 (1)电源线必须采用0.01μF~0.1μF的电容退耦,且电容应尽可能靠近芯片。 (2) 芯片的OE引脚和GND引脚之间需采用低阻抗连接,以提高抗噪声能力。 (3)芯片的输出设计为短距离驱动标准TTL 或CMOS逻辑输入电平。若输出线超过12英寸,则建议使用缓冲器或线驱动器。 TCS230识别模块重启、更换光源等情况时,都需要进行白平衡调整。#includereg52.h #define uchar unsigned char #define uint unsigned int sbit S0=P1^0; //S0,S1为设置输出的占空比 sbit S1=P1^1; sbit S2=P1^3; //S2,S3为设置虑光的模式 sbit S3=P1^4; sbit OE=P1^2; //使能 void RS232_init() { TMOD=0X20; //定时器1工作在方式1 SCON=0x50; PCON=0X80; // TH1=TL1=0XFF;//22.1184M晶振,波特率设置为115200 TR1=1; TI=0; RI=0; } void send_char(uchar a) //发送数据 { SBUF=a; while(TI==0); TI=0; } uchar get_char() //接收数据 { while(RI==0); RI=0; return SBUF; } uint color_display(uchar m) { uint time,a; a=m; TMOD=0x61; //计数器1,定时器0工作在16位方式 TH0=TL0=0; //从零开始计数,定时 TH1=TL1=0; S0=1; S1=1; S2=m0x01; S3=m0x02; OE=0; TR0=TR1=1; while(TL1250); TR1=TR0=0; OE=1; time=TH0*256+TL0; return(time); } void main() { uint temp; RS232_init(); OE=1; while(1) { temp=color_display(get_char()); RS232_init(); send_char(temp

文档评论(0)

chengben002424 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档