MSP430技术论坛
直播中

linchenfeng

11年用户 626经验值
擅长:电源/新能源 嵌入式技术 模拟技术 光电显示 控制/MCU RF/无线
私信 关注
[资料]

颜色识别传感器 TCS230的白平衡和比例因子计算浅谈。

注:本文是对颜色传感器白平衡和比例因子计算的介绍,和具体流程实现方法。
    由于发现身边同学有做有些设计的时候需要到颜色识别传感器。但是对于其中的三个(RGB)的比例因子不知道怎么来的,是什么意思,或者怎么去计算调整。这里我简单统一的做一下介绍。


      首先,使用颜色识别传感器的原理实际就是,三单元色的分析。因为任何颜色都可以由RGB这三种颜色混合而成。所以我们只要识别出这三种颜色的值,然后对应去查颜色铺表,即可得出被测物的颜色。

     再者,实际使用中,很多同学都是照搬网络上的例程,发现对颜色的识别有很大的误差或者误识别。主要是因为历程中的比例因子均是固定了的,而且同学们也不知道如何去修改。 因为不同条件下,比例因子是不同的。所以才有了白平衡的需要。

    那么,什么是比例因子呢。我们知道在理论(认为无任何干扰光源下),白色对应的三基色(RGB) 都是 255。 而我们在实际中不可能是在无干扰的理论环境下。 那么这个白色也不是理论下的“白色”,那么对应RGB就不是255了。既然白色都是不是标准的了,那么其他颜色的RGB肯定就不是标准的了。所以,我们得知道一个调整参数,这个参数就是比例因子。 比如:在使用环境下,我们做白平衡,得到了RGB的值,分别是240,245,250,那么对应的比例因子就是240/255,245/255,250/255。  这样,我们在检测其他颜色的时候,得到RGB参数后,分别取乘上各自的比例因子。就可以得到更加真实的RGB值了。

   然后,具体实现方法呢。 参考数据手册。 里面介绍了两种方法,第一种是脉冲计数到255,得到时间基数;第二种是固定时间采集脉冲然后通过正比例转化为255,得到一个调整参数,也就是比例因子。 由于,网络上基本都是采用第二种,我就介绍第二种方法。  个人实际上更加偏向第一种方法,更加的准确和可靠。

  对第二种方法而言,传感器正对白色物体(光源也可)首先我们设置一个固定时间,比如为10ms。然后我们通过依次选通传感器的检测基色(每个通道都是10ms),分别得到三个脉冲个数的值,比如红色为X个脉冲,绿色为Y个脉冲,蓝色为Z个脉冲。然后A为红色比例因子,B为绿色比例因子,C为蓝色比例因子,那么A=255/X,B=255/Y,C=Z/255。 这样我们就完成了比例因子的计算。   然后,我们检测其他颜色的时候,(这里注意,如果我们是采用10ms做的基本时间,那么检测任何颜色下,程序中的检测时间也需要设置为10ms)。分别得到RGB后,再分别乘以上面计算的比例就可以得到更加准确的真实RGB值。


  之后,我们把得到的RGB值,通过查表法对三原色值表进行查表,可以就可以得到具体是什么颜色。这里肯能有的同学要问了,不可能每个RGB值都刚好和表里的值对应啊。这里,我就要说,其实如果我们只是大概识别红色,浅红,深红,这里我们已经可以实现。如果还要细分,那么可以这样,得到的RGB值首先查遍,如果没有刚好直接能够匹配的,我们可以找到相近的两个参数,然后通过插值法,再去判断识别。 具体的RGB值表在网络上可找到,实际程序中的查表法,可以使用二分法,插值法可以使用线性插值。仅仅个人建议

   最后,实际使用中,如果我们环境没有发生变换只需要做一次白平衡就可以(也就是只计算一次比例因子),之后就用这个因子做处理就好了。 程序里面,我们可以设置一个命令或者按键,当用户按下按下或者收到这个命令后,才做白平衡。

   这里就介绍完了。希望对有疑问的朋友能够有帮助。 不过,那种还是只会问要代码的!别再来找我!!!!  
   只要你理解了,根据网络上提供的代码,然后稍微加修改就可以完成白平衡(比例因的计算)。

   补充下: 针对第一种时基方式,实际上更加可靠。还是大概说下,白平衡时候,利用MCU的PCA功能,分别去捕捉RGB的输出脉冲,直到捕获到255个。 然后计算出RGB分别输出255个脉冲的时间(PCA模式下,捕获功能可以计算出时间的). 然后,这个三个时间T1,T2,T3,以后就是我们去检测其他颜色输出脉冲的限制时间。 举例:检测三原色中R的值,通过配置定时,比如配置为T1的时间长度,PCA捕获这个T1下输出的脉冲个数,这个脉冲个数就是R真实值了。然后再把定时器配置为T2的时间长度,PCA捕获T2下的脉冲,这个值就是G的值,B同理。

更多回帖

发帖
×
20
完善资料,
赚取积分