OpenEdv-开源电子网

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

stm32f103的TIM1六路输出PWM控制问题

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-11-3
在线时间
4 小时
发表于 2018-10-27 18:05:55 | 显示全部楼层 |阅读模式
1金钱
目前想做STM32F103的BLDC驱动,因为六步换向是每次有两个MOS管导通,那TIM1的三通道六路互补输出每次只有两路有输出,所以我需要不停开关各路PWM输出,可是我用了 TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable)函数不行,用CCER寄存器配置也不行,用TIM_OC3PolarityConfig(TIM1, 0)函数也不行,怎么设置都不影响六路的一起输出,请问是哪里出了问题?
以下是我配置TIM1的函数代码
       
        TIM_TimeBaseInitTypeDef   TIM_TimeBaseInitStructure;
        TIM_OCInitTypeDef         TIM_OCInitStructure;
        TIM_BDTRInitTypeDef       TIM_BDTRInitStructure;
       
        TIM_DeInit(TIM1);
       
        TIM_TimeBaseInitStructure.TIM_Prescaler=23;
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitStructure.TIM_Period=10000;
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
        TIM_ARRPreloadConfig(TIM1,ENABLE);
       
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_Pulse=5000;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
        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_OSSRState=TIM_OSSRState_Enable;
        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;
        TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
        TIM_BDTRInitStructure.TIM_DeadTime=0x08;
        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;
        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;
        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
       
        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);


TIM_Cmd(TIM1,ENABLE);
       
        TIM_CCPreloadControl(TIM1,ENABLE);
       
        TIM_CtrlPWMOutputs(TIM1,ENABLE);
}
求大神帮助解答!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-28 01:22:50 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

3

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2017-11-3
在线时间
4 小时
 楼主| 发表于 2018-10-28 16:04:32 | 显示全部楼层
试了一整天,发现只有在TIM1_TRG_COM_IRQHandler(void)中断中使用TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable)函数才有效,原因不明
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 06:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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