环境光传感器

本文档提供有关使用集成式环境光传感器的设备设计和开发的建议。 选择合适的环境光传感器(ALS)设备至关重要。

以下简要检查清单适用于将传感器硬件集成到设备中的开发人员。 本文档的其余部分详细介绍过程和背景信息。

  • 选择合适的背光光源。
  • 选择合适的光传感器。
  • 为光传感器在设备机柜中选择最佳位置。
  • 考虑涂层、光管、传感器配置、位置等所有因素,执行按模型校准。 应使用专业的、预先校准的测光表进行测量。
  • 以受支持的方式之一将传感器集成到设备上。
  • 利用收件箱 HID 传感器类驱动程序。 通过 USB、SPI 或 I2C HID 传输连接设备。
  • 将整个设备作为光测量仪器进行测试。 在各种强度下使用各种类型的测试照明(白白灯、荧光灯、LED),并将通过传感器平台报告的值与高质量的测光表进行比较。 仪表应测量入射到设备显示器上的光。
  • 使用 Windows 硬件实验室工具包(HLK)设备要求和相关测试测试设备和第三方驱动程序。 确保正常运行并通过所有测试用例。
  • 确保 OEM、ODM 和 IHV 参与每个设备硬件重大修订的机械设计评审。
  • 确保从机械、光学和电气工程角度优化传感器的实现。
  • 使用自适应亮度测试用例中介绍的步骤测试光传感器和自适应亮度。

将光传感器与设备硬件集成

一些事情可以极大地影响使用光传感器提供的信息可以执行的操作。 这些具体注意事项包括:

  • 传感器类型,首选数字光传感器
  • 传感器的准确性、分辨率和视野
  • 传感器的动态范围
  • 红外线(IR)和紫外线(UV)排斥反应(人眼反应)
  • 支持的总线技术(仅限数字)
  • 数字采样率
  • 功耗
  • 打包和位置选项

需要特别考虑以下因素:

  • 准确性和分辨率:若要在应用程序中提供自适应亮度和光感知 UI 的最佳用户体验,需要准确的传感器数据作为输入。 通常,传感器越准确,相应的用户体验就越好。 实际环境光传感器(ALS)校准值的良好目标是在实际照明条件下的 4% 内保持一致的准确性。
  • 动态范围:光传感器的动态范围是传感器可以报告的最大值和最小值之间的比率,并定义传感器可以有效使用的照明环境范围。 低动态范围光传感器会限制可以使用它的环境。 安装在设计用于户外的设备(如手机)上的环境光传感器应支持户外照明条件。 阳光范围为 0 到 10,000 照度,或更高。 设计为室内使用的设备的 ALS 动态范围可以更小。 室内光线通常范围为 0 到 1000 照度。
  • 粒度:为了确保 ALS 的最佳体验,当环境光低于 25 照度时,ALS 的粒度应为 1 照度,当环境光低于 25 照度时,其粒度为 4% 的环境光。 这使自适应亮度算法能够执行平滑的屏幕亮度过渡。

以下是可供参考的常见照明条件:

照明条件 亮度(照度)
漆黑 1
非常深 10
室内深色 50
室内昏暗 100
普通室内 300
室内明亮 700
户外昏暗(阴暗) 1,000
户外阳光 15,000
阳光直射 100,000

环境光传感器的类型

环境光传感器分为两种基本类型:

  • 模拟光传感器连接到具有模拟到数字(A/D)转换器的嵌入式控制器,并要求固件能够准确解读光传感器数据,并补偿影响读数的各种条件和现象。 这些现象的一些示例包括红外(IR)光抑制和光频率补偿。 例如,荧光灯的强度因提供给装置的 AC 电源的频率而异。 模拟传感器通常非常便宜。
  • 数字光传感器比模拟传感器更昂贵,但具有优势。 数字光传感器可以自动补偿各种条件和现象。 数字传感器也非常小巧。 某些数字光传感器可以提供粗略的离散勒克斯测量。 必须仔细考虑弱光条件下读数的粒度。 在弱光条件下进行粗略、谨慎的测量可能会导致用户的亮度体验不和谐。

无论选择哪种类型的光传感器,都必须对系统进行准确的读数并公开。

光传感器数量

可用于测量照明条件的环境光传感器越多,对实际照度的估计就越好。 但是,每个光传感器都增加了成本,并占用了设备的空间。

重要的是,制造商应努力寻找一种解决方案,为系统提供最准确的环境光感测能力。 廉价的解决方案可能依赖于单个传感器,但高端硬件可以依赖于传感器阵列来提供尽可能好的测量。 如果 OEM 选择实现多个环境光传感器(以解决诸如手或阴影遮挡 ALS 的问题),OEM 应向 Windows 公开一个逻辑(合并)ALS 并报告最准确的数据。

