作者 主题:将0到100%划分为调光光 (Read 2598 times)

0会员和1位客人正在查看此主题。

离线 vindhyachal.takniki.

  • 频繁的贡献者
  • **
  • 帖子:467
将0划分为0〜100%用于调光光
« on: 2月13日,2021年,03:26:58 PM»
1.根据用户输入0到100,我需要将灯0到100%昏暗。
当我通过微控制器将值0变为100%时,有一个驱动程序,它相应地调整LED。

2.我从此数据表中阅读以下图片: //www.ti.com/lit/pdf/slvaef3   



3.第6页,说"人类对亮度的感知不是LED亮度的线性,并且在低位时更敏感
亮度,其近似于对数曲线。因此,如果使用线性调光控制方法,
最终感知的亮度不是人类感知的线性。这就是为什么使用指数调光。"


4.现在必须逐步划分0到100%?当用户输入到100时,如何呈指数为100%将数字0划分为100%?
 

离线 花束

  • 超级贡献者
  • ***
  • 帖子:6117
  • 国家: CH.
Re:将0到100%划分为调光光
« 回复#1开: 2月13日,2021年,03:53:10 PM»
1.拍摄输入并将其转换为0.0至1.0的浮点数。我们会打电话给这个x。
2.拍摄x并给它一个大于1:x的指数n。 n的大小将决定指数效应的强度。例如,如果您使用n = 2,则输入1的输入给出1(1x1 = 1)的输出,但输入为0.5的输入给出0.25(0.5x0.5 = 0.25)等。让我们称之为结果y。
3.将y乘以100以使其成为0-100。

请注意,您引用的应用程序注意事项讨论了大多数LED驱动程序在内置指数调光程度,因此您只需告诉驾驶员您是否要启用指数调光。所以你为它提供了未经校正的值SND,它对您进行转换。
 

离线 Zoli.

  • 贡献者
  • 帖子:38
  • 国家: 加利福尼亚州
  • 脾气暴躁的老人
Re:将0到100%划分为调光光
« 回复#2开: 2月13日,2021年,04:00:41 PM»
主要问题是 - 您使用的(PWM分辨率)有多少步骤?
如果你对此有答案,它'很容易制作几何进展,这将满足您的要求。
 

离线 花束

  • 超级贡献者
  • ***
  • 帖子:6117
  • 国家: CH.
Re:将0到100%划分为调光光
« 回复#3开:2021.年2月13日,04:09:48 PM»
将自然日志Ln(x)从0到100绘制并归属化输出 - 因此
那个表将确切的对面:在重要的低端中粉碎分辨率,并在我们的眼睛密集的高端最大化它。
 

离线 jackjones.

  • 常规贡献者
  • *
  • 帖子:226
  • 国家: FI.
Re:将0到100%划分为调光光
« 回复#4开:2021.年2月13日,04:23:22 PM»
 

离线 mikeselectricaluff.

  • 超级贡献者
  • ***
  • 帖子:12427
  • 国家: GB.
    • 麦克风's Electric Stuff
Re:将0到100%划分为调光光
« 回复#5: 2月13日,2021年,04:58:31 PM»
1.拍摄输入并将其转换为0.0至1.0的浮点数。我们会打电话给这个x。

没有理由为此使用浮点。
Youtube channel:分开奇怪的东西。很宽。
麦克风's Electric Stuff:高压,复古电子等。
一天的工作:主要是LED
 
以下用户感谢此帖子: S. Petrukhin

离线 mikeselectricaluff.

  • 超级贡献者
  • ***
  • 帖子:12427
  • 国家: GB.
    • 麦克风's Electric Stuff
Re:将0到100%划分为调光光
« 回复#6开启: 2月13日,2021年,05:03:11 PM»
平衡值给出了一个非常好的近似值,比例为您的PWM分辨率。
您需要10到12位的硬件分辨率,以进行最平滑的衰落性能。
例如对于12位,Square传入0-100%和Scale 0..10000图这给出了0..4095。使用整数数学,乘以104(4095/10000 * 256)并将其除以256
使用查找表以获得最大的灵活性。

