OpenEdv-开源电子网

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

高级定时器1的通道1产生互补的PWM的问题

[复制链接]

7

主题

13

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-3-7
在线时间
13 小时
发表于 2016-6-12 11:52:01 | 显示全部楼层 |阅读模式
5金钱
大家好,我最近用高级定时器1的通道1产生互补的PWM,软件仿真没有问题,但是下载到战舰STM32后用示波器看不到死区时间?请帮忙解决下,谢谢。

下面是我的高级定时器1配置代码main函数和TIME1_Init(u16 pre,u16 arr):
main函数如下:
int main(void)
{
u16 key;
delay_init();

最佳答案

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

参考别人:http://www.openedv.com/forum.php?mod=viewthread&tid=76596&highlight=%CB%C0%C7%F8
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-12 11:52:02 | 显示全部楼层
回复

使用道具 举报

7

主题

13

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-3-7
在线时间
13 小时
 楼主| 发表于 2016-6-12 11:55:14 | 显示全部楼层
问题没发全,重发一下:
大家好,我最近用高级定时器1的通道1产生互补的PWM,软件仿真没有问题,但是下载到战舰STM32后用示波器看不到死区时间?请帮忙解决下,谢谢。

下面是我的高级定时器1配置代码main函数和TIME1_Init(u16 pre,u16 arr):
main函数如下:
int main(void)
{
u16 key;
delay_init();        
LED_Init();

TIME1_Init(7199,4499);
TIM_SetCompare1(TIM1,2999);        
while(1)
        {
         LED1=!LED1;
        delay_ms(100);
        }
}
TIM1配置函数如下:
#include "time1.h"
//TIM1通道1产生互补PWM(带死区)
//CH1--PA8 CH2--PB13
void TIME1_Init(u16 pre,u16 arr)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_BDTRInitTypeDef TIM_BDTRInitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_TIM1|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);        

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;   //PA8
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;   
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStruct);        
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;   //PB13
GPIO_Init(GPIOB,&GPIO_InitStruct);
        
TIM_TimeBaseInitStruct.TIM_Prescaler=pre;//分频
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInitStruct.TIM_Period=arr;//重装载值
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);

TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//PWM1模式
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCNPolarity_High;
TIM_OC1Init(TIM1,&TIM_OCInitStruct);

TIM_BDTRInitStruct.TIM_OSSRState=TIM_OSSRState_Disable;
TIM_BDTRInitStruct.TIM_OSSIState=TIM_OSSIState_Disable;
TIM_BDTRInitStruct.TIM_LOCKLevel=TIM_LOCKLevel_OFF;
TIM_BDTRInitStruct.TIM_DeadTime=0x02;//配置死去时间
TIM_BDTRInitStruct.TIM_Break=TIM_Break_Disable;
TIM_BDTRInitStruct.TIM_BreakPolarity=TIM_BreakPolarity_Low;
TIM_BDTRInitStruct.TIM_AutomaticOutput=TIM_AutomaticOutput_Disable;
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStruct);
TIM_CtrlPWMOutputs(TIM1,ENABLE);

TIM_Cmd(TIM1,ENABLE);
}
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-6-12 19:46:27 | 显示全部楼层
你周期4.5秒,死区是2ms,想看到的确困难,

把周期设置到10ms尝试一下
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

7

主题

13

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-3-7
在线时间
13 小时
 楼主| 发表于 2016-6-13 15:45:36 | 显示全部楼层
xkwy 发表于 2016-6-12 19:46
你周期4.5秒,死区是2ms,想看到的确困难,

把周期设置到10ms尝试一下

你是怎么算的啊?不是想我这样算出来的吗?
我的计算:
72Mhz经过(7199+1)分频得到定时器时钟频率是10khz,对应周期100us
我设置重装载值为4499,可得周期是(4499+1)*100us=550ms;
我设置死区为0x02 由手册上的公式得到死区时间为2*100us=200us;
回复

使用道具 举报

7

主题

13

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-3-7
在线时间
13 小时
 楼主| 发表于 2016-6-15 19:00:31 | 显示全部楼层
原子哥  帮我看下怎么回事?发帖都已经好几天了
大家用高级定时器,没有遇到过这样的问题吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 13:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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