OpenEdv-开源电子网

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

分享PWM输入模式捕捉4路PWM波形的周期和占空比 源码+原理讲解+程序讲解

  [复制链接]

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-2-17
在线时间
3 小时
发表于 2016-4-1 12:43:30 | 显示全部楼层
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2015-9-9
在线时间
1 小时
发表于 2016-4-4 16:10:49 | 显示全部楼层
支持楼主,正好需要这个资料
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-2-19
在线时间
18 小时
发表于 2016-4-4 18:28:07 | 显示全部楼层
多谢分享!TIM用法感觉挺复杂,好像每个都不大一样。
回复 支持 反对

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3979
金钱
3979
注册时间
2015-4-18
在线时间
403 小时
发表于 2016-4-9 07:46:22 | 显示全部楼层
谢谢了。。。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-4-9
在线时间
3 小时
发表于 2016-4-9 16:05:13 | 显示全部楼层
可以下载
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-3-15
在线时间
2 小时
发表于 2016-4-10 16:38:17 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-3-10
在线时间
18 小时
发表于 2016-4-11 23:10:07 | 显示全部楼层
楼主大赞
回复 支持 反对

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2015-12-31
在线时间
38 小时
发表于 2016-4-12 16:15:59 | 显示全部楼层
楼主  我想用TIM1输出4路PWM来设计RGB灯带控制器、、、TIM1配置都好了,请问我如何才能控制灯的亮度及颜色呢???
回复 支持 反对

使用道具 举报

91

主题

186

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2016-3-22
在线时间
122 小时
发表于 2016-4-12 19:02:16 | 显示全部楼层
咋下载不了
回复 支持 反对

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2015-12-31
在线时间
38 小时
发表于 2016-4-13 20:33:01 | 显示全部楼层
顶顶。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-1-29
在线时间
7 小时
发表于 2016-4-22 13:45:02 | 显示全部楼层
谢谢楼主 学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-4-24
在线时间
2 小时
发表于 2016-4-24 08:35:50 | 显示全部楼层
aming882046 发表于 2013-10-27 09:53
你的程序我有点看不懂啊,能否指点一下啊,就是tim4的pb7是捕获引脚,tim4完成捕获任务,那么tim3在里面又 ...

为什么要回复。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-4-28
在线时间
0 小时
发表于 2016-4-28 17:42:02 | 显示全部楼层
找了很久了。谢谢
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-5-14
在线时间
0 小时
发表于 2016-5-14 22:32:29 | 显示全部楼层
厉害啊
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-5-14
在线时间
0 小时
发表于 2016-5-15 21:49:03 | 显示全部楼层
为什么 为什么下载不了啊
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-4-9
在线时间
3 小时
发表于 2016-5-16 10:28:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-5-24
在线时间
1 小时
发表于 2016-5-24 19:23:35 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

3

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2015-4-11
在线时间
24 小时
发表于 2016-5-24 19:48:09 | 显示全部楼层
下一步值得学习的东西,线看看
回复 支持 反对

使用道具 举报

11

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2016-4-6
在线时间
53 小时
发表于 2016-5-25 10:45:04 | 显示全部楼层
我将程序移植到战舰版上,也用杜邦线连接了pb7与pc6.7.8,可还是输出0,初学者没看出问题。还有duty = TIM_GetCapture1(TIM4);                                 //采集占空比               
                  period        =        TIM_GetCapture2(TIM4);     //采集周期
TIM_GetCapture不是对应通道吗,此处为什么得出的是同个信号的占空比周期?
求前辈们指导理解。
回复 支持 反对

使用道具 举报

11

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2016-4-6
在线时间
53 小时
发表于 2016-5-26 14:18:46 | 显示全部楼层
ronan 发表于 2016-5-25 10:45
我将程序移植到战舰版上,也用杜邦线连接了pb7与pc6.7.8,可还是输出0,初学者没看出问题。还有duty = TIM_ ...

我懂了,是Pwm输入。
回复 支持 反对

使用道具 举报

