STM32驱动_旋转编码器EC11

2023-10-12 09:20

本文主要是介绍STM32驱动_旋转编码器EC11,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32驱动_旋转编码器EC11

前言:经过做项目了解了旋转编码器的原理,大白话讲就是正反旋转输出两种相位差不同的波形,我们程序解析这段波形就可以了
波形如图:使用示波器和逻辑分析仪采集波形都印证这个图是正确的

在这里插入图片描述

分析这个图,找一种最简便的方法采集和判断(只用一个定时器即可),判断这个变化过程就可以知道此时是正转还是反转
说明:使用定时器中断只能判定是正转还是反转,如果需要采集当前的旋转数字具体是多少,需要在main函数中判断
在这里插入图片描述

void TIM4_IRQHandler(void)   //3ms定时器定时中断(自己随意设定2ms~10ms应该都可以)
{static int a = 0,b = 0,c = 0,d = 0;if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  {TIM_ClearITPendingBit(TIM4, TIM_IT_Update); {static int ec11_time_stamp;ec11_time_stamp++;if(ec11_time_stamp == 5)	//轮询检测旋转编码器状态,周期5ms{static int first_a = 0,first_b = 0,second_a = 0,second_b = 0,first_check = 0;if(first_check == 0)  //首次开机需要先检测一下给first_a和first_b赋值{first_a = READ_ENCODER_A;first_b = READ_ENCODER_B;first_check = 1;}else{second_a = READ_ENCODER_A;second_b = READ_ENCODER_B;if(first_a == 0 && first_b == 0){if(second_a == 1 && second_b == 0){encoder_dev.encoderNum++;if(encoder_dev.encoderNum > 100) encoder_dev.encoderNum = 100;Debug_printf("encoderNum:%d\r\n",encoder_dev.encoderNum);		//正转}if(second_a == 0 && second_b == 1){if(encoder_dev.encoderNum != 0) encoder_dev.encoderNum--;Debug_printf("encoderNum:%d\r\n",encoder_dev.encoderNum);		//反转}}else if(first_a == 1 && first_b == 1){if(second_a == 0 && second_b == 1){encoder_dev.encoderNum++;if(encoder_dev.encoderNum > 100) encoder_dev.encoderNum = 100;Debug_printf("encoderNum:%d\r\n",encoder_dev.encoderNum);		//正转}if(second_a == 1 && second_b == 0){if(encoder_dev.encoderNum != 0) encoder_dev.encoderNum--;Debug_printf("encoderNum:%d\r\n",encoder_dev.encoderNum);		//反转}}first_a = second_a;           first_b = second_b;}ec11_time_stamp = 0;}}}
}

旋转编码器硬件电路也需要注意几点
1、旋转编码器旋转过程中也是有毛刺需要消抖的,软件消抖或是硬件消抖(建议是硬件,加个电容即可)
2、以下是参考电路,加了那个100NF的电容之后,使用示波器观察,几乎看不到抖动的毛刺,软件就简单了,不需要消抖

在这里插入图片描述
在这里插入图片描述

这篇关于STM32驱动_旋转编码器EC11的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194866

相关文章

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s