找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1496|回复: 4
打印 上一主题 下一主题
收起左侧

关于中空编码器读脉冲问题

[复制链接]
跳转到指定楼层
楼主
79黑币
我的想法是通过外部中断来判断脉冲数但转动一次却总是进入了两次外部中断,导致本来应该走一步的情况却走了两步。

硬件消抖电路大概是这样的。
用示波器测试,黄色代表中断触发,绿色代表输入脉冲信号,如果中断触发,中断引脚的电平就进行一次翻转
结果如图
即明明只是一个上升沿信号,中断却触发了两次,一次升高一次下降


中断代码大致如上
希望各位可以提供一些解题思路

最佳答案

查看完整内容

在中断中用while()是什么神仙写法? 中断是用来处理突发/快速的信号 所以中断中的代码越简单越好 而消抖电路也好像有点问题 不转时电容充满当开路 SW_A点为5V 转动时SW_A点接地,瞬间0V 电容对地放电 再转多少少 SW_A点接不接地,电容开始充电当短路 于是SW_A点被两个10k电阻分压得2.5V产生第一次上升沿 电容慢慢充满,电流减少,SW_A点电压慢慢上升 型成第二次上升沿 参考一下别人的消抖电路吧 另外如 ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2021-8-11 20:48 | 只看该作者
在中断中用while()是什么神仙写法?
中断是用来处理突发/快速的信号
所以中断中的代码越简单越好

而消抖电路也好像有点问题
不转时电容充满当开路
SW_A点为5V
转动时SW_A点接地,瞬间0V
电容对地放电
再转多少少
SW_A点接不接地,电容开始充电当短路
于是SW_A点被两个10k电阻分压得2.5V产生第一次上升沿
电容慢慢充满,电流减少,SW_A点电压慢慢上升
型成第二次上升沿
参考一下别人的消抖电路吧





另外如果转动速度不快
可以不用中断
详情请参考我的贴子:一定位一脉冲的EC11旋转编码器最简洁的单片机驱动代码


评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:401564 发表于 2021-8-11 21:45 | 只看该作者
不知道你那是什么
EC11是这样的:
使用定时器,1mS或者500uS判断一下A和B的状态
只要判断哪个先出现低电平而已
如果是静止状态电平不固定,那就判断哪个先出现电平变化
步数不同,方法也不同
回复

使用道具 举报

地板
ID:213173 发表于 2021-8-12 08:10 | 只看该作者
楼主的硬件和软件都不对


  1. #include "reg51.h"

  2. sbit SW_A=P3^3;
  3. //sbit SW_B=P3^2;

  4. unsigned char num;

  5. void main()
  6. {
  7.         INT0 = 1;
  8.         IT0 = 1;                    //设置INT0下降沿中断
  9.         EX0 = 1;                    //使能INT0中断
  10.         EA = 1;
  11.        
  12.         while(1);
  13. }

  14. void exint0() interrupt 0       //INT0中断入口
  15. {
  16.    if(!SW_A)
  17.         {
  18.                 if(num<100)num++;       
  19.         }
  20.         else
  21.         {
  22.                 if(num>0)num--;
  23.         }
  24. }
复制代码



评分

参与人数 1黑币 +10 收起 理由
一夜暴富 + 10

查看全部评分

回复

使用道具 举报

5#
ID:584814 发表于 2021-8-12 09:28 | 只看该作者
楼主的仪器的确有些高大上
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表