使用带有 AVR 微控制器的旋转编码器

2024-02-12

我无法让旋转编码器与 AVR 微控制器正常工作。编码器是机械式的ALPS编码器 http://no.farnell.com/1520815/passives/product.us0?sku=alps-ec12d1524401,我正在使用亚特米加168 http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf.

澄清

我尝试过使用外部中断来监听引脚,但似乎太慢了。当引脚 A 变高时,中断程序启动,然后检查引脚 B 是否为高电平。这个想法是,如果引脚 B 在引脚 A 变高时也处于高电平,那么它会逆时针旋转。如果引脚 B 为低电平,则它顺时针旋转。但似乎 AVR 检查引脚 B 的时间太长,所以它总是读为高。

我还尝试创建一个程序,该程序会一直阻塞,直到引脚 B 或引脚 A 发生变化。但可能是编码器旋转时噪音太大,因为这也不起作用。我的最后一次尝试是使用一个计时器,将最后 8 个值存储在缓冲区中,并检查它是否从低到高。这也不起作用。

我尝试过确定编码器的范围,从第一个 Pin 更改到其他 Pin 更改似乎需要 2 到 4 毫秒。


我有一个关于旋转编码器及其使用方法 http://www.ubasics.com/adam/electronics/doc/rotryenc.shtml,您可能会发现这很有用。

不幸的是,如果没有更多信息,我无法解决您的特定问题。

哪些微控制器引脚连接到编码器,您当前用于解码脉冲的代码是什么?

好吧,您正在处理一些不同的问题,第一个问题是这是一个机械编码器,因此您必须处理开关噪音(弹跳、颤动)。这数据表 http://www.farnell.com/datasheets/103465.pdf表示部件最多可能需要 3 毫秒才能停止弹跳并创建错误输出。

您需要创建一个去抖例程。其中最简单的是不断检查 A 是否变高。如果是,则启动计时器并在 3 毫秒后再次检查。如果它仍然很高,那么您可以检查 B - 如果它不高,那么您忽略杂散脉冲并继续寻找 A 高点。当您检查 B 时,您会查看它,启动 3 毫秒的计时器,然后再次查看 B。如果两次都相同,那么您可以使用该值 - 如果它在 3 毫秒内发生变化,那么您必须再次执行此操作(读取 B,等待 3 毫秒,然后再次读取它并查看是否匹配)。

atmega 的速度足够快,您不必担心这些检查速度缓慢,除非您的时钟速度也很慢。

一旦你处理了机械噪音,那么你想要查看一个正确的格雷码例程 - 你所遵循的算法将不起作用,除非你在 B 变低时 A 为高时也递减。通常,人们存储两个输入的最后一个值,然后将其与两个输入的新值进行比较,并使用一个小函数基于此进行递增或递减。 (查看我上面提到的表格网站上的“高分辨率阅读”标题)。我将两个读数组合成一个四位数字,并使用一个简单的数组来告诉我是递增还是递减计数器,但也有更先进的解决方案,并且针对代码大小、速度或代码维护的简易性进行了优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用带有 AVR 微控制器的旋转编码器 的相关文章

  • Could not find encoder for codec id 27: Encoder not found

    在detectron2测试demo时出现如题所示问题 xff0c 解决 xff1a 改 xff1a fourcc 61 cv2 VideoWriter fourcc 34 x264 34 为 xff1a fourcc 61 cv2 Vide
  • mega328p-ADC,PWM,UART驱动

    ADC驱动 函 数 名 Ai Init 函数功能 Ai端口初始化 输入参数 void 输出参数 void 返 回 值 void 参考文档 void 创 件 人 程强刚 创建日期 2016 02 09 修改历史 void Ai Init vo
  • #在C中定义一个元组

    我希望能够定义一个元组来表示其他宏所需的参数 我认为展示我想要的最好方法是展示一个例子 include
  • Arduino 串行中断

    我正在开发 Arduino Mega 2560 项目 在 Windows 7 PC 上 我使用 Arduino1 0 IDE 我需要建立波特率为 115200 的串行蓝牙通信 当 RX 上有数据可用时 我需要接收中断 我见过的每一段代码都使
  • 主源文件中的结构值未更新

    我的项目的一部分 一些源文件是button key h button key h lcd h mani c etc 在按钮 key H 中使用了一个结构并声明为 struct menu uint8 t Hour uint8 t Minute
  • 在 Windows 上的软件中关闭 USB 设备的电源

    我想通过 Windows 上的软件重新启动 USB 设备 我正在开发一个小型 USB 电源微控制器 该芯片将在电源循环后恢复到本机行为并允许代码下载 由于我的代码会在出现问题时使设备崩溃 使其忽略所有 USB 命令 因此我必须从系统中物理拔
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • Base64编码器和解码器

    Android 中是否有用于字符串的 Base 64 解码器和编码器 这是如何使用的示例Base64类来编码和解码简单的字符串值 String to be encoded with Base64 String text Test Sendi
  • 为什么 iostream 在 MCU 上占用如此多的闪存空间?

    我使用 GCC 5 2 0 编译 EFM32 MCU 基于 Cortex M 内核 的代码 当我想要时 我注意到代码大小急剧增加 include
  • 学习嵌入式编程的最佳平台? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • C: typedef 联合体

    在相关问题中没有找到任何内容 最有可能的是超级菜鸟 但我还是会问 我的 h 文件中有以下内容 typedef union API Packet 0x90 uint8 t packet 26 struct pack struct uint8
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 8 位、16 位、32 位处理器/微控制器中整数的大小是多少?

    8 位 16 位 32 位处理器 微控制器中整数的大小是多少 我想这取决于内部累加器 寄存器的大小 但不确定 谢谢 我只知道一种编程语言定义了integer数据类型 但很少用于 8 位和 16 位体系结构 C 是最广泛使用的 8 位 16
  • 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB ]

    我有 PIC18F87J11 系列 并且正在使用 MPLAB C18 编译器 我可以给以下变量的最大字节是多少 我知道我必须修改链接器文件才能达到 256 字节以上 pragma udata CONNECTION TABLE 这是我干净的链
  • 如何为 Arduino 或类似的微控制器编写 JavaScript 编译器? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我意识到这个问题会引起一些人的注意 并且我意识到 JavaScript 传统上是一种解释性语言 请让我解释一下 我是一名专门从事 We
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 适用于 Android 的动画 WebP 编码器

    有没有关于如何编码的示例动画WebP对于安卓 或者也许有人成功了并且可以指导我完成它 我有一批 webP 图像 我想用它们创建一个动画图像 有 libwebp 库 但是 它不支持动画 webP 如果我从所读内容中理解正确 我需要使用 web
  • 使用快速同步 h264_qsv 编码器时 ffmpeg avcodec_encode_video2 挂起

    当我使用 mpeg4 或 h264 编码器时 我能够使用 ffmpeg 3 1 0 的 API 成功编码图像以生成有效的 AVI 文件 但是 当我使用快速同步编码器 h264 qsv 时 avcodec encode video2 有时会挂

随机推荐