10177|15

182

帖子

7

TA的资源

一粒金砂(中级)

楼主
 

关于STM32的TIM1产生两对带死区互补堆成的PWM波 [复制链接]

想产生两对带死区互补对称的PWM控制逆变全桥的四个管子,TIM1_CH1(PA8)和TIM1_CH1N(PB13),TIM1_CH2(PA9)和TIM1_CH2N(PB14),请问初始化设置用库的结构体定义一个变量还是两个变量呢?
例如:
1、        GPIO_InitTypeDef GPIO_InitStructure,GPIO_InitStructure1;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure,TIM_TimeBaseStructure1;
        TIM_OCInitTypeDef TIM_OCInitStructure,TIM_OCInitStructure1;
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure,TIM_BDTRInitStructure1;其中 GPIO_InitStructure、 TIM_TimeBaseStructure、TIM_OCInitStructure、TIM_BDTRInitStructure用于设置第一对PWM(TIM1_CH1(PA8)和TIM1_CH1N(PB13),)
GPIO_InitStructure1、 TIM_TimeBaseStructure1、TIM_OCInitStructure1、TIM_BDTRInitStructure1用于设置第二对PWM(TIM1_CH2(PA9)和TIM1_CH2N(PB14),)
2、       GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
其中GPIO_InitStructure、 TIM_TimeBaseStructure、TIM_OCInitStructure、TIM_BDTRInitStructure用于设置两对PWM;如果这样那就不能各自设置其占空比了?
请高手帮忙解答,是按那种方式进行定义设置呢?谢谢!
此帖出自stm32/stm8论坛

最新回复

楼主可否将程序贴出以供参考,多谢!  详情 回复 发表于 2016-1-19 15:04
点赞 关注
 

回复
举报

4005

帖子

0

TA的资源

版主

沙发
 
这些结构体只是在初始化时传一下参数,然后就没用了,gpio如果一样的设置参数可以直接用"或"在一起,一次完成,timebase是对定时器时钟部分的设置只有一个,OC和BTR的设置是对通道的,两个通道一定要两次.
此帖出自stm32/stm8论坛

点评

有点乱,重新发一下,请帮我看看这样是否正确呢?谢谢 //PWM1 for inverter (PA8---TIM1_CH1(pin29),PB13---TIM1_CH1N(pin26)) //PWM2 for inverter (PA9---TIM1_CH2(pin30),PB14---TIM1_CH2N(pin27)) GPIO_In  详情 回复 发表于 2015-4-14 09:27
//PWM1 for inverter (PA8---TIM1_CH1(pin29),PB13---TIM1_CH1N(pin26)) //PWM2 for inverter (PA9---TIM1_CH2(pin30),PB14---TIM1_CH2N(pin27)) GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitType  详情 回复 发表于 2015-4-14 09:22
谢谢你的回复,明白了一些,我修改下自己的设置程序,可否帮我看看是否正确?谢谢  详情 回复 发表于 2015-4-14 09:11
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

板凳
 
huo_hu 发表于 2015-4-10 22:11
这些结构体只是在初始化时传一下参数,然后就没用了,gpio如果一样的设置参数可以直接用"或"在一起,一次完成,timebase是对定时器时钟部分的设置只有一个,OC和BTR的设置是对通道的,两个通道一定要两次.

谢谢你的回复,明白了一些,我修改下自己的设置程序,可否帮我看看是否正确?谢谢
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

4
 
huo_hu 发表于 2015-4-10 22:11
这些结构体只是在初始化时传一下参数,然后就没用了,gpio如果一样的设置参数可以直接用"或"在一起,一次完成,timebase是对定时器时钟部分的设置只有一个,OC和BTR的设置是对通道的,两个通道一定要两次.

//PWM1 for inverter (PA8---TIM1_CH1(pin29),PB13---TIM1_CH1N(pin26))
//PWM2 for inverter (PA9---TIM1_CH2(pin30),PB14---TIM1_CH2N(pin27))
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure,TIM_OCInitStructure1;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure,TIM_BDTRInitStructure1;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;    //PA.8 and PA.9 for TM1_CH1 and TM1_CH2 pin config
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;  //PB.13 and PB.14 for TIM1_CH1N and TIM1_CH2N pin config
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_Init(GPIOB,&GPIO_InitStructure);

