OpenEdv-开源电子网

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

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

  [复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2015-7-11
在线时间
0 小时
发表于 2015-7-17 17:28:19 | 显示全部楼层
回复【16楼】lifan_cn:
---------------------------------
前面的我也下载不了,你上传的可以下了,谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-7-27
在线时间
0 小时
发表于 2015-7-27 18:57:22 | 显示全部楼层
经过示波器测试,实际测量得到的频率为串口输出的1/10,也就是串口看到的频率是1K,实际示波器测量得到的只有100多赫兹
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-7-27
在线时间
0 小时
发表于 2015-7-27 18:58:18 | 显示全部楼层
回复【3楼】aming882046:
---------------------------------
经过示波器测试,实际测量得到的频率为串口输出的1/10,也就是串口看到的频率是1K,实际示波器测量得到的只有100多赫兹
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-8-8
在线时间
0 小时
发表于 2015-8-8 20:31:25 | 显示全部楼层
我用信号源产生的方波来测试,测到的数据误差很大呢?
回复 支持 反对

使用道具 举报

头像被屏蔽

65

主题

277

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2013-8-11
在线时间
29 小时
发表于 2015-8-9 09:39:14 | 显示全部楼层
谢谢楼主!!!!!!!!!!!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-8-8
在线时间
0 小时
发表于 2015-8-10 18:13:03 | 显示全部楼层
第二种,溢出计数的方法该怎么写呀,楼主指教指教。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-8-8
在线时间
0 小时
发表于 2015-8-10 21:31:57 | 显示全部楼层
我看代码里写的是: duty = TIM_GetCapture1(TIM4); //采集占空比
                              period =TIM_GetCapture2(TIM4);     //采集周期

而由你图上的分析TIM_GetCapture2(TIM4)得到的是脉宽。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2015-8-2
在线时间
7 小时
发表于 2015-8-11 11:08:47 | 显示全部楼层
谢楼主,下载试试
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-8-8
在线时间
0 小时
发表于 2015-8-11 13:09:51 | 显示全部楼层
回复【29楼】墨迹:
---------------------------------
我也觉得呀,根据pwm输入模式时序的图,TIM_GetCapture1(TIM4)得到的应该是计算周期的值。请问如何理解?指教指教
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-8-12
在线时间
0 小时
发表于 2015-8-13 20:14:16 | 显示全部楼层
回复【6楼】lifan_cn:
---------------------------------
大神,你这个脉宽能测出来吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-8-24
在线时间
0 小时
发表于 2015-8-24 15:16:39 | 显示全部楼层
尝试一下吧 谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-8-25
在线时间
1 小时
发表于 2015-8-25 15:59:27 | 显示全部楼层
嗯嗯,看一下。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2013-12-16
在线时间
1 小时
发表于 2015-9-9 16:15:45 | 显示全部楼层
请问如果捕获1hz的频率,高电平时间500ms,那如何调整参数呢
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2013-12-16
在线时间
1 小时
发表于 2015-9-9 16:29:07 | 显示全部楼层
duty = TIM_GetCapture1(TIM4);  //采集占空比,得到寄存器输入捕获1的值
 period = TIM_GetCapture2(TIM4);     //采集周期
请问采集出的占空比和周期的单位为什么时us,是否可以改成以ms做单位
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-12-30
在线时间
0 小时
发表于 2015-9-13 19:16:24 | 显示全部楼层
void TIM5_CH1_Cap_Init(u32 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);   //TIM5?±??????    
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  //????PORTA?±??

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIOA0
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//????????
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //????100MHz
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //???ì????????
//GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //????
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStructure); //??????PA0

//GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //PA0???????¨?±?÷5
  
  
TIM_TimeBaseStructure.TIM_Prescaler=psc;  //?¨?±?÷·???
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //?ò??????????
TIM_TimeBaseStructure.TIM_Period=arr;   //×?????×°????
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 

TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);

NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//??????????3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //×???????3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??????
NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷


