STM32F103 디코딩 채집 인코더 코일 수와 방향 프로그램

내 하드웨어 연결은 PA0->TIM2CH1,PA1->TIM2_CH2에서 주의해야 할 것은 인코더가 저항을 연결해야 한다는 것이다. 다음은 코드이다.
	GPIO_InitTypeDef GPIO_InitStructure;	//    GPIO     
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//            
	TIM_ICInitTypeDef TIM_ICInitStructure;	//               

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//  GPIOA  
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//     2

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;		//  PA0->TIM2_CH1,PA1->TIM2_CH2
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//  50MHz  
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;		//         
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	TIM_TimeBaseStructure.TIM_Period = 0xffff;	//      	
	TIM_TimeBaseStructure.TIM_Prescaler = 0;	//     
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;	//               
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	//    
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);	//      2

	TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);
	TIM_ICStructInit(&TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_ICFilter = 6;
	TIM_ICInit(TIM2, &TIM_ICInitStructure);

	TIM_SetCounter(TIM2, 0x7fff);

	//  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);		//     2     
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);

	//	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);		//     2  
	TIM_Cmd(TIM2, ENABLE);  //     ,    

계수 값 가져오기
	encoderCount=TIM_GetCounter(TIM2)-0x7fff;
	TIM_SetCounter(TIM2, 0x7fff);

0x7fff를 뺀 것은 정반전을 구분하기 때문이며, 정반전값은 정반전값이 마이너스이기 때문이다.
전체 프로젝트 공유 전체 프로젝트 다운로드 주소, 클릭

좋은 웹페이지 즐겨찾기