//TIM base config
TIM_DeInit(TIM1);                      //¸´Î»TIM1¶¨Ê±Æ÷
TIM_TimeBaseStructure.TIM_Period=1200-1;           //×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÄÖµ  72M/1200 = 60k(ƵÂÊ)
TIM_TimeBaseStructure.TIM_Prescaler = 0;           //ʱÖÓÔ¤·ÖƵÊý  72M/(0+1) = 72M
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;    //²ÉÑù·ÖƵ
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //ÏòÉϼÆÊý
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;       //Öظ´¼Ä´æÆ÷£¬ÓÃÓÚ×Ô¶¯¸üÐÂPWMÕ¼¿Õ±È
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

//PWM1输出配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      //ÉèÖÃΪpwm1Êä³öģʽ
// TIM_OCInitStructure.TIM_Pulse = 3000-1;          //ÉèÖÃÕ¼¿Õ±Èʱ¼ä (¸ù¾ÝµçÁ÷ÄÚ»·¼ÆËãµÄÕ¼¿Õ±È½øÐи³Öµ)
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;   //ÉèÖÃÊä³ö¼«ÐÔ
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //ʹÄܸÃͨµÀÊä³ö

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  //ÉèÖû¥²¹¶ËÊä³ö¼«ÐÔ
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//ʹÄÜ»¥²¹Êä³ö
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;   //ËÀÇøºóÊä³ö״̬
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //ËÀÇøºó»¥²¹¶ËÊä³ö״̬
TIM_OC1Init(TIM1,&TIM_OCInitStructure);              //°´ÕÕÖ¸¶¨²ÎÊý³õʼ»¯

TIM_BDTRInitStructure.TIM_DeadTime = 0x24;         //ÉèÖÃËÀÇøʱ¼ä1us
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
//PWM2输出配置
  TIM_OCInitStructure1.TIM_OCMode = TIM_OCMode_PWM1;      //ÉèÖÃΪpwm1Êä³öģʽ
// TIM_OCInitStructure1.TIM_Pulse = 3000-1;          //ÉèÖÃÕ¼¿Õ±Èʱ¼ä (¸ù¾ÝµçÁ÷ÄÚ»·¼ÆËãµÄÕ¼¿Õ±È½øÐи³Öµ)
TIM_OCInitStructure1.TIM_OCPolarity=TIM_OCPolarity_High;   //ÉèÖÃÊä³ö¼«ÐÔ
TIM_OCInitStructure1.TIM_OutputState=TIM_OutputState_Enable;  //ʹÄܸÃͨµÀÊä³ö

TIM_OCInitStructure1.TIM_OCNPolarity = TIM_OCNPolarity_High;  //ÉèÖû¥²¹¶ËÊä³ö¼«ÐÔ
TIM_OCInitStructure1.TIM_OutputNState=TIM_OutputNState_Enable;//ʹÄÜ»¥²¹Êä³ö
TIM_OCInitStructure1.TIM_OCIdleState=TIM_OCIdleState_Reset;   //ËÀÇøºóÊä³ö״̬
TIM_OCInitStructure1.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //ËÀÇøºó»¥²¹¶ËÊä³ö״̬
TIM_OC1Init(TIM1,&TIM_OCInitStructure1);             //°´ÕÕÖ¸¶¨²ÎÊý³õʼ»¯

TIM_BDTRInitStructure1.TIM_DeadTime = 0x24;          //ÉèÖÃËÀÇøʱ¼ä1us
TIM_BDTRInitStructure1.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure1);

TIM_Cmd(TIM1,ENABLE);                      //´ò¿ªTIM1
TIM_CtrlPWMOutputs(TIM1, ENABLE);                //PWMÊä³öʹÄÜ
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

5
 
huo_hu 发表于 2015-4-10 22:11
这些结构体只是在初始化时传一下参数,然后就没用了,gpio如果一样的设置参数可以直接用"或"在一起,一次完成,timebase是对定时器时钟部分的设置只有一个,OC和BTR的设置是对通道的,两个通道一定要两次.

有点乱,重新发一下,请帮我看看这样是否正确呢?谢谢
//PWM1 for inverter (PA8---TIM1_CH1(pin29),PB13---TIM1_CH1N(pin26))
//PWM2 for inverter (PA9---TIM1_CH2(pin30),PB14---TIM1_CH2N(pin27))
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure,TIM_OCInitStructure1;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure,TIM_BDTRInitStructure1;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;    //PA.8 and PA.9 for TM1_CH1 and TM1_CH2 pin config
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;  //PB.13 and PB.14 for TIM1_CH1N and TIM1_CH2N pin config
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_Init(GPIOB,&GPIO_InitStructure);

