OpenEdv-开源电子网

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

STM32F1 定时器1通道1,2互补PWM软件仿真波形存在问题

[复制链接]

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
发表于 2017-11-21 15:18:16 | 显示全部楼层 |阅读模式
1金钱
论坛里的大大们,请教个关于PWM的问题。
小弟使用STM32F103CBT6自己制作的板子,使用定时器1的通道1,2输出pwm波形,这两个通道的互补波形软件仿真为什么都存在如上图的怪异现象呢?代码如下所示:
void Timer1_ch1_ch2_PWM_Init(void)  
{  
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;  
    TIM_OCInitTypeDef       TIM_OCInitStruct;  
    GPIO_InitTypeDef GPIO_InitStruct;  
        TIM_BDTRInitTypeDef      TIM_BDTRInitStructure;
       
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);  
       
        //2¿·ÖÖØó3éä
        GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);
       
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_7 | GPIO_Pin_8;  
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;  
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;  
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOB, &GPIO_InitStruct);        

    TIM_TimeBaseInitStruct.TIM_Period = 288 - 1; /*125KHz */  
    TIM_TimeBaseInitStruct.TIM_Prescaler = 1;  
    TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;  
    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;  
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);  

       
       
    TIM_OCStructInit(&TIM_OCInitStruct);/*Õaò»2½×îoüóéÏ*/  

    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;  
    TIM_OCInitStruct.TIM_Pulse = 100;  
    TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCPolarity_High;
        TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;
        TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Set; //êä3ö¿ÕÏD×′ì¬Îa1
        TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCIdleState_Reset;//Ñ¡Ôñ¿ÕÏD×′ì¬ÏÂμÄ·Ç1¤×÷×′ì¬
    TIM_OC1Init(TIM1, &TIM_OCInitStruct);  
       
        TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;
        TIM_OCInitStruct.TIM_Pulse = 50;
        TIM_OC2Init(TIM1, &TIM_OCInitStruct);
       
        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);        

        #if 0
        TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
        TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
        TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
        TIM_BDTRInitStructure.TIM_DeadTime = 0x10;
        TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;               
        TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
        TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
        #endif
    TIM_ARRPreloadConfig(TIM1, ENABLE);  
    TIM_CtrlPWMOutputs(TIM1, ENABLE);/*¸ÃoˉêyÖ»Õë¶Ôtimer1oítimer8*/  
    TIM_Cmd(TIM1, ENABLE);        




定时器1通道2 pwm互补输出存在问题

定时器1通道2 pwm互补输出存在问题

定时器1的通道1pwm互补输出为什么会存在尖刺

定时器1的通道1pwm互补输出为什么会存在尖刺

最佳答案

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

不能同时导通那两个就是互补的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-11-21 15:18:17 | 显示全部楼层
不能同时导通那两个就是互补的
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-21 15:19:06 | 显示全部楼层
请论坛的大大们,帮忙看看!!!小弟先谢谢各位了。
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-21 18:36:28 | 显示全部楼层
就这么沉了么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-11-22 00:48:46 | 显示全部楼层
帮顶
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 09:03:27 | 显示全部楼层

原子哥,帮忙看下是什么原因a
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-11-22 09:50:57 | 显示全部楼层
h101611123 发表于 2017-11-22 09:03
原子哥,帮忙看下是什么原因a

软件仿真有问题,但是实际用硬件测试用示波器看效果可能不一样,你看看硬件测试示波器是不是也是这样的波形,你这个尖峰的宽度应该就是死区时间的宽度,黑色和蓝色的是互补输出么,看起来电平不太对
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 10:09:44 | 显示全部楼层
wxjhby 发表于 2017-11-22 09:50
软件仿真有问题,但是实际用硬件测试用示波器看效果可能不一样,你看看硬件测试示波器是不是也是这样的波 ...

如图1所示,四组波形,软件仿真。下面两组是占空比50%的互补pwm输出。上面两组也是占空比50%的互补pwm输出。只是互补的波形软件仿真没显示出来。硬件示波器测量是有输出的。
如图2所示。加上死区这部分代码:
        TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
        TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
        TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
        TIM_BDTRInitStructure.TIM_DeadTime = 0x7F;
        TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;               
        TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
        TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);


我就是不明白这个死区时间是怎么确定的?还有加上死区时间后,这个pwm波形的变化是正确的么?我的目标是用两路互补的四路pwm波形控制H桥驱动一个低频的天线,但是目标的pwm波形不知道是啥样子,这个该怎么调?


1.png
2.png
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 10:12:12 | 显示全部楼层
wxjhby 发表于 2017-11-22 09:50
软件仿真有问题,但是实际用硬件测试用示波器看效果可能不一样,你看看硬件测试示波器是不是也是这样的波 ...

还有H桥这个东西pmos和nmos很容易因为pwm波形而导致上下接通会烧掉,都不好在硬件上进行调试,怕烧坏mos管,
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-11-22 11:01:46 | 显示全部楼层
先不接MOS管 看单片机输出的波形是否正常,死区时间与mos管有关 一般 像驱动步进电机 1~4us
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 15:54:49 | 显示全部楼层
wxjhby 发表于 2017-11-22 11:01
先不接MOS管 看单片机输出的波形是否正常,死区时间与mos管有关 一般 像驱动步进电机 1~4us

请问下:如图中的H桥,是Q1和Q2是一对通道互补PWM还是说是Q1和Q3是一对通道互补pwm。。。。。被搞蒙了

H桥

H桥
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 15:58:41 | 显示全部楼层
wxjhby 发表于 2017-11-22 11:01
先不接MOS管 看单片机输出的波形是否正常,死区时间与mos管有关 一般 像驱动步进电机 1~4us

说错了1和Q2互补输出PWM还是Q1和Q4互补输出PWM。
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 16:09:27 | 显示全部楼层
wxjhby 发表于 2017-11-22 16:02
不能同时导通那两个就是互补的

那就是Q1和Q2是互补通道的咯,在群里有人说是Q1和Q4是互补的....
大神你确定是不能导通的Q1和Q2是互补的是吗?
9.png
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-11-21
在线时间
17 小时
 楼主| 发表于 2017-11-22 17:00:56 | 显示全部楼层
wxjhby 发表于 2017-11-22 16:02
不能同时导通那两个就是互补的

谢谢!!!解决了,H桥驱动低频天线现在调试好了,感谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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