找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 2844 | 评论数: 4 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-8-11 20:48

正文摘要:

我的想法是通过外部中断来判断脉冲数但转动一次却总是进入了两次外部中断,导致本来应该走一步的情况却走了两步。 中断代码大致如上 希望各位可以提供一些解题思路

回复

ID:584814 发表于 2021-8-12 09:28
楼主的仪器的确有些高大上
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

查看全部评分

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

查看全部评分

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

Powered by 单片机教程网

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