//TIM base config
TIM_DeInit(TIM1);                     
TIM_TimeBaseStructure.TIM_Period=1200-1;           //72M/1200 = 60k
TIM_TimeBaseStructure.TIM_Prescaler = 0;           //  72M/(0+1) = 72M
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;   
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;      
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

//PWM1输出配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      
// TIM_OCInitStructure.TIM_Pulse = 3000-1;         
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;   
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;  
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;   
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);               
TIM_BDTRInitStructure.TIM_DeadTime = 0x24;        
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
//PWM2输出配置
TIM_OCInitStructure1.TIM_OCMode = TIM_OCMode_PWM1;   
// TIM_OCInitStructure1.TIM_Pulse = 3000-1;         
TIM_OCInitStructure1.TIM_OCPolarity=TIM_OCPolarity_High;   
TIM_OCInitStructure1.TIM_OutputState=TIM_OutputState_Enable;   
TIM_OCInitStructure1.TIM_OCNPolarity = TIM_OCNPolarity_High;  
TIM_OCInitStructure1.TIM_OutputNState=TIM_OutputNState_Enable;
TIM_OCInitStructure1.TIM_OCIdleState=TIM_OCIdleState_Reset;   
TIM_OCInitStructure1.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure1);              
TIM_BDTRInitStructure1.TIM_DeadTime = 0x24;         
TIM_BDTRInitStructure1.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure1);

TIM_Cmd(TIM1,ENABLE);                     
TIM_CtrlPWMOutputs(TIM1, ENABLE);               
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

4005

帖子

0

TA的资源

版主

6
 
是这个意思,具体能不能行你的做下实验
此帖出自stm32/stm8论坛

点评

你好,再问一个问题,TIM1计数器的通道我想这样分配你看会不会有什么问题,谢谢你的解答指导 1、配置两对带死区的互补对称的PWM(TIM1_CH1和TIM1_CH1N,TIM1_CH2和TIM1_CH2N),配置计数模式为向上计数; 2、再配置  详情 回复 发表于 2015-4-14 16:53
好的,谢谢你的指导,等实验后再告诉你结果。  详情 回复 发表于 2015-4-14 11:43
 
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

7
 
huo_hu 发表于 2015-4-14 10:20
是这个意思,具体能不能行你的做下实验

好的,谢谢你的指导,等实验后再告诉你结果。
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

8
 
huo_hu 发表于 2015-4-14 10:20
是这个意思,具体能不能行你的做下实验

你好,再问一个问题,TIM1计数器的通道我想这样分配你看会不会有什么问题,谢谢你的解答指导
1、配置两对带死区的互补对称的PWM(TIM1_CH1和TIM1_CH1N,TIM1_CH2和TIM1_CH2N),配置计数模式为向上计数;
2、再配置两路PWM(TIM1_CH3和TIM1_CH4),配置技术模式为中央对齐1计数模式;
请问针对同一个TIM1计数器,这样设置两种计数模式可以吗?
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

4005

帖子

0

TA的资源

版主

9
 
不可以,计数方式是属于定时器而不是通道,一个定时器只能用一种
此帖出自stm32/stm8论坛

点评

好的,谢谢!  详情 回复 发表于 2015-4-15 10:01
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

10
 
排队围观。。。。。
此帖出自stm32/stm8论坛
 
个人签名献给今天所有心情不好的人.?
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

11
 
huo_hu 发表于 2015-4-14 20:10
不可以,计数方式是属于定时器而不是通道,一个定时器只能用一种

好的,谢谢!
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼主,你的程序能调试出来了吗?
此帖出自stm32/stm8论坛

点评

调出来了,能输出两对带死区互补对称的PWM波。  详情 回复 发表于 2015-7-31 17:39
 
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

13
 
wmb731407749 发表于 2015-7-21 16:12
楼主,你的程序能调试出来了吗?

调出来了,能输出两对带死区互补对称的PWM波。
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

14
 
506977544 发表于 2015-7-31 17:39
调出来了,能输出两对带死区互补对称的PWM波。

可否共享学习呢?
此帖出自stm32/stm8论坛

点评

可以的,我整理下就上传啊,最近好久没来了。  详情 回复 发表于 2015-8-25 13:58
 
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

15
 
wmb731407749 发表于 2015-8-3 17:07
可否共享学习呢?

可以的,我整理下就上传啊,最近好久没来了。
此帖出自stm32/stm8论坛
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

16
 
楼主可否将程序贴出以供参考,多谢!
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表