如果向系统公开了多个传感器,则用于自动亮度的单一传感器应公开 DEVPKEY_SensorData_LightLevel_AutoBrightnessPreferred 属性。 同样,OEM 可能决定融合多个环境光传感器,并将结果公开为虚拟光传感器,也称为纯软件传感器。 如果物理传感器和虚拟光传感器都通过传感器设备驱动程序接口公开,则融合传感器必须公开 DEVPKEY_SensorData_LightLevel_AutoBrightnessPreferred 属性。

光传感器位置

正确放置光传感器是良好系统设计的另一个关键方面。 ALS 的目标是测量用户所感知的环境亮度。 理论上最好的传感器位置是在用户的两眼之间。 光传感器在现实世界中的最佳位置通常与显示器在同一平面上,面向用户。 放置在显示器上的传感器具有检测屏幕上可能发生的一些眩光的优势。

避免将光传感器放置在计算机区域,这些区域在正常使用期间可能会被阴影或用户的手、手指或手臂遮挡在光源中。 下图演示了一个示例用户方案,其中直接光源位于用户后面。 阴影投射在屏幕的下半部分和计算机的底部。 此方案建议将最佳光传感器放置在屏幕顶部附近并面向用户。

Diagram indicating optimal light sensor placement in top half of display to avoid shadow of user.

确保设备可以采用的不同配置(例如,键盘在平板电脑模式与笔记本电脑模式下的位置)不会阻挡光圈,也不会与传感器的视野相交。

最后,确保传感器的视野不会与任何干扰光源(相机闪光灯、键盘背景光等)相交,因为这些干扰源可能会导致额外的干扰或使得读数不准。 在考虑与嘈杂光源相交的视野时,请务必考虑设备可以采取的所有不同配置。

处理无效的光传感器数据

在某些条件下,环境光传感器的视场可能会被物体或用户遮挡,从而使传感器无法获得准确的读数。 例如,当用户的手覆盖环境光传感器光圈时,可能会发生此类情况。 存在许多其他情况。

环境光传感器可以通过发送新的传感器样本,并将其 PKEY_SensorData_IsValid 数据集设置为 FALSE,向操作系统指示这种情况。 适当的硬件设计应该尽量减少需要将该值设置为 FALSE 的时间和方案,因为这种方案会阻止系统正确控制亮度。 在理想的系统上,环境光传感器始终能够测量环境光,此值将设置为 TRUE。

光传感器滤波器、镜头、机箱和校准

在设计包含 ALS 的设备时,需要仔细考虑与 ALS 相关的整个机械、光学和电气组件系统。 下图说明了在将环境光传感器硬件与 Windows 集成和校准时必须考虑和理解的关键机械组件。

Diagram illustrating the components of an ambient light sensor.

在此图中,我们看到以下内容:

  • 玻璃 - 屏幕外表面
  • 油墨涂层 - 屏幕周围的黑色边框
  • 遮光 - 防止漏光
  • 光管 - 收集光线并将其引导至传感器
  • 环境光传感器
  • 母板

注意

通常不需要光管,在许多情况下可能会降低 ALS 性能。 有关这些光学组件的指南,请咨询光传感器制造商。

此图参考了两个光照级别:

  1. $LUX_{1}$:显示器表面上设备周围环境的入射光水平。 此级别由环境光传感器通过传感器平台测量和报告。

  2. $LUX_{2}$:ALS 表面的入射光水平。 这不是通过传感器平台报告的正确光级别,因为它不考虑光学的衰减因子。

衰减因子对应于设备外表面(通常是玻璃)和 ALS 的感应表面之间的各种组件阻止的光量。 衰减可以按如下方式计算:A = (1 - transmittance)

重要

环境光传感器报告感知的环境光强度。 由于光学的可传输性,原始 ALS 读数报告衰减的照度值,不应在没有更正的情况下使用。 透射性是光学器件的特性,它可以降低环境光强度并抑制红外(IR)光。 如果光学元件是用油墨涂成可见外观,则必须使用衰减因子来补偿环境光强度的相应降低。

$LUX_{2}$ 应始终低于 $LUX_{1}$

这两个照度值之间的差异称为衰减因子。 衰减因子占玻璃顶部表面 ($LUX_{1}$) 和环境光传感器裸露表面 ($LUX_{2}$) 之间的光传输总量百分比。 当使用涂漆的玻璃表面时,最强烈。 OEM 在传感器 IHV 的支持下,应在硬件中测量衰减因子,并在向操作系统公开照度值之前对其进行更正。

注意

