怎么51单片机定时器来模拟PWM波?

2025-01-07 06:28:42
推荐回答(2个)
回答1:

PWM的意思是“脉冲宽度调制”

PWM有两个最基本的参数:频率、占空比。

频率就是每秒钟电平高低变化的次数,占空比是指高电平保持时间和整个脉冲周期中的比例关系。

对于用定时器来模拟,最基本的方法就是使用一个IO口循环设置其输出值为高电平和低电平。

那么定时器在这里起计时作用,而且需要两个时间:高电平持续时间、低电平持续时间。

只要做到这两个时间的计时,那么就可以实现基本的PWM了。

而要做到两个时间的计时,有两种方案:

1.单计时器方案

int i;//计时变量

timer1(){//计时器1中断函数
  //此处示例每隔100个最小计时周期电平变化一次,即200个最小计时周期闪烁一次
  i++;
  if (i==200){
    i=0;//变量复位,完成一个周期,准备下一个周期    
  }
  else if (i==100){
    LED_OFF;//关灯
  }
  else if (i==0){
    LED_ON;//开灯
  }
}

2.双计时器方案

//只需要设计好两个计时器的初值和周期,即可完成交替亮灭
timer1(){//计时器1中断函数
  //此处示例每隔100个最小计时周期电平变化一次,即200个最小计时周期闪烁一次
  LED_ON;//开灯
}
timer2(){
  LED_OFF;//关灯
}

回答2:

用定时器T1/T2的工作方式2吧(我也忘记了,就是能自动重装初始值的那个),在定时器程序里,让一个I/O口取反输出(例如sbit s=P1^0;s=~s;)通过改变定时时常就可以了