OpenEdv-开源电子网

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

Timer2产生PWM,变频一会后CNT值不重载

[复制链接]

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2015-3-21
在线时间
20 小时
发表于 2017-5-27 10:49:33 | 显示全部楼层 |阅读模式
1金钱
今遇到一个问题,希望用Timer产生PWM波,驱动步进电机加减速,用到了Timer1/2/3/4/8。但是Timer2加减速一会后CNT一直累加不清零。其他定时器均正常;
Timer2定时器配置如下:
void Timer2_CH2_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
  GPIO_Init(GPIOA,&GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM2);
}

void Timer2_CH2_Config(u32 Prescaler,u32 Period,u32 duty_cycle)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure1;

  /* TIM2 Periph clock enable */  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟 84MHZ

  /* 分频和周期计算公式:Prescaler = (TIMxCLK/TIMx counter clock)-1eriod=(TIMx counter clock/
  TIMx output clock)-1 TIMx counter clock为你所需要的TIMx的定时器时钟*/
  TIM_TimeBaseStructure.TIM_Prescaler = Prescaler-1;       // 设置预分频:84,即为 1MHz
  TIM_TimeBaseStructure.TIM_Period = Period-1;        
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //TIM_CKD_DIV1=0x0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM_OCInitStructure1.TIM_OCMode = TIM_OCMode_PWM1;//PWM1为正常占空比模式,PWM2为反极性模式
  TIM_OCInitStructure1.TIM_OutputState = TIM_OutputState_Enable;//使能输出状态
  TIM_OCInitStructure1.TIM_Pulse = duty_cycle;//占空比
  TIM_OCInitStructure1.TIM_OCPolarity = TIM_OCPolarity_High;//High为占空比高极性,此时占空比为20%;Low则为反极性,占空比为80%

  TIM_OC2Init(TIM2, &TIM_OCInitStructure1);//OC1初始化
}


步进电机驱动芯片为DRV8825根据PWM频率不同,速度不同;
程序中采用TIM_SetAutoreload(TIM2,***)来改变PWM频率。
微信图片_20170527104637.png
我的TIM_SetAutoreload(TIM2,***)中,***最大也就是400。也就是说CNT不清零。
其他几个定时器均未出现该问题

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-5-27 19:02:04 | 显示全部楼层
回复

使用道具 举报

10

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2018-1-12
在线时间
47 小时
发表于 2018-4-20 16:30:11 | 显示全部楼层
哥们,我这两天也遇到一样的问题呀,我的是PA3这个引脚,用定时器5来产生PWM控制电机加减速;后来我看PA3还可以复用定时器2,改成定时2后还是这种现象;定时器2和定时器5都是32位的通用定时器。到现在我也不知道咋回事,也不知道咋去解决?请问你解决了嘛?
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2015-3-21
在线时间
20 小时
 楼主| 发表于 2018-9-13 10:29:41 | 显示全部楼层
祥清 发表于 2018-4-20 16:30
哥们,我这两天也遇到一样的问题呀,我的是PA3这个引脚,用定时器5来产生PWM控制电机加减速;后来我看PA3还 ...

没有
回复

使用道具 举报

34

主题

331

帖子

0

精华

高级会员

Rank: 4

积分
857
金钱
857
注册时间
2018-9-16
在线时间
240 小时
发表于 2018-9-16 18:28:50 | 显示全部楼层
首先,用通用定时器输出一个PWM波,是通过输入比较来实现的,是自己定义这个比较值CCR和自动重装值ARR来控制的 ,至于CNT的话一般在定时器初始化里面会先请零,至于定时器的的问题我们一般用的多的是9,10,12,14这几个,其他的没怎么用过,可能有BUG
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-16 18:59:52 | 显示全部楼层
Timer2加减速一会后是啥意思? 在此一会的过程中改了ARR没有?
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-16 19:39:17 | 显示全部楼层
edmund1234 发表于 2018-9-16 18:59
Timer2加减速一会后是啥意思? 在此一会的过程中改了ARR没有?

如果说你在这过程中更改过ARR的值, 而你又是必须要这样改的话, 就需要把CR1的ARPE设为1, 否则很有可能出现这现象
回复

使用道具 举报

10

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2018-1-12
在线时间
47 小时
发表于 2018-10-13 23:24:49 | 显示全部楼层
edmund1234 发表于 2018-9-16 18:59
Timer2加减速一会后是啥意思? 在此一会的过程中改了ARR没有?

加减速是改变ARR的值来改变发脉冲的频率,也就改变相应的速度
回复

使用道具 举报

10

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2018-1-12
在线时间
47 小时
发表于 2018-10-13 23:26:38 | 显示全部楼层
plue 发表于 2018-9-16 18:28
首先,用通用定时器输出一个PWM波,是通过输入比较来实现的,是自己定义这个比较值CCR和自动重装值ARR来控 ...

嗯嗯,我把定时器都试了一遍,就是定时器2和定时器5会出现这种情况,其他均没有问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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