徐州工程学院毕业设计(论文)
4 色彩识别器系统的设计与实现
4.1 系统结构框图
色彩识别系统是基于MCS-51系列单片机控制的基础上,添加了TCS230颜色传感器采集模块,TCS230驱动模块,四个白色LED补光模块,LCD1602液晶显示模块,在这些模块的基础上实现的色彩识别系统,色彩识别系统的设计如图4.1系统框架所示。
TCS230驱动模块MC-51系列单片机TCS230颜色采集LCD1602液晶显示模块四个白色LED补光模块图 4.1 系统框架
图4.2 色彩识别系统实物图
4.2 TCS230驱动模块
TCS230采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管,这些二极管分为四种类型,其16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器,其余16个不带有任何滤波器,可以透过全部的光信息,这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。
本模块主要包括TCS230初始化、定时器初始化和颜色采集,具体程序如下: void TCS230Inital(void)
{ DDRC= DDRC|0x0f;PORTC = PORTC|0x0f; }
void TimerInital(void) {
TCCR1A=0x00; TCCR1B=0x06; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00;ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR= 0x00; TCCR2 = 0x07; TCNT2 = 0xb7; OCR2= 0x00; TIMSK=0x40; PORTC = PORTC|0x20; DDRC= DDRC|0x20;
PORTC = PORTC&0xdf;TCS230Mode(FrequencyMode,PhotoDiodeMode);
XI
徐州工程学院毕业设计(论文)
}
unsigned char TCS230Mode(unsigned char FOutMode,unsigned char PhotoType) { }
if( FOutMode == F_POWERDOWN) {
PORTC = PORTC & 0xfc; } else if(FOutMode == F_100_2) { { { {
PORTD = PORTD & 0xfe;PORTD = PORTD | 0x02;} PORTD = PORTD & 0xfd;PORTD = PORTD | 0x01;} PORTD = PORTD | 0x03; } return 1; }
FrequencyMode = FOutMode; if(PhotoType==PH_RED) {PORTD = PORTD & 0xf3; } else if(PhotoType==PH_CLEAR) { { { {
return 2; }
PhotoDiodeMode=PhotoType; return 0;
PORTC = PORTC & 0xf7;PORTC = PORTC | 0x04; PORTC = PORTC & 0xfb;PORTC = PORTC | 0x08; PORTC = PORTC | 0x0c;
}
} }
else if(PhotoType==PH_BLUE) else if(PhotoType==PH_GREEN) else
else if(FOutMode == F_100_20) else if(FOutMode == F_100_100) else
4.3 TCS230颜色采集模块的设计
4.3.1 TCS230颜色采集模块与51单片机的接口
本设计中,TCS230模块主要与51单片机的P1口和P3口连接。P1口是准双向口,它只能作通用I/O接口使用。P1口的输出只由一个场效应管与内部上拉电阻组成。其输入输出原理特性与P0口作为通用I/O接口使用时一样,当其输出时,可以提供电流负载,不
XII
徐州工程学院毕业设计(论文)
必像P0口那样需要外接上拉电阻。P1口具有驱动4个LSTTL负载的能力。
TCS230颜色传感器与51单片机具体的连接方式如图4.3所示。
4.3.2 TCS230颜色采集模块的软件设计
本设计的TCS230颜色采集模块主要是利用定时器/计数器T0和外部中断INT0来实现的。流程图4.4所示。
图4.3 TCS230与51的连接图
定时器初始化外部脉冲信号定时时间到否外部中断计数是输出频率值图4.4 颜色采集模块软件流程图
1、定时器/计数器:MCS-51系列中51子系列有两个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1;52子系列有三个,比51子系列多一个定时/计数器T2.每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。
XIII
徐州工程学院毕业设计(论文)
在本设计中,设置T0的工作方式为方式0,定时1ms,赋初值为TH0=0xe0,TL0=0x18,在定时器/计数器T0中断函数void timer0(void)中重新给定时器/计数器T0赋初值,并且设定了一个变量lck,用来计数定时器/计数器T0中断的次数,当变量lck达到1000时,表明定时了一秒钟,而外部中断0的中断函数void int0(void)中定义的变量dispcount在定时一秒时间达到时候的值就是此时所选择的某种颜色通道的频率值。具体程序如下:
void initTimer(void) // 定时器初值1ms { TMOD=0x0; TH0=0xe0; TL0=0x18; }
void timer0(void) interrupt 1 //定时1秒,每一秒中断一次,所记得数就是频率 { TH0=0xe0; TL0=0x18; lck++; if(lck==1000)
{ disp=dispcount; lck=0; }
2、MCS-51单片机提供5个硬件中断源:2个外部中断源INT0和INT1;2个定时器/计数器T0和T1的溢出中断TF0和TF1;
本设计中采用外部中断请求INT0来接收传感器的输出值。TCS230颜色传感器的OUT输出端与外部中断INT0(P3.2)管脚相连接,在外部中断INT0的中断函数void int0(void)中定义了一个变量dispcount,当接收一个脉冲信号时,dispcount就会加1,在定时/计数器T0设定的一秒时间内所累计的数值就是频率。具体程序如下:
void int0(void) interrupt 0 }
3、RGB三种色彩通道采集: void red() //红色通道 { P1=0x01;
delay1ms(1100); date=disp/100;
//153是在纯白情况下测得的红色通道频率值
date=(255.0/153)*date; }
//外部中断0,TCS230的OUT端口接到INT0端口
{ dispcount++; //每一次中断,计数加一
dispcount=0; }
void green() //绿色通道 { P1=0xc1;
delay1ms(1100); date=disp/100;
date=(255.0/145)*date; } //145是在纯白情况下测得的绿色通道频率值
XIV
徐州工程学院毕业设计(论文)
void blue() { P1=0x81;
//蓝色通道
delay1ms(1100); date=disp/100;
date=(255.0/183)*date; } //183是在纯白情况下测得的蓝色通道频率值
4.4 4个白色LED补光模块的设计
因为本设计的TCS230颜色采集模块需要在密闭的环境下实现,所以需要另外添加一个稳定的光源。本模块主要是用4个白色的LED光,照在待检测的物体上,然后反射到TCS230颜色传感器上,达到合适的光强的目的。电路图设计如图4.5所示。
4.5 LCD1602液晶显示模块
4.5.1 LCD1602液晶显示模块硬件设计
本设计中的LCD1602液晶显示模块主要是和MCS-51单片机的P0口和P2口连接的。P0口是一个三态双向口,可作为地址/数据分时复用接口,也可作为通用的I/O接口。它由一个输出锁存器、两个三态缓冲器、输出驱动电路和输出控制电路组成。
P2口也是准双向口,它有两种用途:通用I/O接口和高8位地址线。与P1口相比,它只在输出驱动电路上比P1口多了一个模拟转换开关MUX和反相器。
LCD1602与51单片机的具体连接方式如图4.6所示。
图4.5 白色LED补光模块电路图
4.5.2 LCD1602液晶显示模块软件设计
XV