编码器的使用和测速原理

编码器简介:是一种将角位移或者直线位移转换成电信号的一种传感器

分为增量式和绝对式

主要作用测量位置(倒立摆),测量速度(平衡小车)(总而言之,是用来反馈电机转动的情况,可以是位置,也可以是速度)

常用的有光电编码器,霍尔编码器

编码器的使用和测速原理_第1张图片

 四倍频:编码器的使用和测速原理_第2张图片

 常规:A相计数,B相判断方向

四倍频:测量A、B相的上升沿和下降沿

基本框图:编码器的使用和测速原理_第3张图片

 编码器配置


void Encoder_Init_TIM4(u16 arr,u16 psc)
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_ICInitTypeDef TIM_ICInitStructure; 
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 
 
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOB, &GPIO_InitStructure);	

	TIM_TimeBaseStructure.TIM_Period = arr; 
	TIM_TimeBaseStructure.TIM_Prescaler = psc; 
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); 
	
	TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
	TIM_ICStructInit(&TIM_ICInitStructure); 
	TIM_ICInitStructure.TIM_ICFilter = 10;  
	TIM_ICInit(TIM4, &TIM_ICInitStructure); 

	TIM_Cmd(TIM4, ENABLE);
}

读取编码器的数值只需要在CNTj寄存器中读取即可

例如:

int Read_Encoder_TIM4(void)
{
	int Encoder_TIM;
	Encoder_TIM=TIM4->CNT;
	if(Encoder_TIM>0xefff)Encoder_TIM=Encoder_TIM-0xffff; 
	                                                     
	TIM4->CNT=0;
	return Encoder_TIM; //·µ»ØÖµ
}


你可能感兴趣的:(单片机)