传输量是 ALS 表面的光水平比率,除以设备周围的环境光级别。

在下面的示例中,假设玻璃顶部表面与环境光传感器裸露表面之间的光传输总量百分比为 5%。 为了支持所需的照度范围,所选的光传感器需要在裸传感器上支持以下范围:

  • $Minimum = 1 照度 × 0.05 = 0.05 照度$
  • $Maximum = 100,000 照度 × 0.05 = 5000 照度$

在固件或驱动程序中,根据是否实现了硬件或软件 ALS 解决方案,以下转换用于考虑衰减因子:

$Output LUX = LUX_{1} = LUX_{2} / (总计 % _{light _transmittance})$

对于光环境光传感器读数为 100 照度,下面是生成的输出照度:

$Output LUX = 100 / 0.05 = 2000 LUX$

整个系统也应使用适当的光测量设备校准。 本示例仅演示正式校准之前部分选择和初始校准的一般注意事项。 强烈建议对每单位工厂校准进行最佳且最一致的用户体验。 传感器的准确度范围通常为 +/- 20%,从单位到单位,可以通过每单位工厂校准来考虑这一点。

此外,视野是环境光传感器放置和设计中需要考虑的重要因素。 视场越小,传感器的性能就越差。 一般情况下,55 度半角度的视场(总计 110 度)是一个合理的目标。 视场越宽,传感器就越容易拾取单点光源或阴影区域,可能无法准确反映真实光线环境。

与 HID 和 SPB 的传感器连接

下图说明了如何使用 HID 协议将 ALS 与 SPB 的 IHV 特定驱动程序集成。

提示

HID 协议是集成 ALS 的建议路径,它使用 Windows 中的收件箱 HID 驱动程序。

HID 传感器硬件、驱动程序和软件堆栈如下所示:

Diagram illustrating HID sensor hardware, driver, and software stack.

从上到下的框:传感器应用程序、传感器 API、传感器类扩展、用户模式 HID 驱动程序、HID-I2C 驱动程序、固件中的 I2C 控制器、HID 接口和 ALS 硬件

SPB 传感器硬件、驱动程序和软件堆栈如下所示:

Diagram illustrating sensor SPB stack.

从上到下的框:传感器应用程序、传感器 API、传感器类扩展、UMDF 用户模式传感器驱动程序、SPB 接口、I2C 控制器驱动程序和 ALS 传感器

有关通过 HID 协议(包括 HID 和 I2C)集成传感器硬件的详细信息,请参阅传感器 HID 类驱动程序

有关通过 SPB 总线集成传感器的详细信息,请参阅 GitHub 上的传感器组合示例驱动程序源代码

环境光传感器校准

强烈建议在受控照明环境中使用专业预校准传感器在集成系统中校准 ALS。 这些预先校准的传感器,通常称为光表,可供电子设备供应商和在线零售商购买。

其他校准技术

Microsoft 环境光工具文章提供了有关其他 ALS 监视和校准工具的详细信息。

光传感器验证

首先,应始终运行传感器(即输入)硬件实验室工具包测试来验证环境光传感器。 确保所有最低硬件要求和 Windows 硬件兼容性计划测试都通过。

为了验证环境光传感器是否能正常运行,请执行以下操作:

  • 确保 DisplayEnhancementService 已启动。
  • 启用自动亮度并将滑块设置为 50%。
  • 验证照明更改时显示亮度是否发生变化。
  • 使用浅色变暗来缓慢地向上和向下渐变环境光,并确保照度值平稳向上和向下渐变。 粗略和离散的光线变化导致屏幕亮度响应不理想,应避免这种情况。
  • 使用专业的照度计来确保 ALS 读数准确。 至少验证以下几点:0、10、100、500 和 1000 照度。
  • 在仅自定义 ALR 曲线的系统中,使用用户测试行为以验证 ALR 数据是否满足用户预期。

最低硬件要求和 Windows 硬件兼容性计划

最低硬件要求和 Windows 硬件兼容性计划要求是创建与 Windows 兼容的传感器体验的基础。 尽管这些程序是可选的,但建议音频产品满足这两组要求,以确保基本的音频质量。

有关详细信息,请参阅 Windows 硬件兼容性计划

以下各节介绍有关传感器的建议。 为确保高质量的体验,应根据这些性能要求测试所有设备。

区域 指导类型 应测试哪些设备
Device.Input.Sensor.AmbientLightSensor 提供组件级指南,以便在软件接口、通信协议和数据格式方面与主机操作系统实现最佳协调效果。 应根据这些性能要求测试所有集成环境光传感器。
System.Client.Sensor.AmbientLightSensor 提供系统级指南,以便在软件接口、通信协议和数据格式方面与主机操作系统实现最佳协调效果。 应根据这些性能要求测试所有集成环境光传感器。

