OpenEdv-开源电子网

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

STM32使用TIM1进行互补PWM输出时,示波器观察出两个波形

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-10-29
在线时间
4 小时
发表于 2018-1-10 21:24:50 | 显示全部楼层 |阅读模式
1金钱
如题我使用的STM32F103RCT6,使用高级定时器TIM1进行PWM输出,PWM输出设置为周期设置100um,脉宽为50%。用示波器观察到两个波形,波形照片如下:
P80110-172203.jpg
上面这个波形的周期、脉宽和我设置的周期脉宽是一致的,但我将示波器时间调为1s,就出现如下的波形,这不是我想要的不知道为什么?

P80110-172151.jpg
示波器时间为1S,就出现这样一个波形,这是为什么?这个波形周期为3S,脉宽也是50%。

如果我调整上面波形的占空比,下面的波形也会随着变化。可是我程序中就没有配置第二个这个波形,不知道从哪里来的。另外我将IO口上接上一个LED灯,灯也是一闪一闪的,并不是变暗。

各位大神,请问我这是什么情况???下面代码是我的配置代码。

void TIM1_Configuration(void)
        {
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

        /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = 7200-1; //         10K
        TIM_TimeBaseStructure.TIM_Prescaler =0;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
        
        /* Output Compare Active Mode configuration: Chan.ynel1 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable ;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 0;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState =TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState =TIM_OCNIdleState_Reset;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);
        TIM_OC3Init(TIM1, &TIM_OCInitStructure);

  TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;           
  TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;        
  TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;              
  TIM_BDTRInitStructure.TIM_DeadTime=0Xab;                                             
  TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;                          
  TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_Low;   
  TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Disable;
  TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
  TIM_CtrlPWMOutputs(TIM1,ENABLE);        
        TIM_ARRPreloadConfig(TIM1, ENABLE);
        
        /* TIM1 enable counter */
        TIM_Cmd(TIM1, ENABLE);  
        }

//PWM输出使用的是如下代码:
                TIM_SetCompare1(TIM1,3600);
                TIM_SetCompare2(TIM1,3600);        
                TIM_SetCompare3(TIM1,3600);

最佳答案

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

我的问题找到了,这个是示波器显示的问题。目前程序实现电机驱动没有问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-10-29
在线时间
4 小时
 楼主| 发表于 2018-1-10 21:24:51 | 显示全部楼层
我的问题找到了,这个是示波器显示的问题。目前程序实现电机驱动没有问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-11 00:48:32 | 显示全部楼层
你自己初始化了3个通道啊?
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-10-29
在线时间
4 小时
 楼主| 发表于 2018-1-11 09:15:03 | 显示全部楼层
正点原子 发表于 2018-1-11 00:48
你自己初始化了3个通道啊?

是的,我要做三相逆变,控制磁阻电机。所以三个通道都会用到
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-12 00:35:54 | 显示全部楼层
june0929520 发表于 2018-1-11 09:15
是的,我要做三相逆变,控制磁阻电机。所以三个通道都会用到

先搞一个通道,看波形是否和你写的一致。
一个个通道搞。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-1-11
在线时间
0 小时
发表于 2019-1-11 18:38:00 | 显示全部楼层
楼主,你好。我也遇到类似的现象.
但我只使用了, TIM1的CH2. 输出互补带死区的PWM.
使用示波器测量到的现象是:
1. 当把示波器的时基为5us时,示波器测量结果与程序配置吻合,输出75KHz互补PWM。如下图
1.jpg

2. 当把示波器的时基调为1s或更长时,显示出在更长的时间尺度上是一个周期2.52s的PWM输出,相当于输出的是周期性的脉冲群。
这让我也很疑惑,程序中只是简单的配置了一下TIM1 CH2.

还有一点跟你说的情况类似,更改程序中PWM的占空比和输出频率,对应的这个“异常”的波形占空比与程序中的配置相符,但在更长的时基上还是出现了这种周期输出的波形。有点费解。
2.jpg

目前手上只有一台示波器,后面用别的示波器测量看看,是不是示波器的问题。
也希望遇到类似问题的小伙伴分享经验.
先行谢过.
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2018-8-16
在线时间
327 小时
发表于 2019-1-11 19:09:41 | 显示全部楼层
HOHOHOH 发表于 2019-1-11 18:38
楼主,你好。我也遇到类似的现象.
但我只使用了, TIM1的CH2. 输出互补带死区的PWM.
使用示波器测量到的现 ...

会不会是死区?试试更改死区设置看看有没有变化?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-1-11
在线时间
0 小时
发表于 2019-1-11 20:00:07 | 显示全部楼层
brucewoo 发表于 2019-1-11 19:09
会不会是死区?试试更改死区设置看看有没有变化?

Hi, Bruce,  谢谢你的回复。

  我觉得应该不是死区配置的问题。下图是截取的输出波形。
  

PWM死区

PWM死区

  把死区的配置屏蔽掉,还是一样的现象。
  贴出我的配置代码,希望大家有空能帮忙看一下。我用的是STM32F030单片机,时钟频率48MHz.

  [mw_shl_code=applescript,true]
void TIM1_CH2_Config(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  TIM_BDTRInitTypeDef  TIM_BDTRInitStructure;

  
  /* TIM1 Time base configuration */
  TIM_TimeBaseStructure.TIM_Prescaler = 8 - 1;
  TIM_TimeBaseStructure.TIM_Period = 80 - 1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  /* Channel 2 in PWM Mode */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 40 - 1;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
  TIM_OC2Init(TIM1, &TIM_OCInitStructure);

  TIM_BDTRStructInit(&TIM_BDTRInitStructure);
  TIM_BDTRInitStructure.TIM_DeadTime = 10;
  TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

  /* TIM1 counter enable */
  TIM_Cmd(TIM1, ENABLE);

  /* TIM1 Main Output Enable */
  TIM_CtrlPWMOutputs(TIM1, ENABLE);
}[/mw_shl_code]



回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 01:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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