OpenEdv-开源电子网

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

使用定时器发出两路极性相反的PWM波,采用门控信号控制其发出脉冲的个数,但是在示波器上显示有点问题,请教一下,第一次发帖,谢谢

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-10-22
在线时间
0 小时
发表于 2015-10-28 10:21:19 | 显示全部楼层 |阅读模式
5金钱

有几个问题请教一下原子哥和大家,谢谢!

1,下面的TIM_Pulse不是CCR的预装载值吗,来控制占空比的?为什么我只有设置等于1的时候才能出现这样信号,请帮忙解释一下,顺便具体讲解一下TIM_Pulse更好了 

2,仿真的时候效果还挺好,见下图。而在示波器上的时候,其中一路PWM的起始部分多了一个下降沿脉冲,并且PWM上也有好多尖刺


[mw_shl_code=c,true]TIM_OCInitStructure.TIM_Pulse =1 ;//CCR1的预装载值 TIM_OC1Init(TIM2, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM2 OC1 void SomePWM_Init(u16 TIM2per, u16 TIM3per) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 |RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIO外设和AFIO复用功能模块时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6|GPIO_Pin_7;//PA6->TIM3 PA7->TIM3 CH1 PA0->TIM2 CH1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA //TIM2工作在单脉冲 TIM_TimeBaseStructure.TIM_Period = TIM2per; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//设置TIM2在单脉冲模式,下一更新时间停止 TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR1上的预装载寄存器 TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref); //TM2的OC1作为触发输出 //初始化TIM2 Channel1 PWM模式 单脉冲 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OCInitStructure.TIM_Pulse =1 ;//CCR1的预装载值 TIM_OC1Init(TIM2, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM2 OC1 TIM_Cmd(TIM2,DISABLE); //初始化TIM3 TIM_TimeBaseStructure.TIM_Period = TIM3per; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =71; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);//TIM3为门控模式 TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);//使能TIM3为主从模式 TIM_SelectInputTrigger(TIM3,TIM_TS_ITR1);//内部触发,从TIM2触发 //初始化TIM3 Channel2 PWM模式 单脉冲 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 // TIM_OCInitStructure.TIM_Pulse = TIM3Compare1; TIM_OC1Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC1 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1,极性相反 TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2 TIM_Cmd(TIM3,ENABLE); //TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器 } //设置PWM输出 //Cycle:为周期,单位(us) //PlusNum:为脉冲个数 void TIM2_TIM3_PWM(u16 Cycle, u16 PulseNum) { u16 TIM3per = 0; u32 TIM2MK = 0; //改变TIM3的重装值改变脉冲频率这里设置脉冲占空比为50% //改变TIM2的预分频器和重装值改变脉冲个数 TIM2MK = Cycle * PulseNum; //预分频72,设置TIM2输出一定脉宽 TIM3per = Cycle; //预分频72,0.5us计数一次 TIM_SetAutoreload(TIM2, TIM2MK);//设置TIM2重装值 TIM_SetAutoreload(TIM3, TIM3per-1);//设置TIM3的重装值,1M/TIM3per TIM_SetCompare1(TIM3,TIM3per/2);//设置占空比50% TIM_SetCompare2(TIM3,TIM3per/2);//设置占空比50% TIM_Cmd(TIM2,ENABLE); } void NPlus_PMW(){ SomePWM_Init(200,25); TIM2_TIM3_PWM(25,8); delay_ms(20); } [/mw_shl_code]

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

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11577
金钱
11577
注册时间
2014-4-1
在线时间
1321 小时
发表于 2015-10-28 15:05:56 | 显示全部楼层
所谓的下降沿脉冲、毛刺,其实是电平传输过程中的过冲、振铃现象,查下这两个词。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-10-22
在线时间
0 小时
 楼主| 发表于 2015-10-28 21:39:29 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
你好    你看一下我示波器的图片,其中一路的起始部分多了一个下降沿脉冲(黄色信号),并且这个信号一直存在,而另一路没有诶,不知道什么原因
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11577
金钱
11577
注册时间
2014-4-1
在线时间
1321 小时
发表于 2015-10-28 21:56:52 | 显示全部楼层
需要仔细研究,恕我这会儿没有这个心思。

如果你注明一下,黄色是TIM2产生、蓝色是TIM3产生(或者相反),别人看起来会更方便。

不妨仔细对比一下两个TIMER的设置,找出区别;或者干脆把二者代码对调一下。

会不会是 CNT 没有清零?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 16:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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