请教大家编程思路,2个电阻电位器同时控制2个PWM调亮度调色温
<p>2个PWM各接一个暖白和一个暖黄LED,2个电阻电位器通过ADC转换成0-255来控制这2个LED,A电位器是控制亮度叫DIM,B电位器控制2个LED的配比来调整色温叫CCT。</p><p>以前我是用2个编码器(电子电位器)代替这2个电阻电位器,编写软件工作正常。但是这次使用2个电阻电位器,没有找到合适的编程思路。</p>
<p>DIM电位器的值是CCT电位器调整2路PWM的最大值,而CCT电位器在DIM值内可以任意调节,2路PWM的值以这个DIM值为互补关系,调节CCT电位器可以调节2路PMW的配比。</p>
<p>无论亮度大小和色温多少,电位器的调节都具有很好的线性和连续性。</p>
<p>不知道我是否描述清楚了,如果没有描述清楚的地方麻烦大家问我一下,我再描述描述。</p>
<p>请教大家这个的编程思路,多谢。</p>
针对您提出的使用两个电阻电位器控制PWM调亮度调色温的需求,以下是一个专业的编程思路:<br><br>1. ADC采集与映射:首先,通过ADC模块分别采集DIM和CCT电位器的电压值,并将其映射到0-255的范围。DIM电位器控制亮度,CCT电位器控制色温配比。<br><br>2. 亮度控制:将DIM电位器的值作为PWM输出的最大值。假设DIM值为DIMval,则PWM输出的最大占空比为DIMval。<br><br>3. 色温配比:CCT电位器的值用于调整两路PWM的配比。假设CCT值为CCTval,则暖白LED的PWM占空比为PWMwhite = (CCTval / 255)DIMval,暖黄LED的PWM占空比为PWMyellow = DIMval - PWMwhite。这种互补关系确保了总亮度不变,仅调整色温。<br><br>4. 实时更新:在主循环中实时读取DIM和CCT的值,并更新PWM输出。确保当任意一个电位器调整时,PWM输出能够即时响应。<br><br>5. 平滑处理:为避免电位器调整时的抖动,可以对ADC采集的值进行滤波处理,如使用滑动平均滤波。<br><br>通过以上步骤,您可以实现两个电阻电位器分别控制亮度和色温,且调节过程平滑稳定。希望这个思路能助您顺利完成编程。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考] 你需要adc值到两个pwm值的转换过程?
Ai给出的建议:
void UpdateLED() {
float dim = ADC_Read(DIM_PIN) / 255.0;// 0.0~1.0
float cct = ADC_Read(CCT_PIN) / 255.0;
float tempPwmA = dim * cct;
float tempPwmB = dim - tempPwmA ;
PWM1 = tempPwmA * 255;// 0~255
PWM2 = tempPwmB * 255;
//更新PWM
...
}
页:
[1]