打印
[STM32F1]

TIM5比较输出模式,调试2天都无法控制输出脉冲(PWM)个数

[复制链接]
1568|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
autooy|  楼主 | 2014-6-5 08:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我使用STM32的TIM5的比较输出功能,想实现控制伺服电机工作,结果调试了2天,正常发送PWM及其100KHZ都没有问题,现在的问题是,怎么都无法控制它的输出个数,因为无法控制它的输出脉冲个数,所以,想使脉冲个数到了也就停止不了。相关设置如下:
1、初始化:TIM5_PWM_Init(60,10);   //不分频。大约107KHZ的输出;
2、通过设置sf_work_flag标志来控制它是否工作与否;
  if(sf_work_flag)
{
   TIM_Cmd(TIM5, ENABLE); //⑤使能 TIM5
  TIM_SetCompare2(TIM5,50);//设置PA1 PWM波输出占空比50%
}
else
{TIM_SetCompare2(TIM5,0);//设置PA1 PWM波输出占空比0%

   TIM_Cmd(TIM5,DISABLE); //⑤停止 TIM5
}

3、对发送的脉冲进行计数:
//定时器 5 中断服务程序⑥
void TIM5_IRQHandler(void) //TIM5 中断
{
        if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //检查 TIM5 更新中断发生与否
        {
                TIM_ClearITPendingBit(TIM5, TIM_IT_Update ); //清除 TIM5更新中断标志
        if(!sf_work_flag)
                {PWM1=1;}
                else
                {
                   PWM1=!PWM1;
                   pul_num++;
           if(pul_num>=pul_med)
            {
               sf_work_flag=0;
               pul_num = 0;
                           pul_med = 0;
            }
                 }
        }
}
也就是通过希望计算pul_num来达到pul_med=10000;的时候,也就是发送10000个脉冲就停止,现在的效果是,pul_num永远等于0;

我的疑问:1、是不是不能使用这样的方式在这个里进行计数???
          2、是不是必须将这个波形接到外部中断里,然后通过外部中断来控制?

请大侠贡献智慧与经验,谢谢!
沙发
mmuuss586| | 2014-6-5 09:28 | 只看该作者
完整的初始化程序发上来看下;
我关PWM的占空比,即可关掉了;

使用特权

评论回复
板凳
else
{TIM_SetCompare2(TIM5,0);//设置PA1 PWM波输出占空比0%

   TIM_Cmd(TIM5,DISABLE); //⑤停止 TIM5
}
先看看有木有跑进这个分支哈,如果有跑进去,就定位一下为何这个没有起作用!~

使用特权

评论回复
地板
runningwzf| | 2014-6-15 00:32 | 只看该作者
建议用debug的方式跟踪一下,看看是否进入了中断服务程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:大功率开关电源、YAG激光器、光纤及脉冲激光器系统设计与研发. 工作Q:417179642

336

主题

683

帖子

8

粉丝