3

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2013-12-6
在线时间
24 小时
发表于 2016-6-6 13:28:43 | 显示全部楼层
来晚了,必须顶!
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
438
金钱
438
注册时间
2013-7-16
在线时间
71 小时
发表于 2016-6-8 11:50:56 | 显示全部楼层
怎么无法收藏和点击链接下载呢?
回复 支持 反对

使用道具 举报

22

主题

117

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
798
金钱
798
注册时间
2015-10-24
在线时间
160 小时
发表于 2016-6-8 16:07:07 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2012-10-10
在线时间
0 小时
发表于 2016-6-24 10:38:19 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-6-24 10:40:59 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2016-6-23
在线时间
23 小时
发表于 2016-6-24 10:58:54 | 显示全部楼层
学习了棒棒的
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2016-5-12
在线时间
62 小时
发表于 2016-6-29 17:54:44 | 显示全部楼层
楼主牛B!!!!!
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-6-29
在线时间
28 小时
发表于 2016-6-29 19:56:51 | 显示全部楼层
下载不了是什么原因,没办法电机下载链接
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
38
金钱
38
注册时间
2016-6-22
在线时间
6 小时
发表于 2016-6-30 15:08:43 | 显示全部楼层
万能的金果果 发表于 2016-6-29 19:56
下载不了是什么原因,没办法电机下载链接

楼上的小伙伴,楼主的附件,你下载了吗?我试过IE,搜狗,UC浏览器都下载不了。。。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2016-6-30
在线时间
2 小时
发表于 2016-6-30 17:20:34 | 显示全部楼层
谢楼主分享,赞一个
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-6-29
在线时间
28 小时
发表于 2016-7-3 17:11:42 | 显示全部楼层
伊西亚的风 发表于 2016-6-30 15:08
楼上的小伙伴,楼主的附件,你下载了吗?我试过IE,搜狗,UC浏览器都下载不了。。。

用IE下载,没问题,
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-6-29
在线时间
28 小时
发表于 2016-7-3 17:27:48 | 显示全部楼层
@伊西亚的风  试试

PWM输入模式捕捉4路PWM的周期和占空比.rar

301.97 KB, 下载次数: 218

回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
38
金钱
38
注册时间
2016-6-22
在线时间
6 小时
发表于 2016-7-4 09:49:14 | 显示全部楼层

谢谢你
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-7-5
在线时间
1 小时
发表于 2016-7-5 11:49:26 | 显示全部楼层
很不错
回复 支持 反对

使用道具 举报

154

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1067
金钱
1067
注册时间
2015-4-13
在线时间
189 小时
发表于 2016-7-6 19:59:08 | 显示全部楼层
低频(<16HZ)好像没做溢出处理,会导致输出值乱跳的,要是能完善下就好了
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-1-28
在线时间
7 小时
发表于 2016-7-7 15:19:58 | 显示全部楼层
正好项目上要运用到PWM捕捉, 就来看看
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-7-10
在线时间
0 小时
发表于 2016-7-10 11:50:29 | 显示全部楼层
多谢楼主分享。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-3-5
在线时间
1 小时
发表于 2016-7-11 14:20:25 | 显示全部楼层
厉害厉害
回复 支持 反对

使用道具 举报

0

主题

27

帖子

0

精华

高级会员

Rank: 4

积分
654
金钱
654
注册时间
2016-7-11
在线时间
256 小时
发表于 2016-7-11 15:12:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

20

主题

138

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2012-10-11
在线时间
134 小时
发表于 2016-7-15 19:23:17 | 显示全部楼层
多谢楼主分享!
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2016-5-12
在线时间
62 小时
发表于 2016-7-15 22:42:38 | 显示全部楼层
lifan_cn 发表于 2013-10-27 07:53
哎!可怜我排好的版啊!一上传就变味了呢!你们就将就得看吧!最后四张图片的介绍文字,对号入座哦!

怎么下载不了。。。。。。。。。。
回复 支持 反对

使用道具 举报

