接线

线色 端子名
褐色 电源+5V~24V
蓝色 0V(COMMON)
黑色 输出A相
白色 输出B相
橙色 输出Z相

输出说明

AB相为正交信号,若A相超前B相,说明编码器正旋
若B相超前A相,说明编码器反旋

每转一圈,AB输出脉冲数等于编码器线数,而一圈Z相仅输出一个脉冲波

编程

输入捕获

这里采用定时器4的通道1和通道2

void TIM4_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;      //PB6 ch1  A,PB7 ch2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);   //使能TIM4时钟   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能GPIOB时钟GPIO_StructInit(&GPIO_InitStructure);                  //将GPIO_InitStruct中的参数按缺省值输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //PB6 PB7浮空输入    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);                           NVIC_InitStructure2.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure2);TIM_DeInit(TIM4);TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);TIM_TimeBaseStructure.TIM_Period = 999*4;                //设定计数器重装值   TIMx_ARR = 线数*4TIM_TimeBaseStructure.TIM_Prescaler = 0;                 //TIM4时钟预分频值TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;  //设置时钟分割 T_dts = T_ck_int  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);              //使用编码器模式3,上升下降都计数        TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);TIM_ICStructInit(&TIM_ICInitStructure);      //将结构体中的内容缺省输入TIM_ICInitStructure.TIM_ICFilter = 6;        //选择输入比较滤波器 TIM_ICInit(TIM4, &TIM_ICInitStructure);      //将TIM_ICInitStructure中的指定参数初始化TIM3TIM_ClearFlag(TIM4, TIM_FLAG_Update);        //清除TIM3的更新标志位TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);   //运行更新中断//Reset counterTIM4->CNT = 0;TIM_Cmd(TIM4, ENABLE);   //启动TIM4定时器}

中断服务函数(溢出)

//编码器接口模式
void TIM4_IRQHandler(void)
{   if(TIM4->SR&0x0001)//溢出中断{;}   TIM4->SR&=~(1<<0);//清除中断标志位
}

这一步以后,可以将编码器的A相和B相接入PB6和PB7计算脉冲

外部中断:Z相归零

在增量式编码器中,没有绝对0位,以上电复位时编码器的位置作为计数0点。每转一圈,Z相输出一个脉冲,此时应当软件将计数脉冲清零,以确保计数与实际一致。

外部中断初始化

//Z相归零
void EXTI_PA1_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure;/* config the extiline(PA1) clock and AFIO clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_AFIO,ENABLE);/* config the NVIC */NVIC_InitStructure1.NVIC_IRQChannel = EXTI1_IRQn;NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure1);/* EXTI line gpio config(PA1) */    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                // 上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);/* EXTI line(PA1) mode config */GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1); EXTI_InitStructure.EXTI_Line = EXTI_Line1;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;      //下降沿中断EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);
}

中断服务函数

void EXTI1_IRQHandler(void)
{TIM4->CNT = 0;             //每次遇到相对零(Z信号)就将计数归0 TIM_Cmd(TIM4, ENABLE);EXTI_ClearITPendingBit(EXTI_Line1);
}

此后只需要读取

count = TIM4->CNT/4

即为计数脉冲值

运行截图


本人使用的时OMRONE6B2-CWZ6C 1000线编码器,因此旋转到最大值(1000)时归零

