包装分拣、色标检测、液体识别场景的颜色传感方案怎么选?TCS230以数字频率输出免去ADC,配合白平衡标定即可稳定识别RGB:结构原理、引脚配置、标定算法、硬件接口与STM32代码全流程。
TCS230是TAOS公司推出的可编程颜色传感器:它将64个硅光电二极管(红/绿/蓝/透明各16个)与电流-频率转换器集成在单一CMOS芯片上,直接输出与光强成正比的50%占空比方波,无需A/D转换电路即可直连STM32等MCU,每个颜色通道可实现10位以上转换精度。本文基于《颜色传感器TCS230及颜色识别电路》(深圳光硕科技胡建民)与TAOS官方数据手册(TAOS046Q)、白皮书《Sensing color with the TAOS TCS230》整理,给出从方案对比、结构原理、白平衡标定到硬件接口与软件实现的完整设计路径,可直接用于嵌入式颜色识别终端与物联网检测设备开发(数据来源:TAOS TCS230数据手册TAOS046Q,2026-08检索)。
传统颜色传感器通常在独立光电二极管上覆盖修正后的红、绿、蓝滤光片,输出模拟信号,需要外接A/D电路采样,电路复杂且识别误差较大;部分数字式传感器走I2C接口,但成本与体积偏高。TCS230用"光-频转换"把颜色信号变成频率,MCU用定时器计数即可读出RGB值,工程实现最简单。
| 对比项 | 模拟RGB+ADC方案 | TCS230光频转换 | I2C数字颜色传感器 |
|---|---|---|---|
| 输出形式 | 模拟电压,需外接ADC | 数字频率方波,直连MCU | I2C数字寄存器 |
| 转换精度 | 取决于ADC位数 | 每通道10位以上 | 8-16位可配置 |
| 硬件复杂度 | 高(运放+ADC+基准) | 低(2-4个GPIO+1个定时器) | 中(I2C外设) |
| 抗干扰 | 模拟信号易受干扰 | 频率量抗噪强 | 数字总线,受速率限制 |
| 适用场景 | 实验室级高精度测量 | 工业色标/分拣/液检 | 多传感器总线组网 |
TCS230典型输出频率范围2Hz-500kHz,输出比例因子可编程为100%、20%、2%或电源关断,配合不同测量速度的计数器使用,适应性很强。
TCS230采用8引脚SOIC表面贴装封装(VDD 2.7-5.5V单电源,工作温度-40℃~70℃),芯片内集成8×8共64个光电二极管阵列,相同颜色的16个二极管并联且交叉排列,最大限度消除入射光不均匀性与颜色位置误差。光电二极管尺寸120µm×120µm,间距144µm,感光区1.15mm×1.15mm。
| 引脚 | 名称 | 功能 | 说明 |
|---|---|---|---|
| 1 | S0 | 输出定标选择 | 与S1组合选择比例因子或关断 |
| 2 | S1 | 输出定标选择 | 与S0组合选择比例因子或关断 |
| 3 | OE | 输出使能(低有效) | 高电平输出高阻,可作多芯片片选 |
| 4 | GND | 电源地 | 所有电压相对GND |
| 5 | VDD | 电源 | 2.7-5.5V,需就近去耦 |
| 6 | OUT | 频率输出 | 50%占空比方波,接MCU定时器 |
| 7 | S2 | 滤光片选择 | 与S3组合选择R/G/B/透明 |
| 8 | S3 | 滤光片选择 | 与S2组合选择R/G/B/透明 |
S0-S3的组合选项是TCS230编程的核心,对照关系如下表(数据来源:TAOS046Q数据手册Table 1)。
| S0 | S1 | 输出比例因子 | S2 | S3 | 光电二极管类型 |
|---|---|---|---|---|---|
| L | L | 电源关断 | L | L | 红色(Red) |
| L | H | 2%(约12kHz满量程) | L | H | 蓝色(Blue) |
| H | L | 20%(约120kHz满量程) | H | L | 透明(Clear,无滤光) |
| H | H | 100%(约600kHz满量程) | H | H | 绿色(Green) |
关键电气参数:满量程频率600kHz(S0=H、S1=H时典型值,500kHz最小);暗频率仅2-12Hz;非线性误差在50kHz以内±0.2%、500kHz以内±0.5%;响应度温度系数±200ppm/°C(λ≤600nm);工作电流典型2mA、最大3mA,关断模式仅7µA典型;OE响应时间100ns,退出关断恢复时间100µs(数据来源:TAOS046Q)。
根据三原色理论,任何颜色都由不同比例的红、绿、蓝混合而成。TCS230选定某个颜色滤光片后,只允许对应原色通过,例如选红色滤光片时蓝绿被阻止,输出频率即代表红色光强;依次选通三种滤光片即可得到R、G、B三个值。理论上白色由等量RGB构成,但TCS230对三原色的敏感度并不相同,因此测量前必须做白平衡调整,让系统对标准白的RGB输出归一化相等。
| 标定方法 | 做法 | 优点 | 适用场合 |
|---|---|---|---|
| 计数到255法 | 依次选通R/G/B滤波片计数,计数到255即停,记录三通道所用时间作为基准 | 一次标定长期使用 | 光源稳定的固定工位 |
| 固定时间法 | 设固定时间(如10ms)测三通道脉冲数,求出归一到255的比例因子 | 实现简单、实时性好 | MCU资源受限、快速检测 |
实际测试时,用同样的时间基准计数并把结果乘以上述比例因子,即得到归一化的R、G、B值,再按RGB向量距离或比值判断目标颜色。需要强调的是:更换光源、更换传感器模块或首次上电,都必须重新做白平衡标定。
TCS230与STM32的接口极其简洁:S0-S3接4个GPIO,OUT接定时器输入捕获通道,OE接GPIO作片选。连接示意如下。
TCS230 (SOIC-8) STM32
┌──────────────┐
S0 1─┤ ├─8 S3 ──────── PA3 (GPIO输出)
S1 2─┤ ├─7 S2 ──────── PA2 (GPIO输出)
OE 3─┤ ├─6 OUT ─────── PA6/TIM3_CH1 (输入捕获)
GND 4─┤ ├─5 VDD ─── 3.3V ─┴─ 0.1µF 去耦电容
└──────────────┘
(VDD旁路0.01-0.1µF,短引线就近放置;OE低有效)
硬件注意事项(数据来源:TAOS046Q应用信息):电源线必须用0.01-0.1µF电容就近去耦;OE与GND之间保持低阻抗连接以提升噪声抑制;OUT到MCU的走线超过12英寸(约30cm)时应加缓冲/驱动芯片;传感器、光源建议置于密闭无反射的测试箱内,避免外界光线干扰识别结果;多数硅光传感器对红外敏感而普通光源含大量红外成分,可在窗口加Schott BG18/BG39或Hoya CM500型红外截止滤光片,否则会虚高红色分量。
频率测量有两种典型方法:周期法适合快速变化光强,用高速参考时钟测单周期;计数法适合稳定光强,MCU定时窗口内累计脉冲,精度高且能平均随机抖动。固定时间计数法代码示例如下(STM32 HAL风格,逻辑参照《颜色传感器TCS230及颜色识别电路》的89C51实现改写)。
/* TCS230 颜色识别示例:固定时间计数法 + 白平衡标定(STM32 HAL 风格) */
#define MEASURE_MS 10 /* 单通道测量窗口 */
#define SCALE_255 255u /* RGB 归一到 0-255 */
static uint16_t wb_r, wb_g, wb_b; /* 白平衡比例因子 */
static uint32_t tcs230_measure(uint8_t s2, uint8_t s3)
{
/* 选择光电二极管类型:S2/S3 = 00红 01蓝 10透明 11绿 */
HAL_GPIO_WritePin(S2_GPIO_Port, S2_Pin, s2);
HAL_GPIO_WritePin(S3_GPIO_Port, S3_Pin, s3);
__HAL_TIM_SET_COUNTER(&htim3, 0); /* 清零计数 */
HAL_TIM_IC_Start(&htim3, TIM_CHANNEL_1);
HAL_Delay(MEASURE_MS); /* 10ms 采样窗 */
HAL_TIM_IC_Stop(&htim3, TIM_CHANNEL_1);
return __HAL_TIM_GET_COUNTER(&htim3); /* 窗口内脉冲数 */
}
void tcs230_white_balance(void)
{
/* 对标准白板测量,求出归一到255的比例因子(固定时间法) */
wb_r = SCALE_255 / tcs230_measure(0, 0); /* 红通道 */
wb_g = SCALE_255 / tcs230_measure(1, 1); /* 绿通道 */
wb_b = SCALE_255 / tcs230_measure(0, 1); /* 蓝通道 */
}
RGB_t tcs230_read_color(void)
{
RGB_t c;
c.r = tcs230_measure(0, 0) * wb_r; /* S2=0,S3=0 → 红色滤波 */
c.g = tcs230_measure(1, 1) * wb_g; /* S2=1,S3=1 → 绿色滤波 */
c.b = tcs230_measure(0, 1) * wb_b; /* S2=0,S3=1 → 蓝色滤波 */
return c; /* 判断时比较RGB比例即可 */
}
颜色判断可用欧氏距离法:预先采集各标准色的RGB模板,实时值与模板计算距离,距离最小者即判定结果;也可用R/G、B/G比值法,对光照强度变化不敏感,更适合工业色标检测。
TCS230的RGB敏感曲线与人眼CIE标准观察者曲线并不一致,直接输出并非色度学意义上的颜色值。若要逼近标准色度,可用一个3×3颜色校正矩阵对原始RGB做线性变换。TAOS白皮书以D65光照下ColorChecker标定给出了示例矩阵(数据来源:TAOS白皮书《Sensing color with the TAOS TCS230》)。
┌ X ┐ ┌ 0.3568 0.2889 0.2132 ┐ ┌ R ┐
│ Y │ = │ 0.1173 0.9000 -0.0611 │ │ G │
└ Z ┘ └ 0.0095 -0.5294 1.6196 ┘ └ B ┘
(X/Y/Z为估计的三刺激值,R/G/B为TCS230原始读数;
矩阵系数针对特定光源与光学组件优化,换环境需重新标定)
光源对识别结果影响显著:白炽灯(CIE Illuminant A)短波分量不足,会低估蓝色;Nichia白光LED在蓝光区有尖峰,不做处理会高估蓝色。下表为工程实测中的光源影响与对策。
| 光源类型 | 光谱特征 | 对TCS230的影响 | 工程对策 |
|---|---|---|---|
| 白炽灯(Illuminant A) | 红多蓝少 | 蓝色读数偏低 | 加蓝增益补偿或换光源 |
| 白光LED | 蓝光区尖峰 | 蓝色读数虚高 | 白平衡标定后仍按比例判断 |
| 荧光灯 | 光谱有尖峰不连续 | 颜色失真 | 固定工位避免频闪影响 |
| 日光(D65) | 分布较均匀 | 识别最准确 | 标准标定参考 |
工程落地时记住三条:一是识别环境要避光,最好把传感器与光源放入密闭无反射箱体;二是光源光线尽量集中,避免多传感器相互干扰;三是首次使用、模块重启、更换光源后都必须重新做白平衡标定。按此流程,TCS230可在包装色标检测、物料分拣、液体颜色识别等场景稳定工作。
TCS230以光-频转换架构免除了ADC与模拟信号链,配合S0-S3引脚级编程与白平衡标定,可用极简硬件在MCU上实现10位级颜色识别;对精度要求更高的色度学应用,可叠加3×3颜色校正矩阵逼近标准观察者。该方案成本低、抗干扰强、代码量小,是嵌入式颜色识别与物联网检测终端的实用选择。
本文基于《颜色传感器TCS230及颜色识别电路》(深圳光硕科技 胡建民)与TAOS TCS230数据手册(TAOS046Q)、TAOS白皮书《Sensing color with the TAOS TCS230》等资料整理优化。