//??????TIM5????????????
TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2; //CC1S=01  ?????????? IC1??????TI1??
  TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //??????????
  TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //??????TI1??
  TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;  //????????·???,??·??? 
  TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 ???????????¨?÷ ?????¨
//  TIM_ICInit(TIM5, &TIM5_ICInitStructure);


TIM_PWMIConfig(TIM5, &TIM5_ICInitStructure);     //PWM????????           
  TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2);     //???????§??????        
  TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset);  //???????÷??????????
  TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable); 


TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC2,ENABLE);//???í?ü?????? ,???íCC1IE????????
TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //????????±ê????
  TIM_Cmd(TIM5,ENABLE );  //?????¨?±?÷5




}
修改成stm32f407的程序,不知哪里错了啊,串口没显示T^T
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-9-9
在线时间
2 小时
发表于 2015-9-20 21:05:29 | 显示全部楼层
楼主加独立看门狗是为了干什么?这个是不是可以去掉嗯
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2015-10-8
在线时间
1 小时
发表于 2015-10-8 13:38:08 | 显示全部楼层
很不错啊  值得参考
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-8-5
在线时间
1 小时
发表于 2015-10-15 16:07:41 | 显示全部楼层
楼主,看完你的帖子,受益匪浅。在这里有一事不明。
②TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);    
这个是选择有效的输入端 ,我这里TIM_TS_TI2FP2选择的PB7,注意:只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。
针对这句话,那么TIMX_CH3和CH4不能实现PWM的输入捕获吗?
假设我现在要实现4路PWM输入捕获,那么要用两个定时器?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-9-25
在线时间
5 小时
发表于 2015-10-27 13:27:05 | 显示全部楼层

楼主如何解决同时进入更新中断的问题?

回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-1
在线时间
6 小时
发表于 2015-11-1 19:10:09 | 显示全部楼层
怎么下载点击不了
回复 支持 反对

使用道具 举报

2

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2015-11-2
在线时间
58 小时
发表于 2015-11-2 11:35:08 | 显示全部楼层
大神之作啊,最近在为这个烦恼着
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2017-12-29
在线时间
0 小时
发表于 2015-11-21 17:25:34 | 显示全部楼层
下载看看   研究研究
回复 支持 反对

使用道具 举报

0

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2728
注册时间
2015-10-29
在线时间
428 小时
发表于 2015-11-22 21:45:47 | 显示全部楼层
刚好手上买了块mini板,谢谢楼主分享
回复 支持 反对

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-11-22 22:08:10 | 显示全部楼层
也是有关PWM的,放这可以一起学习
http://www.openedv.com/posts/list/62861.htm
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2014-12-2
在线时间
21 小时
发表于 2015-12-9 10:01:58 | 显示全部楼层
好像是不能下载啊
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-12-10
在线时间
0 小时
发表于 2015-12-10 15:14:08 | 显示全部楼层
谢谢分享,定当好好学习
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
29
金钱
29
注册时间
2015-5-25
在线时间
1 小时
发表于 2015-12-10 16:01:52 | 显示全部楼层
赞一个,楼主真棒
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-12-10
在线时间
4 小时
发表于 2015-12-10 16:22:28 | 显示全部楼层
楼主,你好,我看你这个是通过定时器产生一个PWM波,然后测出对应的占空比,我现在只想用一路,并且测外界波形的频率,应该怎样改???
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-12-14
在线时间
0 小时
发表于 2015-12-14 17:19:00 | 显示全部楼层
感谢分享!!!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-12-10
在线时间
4 小时
发表于 2015-12-14 20:02:08 | 显示全部楼层
回复【106楼】xiaoma1122:
---------------------------------
你好,我也想找这个例程,我的定时器的周期想采用100000us,超过了65536,现在不知道怎么办了!!!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-12-10
在线时间
4 小时
发表于 2015-12-14 20:04:43 | 显示全部楼层
回复【6楼】lifan_cn:
---------------------------------
楼主,你好,我现在想采用的周期是100000us,相当于频率是10hz,可是这个最大只能达到65536!!!
回复 支持 反对

使用道具 举报

