Arduino踩坑记:LED的PWM设置。解决PWM常亮、突然变暗等问题

本文探讨了在使用Arduino进行PWM控制LED时遇到的问题,包括LED常亮和亮度突然变化。作者通过实验发现,PWM调节存在一个有效的周期范围,即1%~18%的周期,超出该范围LED表现异常。测试表明,当亮灯周期低于1%或高于18%,LED亮度会固定在中亮状态。问题可能源于人眼感知和硬件限制。

猜测原因:受限于人眼感受和LED特性影响,PWM是有一个最佳的调节范围的,超出范围外将不能出现预料中的变化;另外怀疑是硬件bug

以本人手上的LED测试为例20000ms周期为例:

最佳亮灯周期为1%~18%个周期,亮灯周期低于1%(0.01),或高于18%(0.18),都会表现为中亮。

测试代码如下:

 

#define R (3)
#define G (4)
#define B (2)
#define CYCLE 20000

void setup(){
  Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println("Serial OK");
  pinMode(R,OUTPUT);
  pinMode(G,OUTPUT);
  pinMode(B,OUTPUT);

}
float percent=0.0;
boolean state_up=false;
float minper=0.01;//when min is too small(smaller than stepp),it work incorrectly;
float maxper=0.18;//when it's over 0.18,it work incorrectly;
float stepp=0.001;//control stepp , control speed
//G:0.01~0.18 stepp=0.001
int LED=B;

void loop(){
if(state_up){
   if(percent>maxper){
     state_up=false;     
   }else{ 
  cpwm(percent);
  percent+=stepp; 
   }
}else{
  if(percent<minper){
    state_up=true;
  }else{
  percent-=st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值