OpenEdv-开源电子网

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

输入捕获、PWM能否用同一个定时器

[复制链接]

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2020-8-10 19:59:52 | 显示全部楼层 |阅读模式
1金钱
     由于引脚紧张,我们希望用一个定时器PWM输出的形式驱动电机,失败了。目前猜测是两者共用了同一个TIMX_CNT,希望能有大佬解答一下

最佳答案

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

可以,但是你的输入捕获,别清CNT,否则就有问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2020-8-10 19:59:53 | 显示全部楼层
可以,但是你的输入捕获,别清CNT,否则就有问题。
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2020-8-10 23:23:08 | 显示全部楼层
捕获和PWM通道分开,这个应该没什么问题的。但是它们共用一个时基单元,一个定时器只有一个 TIMx_CNT。
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2020-8-11 10:45:02 | 显示全部楼层
正点原子 发表于 2020-8-10 19:59
可以,但是你的输入捕获,别清CNT,否则就有问题。

谢谢原子哥,确实是输入捕获的问题。我将输入捕获中断函数注释掉不能输出PWM,初始化注释掉后PWM就能正常输出了!但问题是不清CNT虽然保证了PWM 输出不会有问题。由于CNT的值会被存放到CCRx。不清CNT会不会影响输入捕获功能?我们是想用一个定时器输出两个PWM波,然后通过输入捕获判断电机转速调整车速。网上查阅的资料里有的人说可以用一个定时器有的说不行,就想实际验证一下。也可能是我们没有理解“不清CNT”的具体含义。希望原子哥有空能进一步解释一下。以下是输入捕获初始化部分代码,和案例基本一致,只是去掉了重映射
  1. void TIM3_Capture_Init(u16 arr, u16 psc)       //输入捕获用TIM3CH1
  2. {
  3.         GPIO_InitTypeDef        GPIO_InitStruct;
  4.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  5.         TIM_ICInitTypeDef       TIM_ICInitStruct;
  6.         NVIC_InitTypeDef NVIC_InitStruct;
  7.        
  8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  10.        
  11.         GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IPU;
  12.         GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6;
  13.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  14.        
  15.         GPIO_Init(GPIOA, &GPIO_InitStruct);
  16.        
  17.         TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  18.         TIM_TimeBaseInitStruct.TIM_CounterMode   = TIM_CounterMode_Up;
  19.         TIM_TimeBaseInitStruct.TIM_Period        = arr;
  20.         TIM_TimeBaseInitStruct.TIM_Prescaler     = psc;
  21.        
  22.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
  23.        
  24.         TIM_ICInitStruct.TIM_Channel     = TIM_Channel_1;
  25.         TIM_ICInitStruct.TIM_ICPolarity  = TIM_ICPolarity_Rising;
  26.         TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  27.         TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
  28.         TIM_ICInit(TIM3, &TIM_ICInitStruct);
  29.        
  30.         TIM_ITConfig(TIM3, TIM_IT_Update | TIM_IT_CC1, ENABLE);
  31.        
  32.   NVIC_InitStruct.NVIC_IRQChannel                   = TIM3_IRQn;
  33.         NVIC_InitStruct.NVIC_IRQChannelCmd                = ENABLE;
  34.         NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
  35.         NVIC_InitStruct.NVIC_IRQChannelSubPriority        = 2;
  36.         NVIC_Init(&NVIC_InitStruct);
  37.        
  38.         TIM_Cmd(TIM3, ENABLE);
  39. }
复制代码

回复

使用道具 举报

17

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2014-4-7
在线时间
99 小时
发表于 2020-8-11 15:23:39 | 显示全部楼层
本帖最后由 亲亻尔嘴 于 2020-8-11 15:25 编辑

输入捕获不清除CNT,在计算速度时,处理好CNT重新装载的情况就好

输入捕获中断函数注释掉不能输出PWM: 是不是中断函数里暂停了定时器的计数,或者清除了CNT的值

在你没有做出成绩之前,这个世界不会在乎你的自尊。
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2020-8-11 17:49:03 来自手机 | 显示全部楼层
亲亻尔嘴 发表于 2020-8-11 15:23
输入捕获不清除CNT,在计算速度时,处理好CNT重新装载的情况就好

输入捕获中断函数注释掉不能输出PWM:  ...

您说的对,中断函数确实有。受教了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 13:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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