6

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-4-20
在线时间
4 小时
发表于 2016-1-15 10:10:10 | 显示全部楼层
绝对支持了!
回复 支持 反对

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
272
金钱
272
注册时间
2014-6-25
在线时间
71 小时
发表于 2016-1-19 14:23:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2154
金钱
2154
注册时间
2013-1-11
在线时间
509 小时
发表于 2016-1-22 09:09:38 | 显示全部楼层
要回复才能下了吗
知识是你最好的财富
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-1-21
在线时间
4 小时
发表于 2016-1-22 11:17:50 | 显示全部楼层
帮顶。。。。。。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
29
金钱
29
注册时间
2015-12-10
在线时间
4 小时
发表于 2016-2-19 10:17:45 | 显示全部楼层
NICE,多谢!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-2-22
在线时间
1 小时
发表于 2016-2-22 09:22:11 | 显示全部楼层
来看看正好需要
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-2-25
在线时间
9 小时
发表于 2016-2-25 21:20:48 | 显示全部楼层
官方固件库PWM_Input示例代码中是有错误的,在示例代码的中断响应函数TIM3_IRQHandler(void)中,计算占空比和PWM周期时都计算错了, TIM3_CCR1寄存器的值加1才是高电平所占时间,TIM3_CCR2寄存器的值加1才是PWM波一个周期所占时间。可参见数据手册中图80-PWM输入模式时序。这也是很多人用STM32测得的PWM周期和频率与实际信号不一致的原因。

官方固件库PWM_Input示例错误之处

官方固件库PWM_Input示例错误之处
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-2-25
在线时间
9 小时
发表于 2016-2-25 23:38:16 | 显示全部楼层
rubbie 发表于 2015-5-6 12:19
想请教一下大家,这个小的误差是如何产生,我用STC8位机,用类似的捕获方法实现测试周期,就不会是999us, ...

我猜测,这些计算占空比和周期的代码基本来自官方固件库PWM_Input示例代码,在示例代码的中断响应函数TIM3_IRQHandler(void)中,计算占空比和PWM周期时都计算错了, TIM3_CCR1寄存器的值加1才是高电平所占时间,TIM3_CCR2寄存器的值加1才是PWM波一个周期所占时间。可参见图80-PWM输入模式时序。
回复 支持 反对

使用道具 举报

10

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-7-10
在线时间
51 小时
发表于 2016-2-27 15:22:37 | 显示全部楼层
谢楼主分享
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-11-28
在线时间
4 小时
发表于 2016-3-7 15:02:18 | 显示全部楼层
感谢楼主的分享,写的很不错,很想知道楼主怎么解决的数据溢出的情况,当计数超过65535之后是什么情况,不知道是不是按原子哥所做的标志位的做法?希望楼主分享一下。谢谢!
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
20
金钱
20
注册时间
2014-7-4
在线时间
0 小时
发表于 2016-3-15 09:14:35 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-6-21
在线时间
14 小时
发表于 2016-3-15 15:58:01 | 显示全部楼层
mark 学习了,O(∩_∩)O谢谢
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-3-17
在线时间
0 小时
发表于 2016-3-17 11:06:57 | 显示全部楼层
为什么无法点击下载,连收藏和支持的按钮都点不了。。。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2016-3-17
在线时间
0 小时
发表于 2016-3-17 11:11:35 | 显示全部楼层
谢谢楼主有上传了一个附件,已经下载了,回去研究一下,谢谢。
回复 支持 反对

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2016-1-17
在线时间
9 小时
发表于 2016-3-17 12:36:16 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-3-22
在线时间
5 小时
发表于 2016-3-22 16:48:10 | 显示全部楼层
好东西,学习了
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-1-27
在线时间
5 小时
发表于 2016-3-31 15:34:21 | 显示全部楼层
不错,非常感谢
回复 支持 反对

使用道具 举报

7

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-8-24
在线时间
16 小时
发表于 2016-3-31 21:44:07 | 显示全部楼层
这个做红外学习不错,谢谢楼主
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2016-3-27
在线时间
26 小时
发表于 2016-4-1 09:50:18 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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