Dimmable-Light项目中的亮度-延迟映射优化研究

Dimmable-Light项目中的亮度-延迟映射优化研究

dimmable-light Arduino library to manage dimmers compatible with AVR, ESP8266, ESP32, SAMD, and RP2040 platforms. dimmable-light 项目地址: https://gitcode.com/gh_mirrors/di/dimmable-light

引言

在Dimmable-Light这个开源项目中,开发者们遇到了一个关于亮度控制与相位延迟映射关系的技术挑战。该项目主要用于可控硅调光控制,但现有的亮度到延迟的转换算法存在一定的精度问题,特别是在低亮度区域。本文将深入分析这一问题,并提出优化方案。

问题分析

在可控硅调光系统中,亮度值(0-255)需要转换为相应的触发延迟时间,这个转换关系直接影响最终的调光效果和功率输出精度。当前项目采用两种实现方式:

  1. 标准版本:使用简单的线性映射关系
  2. 线性化版本:采用五阶多项式拟合

通过实际测量发现,这两种实现方式在低亮度区域(特别是50%亮度以下)存在明显的电压输出误差,实测电压比计算值高出3-5V。这种误差随着亮度增加而逐渐减小,在80%亮度以上基本消失。

现有算法解析

项目中使用的核心算法是基于五阶多项式的拟合公式:

double tempBrightness;
if (Thyristor::getFrequency() == 50) {
  tempBrightness = -1.5034e-10 * pow(bri, 5) + 9.5843e-08 * pow(bri, 4)
                   - 2.2953e-05 * pow(bri, 3) + 0.0025471 * pow(bri, 2) - 0.14965 * bri + 9.9846;
} else if (Thyristor::getFrequency() == 60) {
  tempBrightness = -1.2528e-10 * pow(bri, 5) + 7.9866e-08 * pow(bri, 4)
                   - 1.9126e-05 * pow(bri, 3) + 0.0021225 * pow(bri, 2) - 0.12471 * bri + 8.3201;

这个多项式原本设计用于近似正弦波能量计算的反函数,目的是在Arduino Uno等资源有限的MCU上节省内存(相比查找表方案),但牺牲了一定的计算精度。

实测数据对比

通过PZEM004Tv3电能表、支持RMS的真有效值万用表和示波器进行实测,得到以下对比数据:

| 亮度值 | 计算Vrms | 实测Vrms | 差值 | |-------|---------|---------|-----| | 2% | 10V | 5V | -5V | | 4% | 24.5V | 29V | -5V | | 16% | 90.5V | 94.5V | -4V | | 25% | 111V | 115V | -4V | | 50% | 152.5V | 156.5V | -4V | | 80% | 195V | 195V | 0V |

优化方案探讨

方案一:改进多项式拟合

可以考虑使用更精确的拟合函数,如社区提出的近似公式:

phase = (powf(1 - duty, 0.31338) - powf(duty, 0.31338) + 1) / 2

这个公式基于正弦平方累积分布函数(CDF)的逆函数,通过二分法求解,精度更高。

方案二:动态偏移补偿

针对低亮度区域的系统误差,可以采用动态偏移补偿策略:

if (level < 10) {
  level += 3;
} else if (level < 50) {
  level += 2;
} else if (level < 100) {
  level += 1;
}

这种分段补偿方法可以有效减少低亮度区域的误差。

方案三:查找表(LUT)优化

虽然多项式方案节省内存,但在现代MCU上,使用查找表可能是更好的选择。可以构建两个维度的查找表:

  1. 延迟时间查找表(50Hz/60Hz)
  2. Vrms系数查找表(50Hz/60Hz)

通过PROGMEM存储,可以兼顾性能和精度。

实现建议

  1. 精度优先场景:采用查找表方案,牺牲少量内存换取最高精度
  2. 资源受限场景:使用改进的多项式拟合公式,平衡精度和资源消耗
  3. 动态补偿方案:作为快速修复方案,实现简单但需要精细调整参数

结论

Dimmable-Light项目中的亮度-延迟映射关系是影响调光精度的关键因素。通过分析现有算法的不足,并比较多种优化方案,开发者可以根据具体应用场景选择最适合的解决方案。在资源允许的情况下,推荐采用基于正弦波能量计算的精确算法或查找表方案,以获得最佳的调光效果和功率控制精度。

dimmable-light Arduino library to manage dimmers compatible with AVR, ESP8266, ESP32, SAMD, and RP2040 platforms. dimmable-light 项目地址: https://gitcode.com/gh_mirrors/di/dimmable-light

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郁弛淞Lewis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值