STM32F103正交解码采集编码器圈数和方向程序

我的硬件连接是PA0->TIM2_CH1,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是因为区分正反转,正转值为正 反转值为负

完整工程分享完整工程下载地址,请点击

STM32F103正交编码器例程用于实现对编码器的读取和计数功能。编码器是一种常用的旋转位置传感器,能够实时检测物体的旋转方向和转速。 首先,需要在STM32F103的开发环境中设置GPIO口的模式和引脚配置。正交编码器通常使用两个GPIO口连接A相和B相信号,用于检测旋转方向。可以使用STM32库提供的函数来设置GPIO口的输入模式和中断触发方式。 在初始化阶段,需要配置定时器的工作模式和计数方式。可以选择使用TIM2或TIM3定时器来捕获编码器信号,并且设置其计数模式为正交编码器模式。可以通过配置定时器的IC1和IC2输入捕获通道来捕获A相和B相信号的脉冲。 当编码器信号发生变化时,会触发定时器的输入捕获中断。在中断服务程序中,我们可以根据A相和B相信号的变化情况来判断旋转方向。例如,当A相信号上升沿触发时,如果B相信号为高电平,则表示逆时针旋转,如果B相信号为低电平,则表示顺时针旋转。根据旋转方向的不同,我们可以实现计数功能。 编码器的计数器可以根据旋转方向进行加减计数。可以使用定时器的计数器寄存器来记录当前的旋转位置。每次发生旋转时,可以根据旋转方向对计数器进行加减操作,从而实现实时记录位置的功能。 需要注意的是,由于编码器信号可能存在噪声和抖动,我们需要在软件中进行去抖动处理。可以通过设置一个合适的延时时间来消除信号的抖动,从而保证编码器的读取准确性。 综上所述,STM32F103正交编码器例程通过捕获编码器信号的脉冲,判断旋转方向并实现计数功能。这样可以实时获取编码器的旋转位置和转速信息,为系统的旋转控制提供重要的输入。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰搞电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值