首页 > 代码库 > STM32伺服编码器接口
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伺服编码器接口
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。