360度 EC11 旋转编码器模块 数字脉冲电位器
文章目录
- 一、产品简介
- 二、原理分析
- 三、程序设计
- 四、程序源码
一、产品简介
EC11旋转编码器广泛用于车载DVD,车载导航,汽车影音上常被人称为车载编码器。编码器主要用于频率调节,高度调节,温度调节及音量调节的参数控制。注意编码器避免储藏于高温潮湿及腐蚀的场所,拆包装后未使用完的剩余产品请在防潮防毒的环境下保存。
产品特点:
- 额定电压:DC 5V
- 各相导线AB相:0.5mA(Max 5mA,Min 0.5mA)
- 公共导线C: 1 mA(Max 10mA,Min 0.5mA)
- 使用温度范围: -30℃~+80°c
输出信号:
电气性能:
接口说明:
二、原理分析
旋转编码器是一种机电装置,可将轴的角运动,转换为A/B两相相位偏差90°的脉冲信号,其中C是A/B信号的参考地
根据A/B信号的相位关系可以获取正反转方向。
通过脉冲的计数可以获取旋转的步进数量。
根据脉冲在单位时间内的计数可以获取角速度。
工作原理: 旋转轴带动两组同轴栅格转盘,栅格转盘间存在一定的角度偏差,旋转的栅格会对发光二极管发出的光信号进行间断遮挡,从而使光敏二极管产生高低电平变化。因为两组栅格转盘存在一定的角度偏差,所以会产生两组相位90°偏差的A/B相信号。
A、B两相都输出方波时:
- 顺时针方向旋转,A相超前B 相90度;
- 逆时针方向旋转,B相超前A 相90度;
三、程序设计
本篇设计为向右旋转编码器每产生一个脉冲,计数器+1,向左旋转每产生一个脉冲,计数器-1,并通过oled将计数值显示在屏幕上。
1. 引脚初始化
VCC和GND不必多说,首先对A,B相进行引脚初始化,这里我将A、B相分别接上PB0和PB1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
2. 开启外部中断
将PB0和PB1设计为中断源,且为下降沿触发
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);
3. 中断配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_Init(&NVIC_InitStructure);
4. 中断函数
int16_t Encoder_Get(void)
{int16_t Temp;Temp = Encoder_Count;Encoder_Count = 0;return Temp;
}void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line0) == SET){/*如果出现数据乱跳的现象,可解除以下注释,再次判断引脚电平,以避免抖动*/
// if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0)
// {if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){Encoder_Count --;}
// }EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line1) == SET){/*如果出现数据乱跳的现象,可解除以下注释,再次判断引脚电平,以避免抖动*/
// if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
// {if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0){Encoder_Count ++;}
// }EXTI_ClearITPendingBit(EXTI_Line1);}
}
5. main函数
int16_t Num;int main(void)
{OLED_Init();Encoder_Init();OLED_ShowString(1, 1, "Num:");while (1){Num += Encoder_Get();OLED_ShowSignedNum(1, 5, Num, 5);}
}
四、程序源码
有需要者 请留言评论区或私信
360度 EC11 旋转编码器模块 数字脉冲电位器相关推荐
- 使用Arduino开发板连接ec11旋转编码器
使用Arduino开发板连接ec11旋转编码器 因为最近要用到旋转编码器,从网上花了好长时间找了好多关于arduino使用旋转编码器的资料,总是找不到合适的,最后总结了一下(部分内容有借鉴,仅作分享, ...
- 认识EC11旋转编码器编写驱动程序
前言 抛开工作,以电子爱好者的身份,单片机玩多了都会想着在单片机的外围设备玩出一些花样来. 这其中首先想到的就是"升级"输入输出设备. 这里先说一说我们常给单片机使用的输入设备. ...
- linux4.6 EC11旋转编码器的驱动
最近项目使用了旋转编码器EC11,遍查内核,发现并没有它的驱动,查了查CSDN,终于找到一篇有用的.根据自己的需要和对最基础的gpio_key.c的理解,我改写出了一份EC11的专用驱动. 感谢下面博 ...
- 【Arduino使用旋转编码器模块】
Arduino使用旋转编码器模块 前言 旋转编码器模块引脚 旋转编码器模块如何工作? 旋转编码器模块电路图 Arduino旋转编码器模块电路连接图 代码说明 完整代码 前言 旋转编码器是一种机电位置传 ...
- EC11旋转编码器驱动程序
EC11驱动程序 不多做介绍,百度上很多相关的介绍 首先,放上参考文档 代码有正转.反转.按下正转.按下反转.单机.双击.长按和长安松手检测,有什么问题可以在下方留言 我是对该文档代码进行一些修改,偏 ...
- EC11旋转编码器,stm32f103驱动程序
EC11旋转编码器,stm32f103驱动程序 1.EC11手册的要点 手册中推荐的电路(已含有RC滤波): 输出波形特点: 2.硬件电路 3.驱动程序关键点 4.输出现象 1.EC11手册的要点 注 ...
- STM32CubeMX EC11旋转编码器开发心路历程(encode模式 外部中断模式 普通IO口模式 定时器模式探索)
文章目录 ENCODE模式探索 普通IO口探索 定时器使用 外部中断探索 编码器开关的理解 最后的实现方案 这篇文章主要还是记录整个过程以及想法的不断改进,对于一些实际的操作还有代码,我准备都分开写到 ...
- ESP32(IDF)EC11旋转编码器使用总结
ESP32(IDF)EC11旋转编码器使用总结 一.调试过程中遇到的问题 二.硬件 三.电路 接线说明: 四.工作原理 正转波形 反转波形 五.判断正反转 法一 代码实现 结果 法二 法三 代码实现 ...
- STM32 EC11 旋转编码器
**先给大家看看我选用的EC11元器件** 代码在最后,复制可直接食用 以及我的电路图 在研究EC11的时序之前首先要了解一点,EC11按旋转的输出动作可以分为两种.一种是转两格,A.B对C端输出一个 ...
- HTML实现图片360度循环旋转
HTML实现图片360度循环旋转 效果图 //css代码 .header{-webkit-animation:rotateImg 1s linear infinite;width: 80px ;hei ...
最新文章
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
- 验证RIP被动接口只收不发的正确性
- python目录操作shutil
- getattr的巨大作用
- php将pdf文件存入数据库,关于tcpdf:在我的php数据库中制作pdf文件
- error: 'syms' undefined near line 1 column 1
- Java等线程池执行完所有任务后再执行主线程
- Spring数据分析思维课
- 无缓冲channel与容量为1的channel的区别
- 级联MobileNet-V2实现CelebA人脸关键点检测(附训练源码)
- 20个令程序员泪流满面的瞬间
- 概率论----假设检验
- 微型计算机机房湿度不宜过大,全国计算机一级考试选择题试题与详细答案(免费)...
- 2017年多校联合训练 第五场(吉如一)
- php 调用redis中lpush的方法
- 【STM32】时钟相关函数和类型
- fread fwrite之后文件指针位置
- word2016 无响应问题解决办法
- linux系统能运行msi文件吗,在Linux中如何在Wine下运行msi文件
- 信息系统项目管理师----成本类计算
热门文章
- 阿里P7亲自教你!java开发如何包装自己的简历
- android fragment 设置透明,DialogFragment背景透明设置
- 2021年安全生产模拟考试(全国特种作业操作证电工作业-电力电缆模拟考试题库二)安考星
- 2021数据安全与个人信息保护技术白皮书
- shoppping collection
- python汉化之后好用吗_Python官方中文文档上线了:各种教程已汉化,不用再苦等野生翻译...
- ProcExp的利用
- Java 编码规范8(编程规约-注释规约与其它)
- 智慧水务项目建设方案
- MATLAB实现DES算法子密钥生成