1. 项目概述
LTR-390UV-01是一款集成了环境光传感(ALS)和紫外线传感(UVS)功能的微型数字传感器,采用I2C接口与主控通信。我在最近的一个智能家居项目中使用了这款传感器,用于实现根据环境光线自动调节LED亮度的功能。相比传统的光敏电阻,LTR-390UV-01具有更高的精度、更宽的动态范围以及更低的功耗,特别适合电池供电的嵌入式设备。
这款传感器最吸引我的几个特点:
- 超小尺寸(2x2mm)的封装,非常适合空间受限的设计
- 0.01-157k lux的超宽动态范围,可以适应从黑暗房间到阳光直射的各种环境
- 内置温度补偿和出厂校准,省去了繁琐的手动校准过程
- 可编程中断功能,无需MCU频繁轮询,大大降低系统功耗
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与连接
2.1 传感器引脚说明
LTR-390UV-01采用6引脚DFN封装,各引脚功能如下:
| 引脚编号 | 引脚名称 | 功能描述 |
|---|---|---|
| 1 | SDA | I2C数据线 |
| 2 | SCL | I2C时钟线 |
| 3 | INT | 中断输出 |
| 4 | GND | 地线 |
| 5 | VDD | 电源(1.7-3.6V) |
| 6 | NC | 不连接 |
2.2 STM32连接方案
在我的项目中,使用的是STM32L476RG Nucleo开发板,连接方式如下:
code复制LTR-390UV-01 STM32L476RG
---------------------------
VDD -> 3.3V
GND -> GND
SCL -> PB8(I2C1_SCL)
SDA -> PB9(I2C1_SDA)
INT -> PC13(可配置为外部中断)
注意:虽然传感器支持1.8V逻辑电平,但STM32的I2C接口是3.3V兼容的,因此可以直接连接。如果使用其他电压等级的MCU,需要注意电平转换。
3. 软件驱动实现
3.1 I2C初始化
首先需要在STM32上初始化I2C外设。我使用的是HAL库,配置如下:
c复制I2C_HandleTypeDef hi2c1;
void I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.Timing = 0x00707CBB; // 400kHz @ 80MHz PCLK1
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
Error_Handler();
}
// 配置模拟滤波器
if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
{
Error_Handler();
}
// 配置数字滤波器
if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
{
Error_Handler();
}
}
3.2 传感器寄存器定义
为了方便操作,我首先定义了传感器的主要寄存器地址和配置位:
c复制#define LTR390_ADDR 0x53 // 7位I2C地址
// 寄存器地址
#define LTR390_REG_MAIN_CTRL 0x00 // 主控制寄存器
#define LTR390_REG_MEAS_RATE
