搜索
查看: 14664|回复: 19

[已解决] STM32F103高级定时器TIM1产生六路PWM控制无刷舵机BLDC

[复制链接]

该用户从未签到

1

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2019-6-19
发表于 2017-8-1 15:44:53 | 显示全部楼层 |阅读模式
8ST金币
首次发帖、不周之处请指正!
先描述下问题,最近在做120度霍尔BLDC的控制,用STM32F103 TIM1产生六路PWM时出现问题。
想要实现的控制状态是可以控制六个通道中任何一个通道的PWM输出与关断,不用互补、不需要死区
选用引脚:

TIM1配置如下图

主函数:

软件仿真:

我想要6路PWM的,但是只产生四路   PB0与PB1只在刚开始有输出
而且,当我把CH1设置为Disable时,CH1N仍然是Enable

仿真结果如下,CH1与CH1N不输出、其他四路输出正常

由此产生了几个问题
1、CH1的设置 会对PB0(CH2N)  PB1(CH3N)产生影响? CH1 Enable,CH2N、CH3N不输出,CH1 Disable CH2N、CH3N输出
2、CH1由Enable变为Disable  对CH1N的输出产生了影响,CH1 的失能与使能时CH1与CH1N的总开关?我之后使能CH1、失能CH1N,除CH1N以外的其余五路输出
怀疑是库函数的原因、尝试用寄存器写  手册与配置  仿真结果如下图



想要的输出状态是上图红线标注的   CH通道关闭  CHN通道输出,百度过这种输出状态,有人说可以实现但是没讲方法


这样配置六路均有输出、但是PB0、PB1不正常  而且也不是我想要的输出状态,可能是配置问题,很少用寄存器,不清楚这么对不对,请指正

前边都是截图,补一下TIM1配置部分、main部分代码
[code]
int main(void)
{
    delay_init();

My_BLDC-try1.rar

3.44 MB, 下载次数: 568, 下载积分: ST金币 -1

我的代码

回复

使用道具 举报

该用户从未签到

1

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2019-6-19
 楼主| 发表于 2017-8-1 15:52:31 | 显示全部楼层
  1. void PWM_OUT_Init()
  2. {
  3.     //PA8  9  10 对应CBA  相  PA7  PB0 PB1 对应C-B-A-相  复用推挽输出
  4.     GPIO_InitTypeDef GPIO_InitStructure;
  5.     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  6.     TIM_OCInitTypeDef       TIM_OCInitStructure;
  7. //    TIM_BDTRInitTypeDef     TIM_BDTRInitStructure;  
  8.    
  9.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA , ENABLE); ///RCC_APB2Periph_AFIO
  10.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);  //需要部分重映像
  11.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  12.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  13.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.    
  16.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  17.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  18.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  19.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  20.    
  21.         TIM_DeInit(TIM1);
  22.        
  23.     /* Time Base configuration */
  24.     TIM_TimeBaseStructure.TIM_Prescaler = 0;
  25.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  26.     TIM_TimeBaseStructure.TIM_Period = 4500;  /// PWM 16K  
  27.     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  28.     TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

  29.     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  30.     /* Channel 1, 2,3 and 4 Configuration in PWM mode */
  31.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  ///TIM_OCMode_PWM2  TIM_OCMode_Timing
  32.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  33.     TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  34.     TIM_OCInitStructure.TIM_Pulse = 2000;
  35.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  ///TIM_OCNPolarity_High
  36.     TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
  37.     TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; ///TIM_OCNIdleState_Set
  38.     TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

  39.         TIM_OC2Init(TIM1, &TIM_OCInitStructure);
  40.     TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  41.         TIM_OC3Init(TIM1, &TIM_OCInitStructure);

  42.     /* TIM1 counter enable */
  43.     TIM_Cmd(TIM1, ENABLE);

  44.     /* Main Output Enable */
  45.     TIM_CtrlPWMOutputs(TIM1, ENABLE);

  46. }
复制代码


  1. int main(void)
  2. {
  3.     delay_init();                     //延时函数初始化          
  4.     NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  5.     GPIO_init();
  6.     USART_init();
  7. //        Hall_Init();
  8.         PWM_OUT_Init();
  9.     GPIO_SetBits(GPIOA,GPIO_Pin_1);  //TX_OE

  10.         TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
  11.         TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
  12.         TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

  13.         /*  Channel2 configuration */
  14.         TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1 );
  15.         TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
  16.         TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);

  17.         /*  Channel3 configuration */
  18.         TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
  19.         TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
  20.         TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);       

  21.         //N 通道受主通道影响  主DISABLE 则N通道也关闭

  22. //        TIM1->BDTR &=0xfc00;  //解锁
  23. //        TIM1->BDTR |= 0x8800;
  24. //        TIM1->CR2 |=0x1f80;
  25. //        TIM1->CCER = 0x00;  
  26. //        TIM1->CCER |= 0x555;
  27. }
复制代码

代码部分没贴上去,补一下
回复

使用道具 举报

该用户从未签到

41

主题

2582

帖子

282

蝴蝶豆

论坛元老

最后登录
2021-4-1
发表于 2017-8-1 20:45:57 来自手机 | 显示全部楼层
帮顶一个
回复

使用道具 举报

该用户从未签到

0

主题

5

帖子

0

蝴蝶豆

初级会员

最后登录
2018-7-1
发表于 2017-8-1 20:54:41 | 显示全部楼层
帮顶啊。
回复

使用道具 举报

该用户从未签到

1

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2019-6-19
 楼主| 发表于 2017-8-1 21:56:24 | 显示全部楼层

谢谢
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1182

    主题

    4967

    帖子

    1

    蝴蝶豆

    论坛元老

    最后登录
    2020-3-17
    发表于 2017-9-29 15:59:10 | 显示全部楼层
    图片也太小了吧,根本看不清
    回复

    使用道具 举报

    该用户从未签到

    19

    主题

    1734

    帖子

    7

    蝴蝶豆

    论坛元老

    最后登录
    2021-5-10
    发表于 2017-10-1 08:30:01 | 显示全部楼层
    楼主解决了吗,坐等结果呀
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    102

    帖子

    0

    蝴蝶豆

    高级会员

    最后登录
    2018-9-25
    发表于 2017-10-14 21:02:36 | 显示全部楼层

    关于如何输出六路互补带死区PWM波形,请关注“单片机STM32”公众号,里面有一篇文章“STM32定时器TIM1输出六路带死区互补PWM波形(一)”描述。
    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    102

    帖子

    0

    蝴蝶豆

    高级会员

    最后登录
    2018-9-25
    发表于 2017-10-14 21:03:30 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    9

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2019-6-19
     楼主| 发表于 2017-10-26 16:10:52 | 显示全部楼层
    zero99 发表于 2017-9-29 15:59
    图片也太小了吧,根本看不清

    感兴趣可以下载源文件看哈
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-28 20:08 , Processed in 0.195013 second(s), 41 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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