PWM这段代码有没有大佬解释一下

2019-07-20 00:50发布

while(1)
{
delay_ms(10);
if(dir)led0pwmval++; //dir==1 led0pwmval 递增
else led0pwmval--; //dir==0 led0pwmval 递减
if(led0pwmval>300)dir=0; //led0pwmval 到达 300 后,方向为递减
if(led0pwmval==0)dir=1; //led0pwmval 递减到 0 后,方向改为递增
TIM_SetTIM3Compare4(led0pwmval);//修改比较值,修改占空比
}
}
为什么到达300后要把这个比较值改成300,给的arr值是499,那么等他下一次把占空比改成0以后是不是一直会保持在高电平,那为什么要去修改这个占空比。还有就是这个是通过模拟的阈值来调节数字的占空比的话为什么还有灯的亮暗,输出的不应该是一个能够调节占空比的数字量吗

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
下雨的声音
2019-07-20 06:50
你这个程序,通过 dir 的值 0和1 来决定 ccr1(比较值) 的值是递增的还是递减的。当 ledpwm从0开始递增,当递增超过300后就转成从300递减到0,当递减到0再从0开始递增。这样循环来着。
  ledpwm 的值改变的是 ccr1。相当与改变了PWM波的占空比。你是延时10ms改变一次,一般的PWM波周期没有这么大,你就输出10MS这样的信号。
  你去看中文参考手册寄存器的介绍那里有说。当 比较值 小于 ARR值输出低电平或高电平,如果我的 比较值是 0就输出10MS 的高电平或低电平(这个看你的选择的模式去的)。他就有亮灭了。
  修改占空比就相当于你想让这个管脚输出高电平或低电平时间的比例。

一周热门 更多>