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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版