Youtube channel:分开奇怪的东西。很宽。
麦克风's Electric Stuff:高压,复古电子等。
一天的工作:主要是LED
 
以下用户感谢此帖子: 埃德瓦德, k, 我想要一个粗鲁的用户名

在线的 CatalinaWow.

  • 超级贡献者
  • ***
  • 帖子:3990
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#7: 2月13日,2021年,06:07:28 PM»
您可能更喜欢非数学方式来弄明地,也让您更好地感受到发生的事情。

自己写一个以零亮度开头的小程序,然后在该零点和第二值之间交替,最初是1。 您将希望在此值上置于此值大量时间,第二个左右是一个很好的开始,但这也是您应该玩的参数来获得全面了解。 在几个交换机后,程序将其递增第二值,并为您提供一种方法来停止递增。 当您看到亮度明显变化时,您将停止程序并记下第二个值。

然后使用该项目重复程序作为基础和递增。 继续,直到您到达100个步骤。

您会发现您的停止点在比例的低端更靠近。   如果您绘制了它们,您将看到一个isn的关系'不适合对数或其他几种选择。 您可以在查找表中使用此数据来生成输出,尽管对于非常平滑的表观增长,您可能必须在标记点之间添加一个点。   这应该是显而易见的原因。
 

在线的 PWLPS.

  • 频繁的贡献者
  • **
  • 帖子:359
  • 国家: FR.
Re:将0到100%划分为调光光
« 回复#8开: 2月13日,2021年,07:18:35 PM»
1.拍摄输入并将其转换为0.0至1.0的浮点数。我们会打电话给这个x。
2.拍摄x并给它一个大于1:x的指数n。 n的大小将决定指数效应的强度。例如,如果您使用n = 2,则输入1的输入给出1(1x1 = 1)的输出,但输入为0.5的输入给出0.25(0.5x0.5 = 0.25)等。让我们称之为结果y。
3.将y乘以100以使其成为0-100。

据我所知,这是一个权力法,指数意味着X将在指数中。 这对它的轻度指数表示可能不会'您使用哪种法律(最低值除外)。

无论如何,这里是间隔内的指数变换的一般规范化公式(0,1):

Y =(exp(a * x)-1)/(exp(a)-1)

其中x和y都在0到1之间,并且a是控制曲线的陡峭的参数:a<<1你得到一条线,曲线来自 //www.ti.com/lit/pdf/slvaef3 对应于4到6之间的某个地方。
显然,如果您在间隔(0,100)中工作,则您有y = 100 *(exp(a * x / 100)-1)/(exp(a)-1)
« 上次编辑:2月13日,2021年,08:05:28 PWLPS »
 

离线 T3SL4CO1L.

  • 超级贡献者
  • ***
  • 帖子:16723
  • 国家: 我们
  • 专家,模拟电子,PCB布局,EMC
    • 七晶体管实验室
Re:将0到100%划分为调光光
« 回复#9: 2月13日,2021年,09:09:19下午»
更一般地,x ^ n形式给出伽玛校正,n通常是真正的伽玛说1-3左右,用2-2.2是典型的。

如果您发现更具侵略性的响应感觉更好,请使用上面的指数函数。

1.拍摄输入并将其转换为0.0至1.0的浮点数。我们会打电话给这个x。

没有理由为此使用浮点。

呃,它's handy. 如果没有别的,它代表了在固定点中实现的过程。  In particular, it'始终是0..1的比率,所以点也始终固定。  Easy.
从字面上看,计算时间或代码空间的成本取决于平台,该平台是未定义的。 在嵌入式设备上,通常最好避免。

蒂姆
七晶体管Labs,LLC
电子设计,从概念到原型。
将项目带到生活中?  Send me a message!
 

离线 mikeselectricaluff.

  • 超级贡献者
  • ***
  • 帖子:12427
  • 国家: GB.
    • 麦克风's Electric Stuff
Re:将0到100%划分为调光光
« 回复#10: 2月13日,2021年,晚上10:53:03»
所以随着事情变得更加光明,我们对变化更敏感?
敏感
Youtube channel:分开奇怪的东西。很宽。
麦克风's Electric Stuff:高压,复古电子等。
一天的工作:主要是LED
 

