用stm32测量外部编码器的脉冲个数,怎么实现?输入捕获模式可以吗?
2个回答
展开全部
测量脉冲就是输入捕获
追问
测量的是脉冲个数,不是周期与脉宽
追答
那就挂在外部中断上
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
上海巴鲁图工程机械科技有限公司_
2022-05-15 广告
2022-05-15 广告
光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器每转输出60(我们用老板没有说)个脉冲,五线制。其中两根为电源线,三根为脉冲线(A相、B相、Z)。电源的工作电压为 (+5~+24V)直流电源。光...
点击进入详情页
本回答由上海巴鲁图工程机械科技有限公司_提供
展开全部
如用TIM2定时器对一个脉冲进行计数,则TIM2配置如下:
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM2); //TIM2寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Prescaler = 0x00; //TIM1时钟频率的预分频值,时钟频率=72/(时钟预分频+1) ;
TIM_TimeBaseStructure.TIM_Period = 124; //自动重装载寄存器周期值,累计125个后产生个更新或者中断;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //定时器模式 向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted, 0); //配置TIM1的外部时钟模式2,预分频OFF(关闭),低电平或下降沿沿有效,不需要滤波器;
TIM_SetCounter(TIM2, 0x0);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除溢出中断标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断 溢出中断
}
中断函数:
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清TIM2标志位
}
}
在主函数中在合适的地方使能TIM2就可以了,上面的程序仅供参考,临时编写的,可能有错误的。
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM2); //TIM2寄存器重设为缺省值
TIM_TimeBaseStructure.TIM_Prescaler = 0x00; //TIM1时钟频率的预分频值,时钟频率=72/(时钟预分频+1) ;
TIM_TimeBaseStructure.TIM_Period = 124; //自动重装载寄存器周期值,累计125个后产生个更新或者中断;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时间分割值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //定时器模式 向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted, 0); //配置TIM1的外部时钟模式2,预分频OFF(关闭),低电平或下降沿沿有效,不需要滤波器;
TIM_SetCounter(TIM2, 0x0);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);//清除溢出中断标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //打开中断 溢出中断
}
中断函数:
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清TIM2标志位
}
}
在主函数中在合适的地方使能TIM2就可以了,上面的程序仅供参考,临时编写的,可能有错误的。
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询