OpenEdv-开源电子网

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

关于PWM输入捕获的疑问

[复制链接]

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
发表于 2015-7-27 12:11:44 | 显示全部楼层 |阅读模式
5金钱


我想知道,如果配置好pwm输入捕获模式后,那么在TI1的上升沿是将TIM->INT的值赋值给TIM->CCR1吗?然后由硬件复位计数器的值吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2015-7-26
在线时间
36 小时
发表于 2015-7-27 12:50:04 | 显示全部楼层
PWM是输出,捕获是输入,你应该是想接受pwm信号,检测脉宽什么的吧。那么在TI1的上升沿发生捕获,但是不会影响TIM->CCR1,毕竟TIM->CCR1是改变输出的脉宽的。
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
 楼主| 发表于 2015-7-27 12:58:36 | 显示全部楼层
回复【2楼】woshixuhao01:
---------------------------------
不是这样吧,配置为捕获模式的时候,不是应该在输入通道检测到有效边沿的时候将计数器的值传递给捕获寄存器吗?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
 楼主| 发表于 2015-7-27 13:22:15 | 显示全部楼层
自我觉得应该是硬件自动复位计数器的值,可是调试发现,计数器一直没有复位过。搞不懂这几个寄存器是怎样的关系
回复

使用道具 举报

6

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2015-7-26
在线时间
36 小时
发表于 2015-7-27 13:30:38 | 显示全部楼层
回复【4楼】Nonentity_YOU:
---------------------------------
原子大哥例程的话,在上升沿触发的时候有个初始化,TIM_SetCounter(TIM2,0);  就是把CNT的值清零,是不是跟这个有点关系?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
 楼主| 发表于 2015-7-27 14:11:27 | 显示全部楼层
我也不知道该怎么问了,现在呢我可以正常的测出pwm的脉宽和频率,就是想要理解定时器作为pwm输入捕获的一个过程。我的理解是假设将定时器2的CH1设置为pwm捕获模式,设置上升沿为有效边沿,那么在此输入通道检测到一个上升沿后,会将TIM2_INT计数器的值赋值给TIM_CCR1,然后硬件自动清零TIM2_INT,然后在检测到CH1下降沿的时候,将TIM2_INT的值赋给TIM2_CCR2。那么脉冲宽度就是TIM2_CCR2,周期就是TIM_CCR1。不知道我这样理解的对不对。下面是我测周期和占空比的函数
void TIM2_Interrupt(void)
{
u16 counter;
if(TIM_GetFlagStatus(TIM2,TIM_FLAG_CC1) != RESET)
{
    eriod =1000/( TIM_GetCapture1(TIM2)/72);
    printf("%f\n",Period);
    TIM_ClearFlag(TIM2,TIM_FLAG_CC1);
}
if(TIM_GetFlagStatus(TIM2,TIM_FLAG_CC2) != RESET)
{
    counter TIM_GetCapture1(TIM2); 
    printf("%f%%\n",TIM_GetCapture2(TIM2)/counter*100);
    TIM_ClearFlag(TIM2,TIM_FLAG_CC2);
}
}
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
 楼主| 发表于 2015-7-27 14:21:05 | 显示全部楼层
我遇到的疑问就是,我在捕获中断里读取到的TIM2->CNT的值不固定,,按理说读到的不应该是周期对应数值吗?或者说是0?然后我就想是不是在硬件自动清零后,在我进入中断之前,计数器已经工作了一段时间,如果是这样的话,我就大概明白了 。。。。
回复

使用道具 举报

1

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-16
在线时间
3 小时
发表于 2015-7-27 14:37:00 | 显示全部楼层
回复【6楼】Nonentity_YOU:
---------------------------------
从手册上那个图完全可以证明你理解是对的呀
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
 楼主| 发表于 2015-7-27 14:47:52 | 显示全部楼层
回复【8楼】joe_knight:
---------------------------------
恩 ,问题就出在了进中断前计数器已经计了好多个时钟脉冲,这点之前没想过。。现在大概明白了
回复

使用道具 举报

1

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-7-16
在线时间
3 小时
发表于 2015-7-27 15:58:00 | 显示全部楼层
回复【9楼】Nonentity_YOU:
---------------------------------
在T1捕获上升沿后,这时CCR1并不一定能反映出PWM的周期,因为TIM2在使能后计数器就开始在计数了,PWM输入捕获的时间点(首次捕获上升沿)不同CCR1的值也不同。只有下降沿产生后的下一个上升沿的计数才反映出PWM的周期,CCR2反映出占空比
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-7-27
在线时间
6 小时
 楼主| 发表于 2015-7-27 16:12:28 | 显示全部楼层
回复【10楼】joe_knight:
---------------------------------
恩恩。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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