设计通过 RGB LED 模块显示测量结果的颜色传感器,第 2 部分
出处:维库电子市场网 发布于:2025-01-02 16:23:26 | 356 次阅读
在第 1 部分中,我们讨论了如何使用 DAC 和一些负反馈来精确控制红色、绿色和蓝色 LED 的强度。现在,我们可以使用 RGB LED 模块作为单像素显示器,即通过操纵红、绿和蓝光的混合,我们可以产生多种颜色。 我们想要使用这个 LED 模块来复制照亮 RGB 传感器的光的颜色。正如第一篇文章中提到的,我们使用的是罗姆公司生产的BH1745NUCIC(以下简称BH1745)。这实际上是一个相当令人印象深刻的设备。该封装很小(约 2 毫米 × 2 毫米),这就是我们在该项目中使用定制设计 PCB 的原因之一(也许您可以将跳线焊接到 8 个微小的 0.5 毫米间距焊盘上,但我做不到) t)。尽管尺寸很小,但该部件却具有广泛的功能,并且只需要很少的外部组件。这是数据表中的“典型应用电路”:
BH1745 的数字部分包括一组 21 个 8 位寄存器。微控制器和 BH1745 之间的所有交互(除了我们在本项目中不使用的中断功能)都是通过标准 I2C 事务写入或读取这些寄存器来完成的。有关 I2C 协议的大量一般信息和实用指南,请参阅“支持信息”下列出的文章。在这里,我们将重点关注 BH1745 的具体实现细节。
从 BH1745 控制和检索数据需要三种类型的 I2C 事务:写入、先写后读和读取。 写入:这些事务用于将数据加载到 BH1745 的寄存器组中。从机地址加 R/nW 字节之后的第一个字节指定寄存器地址,然后接下来的字节是要加载到寄存器中的数据。
正如您所看到的,读事务并不限于一个指定的寄存器地址。如果继续从 BH1745 读取字节,它将自动递增寄存器地址并从新寄存器发送数据。实际上,您可以对写入事务执行相同的操作:
另请注意,先写后读和读事务可以通过重复启动条件(如上图所示)来实现,而不是先停止条件后跟启动条件。如果 I2C 总线上有多个主控器,这将是更好的选择(有关更多信息,请参阅I2C 总线:固件实现详细信息中的“无停止启动”部分)。不过,在这个项目中,我们只有一个主控,因此我们将再次引用保持简单的原则并使用典型的先停后启动的方法。
处理数据 RGBC 数据以四个 16 位字形式从 BH1745 到达,如下所示:
从该图中我们可以看到,当 G 为 1 时,R 约为 0.72,B 约为 0.56。因此,我们需要将 R 和 B 值乘以适当的校正因子:
\[CF_R=\frac{1}{0.72}=1.39,\ \ \ CF_B=\frac{1}{0.56}=1.79\] 现在我们需要以强调入射光颜色特征的方式修改数据。我们的目标是“测量”颜色,无论照射光电探测器的光的总体强度如何。
因此,我们需要以标准化测量绝对值同时保留相对值的方式缩放 RGB 值,换句话说,我们在保持入射光中红、绿、蓝比例的同时最大化整体强度。为了实现这一点,我们将三个测量值中的最高值乘以将该最高测量值增加到最大值的任何因子,然后将其他两个测量值乘以相同的因子。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,//tgdrjb.cn,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。