环境响应曲线

如果环境光传感器报告环境光响应曲线,则必须遵循:

数据字段 数据类型 定义
PKEY_LightSensor_ResponseCurve VT_VECTOR VT_UI4

传感器的响应曲线必须至少有两个点,并且渐变必须为正或平。 有关详细信息,请参阅响应曲线

支持颜色

无需环境光传感器来检测颜色。 如果环境光传感器支持颜色,则必须报告与颜色相关的属性、阈值和数据字段。 支持颜色的光传感器必须报告以下枚举属性:

数据字段 数据类型 定义
DEVPKEY_LightSensor_ColorCapable VT_BOOL 指定此光传感器是否支持颜色。

支持颜色的光传感器必须报告以下数据字段组合之一:

  • Lux、kelvins、chromaticity x、chromaticity y
  • Lux、chromaticity x、chromaticity y

有关详细信息,请参阅光传感器数据字段

对于光传感器报告的颜色数据字段,还必须支持阈值。 满足至少一个阈值时,必须报告一个示例。 有关详细信息,请参阅光传感器阈值

数据字段属性

环境光传感器必须报告所需的数据字段属性。 有关详细信息,请参阅光传感器数据字段

数据类型

报告光数据需要环境光传感器。 有关详细信息,请参阅光传感器数据字段

最小报告间隔

Windows 中支持非颜色的环境光传感器需要支持 250 毫秒或更少的报告间隔。 Windows 中支持颜色的环境光传感器需要支持 1000 毫秒或更少的报告间隔。

阈值

光传感器需要支持照度阈值。 如果支持绝对阈值,则必须满足百分比和绝对照度阈值才能报告数据样本。

假设绝对阈值为 1 照度,百分比阈值为 25%:

上一次采样 下一次采样 Result
4 照度 3 照度 下一个样本将报告,因为更改大于或等于上一个报告样本的 1 照度,并且大于或等于上一个报告样本的 25%。
1 照度 0.5 照度 下一个样本不会报告,因为更改小于上一个报告样本的 1 照度。
100 照度 90 照度 下一个样本不会报告,因为更改小于上一个报告样本的 25%。

有关详细信息,请参阅光传感器阈值

首选自动亮度

如果环境光传感器用于自动亮度功能,则需要报告以下枚举属性:

数据类型 定义
DEVPKEY_LightSensor_AutoBrightnessPreferred VT_BOOL 指定此光传感器是否应是用于 Windows 自动亮度服务的首选光传感器。

系统必须只有一个环境光传感器报告此属性。

颜色校准

无需环境光传感器来支持颜色。 如果环境光传感器支持颜色,则需要正确校准。

虽然光源直接针对传感器:

  • 检测到的环境照度在实际传入光的 10% 或 1 照度以内
  • 检测到的色度 x 和 y 在实际传入光的 0.025 以内

枚举属性

环境光传感器必须报告 DEVPKEY_Sensor_ConnectionType,即使这不是其他传感器所需的枚举属性

有效

当光传感器样本有效或无效时,不需要环境光传感器传感器进行报告。 如果环境光传感器支持此功能,则必须报告以下数据字段:

数据字段 数据类型 定义
PKEY_SensorData_IsValid VT_BOOL 指示当前数据示例是否有效。

如果 PKEY_SensorData_IsValid 值发生更改,则必须报告样本,无论是否满足阈值。

假设照度阈值为 1 照度:

上一次采样 下一次采样 Result
100 照度 100 照度,但传感器现在被阻止(以前的样本的 PKEY_SensorData_IsValid 为 true) 当前样本将报告 100 照度,PKEY_SensorData_IsValid 设置为 false。
100 照度,并被阻止(以前的样本的 PKEY_SensorData_IsValid 为 false) 100000 照度,传感器仍被阻止(PKEY_SensorData_IsValid 为 false) 未报告任何样本。
0 照度,传感器被阻止(以前的样本的 KEY_SensorData_IsValid 为 false) 0 照度,但传感器现已解除阻止(PKEY_SensorData_IsValid 为 true) 当前样本将报告为 0 照度,但 PKEY_SensorData_IsValid 设置为 true。

光校准

Windows 中的自动亮度服务需要光传感器来准确测量环境中的光水平。 当光源直接针对不支持颜色的光传感器时,报告的光级别必须位于 4% 以内或至少 1 照度的实际传入光级别

光范围

Windows 中的自动亮度服务需要能够检测从 1 到 10,000 照度不等的合理光线级别。 如果范围小于此范围,则调整后的自动亮度可能无法匹配环境的实际亮度。

另请参阅