人眼感受LED亮度非线性校正
- LED实际亮度与PWM成正比,但由于人眼感受LED亮度是非线性的。即当PWM达到一定值后LED亮度变化不明显。弱光时,光强增加一倍,人眼感觉到的强度多于一倍;强光时,光强增加一倍,人眼感到的增强只有大约一半的强度。
- 亮度感受非线性矫正原理
以F 表示人眼对亮度的感受,φ表示光通量F =φ^1/2.2。其中,φ∝D(Duty,PWM 调 节 信 号 的 占 空 比,以下简称 D).线性的亮度感受需要非线性变化的φ,由于φ 与 D 严格线性,故线性变化的亮度感受需要遵从某种规律的非线性变化的φ,所谓的某种规律,即 (线性调节对应的非线性变化)φ———人眼亮度感受的反非线性特性,映射在系统中,就是 AD 采样后的值A 在控制 PWM 的占空比时(A 作为查找表的地 址 取φ 值 时),φ 值 按 照 D =λA^2.2 的 规律,如图所示。
- 由以上结果可知,利用电位器调节LED亮度时,电位器的ADC采样值与LED的PWM占空比成非线性关系,具体PWM占空比计算公式如下所示。
P W M = P W M 总 ∗ ( A D 实 / A D 总 ) 2.2 \ PWM = PWM_{总} * (AD_实/AD_总)^{2.2}\, PWM=PWM总∗(AD实/AD总)2.2
C语言实现代码如下:
#include <stdio.h>
#include <math.h>
#define PWM_MAX 800 // PWM 最大值
#define AD_SAMPLE_MAX 4095 // AD采样最大值
// 输入AD采样值,返回对应的PWM值
int get_PwmDuty(int AD_Sample)
{
return PWM_MAX*pow(((double)AD_Sample/AD_SAMPLE_MAX),2.2);
}
结果
get_PwmDuty(1000);
输出:35