10

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2016-5-12
在线时间
62 小时
发表于 2016-7-15 22:44:39 | 显示全部楼层
lifan_cn 发表于 2013-10-27 07:53
哎!可怜我排好的版啊!一上传就变味了呢!你们就将就得看吧!最后四张图片的介绍文字,对号入座哦!

我去,怎么下载不了啊!!!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-17
在线时间
1 小时
发表于 2016-7-17 02:12:20 | 显示全部楼层
学习一下,正在找这个资料
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-5-27
在线时间
3 小时
发表于 2016-7-19 16:16:32 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-7-21
在线时间
2 小时
发表于 2016-7-21 18:31:52 | 显示全部楼层
多谢分享!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-7-21
在线时间
0 小时
发表于 2016-7-21 19:43:20 | 显示全部楼层
急需楼主的代码例子。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-12-17
在线时间
1 小时
发表于 2016-7-22 14:20:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

5

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-8-16
在线时间
34 小时
发表于 2016-7-24 16:58:08 | 显示全部楼层
②这个就是用原子哥那种溢出计数的方法,但是这个有意思的是主从复位模式,每次复位也会产生更新中断,那么如果不加设置的话,可能这种方法是行不通的。但是我已经解决了,看手册介绍,解决的

楼主可否指点下怎么操作?
回复 支持 反对

使用道具 举报

5

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-8-16
在线时间
34 小时
发表于 2016-7-24 17:57:31 | 显示全部楼层
xiaoma1122 发表于 2015-8-10 18:13
第二种,溢出计数的方法该怎么写呀,楼主指教指教。

请教想到方法了没
回复 支持 反对

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2012-11-21
在线时间
61 小时
发表于 2016-7-26 10:48:20 | 显示全部楼层
这个程序确实好用,必须精华贴。用TIM2_CH1的程序如下,测试1K,2K,3K信号占空比准确,
占空比是IC2 捕获,周期是IC1捕获,这块注意一下就行,还有前2到3次测量结果不准确要抛弃。
//----------------------PWM输入模式配置--------------------------------------------------
void TIM2_PWMINPUT_INIT(u16 arr,u16 psc)
{
  
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_ICInitTypeDef  TIM2_ICInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;               //PB7:TIM4_CH2                 
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_Init(GPIOB, &GPIO_InitStructure);
       
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                 //PA0: TIM2_CH1           
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//        TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;                  
//  TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;      
//  TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   
//  TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
//        TIM4_ICInitStructure.TIM_ICFilter = 0x0;

//初始化TIM2输入捕获参数
        TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01         选择输入端 IC1映射到TI1上
        TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕获
        TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
        TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置输入分频,不分频
        TIM2_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
        TIM_ICInit(TIM2, &TIM2_ICInitStructure);
       
/*配置中断优先级*/
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;                     
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
       
  
//        TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure);     //PWM输入配置  
//  这个是选择有效的输入端 ,我这里TIM_TS_TI2FP2选择的PB7,注意:只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号
//  TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);     //选择有效输入端
//  这个是配置为PWM输入主从复位模式,就是每次输入端有效电平变化的时候定时器计数器就会硬件上置0
//  TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);  //配置为主从复位模式
//  TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);                                       
//  TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE);          //中断配置
//        TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
//        TIM_Cmd(TIM4, ENABLE);   

  TIM_PWMIConfig(TIM2, &TIM2_ICInitStructure);     //PWM输入配置           
  TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);     //选择有效输入端        
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);  //配置为主从复位模式
  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);                                       
  TIM_ITConfig(TIM2, TIM_IT_CC1|TIM_IT_Update, ENABLE);   //中断配置
        TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //允许更新中断 ,允许CC1IE捕获中断       
        TIM_Cmd(TIM2, ENABLE);   

}


u16 period = 0;
u16 DUTY  = 0;
u8 CollectFlag = 1;

void TIM2_IRQHandler(void)
{
        if(CollectFlag)
        {
        if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
                {       
                        period = TIM_GetCapture1(TIM2);          //采集周期               
                  DUTY         =        TIM_GetCapture2(TIM2);     //采集占空比
                }
               
                CollectFlag = 0;
        }       
                TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 09:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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