旋转编码器计次+keil源代码+易上手+保姆及教程

项目内容:
基于KEIL平台进行源代码编写开发
包含旋转编码器模块的函数编写(详细注释教程)
还有OLED屏的附带驱动函数和显示函数
主函数的逻辑实现语句

实现思路:
利用MCU主控板对于旋转编码器的输出的方波信号进行辨别分析,是正方波还是逆方波。以及计算出编码器旋转的速度。然后在OLED屏将数据处理辨析后的结果显示显示出来。

旋转编码器的工作原理

  • 按码盘的刻孔方式不同分类编码器可分为增量式和绝对式两类。

增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。

旋转增量式编码器以转动时输出脉冲,通过计数设备来知道其位置,当编码器不动或停电时,依靠计数设备的内部记忆来记住位置。这样,当停电后,编码器不能有任何的移动,当来电工作时,编码器输出脉冲过程中,也不能有干扰而丢失脉冲,不然,计数设备记忆的零点就会偏移,而且这种偏移的量是无从知道的,只有错误的结果出现后才能知道。

工程配置

源代码
Encoder.c

开启RCC时钟,同时开启AFIO的时钟(用在外部中断通道上)
对GPIO端口进行初始化,配置输出模式,输出端口和输出速率。
AFIO选择中断引脚,对应的后面就会选择使用什么中断通道
中断通道的选择和配置:

获取增量值的函数:

中断回调函数(反转)

中断回调函数(正转)

主函数实现
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Encoder.h"

int16_t Num;			//定义待被旋转编码器调节的变量

int main(void)
{
	/*模块初始化*/
	OLED_Init();		//OLED初始化
	Encoder_Init();		//旋转编码器初始化
	
	/*显示静态字符串*/
	OLED_ShowString(1, 1, "Num:");			//1行1列显示字符串Num:
	
	while (1)
	{
		Num += Encoder_Get();				//获取自上此调用此函数后,旋转编码器的增量值,并将增量值加到Num上
		OLED_ShowSignedNum(1, 5, Num, 5);	//显示Num
	}
}

最终效果实现图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值