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

官方库3.5版本的输入捕获模式

[复制链接]
at89 提问时间:2015-4-19 17:45 /
最近研究电机,输入捕获外部编码器的脉冲输入,参考了一下官方库里面的例子,输出的频率值一直在变化啊,明显不准。有没有用过的小伙伴讨论下。中断里面的程序计算频率为什么是 TIM3Freq = (uint32_t) SystemCoreClock / Capture;
收藏 评论7 发布时间:2015-4-19 17:45

举报

7个回答
zhangdaijin 回答时间:2015-4-19 17:51:25
学习一下!!
at89 回答时间:2015-4-19 23:32:01

讨论一下,可以试试一起来嘛
stary666 回答时间:2015-4-20 13:58:16
用PWM输入可以解决
at89 回答时间:2015-4-21 00:13:58
stary666 发表于 2015-4-20 13:58
用PWM输入可以解决

PWM可以获取占空比和频率,我看了,频率求解的程序是一样的,但是串口输出总是在变化,贴出中断代码
if(TIM_GetITStatus(TIM3, TIM_IT_CC2|TIM_IT_CC1) == SET)
  {
    /* Clear TIM3 Capture compare interrupt pending bit */
    TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);
                TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);
    if(CaptureNumber == 0)
    {
      /* Get the Input Capture value */
      IC3ReadValue1 = TIM_GetCapture2(TIM3)+TIM_GetCapture1(TIM3);
      CaptureNumber = 1;
    }
    else if(CaptureNumber == 1)
    {
      /* Get the Input Capture value */
      IC3ReadValue2 = TIM_GetCapture2(TIM3)+TIM_GetCapture1(TIM3);
      
      /* Capture computation */
      if (IC3ReadValue2 > IC3ReadValue1)
      {
        Capture = (IC3ReadValue2 - IC3ReadValue1);
      }
      else
      {
        Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
      }
      /* Frequency computation */
      TIM3Freq = (u32) SystemCoreClock / Capture;
      CaptureNumber = 0;
                        //printf("%d",TIM3Freq);
                       
                       
                        printf("%ld\t\t",60*TIM3Freq/64);
                TIM2->CCR1+=0;
                TIM2->CCR2+=0;
    }
               
  }用AB相编码器,所以开了两个通道的捕获,转一圈64个脉冲
dwwzl 回答时间:2015-4-21 07:47:48
测量脉宽频率比较精细的活,我都是直接用寄存器操作的
at89 回答时间:2015-4-22 00:29:25
dwwzl 发表于 2015-4-21 07:47
测量脉宽频率比较精细的活,我都是直接用寄存器操作的

寄存器还不是很了解,不过渐渐发现直接寄存器很有用,好吧我再看看
cxtarm 回答时间:2015-4-22 09:37:28
没有这方面的经验

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版