离线 DRG.

  • 频繁的贡献者
  • **
  • 帖子:740
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#11开: 2月14日,2021年,12:50:25 AM»
所以随着事情变得更加光明,我们对变化更敏感?

如已经注意到,更敏感的[改变]。一般的心理物理学令人着迷。记住,"brightness"正如在这里使用的那样,代表着你的感知 - 你说刺激的光明是具有各种刺激强度的刺激力(这里的曝光,而是广泛地占空决)。有几种运行这些类型的实验方式(参见: http://www.cns.nyu.edu/~msl/courses/0022X/slides/sl-psychophysics.pdf)。

物理强度与感知幅度的关系看起来像跨越多种方式的功率函数,而不仅仅是光线。因此,史蒂文的普及'S Power Law(取代Weber-Fechner)。

In an earlier post, reference [//jared.geek.nz/2013/feb/linear-led-pwm] was made to the CIE 1931 work], and that usually gets cited by EE nerds...and it should be.There are some caveats because this is the CNS and there are always caveats and special situations and methodology limitations.

//www.photonstophotos.net/GeneralTopics/Exposure/Psychometric_Lightness_and_Gamma.htm

所以,基本上,程序员'S Chore,关于OP'S调光需要,是曲线适合该功能(通常分为两个功能),并通过PWM占空比值从那里转到。在合理的实践中,op想要做的事情,我同意表是可以走的方式,但是在线程中已经有足够的方式完成了完成任务的方式。

有趣的是,OP'S TI参考(图10)显示了两种方式,但表示"用户可以选择最适合系统的人。" I say "interestingly"因为直线性的方式通常很糟糕 - 我的意思是,这是遇到麻烦的整个点,但是,你是你的暗情。

我要添加的两点是有趣的:

我们方便地期待基于杆和锥体的激励,但可能存在一些其他光敏元件/部件 //www.nature.com/articles/s41598-019-44035-3

当我用这种东西越来越多的时候(如颜色褪色),我发现LED有,我将呼叫阈值占空比。也就是说,非常小的占空比不可占占空比= 0。因此,在阵列中保持占空比= 0的同时,我将分配低于阈值的占空比(我'T均衡为物理实体,但正常的人无法判断任何事情都会与LED发生在一起)。所以,我会"fudge"阵列使得第一个非零占空比是最低的可察觉强度。理由是我看到没有多次"off" values. I don'知道LED是否具有一些最小的功率要求"excite",我会猜到他们做,但我不'知道如何除以凭经验。
- 投资科学 - 它支付大股息。 -
 
以下用户感谢此帖子: 纽伯, 我想要一个粗鲁的用户名

在线的 名义动物

  • 超级贡献者
  • ***
  • 帖子:2457
  • 国家: FI.
    • 我的主页和电子邮件地址
Re:将0到100%划分为调光光
« 回复#12: 2月14日,2021年,01:48:04»
具有如此少量可能的输入(101值;从0到100,包含),PWM占空比的查找表听起来最好的选择。

要生成表,可以使用
$$ p(x)= p_ \ min +(p_ \ max - p_ \ min)\,\ left(\ frac {x} {x_ \ max} \ revaly)^ g $$
其中\ $ p_ \ min \ $是drg,\ $ p_ \ max \ $的最小pwm占空比值是最大占空比值,而\ $ x_ \ max \ $是最大输入值(产生的最大占空比值\ $ p_ \ max \ $)。 你使用\ $ 0 \ $ for \ $ x = 0 \ $,但\ $ p(x)\ $ for \ $ 0 \ lt x \ le x_ \ max \ $;和$ p(x_ \ max)= p_ \ max \ $。

指数\ $ g \ $是敏感性指数的互惠(史蒂文斯's power law,描述常见的心理物理指数\ $ a \ $; $ g = 1 / a \ $)。 如前所述,\ $ g \ $通常在2左右的某个地方(\ $ a \ $ atthewhery atther \ $ 0.5 \ $)。

值得注意的是,指数\ $ G \ $实际上迎合了两个不同的东西:一个是心理物理学,另一个是电子/力学中的非线性。 例如,如果我们正在控制当前而不是PWM占空比,我们'D必须考虑到当前的一半的LED亮度高得多(超过一半),所以我们'd使用更大的指数\ $ g \ $,比如左右3 - 4。
« 上次编辑:2021年2月14日,01:52:44由名义动物 »
 

离线 恢复

  • 频繁的贡献者
  • **
  • 帖子:927
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#13开启:2021.年2月14日,12:55:55 PM»
为什么0到100?
通常您希望尽可能多地解决,而不会跳转到更大的数据大小。

我所有的小MCU项目都使用慢慢上下的心跳LED斜坡。
转换是256字节表。
当"bright"表的末尾输出跳跃输入更改的许多输出值1。
当"dim"表的末尾输出位于输入的几个更改中的相同值。
仍然,8位,8位出局是大量的分辨率。
 

离线 vindhyachal.takniki.

  • 频繁的贡献者
  • **
  • 帖子:467
Re:将0到100%划分为调光光
« 回复#14: 2月14日,2021年,02:48:42 PM»
1.我正在阅读这个网站: //jared.geek.nz/2013/feb/linear-led-pwm

它有以下公式:

 



附件也是如此/


但是,我认为在公式中的第2行中而不是119,它应该是116,否则在100%输入时,我没有得到100的值。
 

离线 jackjones.

  • 常规贡献者
  • *
  • 帖子:226
  • 国家: FI.
Re:将0到100%划分为调光光
« 回复#15:2021.年2月14日,03:41:50 PM»
有人在网站上评论了这一点。我有一个旧版本的存储脚本,它在116处是正确的。不知道它自以来的改变。  :-//

 它也缺少f.close()
 

离线 DRG.

  • 频繁的贡献者
  • **
  • 帖子:740
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#16开:2021.年2月14日,04:02:03 PM»
1.我正在阅读这个网站: //jared.geek.nz/2013/feb/linear-led-pwm

它有以下公式:

 



附件也是如此/


但是,我认为在公式中的第2行中而不是119,它应该是116,否则在100%输入时,我没有得到100的值。

我没有'仔细看看那篇文章,但看起来作者根据研究报告改变了公式。不幸的是,该报告的工作链接不存在。

如果你看这里: //www.photonstophotos.net/GeneralTopics/Exposure/Psychometric_Lightness_and_Gamma.htm

你看公式是:

代码: [选择]
Y = (L* / 902.3) ∙ Yn   L* ≤ 8

Y = ((L* + 16) / 116)3 * Yn   L* > 8



此外:如果您实现此操作,我想知道产生任何可见光的第一个占空比值。也就是说,我猜测(至少)用户进入(1-11)的前10个值在功能上等同于0.因此,我提前提出的问题可能适用:为什么多个'off' values?
« 上次编辑:2021年2月14日,04:10:57 PM由DRG »
- 投资科学 - 它支付大股息。 -
 

离线 恢复

  • 频繁的贡献者
  • **
  • 帖子:927
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#17开: 2月14日,2021年,04:38:39»
为什么多多个'off' values?
因为如果输入是三角波(以常规速率计数高达255,则以常规速率计算为0),所以您需要所有这些零,使其看起来很好。
如果只有一个零,你会说它永远不会完全脱离。

通常我们正以持续的速度工作。
另一种方法是太痛苦,没有给我们带来任何东西。
我们可以在亮度0x00开始,然后在更改为0x01输出之前等待7.635 ms(或其他)。
当我们加入光明时,我们必须等待0.296毫秒(或其他)从0xFE更改为0xFF。
(这些数字在正确的范围内。)
它为N'值得为Blinky设置100 kHz定时器。
 

离线 DRG.

  • 频繁的贡献者
  • **
  • 帖子:740
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#18开启: 2月14日,2021年,04:58:10 PM»
为什么多多个'off' values?
因为如果输入是三角波(以常规速率计数高达255,则以常规速率计算为0),所以您需要所有这些零,使其看起来很好。
如果只有一个零,你会说它永远不会完全脱离。

通常我们正以持续的速度工作。
另一种方法是太痛苦,没有给我们带来任何东西。
我们可以在亮度0x00开始,然后在更改为0x01输出之前等待7.635 ms(或其他)。
当我们加入光明时,我们必须等待0.296毫秒(或其他)从0xFE更改为0xFF。
(这些数字在正确的范围内。)
它为N'值得为Blinky设置100 kHz定时器。

意见的差异很好。用户在0-100之间输入昏暗值。为什么昏暗的值>0功能相同为0?  It is a 修辞问题 我的观点是你不'T需要它们,在那里,可以更精细地调整(如果需要,或者需要更少调整)。他们浪费空间和功能。
- 投资科学 - 它支付大股息。 -
 

离线 恢复

  • 频繁的贡献者
  • **
  • 帖子:927
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#19:2021.年2月14日,06:05:47 PM»
他们浪费空间和功能。
嗯。。。好吧。然后将用户选择的数量修剪到它们是不同的并且对数均匀间隔的点。

或使用更多的输出位,PWM和电流的某种组合。
或者8位DAC到指数驱动因素。
 

离线 DRG.

  • 频繁的贡献者
  • **
  • 帖子:740
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#20开:2021.年2月14日,07:00:23 PM»
他们浪费空间和功能。
嗯。。。好吧。然后将用户选择的数量修剪到它们是不同的并且对数均匀间隔的点。

或使用更多的输出位,PWM和电流的某种组合。
或者8位DAC到指数驱动因素。

你解决了什么问题?我先问起修辞,因为我已经说过消除不可见的刺激强度,并将其扩展到不可歧视的强度变化 - 即我的观点。这就是我如何解决这个问题,但我尊重你'像那种方法一样,你可能会用不同的方式解决或提供其他方法来解决这个问题。我甚至不能同意你可以提出更好的解决方案,如果你这样展示了更好的解决方案 - 但我认为你理解我的观点,没有理由争辩或对它有争议 - 所以我已经完成了那部分讨论和你。我得到的是JND,我会在另一个帖子中解决这个问题,所以它看起来并不像我们之间争吵。


- 投资科学 - 它支付大股息。 -
 

离线 DRG.

  • 频繁的贡献者
  • **
  • 帖子:740
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#21开:2021.年2月14日,08:08:38 PM»
所以,我认为OP有他的答案和他的阵容为0-100,但练习让我思考和玩耍,因为这对我来说很有趣)。 这些只是一些想法而不是  of the "I'嗯,所以你错了"种类。事实上,我欢迎一些其他的pov

我重新制作了OP'S电子表格和它已附加。这是功能。



在电子表格中,我为int dc值添加了8个和16位分辨率的列。

对于8位分辨率,查看低范围(并记住,从CIE 1931,低范围(<8)通常是在电子表格计算公式中完成的,并且抱歉缺乏格式化)。




首先,由于它们是多余的,可以消除13/22个条目。我注意到它可能简单地让阵列中作为编程物质。 16位列中没有冗余值。

接下来,我至少想看看JND的想法(只是明显的区别)的想法。我用150欧姆电阻连接到Arduino Uno端口(通常,我将使用更高的电阻值; 220或330,但我想看我在低PWM占空比下偏见的低端占空比)。两个程序(一个用于8位分辨率,一个有16位分辨率的程序被附加为.txt文件)。这些简单的程序只是在两个占空比值之间进行。

对于8位DC分辨率,值1可以容易地可区分0.但是,我无法区分37的DC值38(如电子表格上)。

对于16位直流分辨率,最低的电子表格值为72可以容易地可区分为0.即使对于7倍环,也不是可变的〜1-5的值(从0)。值〜5-12具有环路,但在任何实际距离下不可分割。值得注意的是,值为36的值可区分为72(再次,电子表格中的最低值) - 因此,从较低的值开始该阵列是理论上的意义。值4359不可分离于4643(电子表格中的相邻值)。

所以,这让我想到了什么'optimal'调光阵列可能是。我的思考是,最佳阵列将在0到最大之间的所有JND值,当然,这将取决于PWM分辨率[和其他东西]。不是(尚)确定如何计算,但我打赌它已经完成了。编辑要添加:这看起来追踪,但我需要一些时间(和动机)来消化它 //www.researchgate.net/publication/305319583_Dimming_curve_based_on_the_detectability_and_acceptability_of_illuminance_differences

至于OP's练习:对我来说,100个值绝对比需要更多或者是有用的。我得到它,如果赋值是用户在0-100之间输入值 - 所以它是。

那'我现在所做的就是抱歉任何愚蠢的错误 :)


« 上次编辑:2021年2月14日,10:45:34由DRG »
- 投资科学 - 它支付大股息。 -
 

在线的 名义动物

  • 超级贡献者
  • ***
  • 帖子:2457
  • 国家: FI.
    • 我的主页和电子邮件地址
Re:将0到100%划分为调光光
« 回复#22:2021.年2月14日,晚上10:29:28»
上述几个帖子是指CIE 1931,其逆函数(我们可以在此处使用)作为近似。 使用\ $ x_ \ max \ $的最大输入/控制值,最大占空比值\ $ p_ \ max \ $
$$ \ begin {aligned}
x_ \ min.&= \ frac {8} {100} x_ \ max = 0.08 \,x_ \ max \\
\结束{对齐} $$
占空比是在两个部分中定义的,一个来自\ $ 0 \ $ to \ $ x_ \ min \ $,而另一个来自\ $ x_ \ min \ $ to \ $ x_ \ max \ $, 精确的 inverse would be
$$ p = \ begin {案例}
\ displaystyle p_ \ max \ frac {2700} {29 ^ 3} \ frac {x} {x_ \ max},&0 \ le x \ le x_ \ min \\
\ displaystyle p_ \ max \ left(\ frac {4 ^ 3} {29 ^ 3} + \ frac {1200} {29 ^ 3} \ left(\ frac {x} {x_ \ max} \ revaly)+ \ frac {1200} {29 ^ 3} \ left(\ frac {x} {x_ \ max} \ ole)^ 2 + \ frac {7500} {29 ^ 3} \ left(\ frac {x} {x_ \ max} \右)^ 3 \右),&x_ \ min \ le x \ le x_ \ max \\
\结束{案例} $$
但由于逆近似使用立方体"monomial"(没有第一或第二学位术语),CIE 1931中规定的确切立方体单项单体将是
$$ p = \ begin {案例}
\ displaystyle p_ \ max \ frac {2700} {29 ^ 3} \ frac {x} {x_ \ max},&0 \ le x \ le x_ \ min \\
\ displaystyle p_ \ max \ left(\ frac {1051 \ cdot 25 ^ 3} {679 \ cdot 29 ^ 3} \ left(\ frac {x} {x_ \ max} \ rection)^ 3 + \ frac {138256} {679 \ cdot 29 ^ 3} \右),&x_ \ min \ le x \ le x_ \ max \\
\结束{案例} $$
或大约
$$ p = \ begin {案例}
\ displaystyle p_ \ max \,0.110705646 \ frac {x} {x_ \ max},&0 \ le x \ le x_ \ min \\
\ displaystyle p_ \ max \ left((1 - 0.00834872623)\左(\ frac {x} {x_ \ max} \右)^ 3 + 0.00834872623 \右),&x_ \ min \ le x \ le x_ \ max \\
\结束{案例} \标记{*} \ label {na} $$
使用这样的立方体的错误"monomial"围绕\ $ x \约0.655383 \,x_ \ max \ $,其中确切的立方逆产量\ $ p = 0.3473 \,p_ \ max \ $,但cie 1931单体\ $ p = 0.2875 \,p_ \ max \ $。

换句话说,在大约三分之二的亮度下,CIE 1931标准借鉴了逆(所需的PWM占空比,以达到所需的光度)约6%。  That'可接受的,因为人类感知有很多余地。

音频级电位计发生了类似的问题。 他们也应该遵循权力法,响度\ $ a \ \大约0.67 \ $,所以这里的可比较指数将是\ $ g = 1 / 0.67 \约1.5 \ $,或\ $ g = 3/2 \ $。 它们而不是任何幂级或功率曲线,而不是它们'只有两个线性部件实现。 如果每个条形或控制上的每个条形或滴答在输出的情况下,我们的人类就不会那么挑剔,这取决于所用的传感器的输出的±10%甚至±20%。

因此,我'd说出最好的选择是使用基于\ $ \ eqref {na} \ $的预生表或使用e.g整数数学的等式。
« 上次编辑:2021年2月14日,由名义动物晚上10:36:39 »
 

离线 T3SL4CO1L.

  • 超级贡献者
  • ***
  • 帖子:16723
  • 国家: 我们
  • 专家,模拟电子,PCB布局,EMC
    • 七晶体管实验室
Re:将0到100%划分为调光光
« 回复#23开: 2月14日,2021年,晚上10:45:47»
在一段时间前,我为嵌入式系统写了一个(编译时)变量伽马函数。

代码: [选择]
uint16_t gammaCorrection(uint8_t g) {

#define GAMMA_EXPONENT 2.2
#define GAMMA_P0(g) ( (((((-1288 * (g) +  15997) * (g) +  -80995) * (g) +  210128) * (g) +  -279795) * (g) +  152320) * (g) )
#define GAMMA_P1(g) ( ((((( 5371 * (g) + -66917) * (g) +  335766) * (g) + -841258) * (g) +  1026871) * (g) + -459709) * (g) )
#define GAMMA_P2(g) ( (((((-7607 * (g) +  94355) * (g) + -467535) * (g) + 1138966) * (g) + -1323332) * (g) +  564949) * (g) )
#define GAMMA_P3(g) ( ((((( 3985 * (g) + -48101) * (g) +  231174) * (g) + -543075) * (g) +   608860) * (g) + -252779) * (g) )
#define GAMMA_P4(g) ( 0 * (g) )

uint16_t r;
r  = ((int32_t)GAMMA_P4(GAMMA_EXPONENT) * g) >> 8;
r += ((int32_t)GAMMA_P3(GAMMA_EXPONENT) * g) >> 8;
r += ((int32_t)GAMMA_P2(GAMMA_EXPONENT) * g) >> 8;
r += ((int32_t)GAMMA_P1(GAMMA_EXPONENT) * g) >> 8;
r += ((int32_t)GAMMA_P0(GAMMA_EXPONENT) * g) >> 8;
return ((int32_t)r * 10000) >> 14;
}

我认为这是8.24内部固定格式,返回表达式只是为了将其标准化为10k输出范围? 自从我触摸这个代码库以来一直有一点。

这是通过拟合A,立方多项式的作用,我想我发现了最优质的准确性,到了一系列的力量。 这实际上是一个双重拟合,其中一个最适合的系数(正在评估的实际伽马校正函数)是通过额外的最佳拟合产生的,因此由Gamma_pn表示的系数矩阵定义。 这些在编译时评估,以给出所选指数的系数。

多项式对于具有硬件乘法的平台非常棒 - 整个事情可能只需要数百个CPU周期来计算,而且我不'T知道,浮点力的成千上万? (仍然仍然用手优化 - 这是在AVR上,GCC在优化时臭名昭着。 此外,可以保存一些代码空间将常量放入progmem,因为我'过去已经完成了热敏电阻校正功能: //www.seventransistorlabs.com/Calc/Thermistor.html (朝着底部,哦,亲爱的,我从不把这个页面上的目录放在这个页面上,因为羞耻!))

蒂姆
七晶体管Labs,LLC
电子设计,从概念到原型。
将项目带到生活中?  Send me a message!
 

离线 DRG.

  • 频繁的贡献者
  • **
  • 帖子:740
  • 国家: 我们
Re:将0到100%划分为调光光
« 回复#24开:2021.年2月14日,11:03:16 PM»
/ - /

因此,我'd说出最好的选择是使用基于\ $ \ eqref {na} \ $的预生表或使用e.g整数数学的等式。

所以鉴于你对心理物理学的感激以及你的数学 倾向于 技能,让我问你:

你怎么(或真正的人) 系统地 填充20 [或21,包括0个元素阵列,具有最佳调光值(作为PWM占空比,即步骤),其中MIN = 0,最大值= 100%。为了说明,假设8位DC和5V。
« 上次编辑:2021年2月14日,晚上11:33:45 DRG »
- 投资科学 - 它支付大股息。 -
 


分享我

掘客  Facebook  诽谤  美味的  Technorati.  推特  谷歌  雅虎
SMF.