单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 779|回复: 17
收起左侧

EC11编码器的单片机驱动程序

  [复制链接]
boboxuexi 发表于 2020-3-11 21:22 | 显示全部楼层 |阅读模式
之前一直没用到过,今天应朋友要求帮忙写一个EC11驱动,在网上搜了一圈,发现很多驱动用起来并不是很顺手。于是自己写了一个,供参考

                                                                                      时间 2020年3月11日21点21分 东莞
单片机源程序如下:
  1. #include "ec11.h"

  2. unsigned char EC11_Dir = 0;//方向标志
  3. unsigned char TestValue = 0;


  4. #define PIN_EC11_A  P0_4
  5. #define PIN_EC11_B  P0_5


  6. void ec11_init(void)
  7. {
  8.         P0_4 =1;
  9.         P0_5 =1;
  10. }


  11. void _ec11_drives(void)//中断10us中调用
  12. {
  13.         static unsigned char CheckCnt,EC11Status=0;

  14.         if(PIN_EC11_A)
  15.         {
  16.                 if(++CheckCnt > 10)//在中断中调用 值为2即可,快速扫描,适当加长可提高防抖效果。
  17.                 {
  18.                         CheckCnt = 12;
  19.                         if(EC11Status==0)
  20.                         {
  21.                                 if(PIN_EC11_B)
  22.                                 {
  23.                                         EC11_Dir = 0x55;
  24.                                         TestValue--;
  25.                                 }
  26.                                 else
  27.                                 {
  28.                                         EC11_Dir = 0xaa;
  29.                                         TestValue++;
  30.                                 }
  31.                         }
  32.                         EC11Status =1;
  33.                 }
  34.         }
  35.         else
  36.         {
  37.                 if(CheckCnt)
  38.                 {
  39.                         CheckCnt--;
  40.                 }
  41.                 else
  42.                 {
  43.                         if(EC11Status)
  44.                         {
  45.                                 EC11Status=0;
  46.                                 if(PIN_EC11_B)
  47.                                 {
  48.                                         EC11_Dir = 0xaa;
  49.                                         TestValue++;
  50.                                 }
  51.                                 else
  52.                                 {
  53.                                         EC11_Dir = 0x55;
  54.                                         TestValue--;
  55.                                 }
  56.                         }
  57.                 }
  58.         }
  59. }
复制代码
全部资料51hei下载地址:
ec11.zip (891 Bytes, 下载次数: 43)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

JACK_WEI 发表于 2020-3-14 10:10 | 显示全部楼层
老铁 你在东莞哪里
回复

使用道具 举报

18877865862 发表于 2020-4-22 14:00 | 显示全部楼层
谢谢大佬的无私分享
回复

使用道具 举报

紫色的云 发表于 2020-4-22 15:23 | 显示全部楼层
谢谢,学习了
回复

使用道具 举报

XTXB 发表于 2020-5-12 12:40 | 显示全部楼层
试验了一下,效果挺好,不错的
开机会加一,改了一下就可以了,static unsigned char CheckCnt,EC11Status=1;
回复

使用道具 举报

lzzasd 发表于 2020-5-12 13:27 | 显示全部楼层
我编码器重去年写到现在(业余的时间)都没有一个好用的,网上的参考N多,效果都不好,发现无论是IO中断,还是电平比较都会丢脉冲或者因震荡电压干扰计数,EC11还好一点一圈计数少,100分辨率编码器的问题就多了,所以编码器直接接单片机IO口还是有问题的,需要硬件上改改
回复

使用道具 举报

 楼主| boboxuexi 发表于 2020-5-12 16:12 | 显示全部楼层
lzzasd 发表于 2020-5-12 13:27
我编码器重去年写到现在(业余的时间)都没有一个好用的,网上的参考N多,效果都不好,发现无论是IO中断, ...

你想表达什么意思呢?
回复

使用道具 举报

 楼主| boboxuexi 发表于 2020-5-12 16:14 | 显示全部楼层
XTXB 发表于 2020-5-12 12:40
试验了一下,效果挺好,不错的
开机会加一,改了一下就可以了,static unsigned char CheckCnt,EC11 ...

我没发现会加1,改成static unsigned char CheckCnt,EC11Status=1;就不会了吗?
回复

使用道具 举报

 楼主| boboxuexi 发表于 2020-5-12 16:19 | 显示全部楼层
JACK_WEI 发表于 2020-3-14 10:10
老铁 你在东莞哪里

塘厦镇,      
回复

使用道具 举报

lzzasd 发表于 2020-5-18 09:55 | 显示全部楼层
boboxuexi 发表于 2020-5-12 16:12
你想表达什么意思呢?

我觉得EC11还好   20分辨率   要是再快点100分辨率可能就不适用了   速度一块会丢脉冲
回复

使用道具 举报

 楼主| boboxuexi 发表于 2020-5-18 10:13 | 显示全部楼层
lzzasd 发表于 2020-5-18 09:55
我觉得EC11还好   20分辨率   要是再快点100分辨率可能就不适用了   速度一块会丢脉冲

那就要改采样的时间,没有什么不适用的,任何代码都不是说可以直接使用,别人只是提供一个编程思想!
回复

使用道具 举报

waj163 发表于 2020-6-10 13:20 | 显示全部楼层
void _ec11_drives(void)//你好,开一个10us的定时器中断,然后在中断里面调用它对么?
回复

使用道具 举报

waj163 发表于 2020-6-10 13:21 | 显示全部楼层
void _ec11_drives(void)//中断10us中调用
你好,这个是开一个定时器中断,在中断里调用对么?
回复

使用道具 举报

robter 发表于 2020-6-30 10:32 | 显示全部楼层
很好的编程思路,学习了
回复

使用道具 举报

yyzf998 发表于 2020-7-2 06:55 | 显示全部楼层
很好的实例,谢谢楼主的无私奉献!少年强则国强!中国的发展都是因为你们这些无私奉献的人而提速!一群人的力量总比一个人强,
回复

使用道具 举报

gm388 发表于 2020-7-3 15:54 | 显示全部楼层
用51做高分辨率且高速时确实会丢脉冲,如果51像STM32有专门的硬件编码器接口就好了
回复

使用道具 举报

Jeff_BlindCat 发表于 2020-7-3 20:57 | 显示全部楼层
前辈探讨艺精进,
萌新瑟瑟获知新;
传帮可带新小白,
日学一至不废春。
回复

使用道具 举报

 楼主| boboxuexi 发表于 2020-7-6 08:53 | 显示全部楼层
Jeff_BlindCat 发表于 2020-7-3 20:57
前辈探讨艺精进,
萌新瑟瑟获知新;
传帮可带新小白,

好诗好诗。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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