STM32标准库开发——编码器接口测速

编码器接口基本结构

在这里插入图片描述
开启定时器三时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

配置定时器三,通道一二所用到的引脚

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);

配置定时器三

/*	
	定时器不用配置时钟,因为编码器会自动托管时钟
	TIM_InternalClockConfig(TIM3);
*/	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
	//计数模式也是不用配置的,因为被编码器托管了
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period=65536-1; //ARR寄存器的值
	TIM_TimeBaseInitStruct.TIM_Prescaler=1-1; //预分频寄存器的值
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;//高级寄存器才有
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);

配置捕获寄存器

TIM_ICInitTypeDef TIM_ICInitStruct;
TIM_ICStructInit(&TIM_ICInitStruct);
TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
TIM_ICInitStruct.TIM_ICFilter=0xf;
//用配置极性是否翻转,高电平不反转,低电平反转
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
/*
不用配置预分频器,以及连接方向,因为与编码器无关
TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
*/
TIM_ICInit(TIM3,&TIM_ICInitStruct);
TIM_ICInitStruct.TIM_Channel=TIM_Channel_2;
TIM_ICInitStruct.TIM_ICFilter=0xf;
TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_ICInit(TIM3,&TIM_ICInitStruct);

配置编码器寄存器,使能定时器

//这里面电平极限翻转的配置与上述捕获寄存器配置重复,捕获寄存器配置可以不用配置电平翻转
TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);
TIM_Cmd(TIM3,ENABLE);

编码器过滤噪声信号原理图

在这里插入图片描述

当噪声信号出现时,TI1信号正常,TI2信号异常,在经过几个周期后,计数器值增加后又减少,计数值不变,成功过滤噪声信号

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值