找回密码
 立即注册
查看: 100|回复: 2

请教大家编程思路,2个电阻电位器同时控制2个PWM调亮度调色温

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-05-01 14:31:13

7

主题

50

回帖

838

积分

高级会员

积分
838
发表于 2025-3-16 17:09:52 | 显示全部楼层 |阅读模式

2个PWM各接一个暖白和一个暖黄LED,2个电阻电位器通过ADC转换成0-255来控制这2个LED,A电位器是控制亮度叫DIM,B电位器控制2个LED的配比来调整色温叫CCT。

以前我是用2个编码器(电子电位器)代替这2个电阻电位器,编写软件工作正常。但是这次使用2个电阻电位器,没有找到合适的编程思路。

DIM电位器的值是CCT电位器调整2路PWM的最大值,而CCT电位器在DIM值内可以任意调节,2路PWM的值以这个DIM值为互补关系,调节CCT电位器可以调节2路PMW的配比。

无论亮度大小和色温多少,电位器的调节都具有很好的线性和连续性。

不知道我是否描述清楚了,如果没有描述清楚的地方麻烦大家问我一下,我再描述描述。

请教大家这个的编程思路,多谢。

BH7NI 在深圳的安徽人
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-16 17:12:00 | 显示全部楼层
针对您提出的使用两个电阻电位器控制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>[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-16 19:49:55 | 显示全部楼层
你需要adc值到两个pwm值的转换过程?

Ai给出的建议:
  1. void UpdateLED() {
  2.     float dim = ADC_Read(DIM_PIN) / 255.0;  // 0.0~1.0
  3.     float cct = ADC_Read(CCT_PIN) / 255.0;
  4.    
  5.     float tempPwmA = dim * cct;
  6.     float tempPwmB = dim - tempPwmA ;
  7.    
  8.     PWM1 = tempPwmA * 255;  // 0~255
  9.     PWM2 = tempPwmB * 255;
  10.     //更新PWM
  11.     ...
  12. }
复制代码
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:34 , Processed in 0.128775 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表