第四章 光源控制硬件:DAC/数字电位器选型、MOSFET开关电路、PWM调光原理

各位同学,今天我们聊聊光源控制的硬件实现。这部分内容,说白了就是怎么让LED灯听话——让它亮它就亮,让它暗它就暗,而且亮度要稳、要准。

我在做第一代内窥镜的时候,光源控制这块踩了不少坑。当时选型没经验,结果调光的时候画面闪烁,医生反馈说看着头晕。嗯,从那以后我就特别重视这部分的设计。

4.1 DAC与数字电位器选型

先说说DAC。DAC的作用是把数字信号转成模拟电压,用来控制LED的驱动电流。选型时主要看三个参数:分辨率、建立时间、输出范围。

参数 推荐值 说明
分辨率 12位以上 低于12位,调光步进太粗,画面会有跳变感
建立时间 < 10μs 内窥镜需要快速响应,尤其是自动曝光场景
输出范围 0-3.3V或0-5V 匹配LED驱动芯片的参考电压输入

我个人习惯用SPI接口的DAC,比如AD5662。为什么?因为I2C在高速场景下容易受干扰,SPI更稳。我曾经在一个项目中,I2C总线上的DAC在强电磁环境下频繁丢包,换成SPI后问题就解决了。

数字电位器呢?它其实是个可调电阻。用在光源控制里,主要是做电流限制。选型时注意两点:

  • 端到端电阻:常见的有10kΩ、50kΩ、100kΩ。我建议选50kΩ,调节范围适中。
  • 抽头数量:256抽头是底线。少于这个数,调光曲线不够平滑。
注意:数字电位器不适合大电流场景。如果你要控制1A以上的LED,别用数字电位器直接串在回路里,会烧的。我见过有人这么干,结果板子冒烟了。

4.2 MOSFET开关电路

MOSFET在这里的作用,说白了就是个电子开关。控制LED的通断,或者配合PWM实现调光。

选型时我重点关注三个参数:

  • Vgs(th):阈值电压。3.3V系统要选逻辑电平型MOSFET,Vgs(th)在1-2V之间。
  • Rds(on):导通电阻。越小越好,否则发热严重。
  • Qg:栅极电荷。这个参数影响开关速度,Qg越小,开关越快。

给大家一个典型电路:

// N沟道MOSFET驱动LED的简化电路
// 栅极接MCU的PWM输出,源极接地,漏极接LED负极
// LED正极通过限流电阻接电源

// 关键参数计算:
// 假设LED电流ILED = 500mA,Vgs = 3.3V
// 选型:AO3400 (Vgs(th)=1.4V, Rds(on)=30mΩ)
// 导通损耗:P = I² × R = 0.5² × 0.03 = 7.5mW,完全OK

这里有个坑:MOSFET的栅极不能浮空。MCU上电瞬间,GPIO可能是高阻态,MOSFET会误导通。我建议加一个10kΩ的下拉电阻,确保上电时MOSFET是关断的。

经验之谈:我曾经在量产阶段发现一批板子开机瞬间LED会闪一下。查了半天,就是栅极没加下拉电阻。后来在BOM里加了个10kΩ电阻,问题就解决了。成本增加不到1分钱,但可靠性提升了一大截。

4.3 PWM调光原理

PWM调光,说白了就是让LED快速开关。人眼有视觉暂留效应,只要开关频率够高,看到的就不是闪烁,而是平均亮度。

频率选多少?我建议不低于1kHz。低于这个值,人眼能感知到闪烁,尤其是在内窥镜这种需要长时间注视的场景下,容易引起视觉疲劳。

占空比和亮度的关系:

  • 占空比0%:全暗
  • 占空比50%:半亮
  • 占空比100%:全亮

但要注意,LED的亮度与电流不是完全线性关系。实际项目中,我通常会做一条亮度-占空比校准曲线,存在EEPROM里。这样调光时查表映射,效果更准。

// PWM初始化代码示例(STM32 HAL库)
// 定时器2,通道1,频率2kHz

void PWM_Init(void) {
    TIM_OC_InitTypeDef sConfigOC = {0};
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 84-1;      // 84MHz / 84 = 1MHz
    htim2.Init.Period = 500-1;        // 1MHz / 500 = 2kHz
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    HAL_TIM_PWM_Init(&htim2);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 250;            // 初始占空比50%
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}

// 设置占空比函数
void Set_LED_Brightness(uint16_t brightness) {
    // brightness范围:0-1000,对应0%-100%
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, brightness);
}
核心要点:PWM调光的关键是频率和分辨率。频率决定是否闪烁,分辨率决定调光精度。我一般用2kHz频率、1000级分辨率,效果不错。

4.4 三种方案的对比与选型建议

这三种方案各有优劣,我整理了一个对比表:

方案 优点 缺点 适用场景
DAC + 恒流驱动 精度高、无闪烁 成本高、电路复杂 高端内窥镜、科研设备
数字电位器 成本低、控制简单 精度有限、不耐大电流 低成本产品、调试阶段
PWM + MOSFET 效率高、成本适中 有潜在闪烁风险 大多数内窥镜产品

我个人建议:如果是量产产品,优先考虑PWM方案。效率高,成本可控。如果对光质量要求极高,比如手术显微镜,那就用DAC方案。

避坑指南:我曾经在一个项目中,为了省成本用了数字电位器直接调光。结果客户反馈说亮度调节有阶梯感,而且用了半年后电位器失效了。后来全部换成PWM方案,问题解决。所以,数字电位器只适合调试阶段或对精度要求不高的场景。

好了,这一章的内容就到这里。下一章我们讲白平衡算法的软件实现,到时候会用到今天讲的硬件知识。记住,硬件是基础,基础不牢,地动山摇。