OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3035|回复: 8

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

[复制链接]

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
发表于 2019-7-11 15:59:25 | 显示全部楼层 |阅读模式
1金钱
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以后是不是一直会保持在高电平,那为什么要去修改这个占空比。还有就是这个是通过模拟的阈值来调节数字的占空比的话为什么还有灯的亮暗,输出的不应该是一个能够调节占空比的数字量吗

最佳答案

查看完整内容[请看2#楼]

你这个程序,通过 dir 的值 0和1 来决定 ccr1(比较值) 的值是递增的还是递减的。当 ledpwm从0开始递增,当递增超过300后就转成从300递减到0,当递减到0再从0开始递增。这样循环来着。 ledpwm 的值改变的是 ccr1。相当与改变了PWM波的占空比。你是延时10ms改变一次,一般的PWM波周期没有这么大,你就输出10MS这样的信号。 你去看中文参考手册寄存器的介绍那里有说。当 比较值 小于 ARR值输出低电平或高电平,如果我的 比较 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2019-3-28
在线时间
37 小时
发表于 2019-7-11 15:59:26 | 显示全部楼层
你这个程序,通过 dir 的值 0和1 来决定 ccr1(比较值) 的值是递增的还是递减的。当 ledpwm从0开始递增,当递增超过300后就转成从300递减到0,当递减到0再从0开始递增。这样循环来着。
  ledpwm 的值改变的是 ccr1。相当与改变了PWM波的占空比。你是延时10ms改变一次,一般的PWM波周期没有这么大,你就输出10MS这样的信号。
  你去看中文参考手册寄存器的介绍那里有说。当 比较值 小于 ARR值输出低电平或高电平,如果我的 比较值是 0就输出10MS 的高电平或低电平(这个看你的选择的模式去的)。他就有亮灭了。
  修改占空比就相当于你想让这个管脚输出高电平或低电平时间的比例。
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-7-4
在线时间
8 小时
发表于 2019-7-11 16:41:24 | 显示全部楼层
arr为499,其实就是500。300是最大的占空比为五分之三,递增时占空比从五百分之零增加到五分之三;减少时,占空比从五分之三减少到零。由于速度快,灯亮的时长不一样,所以就是亮暗的样子。(来自初学者的分析)
回复

使用道具 举报

12

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1825
注册时间
2017-9-7
在线时间
501 小时
发表于 2019-7-11 17:00:42 | 显示全部楼层
楼上解释的很清楚了,另外不是只改0和300两个值,是0到300内都改,arr是499,这里取300的原因是led灯在arr超过300以后,亮度变化不明显,仅此而已
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-11 17:13:29 | 显示全部楼层
下雨的声音 发表于 2019-7-11 16:49
你这个程序,通过 dir 的值 0和1 来决定 ccr1(比较值) 的值是递增的还是递减的。当 ledpwm从0开始递增, ...

谢谢大佬,那改变比例来改变他的亮暗变化是和楼上说的一样吗,数字电路的话不应该是没有亮暗的区别吗
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2019-3-28
在线时间
37 小时
发表于 2019-7-11 17:26:50 | 显示全部楼层
我们这个是PWM波,方波。数字电路只有0和1。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2019-3-28
在线时间
37 小时
发表于 2019-7-11 17:29:57 | 显示全部楼层
你可以看看视频的。原子的,野火的都可以。他们的官网都有的
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2019-3-28
在线时间
37 小时
发表于 2019-7-11 17:35:52 | 显示全部楼层
一样的,当输出的高电平(高电平灯亮时)占到一定的比例,它的变化就很小了。
回复

使用道具 举报

10

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-7-4
在线时间
36 小时
 楼主| 发表于 2019-7-11 17:50:30 | 显示全部楼层
luoyekj 发表于 2019-7-11 16:41
arr为499,其实就是500。300是最大的占空比为五分之三,递增时占空比从五百分之零增加到五分之三;减少时, ...

谢谢同道中人的分析,我觉得你这个回答应该是最优解,
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 17:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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