STM32伺服编码器接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32伺服编码器接口相关的知识,希望对你有一定的参考价值。

在STM32的高级定时器和一般定时器中有Encoder interface mode(编码器接口),TI1和TI2分别对应TIM_CH1 和TIM_CH2 通道。

一、计数规则如下:

技术分享

表55的是编码器不同的信号下计数方向。

1.仅在TI1边沿计数:上升沿触发时,若对应TI2为低电平,则计数器向下计数;对应为高电平,则向上计数。如下图,在1和2处,TI1的上升沿对应TI2为低电平,所以计数器向上计数;同样的,在3处则相反。

技术分享

2.在TI1和TI2边沿计数:若TI1、TI2上升沿捕捉时,TI1上升边沿对应TI2位于低电平,则向上计数;TI2上升边沿对应TI1高电平,向上计数,所以为双倍。

 

二、功能配置

    1.设置I/O口(启动时钟,工作在定时器模式下,无上拉)

    2.配置定时器(选择编码器接口模式)

 1 void Encoder_Config()
 2 {
 3     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
 4     TIM_ICInitTypeDef TIM_ICInitStructure;
 5     GPIO_InitTypeDef GPIO_InitStructure;
 6     
 7     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_11;
 8     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
 9     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
10     GPIO_Init(GPIOE,&GPIO_InitStructure);
11     GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);
12     GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_TIM1);
13 
14     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
15     TIM_DeInit(TIM1);
16     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;            //单倍模式
17     TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
18     TIM_TimeBaseStructure.TIM_Period = 500*4;                      //计数周期
19     TIM_TimeBaseStructure.TIM_Prescaler = 0;                        //时钟分频
20     TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
21     TIM_ICStructInit(&TIM_ICInitStructure);
22     TIM_ICInitStructure.TIM_ICFilter = 0;                            //滤波,0表示不滤波
23     TIM_ICInit(TIM1,&TIM_ICInitStructure);
24     TIM_EncoderInterfaceConfig(TIM1,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
25     //设置定时器工作在编码器接口模式。
26     TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
27     TIM_ClearITPendingBit(TIM1,TIM_IT_Update);
28     TIM_ClearFlag(TIM1,TIM_FLAG_Update);
29     TIM_SetCounter(TIM1,0);                                    //设置计数初值
30     TIM_Cmd(TIM1,ENABLE);    
31 }

实验中采用的是E6A2-cwz5c编码器,分辨率为500/r, 定时器为TI1和TI2双边沿计数,最终计数始终保持为2000,理论值应为1000。如果有实验通过的,还请告知原因,灰常感谢!

以上是关于STM32伺服编码器接口的主要内容,如果未能解决你的问题,请参考以下文章

STM32定时器编码器接口模式

STM32f407定时器用为编码器接口模式采集脉冲,但单片机供电后,复用引脚直接有电压输出

舵机控制那些事(附STM32代码!!!)

Stm32高级定时器

STM32定时器编码器模式怎么使用

stm32f103微控制器通用定时器的常用工作模式都有哪些