OMRON E6B2-CWZ6C相关推荐

  1. java dotnet core_在.NET Core 2.0中使用Omron库

    我正在尝试在ASP.NET Core 2.0应用程序中使用Omron库(即Compolet) . 我为这些类添加了程序集引用,但在运行时,它们尝试找到 System.Windows.Forms 程序集 ...

  2. 欧姆龙OMRON PLC之HostLink通讯协议(五)- CP1H以太网FINS/TCP通讯实例

    //写在前面: 自2010年起,本人陆续在新浪博客上面发了几篇OMRON PLC的应用笔记,曾经很疑惑阅读量异常增加,后来发现原来是这里有人转载.现将原文照发在这里,希望能帮到做工控的同行朋友们. C ...

  3. e5cz温控表中文说明书_欧姆龙温控器e5cz说明书 OMRON温控表E5EC说明书

    欧姆龙温控器e5cz说明书||OMRON温控表E5EC说明书 联系人:魏工 : 座机: QQ:2030149354 产品资料: 輸入種類設定 开机时初始状态下SV会显示输入传感器种类,出厂预设于K1热 ...

  4. OMRON NJ501-1520真实项目程序 欧姆龙NJ做的程序27轴+110个气缸+1个机械手

    OMRON NJ501-1520真实项目程序 欧姆龙NJ做的程序27轴+110个气缸+1个机械手. 里面的功能块可以会给你种全新的思维. 如果你想扩展编程思维以及提升编程能力! 里面写的气缸块 伺服块 ...

  5. kepware KEPServerEX与欧姆龙NX系列PLC通讯-Omron NJ Ethernet

    KEPServerEX 与欧姆龙NX系列PLC通讯 Omron NJ Ethernet 北京东方鼎晨科技有限公司 目 录 1. 前言 2. 欧姆龙PLC端相关设置 3. Kepware端相关设置 4. ...

  6. OMRON CJ系列CJ1W-EIP21通过网关设备 EtherNetIP转RS232/485与Modbus Slave软件测试记录文档

    OMRON CJ系列CJ1W-EIP21通过网关设备 EnTalk EtherNetIP Adapter - RS232/485与Modbus Slave软件测试记录文档 时间:2021年2月26 记 ...

  7. OMRON欧姆龙PLC如何实现远程上下载程序?

    欧姆龙(omron),是日系PLC当中市场占有率仅次于三菱的一款强大品牌,其兼具了三菱在运动控制以及西门子在总线控制上的优势,在中小型场合以及多轴控制上倍受工程师们的欢迎. 当前市面上欧姆龙PLC根据 ...

  8. OMRON NB7触摸屏添加.h头文件

    OMRON新的NB7触摸屏号称支持c89语言,但是我进去一看其每个生成的用户c文件,都有一个MainEntry()似乎是开放给上级某个虚拟引擎调用的,用户c文件无法看到其他的用户c文件,也无法共享函数 ...

  9. 【转】欧姆龙OMRON PLC之 CP1H 以太网FINS/TCP通讯实例

    原文:http://blog.sina.com.cn/s/blog_539cee190102wr4t.html CP1H上面的选件板插槽可以插入1-2块CP1W-CIF41模块,系统即具有了以太网功能 ...

  10. omron欧姆龙NJ NX程序 全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏

    omron欧姆龙NJ NX程序 全自动锂电池二封机,主站NJ501-1400+威纶通触摸屏. 整机采用EtherCAT总线网络节点控制,松下A6总线控制. 轴控制全部封装成功能块,可按照使用选择对应的 ...

最新文章

  1. html固定广告,css如何实现广告固定动态漂浮
  2. RDKit | 删除方差低的描述符
  3. android 获取活动栈,活动的生命周期系列(1)返回栈
  4. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...
  5. 听了一堂《**学院》的课,我也是醉了
  6. Vim的基本操作总结
  7. java+多线程菜鸟_java多线程
  8. 图像识别开源代码_灰度图像着色开源代码
  9. SpringBoot 2.x 使用Redis作为项目数据缓存
  10. CLion设置背景图片(Pycharm等)
  11. 关于改良报告与学习总结(Ⅰ)
  12. You specified a pre-MSA CPU in your CFLAGS
  13. 开源软件的总拥有成本指南
  14. 辉迅手机号码归属地查询软件 手机号码归属地 手机查询
  15. 粒子群算法python_用Python实现粒子群算法(PSO)
  16. 知乎推荐育儿书籍汇总
  17. AR技术应用 の 如何做一个Pokemon GO这只皮卡丘是你的吗?
  18. 如何(不)让你的Python代码不再晦涩难懂
  19. 英语口语练习四十三之7种方式说“温柔”
  20. openstack的endpoint

热门文章

  1. kawamura+maya+picture_zbrush+powermill+mach3+cnc=mydream
  2. libev 源码解析
  3. Genymotion破解版AMD显卡,虚拟机安装
  4. 虚拟串口的使用 (vspd)
  5. cocos creator2.4.4益智教育游戏源码《顶级食物链》源码H5+安卓+IOS三端源码
  6. Messages BreakPoints in 64dbg(翻译)
  7. 替代A100,英伟达向中国市场推出性能阉割版A800 GPU芯片
  8. test STM32F407 ETH RMII
  9. 在pdf文件中找关键字的坐标
  10. 基于51单片机的水质水位PH值溶解率电导率水温浊度检测proteus仿真原理图PCB