你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f051自带例程库中,六步PWM波(TIM_6Steps)的调试问题

[复制链接]
你好我好大家好! 提问时间:2015-1-28 19:39 /
本帖最后由 你好我好大家好! 于 2015-1-28 19:44 编辑

     有高手调试过st库函数中自带的TIM_6Steps历程吗?stm32f051xx的。我调试了一下,出来的波形是下图这样的file:///C:\Users\Administrator\Documents\Tencent Files\1835116269\Image\4~}7E)9FBC$1E]F6CKEYB(H.jpg,感觉有些问题就是1和1n通道有同时为高电平的时候,这样在电机控制板中上下桥臂的两只管子就会直通,就把电源烧坏了。我希望是在1和1n通道没有输出pwm的期间,对应管脚输出都为低电平。可能是哪里没有设置好,希望高手们可以只指点一下,



QQ截图20150128193242.png
收藏 1 评论19 发布时间:2015-1-28 19:39

举报

19个回答
lkl0305 回答时间:2015-1-28 20:25:17
没有用过,帮顶啊
dsjsjf 回答时间:2015-1-29 09:11:48
没有用过,帮顶
星辰一方 回答时间:2015-1-29 09:22:16
没用过,帮顶,等待大神来解答
bldc小菜鸟 回答时间:2015-1-29 11:40:23
这和你的pwm驱动方式有关系,如果你采用了cmos的驱动方式,官网的驱动方式是什么样问题的,因为对于上桥高电平是关断状态,不会直通;如果你采用nnmos的驱动模式,就会出现你说的直通,会爆管子的。改进方法很简单,把现在的pwm输出极性任意取反一个即可,不管是上桥还是下桥都可以的。
你好我好大家好! 回答时间:2015-1-31 11:45:09
bldc小菜鸟 发表于 2015-1-29 11:40
这和你的pwm驱动方式有关系,如果你采用了cmos的驱动方式,官网的驱动方式是什么样问题的,因为对于上桥高 ...

  您好啊:
           我采用的是nnmos的驱动模式。现在希望的是:在各通道上同时为Disable期间,对应通道的引脚为低电平,比如上图中1和1n通道中划红线的部分,是两个通道同时为Disable,希望这里同时为低电平。
           定时器的配置是这样的, /* Channel 1, 2,3 and 4 Configuration in PWM mode */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 2047;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High ;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set   ;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set  ;

  TIM_OC1Init(TIM1, &TIM_OCInitStructure);

  TIM_OCInitStructure.TIM_Pulse = 1023;
  TIM_OC2Init(TIM1, &TIM_OCInitStructure);

  TIM_OCInitStructure.TIM_Pulse = 511;
  TIM_OC3Init(TIM1, &TIM_OCInitStructure);

  /* Automatic Output enable, Break, dead time and lock configuration*/
  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 = 1;
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

  TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

在中断中六步pwm是这样的,void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
{
  /* Clear TIM1 COM pending bit */
  TIM_ClearITPendingBit(TIM1, TIM_IT_COM);

  if (step == 1)
  {
    /* Next step: Step 2 Configuration -------------------------------------- */
    /*  Channel3 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /*  Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

    /*  Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1 );
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
    step++;
  }
  else if (step == 2)
  {
    /* Next step: Step 3 Configuration -------------------------------------- */
    /*  Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);
   
    /*  Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
     TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /*  Channel1 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
    step++;
  }
  else if (step == 3)
  {
    /* Next step: Step 4 Configuration -------------------------------------- */
    /*  Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /*  Channel2 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);

    /*  Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);
    step++;
  }
  else if (step == 4)
  {
    /* Next step: Step 5 Configuration -------------------------------------- */
    /*  Channel3 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);

    /*  Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);

    /*  Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
    step++;
  }
  else if (step == 5)
  {
    /* Next step: Step 6 Configuration -------------------------------------- */
    /*  Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);

    /*  Channel1 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

    /*  Channel2 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
    step++;
  }
  else
  {
    /* Next step: Step 1 Configuration -------------------------------------- */
    /*  Channel1 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);

    /*  Channel3 configuration */
    TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
    TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);

    /*  Channel2 configuration */
    TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
    TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
    step = 1;
  }
}

按道理说在两个通道同时Disable期间,对应引脚输出的电平就是为低电平啊,因为定时器的配置为TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High ;
可是用逻辑分析仪测试的结果不是这样的,希望能指点一下,先谢谢了
数码小叶 回答时间:2015-1-31 12:56:47
不懂
左岸右岸 回答时间:2015-2-3 11:42:32
没用过,帮顶一下吧!
阳光_~~ 回答时间:2015-2-3 11:56:30
你好我好大家好! 发表于 2015-1-31 11:45
您好啊:
           我采用的是nnmos的驱动模式。现在希望的是:在各通道上同时为Disable期间,对应通 ...

你那个波形是怎么来的呀,我用的没问题,不过我是用在Full bright上,没一点问题呀。应该是你文档研究的不够深入,我没用库文件,自己写的。ST的这个PWM真心不好用,文档看起来要吐血,写的不明不白的。
bldc小菜鸟 回答时间:2015-2-3 19:33:52
你好我好大家好! 发表于 2015-1-31 11:45
您好啊:
           我采用的是nnmos的驱动模式。现在希望的是:在各通道上同时为Disable期间,对应通 ...

能把你用逻辑分析仪检测的波形贴出来吗?不然不好分析。另,关于官网自带的程序的库还有讨论的空间:官网的程序基于051,内核是cotex—m0的好像,103系列的是基于cotex_m3,对于库的版本对于pwm输出极性的影响,参照下图,希望对你有帮助。
库对pwm极性影响.jpg
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版