简 介: 通过ESP32 对于KYTB角度编码器进行测试,初步验证了KYTB的基本功能。由于ESP32的端口中断具有最大上限频率,通过实验测量到这个频率大约为26kHz

关键词角度编码器KYTBESP32

#mermaid-svg-2ercAkEZG5xBtxRS .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-2ercAkEZG5xBtxRS .label text{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .node rect,#mermaid-svg-2ercAkEZG5xBtxRS .node circle,#mermaid-svg-2ercAkEZG5xBtxRS .node ellipse,#mermaid-svg-2ercAkEZG5xBtxRS .node polygon,#mermaid-svg-2ercAkEZG5xBtxRS .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-2ercAkEZG5xBtxRS .node .label{text-align:center;fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .node.clickable{cursor:pointer}#mermaid-svg-2ercAkEZG5xBtxRS .arrowheadPath{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-2ercAkEZG5xBtxRS .flowchart-link{stroke:#333;fill:none}#mermaid-svg-2ercAkEZG5xBtxRS .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-2ercAkEZG5xBtxRS .edgeLabel rect{opacity:0.9}#mermaid-svg-2ercAkEZG5xBtxRS .edgeLabel span{color:#333}#mermaid-svg-2ercAkEZG5xBtxRS .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-2ercAkEZG5xBtxRS .cluster text{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-2ercAkEZG5xBtxRS .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-2ercAkEZG5xBtxRS text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-2ercAkEZG5xBtxRS .actor-line{stroke:grey}#mermaid-svg-2ercAkEZG5xBtxRS .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-2ercAkEZG5xBtxRS .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-2ercAkEZG5xBtxRS #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-2ercAkEZG5xBtxRS .sequenceNumber{fill:#fff}#mermaid-svg-2ercAkEZG5xBtxRS #sequencenumber{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS #crosshead path{fill:#333;stroke:#333}#mermaid-svg-2ercAkEZG5xBtxRS .messageText{fill:#333;stroke:#333}#mermaid-svg-2ercAkEZG5xBtxRS .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-2ercAkEZG5xBtxRS .labelText,#mermaid-svg-2ercAkEZG5xBtxRS .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-2ercAkEZG5xBtxRS .loopText,#mermaid-svg-2ercAkEZG5xBtxRS .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-2ercAkEZG5xBtxRS .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-2ercAkEZG5xBtxRS .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-2ercAkEZG5xBtxRS .noteText,#mermaid-svg-2ercAkEZG5xBtxRS .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-2ercAkEZG5xBtxRS .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-2ercAkEZG5xBtxRS .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-2ercAkEZG5xBtxRS .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-2ercAkEZG5xBtxRS .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .section{stroke:none;opacity:0.2}#mermaid-svg-2ercAkEZG5xBtxRS .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-2ercAkEZG5xBtxRS .section2{fill:#fff400}#mermaid-svg-2ercAkEZG5xBtxRS .section1,#mermaid-svg-2ercAkEZG5xBtxRS .section3{fill:#fff;opacity:0.2}#mermaid-svg-2ercAkEZG5xBtxRS .sectionTitle0{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .sectionTitle1{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .sectionTitle2{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .sectionTitle3{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-2ercAkEZG5xBtxRS .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .grid path{stroke-width:0}#mermaid-svg-2ercAkEZG5xBtxRS .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-2ercAkEZG5xBtxRS .task{stroke-width:2}#mermaid-svg-2ercAkEZG5xBtxRS .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .taskText:not([font-size]){font-size:11px}#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-2ercAkEZG5xBtxRS .task.clickable{cursor:pointer}#mermaid-svg-2ercAkEZG5xBtxRS .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-2ercAkEZG5xBtxRS .taskText0,#mermaid-svg-2ercAkEZG5xBtxRS .taskText1,#mermaid-svg-2ercAkEZG5xBtxRS .taskText2,#mermaid-svg-2ercAkEZG5xBtxRS .taskText3{fill:#fff}#mermaid-svg-2ercAkEZG5xBtxRS .task0,#mermaid-svg-2ercAkEZG5xBtxRS .task1,#mermaid-svg-2ercAkEZG5xBtxRS .task2,#mermaid-svg-2ercAkEZG5xBtxRS .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutside0,#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutside2{fill:#000}#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutside1,#mermaid-svg-2ercAkEZG5xBtxRS .taskTextOutside3{fill:#000}#mermaid-svg-2ercAkEZG5xBtxRS .active0,#mermaid-svg-2ercAkEZG5xBtxRS .active1,#mermaid-svg-2ercAkEZG5xBtxRS .active2,#mermaid-svg-2ercAkEZG5xBtxRS .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-2ercAkEZG5xBtxRS .activeText0,#mermaid-svg-2ercAkEZG5xBtxRS .activeText1,#mermaid-svg-2ercAkEZG5xBtxRS .activeText2,#mermaid-svg-2ercAkEZG5xBtxRS .activeText3{fill:#000 !important}#mermaid-svg-2ercAkEZG5xBtxRS .done0,#mermaid-svg-2ercAkEZG5xBtxRS .done1,#mermaid-svg-2ercAkEZG5xBtxRS .done2,#mermaid-svg-2ercAkEZG5xBtxRS .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-2ercAkEZG5xBtxRS .doneText0,#mermaid-svg-2ercAkEZG5xBtxRS .doneText1,#mermaid-svg-2ercAkEZG5xBtxRS .doneText2,#mermaid-svg-2ercAkEZG5xBtxRS .doneText3{fill:#000 !important}#mermaid-svg-2ercAkEZG5xBtxRS .crit0,#mermaid-svg-2ercAkEZG5xBtxRS .crit1,#mermaid-svg-2ercAkEZG5xBtxRS .crit2,#mermaid-svg-2ercAkEZG5xBtxRS .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-2ercAkEZG5xBtxRS .activeCrit0,#mermaid-svg-2ercAkEZG5xBtxRS .activeCrit1,#mermaid-svg-2ercAkEZG5xBtxRS .activeCrit2,#mermaid-svg-2ercAkEZG5xBtxRS .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-2ercAkEZG5xBtxRS .doneCrit0,#mermaid-svg-2ercAkEZG5xBtxRS .doneCrit1,#mermaid-svg-2ercAkEZG5xBtxRS .doneCrit2,#mermaid-svg-2ercAkEZG5xBtxRS .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-2ercAkEZG5xBtxRS .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-2ercAkEZG5xBtxRS .milestoneText{font-style:italic}#mermaid-svg-2ercAkEZG5xBtxRS .doneCritText0,#mermaid-svg-2ercAkEZG5xBtxRS .doneCritText1,#mermaid-svg-2ercAkEZG5xBtxRS .doneCritText2,#mermaid-svg-2ercAkEZG5xBtxRS .doneCritText3{fill:#000 !important}#mermaid-svg-2ercAkEZG5xBtxRS .activeCritText0,#mermaid-svg-2ercAkEZG5xBtxRS .activeCritText1,#mermaid-svg-2ercAkEZG5xBtxRS .activeCritText2,#mermaid-svg-2ercAkEZG5xBtxRS .activeCritText3{fill:#000 !important}#mermaid-svg-2ercAkEZG5xBtxRS .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-2ercAkEZG5xBtxRS g.classGroup text .title{font-weight:bolder}#mermaid-svg-2ercAkEZG5xBtxRS g.clickable{cursor:pointer}#mermaid-svg-2ercAkEZG5xBtxRS g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-2ercAkEZG5xBtxRS g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-2ercAkEZG5xBtxRS .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-2ercAkEZG5xBtxRS .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-2ercAkEZG5xBtxRS .dashed-line{stroke-dasharray:3}#mermaid-svg-2ercAkEZG5xBtxRS #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS .commit-id,#mermaid-svg-2ercAkEZG5xBtxRS .commit-msg,#mermaid-svg-2ercAkEZG5xBtxRS .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-2ercAkEZG5xBtxRS g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-2ercAkEZG5xBtxRS g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-2ercAkEZG5xBtxRS g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-2ercAkEZG5xBtxRS .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-2ercAkEZG5xBtxRS .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-2ercAkEZG5xBtxRS .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-2ercAkEZG5xBtxRS .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-2ercAkEZG5xBtxRS .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-2ercAkEZG5xBtxRS .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-2ercAkEZG5xBtxRS .edgeLabel text{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-2ercAkEZG5xBtxRS .node circle.state-start{fill:black;stroke:black}#mermaid-svg-2ercAkEZG5xBtxRS .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-2ercAkEZG5xBtxRS #statediagram-barbEnd{fill:#9370db}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-state .divider{stroke:#9370db}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-2ercAkEZG5xBtxRS .note-edge{stroke-dasharray:5}#mermaid-svg-2ercAkEZG5xBtxRS .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-2ercAkEZG5xBtxRS .error-icon{fill:#522}#mermaid-svg-2ercAkEZG5xBtxRS .error-text{fill:#522;stroke:#522}#mermaid-svg-2ercAkEZG5xBtxRS .edge-thickness-normal{stroke-width:2px}#mermaid-svg-2ercAkEZG5xBtxRS .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-2ercAkEZG5xBtxRS .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-2ercAkEZG5xBtxRS .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-2ercAkEZG5xBtxRS .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-2ercAkEZG5xBtxRS .marker{fill:#333}#mermaid-svg-2ercAkEZG5xBtxRS .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-2ercAkEZG5xBtxRS {color: rgba(0, 0, 0, 0.75);font: ;}

角度编码器
文章目录
基本信息
计数实验
实验方案
编程实验
ESP32计数
测试ESP32端口
中断最大频率
实验结论

§01 角度编码器


  这款角度编码器来自于北京科宇提供的车模上配套的微型编码器。型号:KYTB-1503-1024

一、基本信息

1、外部接口

  根据传感器铭牌标示,其外部引线为 6 跟线,对应的功能定义为:

【表1-1 编码器管脚功能定义】
PIN1 PIN2 PIN3 PIN4 PIN5 PIN6
GND 3 ~ 5V A B Z NC

2、信号测量

测试条件:
VCC电压: +5V

▲ 图1.1.1 A,B电压波形

▲ 图1.1.2 Z,A波形

§02 计数实验


一、实验方案

1、实验平台

  使用 ESP32-S模块转接板设计与实现 硬件模块。 根据 MicroPython: Interrupts with ESP32 and ESP8266 | Random Nerd Tutorials 中关于ESP32端口中断介绍,使用ESP32端口中断完成对于KYTB-1503 输出脉冲的计数。

2、连线方案

  安装下面表格将传感器连接如ESP32转接模块最右边的三个输出管脚。

【表2-1 连接方案】
A B C
GPIO2 GPIO16 GPIO17

  为了使得输出的信号能够兼容ESP32电平(3.3V),对于角度传感器工作电源设置为3.3V

▲ 图2.0 实验平台

二、编程实验

1、基本计数实验

(1) 实验Python代码

from machine                import Pin,Timer
import timezcount = 0
acount = 0
bcount = 0allcount = 0pina = Pin(2, Pin.IN)
pinb = Pin(16, Pin.IN)
pinz = Pin(17, Pin.IN)def ISR_abz(pin):global acount, bcount, zcount, allcountif pin == pina:acount += 1if pin == pinb:bcount += 1if pin == pinz:zcount += 1allcount += 1pina.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)
pinb.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)
pinz.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)while True:print((acount, bcount, zcount, allcount))time.sleep_ms(250)

(2) 输出结果

▲ 图2.1 程序输出计数结果

2、角度计数

  根据A的上升沿脉冲进行计数,根据B的电平高低判断是递增还是递减。

  利用Z脉冲完成清零。

(1) 实现代码

from machine                import Pin,Timer
import timeacount = 0
allcount = 0pina = Pin(2, Pin.IN)
pinb = Pin(16, Pin.IN)
pinz = Pin(17, Pin.IN)def ISR_abz(pin):global acount, allcountif pin == pina:acount += 1if pinb.value() == 0:allcount += 1else: allcount -= 1if pin == pinz:allcount = 0acount = 0pina.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)
pinz.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)while True:print((acount, allcount))time.sleep_ms(25X)

(2) 输出结果

  可以看到输出的 A, ALLCOUNT两个变量,转向一边的时候,它们是相同的递增,当相反旋转的时候,它们是正负取值。

  可以验证,计数的范围 0 ~ 1023

▲ 图2.2 技术模式输出结果

3、脉冲丢失

  由于使用了端口中断来获得对应的脉冲个数,如果角度编码器旋转过快,则会出现脉冲丢失情况。

  在 ISR中,Z脉冲出现的时候,保持其中的ALLCOUNT变量,可以看到当编码器旋转快的时候, ALLCOUNT的最大值小于1024。 这说明在其中会出现很多的脉冲丢失。

§03 ESP32计数


  在前面使用ESP32计数过程中,由于使用了端口中断来对脉冲进行计数,出现了脉冲丢失现象。那么ESP32的端口中断最快能够响应多大频率的计数呢?

一、测试ESP32端口中断最大频率

1、测试方案

  使用DG1062数字可编程信号源发生器,输出方波,送入ESP32 GPIO2 引起端口中断。在ESP32中使用定时器产生1秒中的中断,对于GPIO2的计数进行读取。测试在输入信号多大的时候,计数开始有丢失。

(1) 测试Python代码

from machine                import Pin,Timer
import timeacount = 0
allcount = 0pina = Pin(2, Pin.IN)keepa = 0
time1count = 0def ISR_abz(pin):global acount, allcount, keepzif pin == pina:acount += 1pina.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)def time_isr(n):global keepa, acount, time1countkeepa = acountacount = 0time1count += 1tim0 = Timer(0)
tim0.init(period=1000, mode=Timer.PERIODIC, callback=time_isr)while True:print((acount, keepa, time1count))time.sleep_ms(250)

2、测试结果

  在输入频率小于15kHz时,输出的数字总是与频率相同。当输入频率大于15kHz的时候,输出数字开始有丢失数字。

(1) MicroPython程序

from machine                import Pin,Timer
import timeacount = 0
allcount = 0pina = Pin(2, Pin.IN)keepa = 0
time1count = 0def ISR_abz(pin):global acount, allcount, keepzif pin == pina:acount += 1pina.irq(trigger=Pin.IRQ_RISING, handler=ISR_abz)def time_isr(n):global keepa, acount, time1countkeepa = acountacount = 0time1count += 1tim0 = Timer(0)
tim0.init(period=1000, mode=Timer.PERIODIC, callback=time_isr)while True:key = input()print(keepa)

(2) 测量程序

from headm import *
from tsmodule.tsvisa        import *dg1062open(113)dg1062freq(1, 10000)def thonnycmd(cmd):tspsendwindowkey('Thonny', 's', alt=1, noreturn=1)tspsendwindowkey('Thonny', '%s
'%cmd, noreturn=1)def thonnyshs(cmd='', wait=0):tspsendwindowkey('Thonny', 's', alt=1, noreturn=1)if len(cmd) > 0:tspsendwindowkey('Thonny', '%s\r'%cmd, noreturn=1)if wait > 0:time.sleep(wait)tspsendwindowkey('Thonny', 'ac', control=1, noreturn=1)tspfocuswindow('TEASOFT:1')return clipboard.paste()setf = linspace(25000, 27000, 50)
testdim = []for f in setf:dg1062freq(1, floor(f))time.sleep(2)pastestr = thonnyshs('\r', 0.1).split()x = float(pastestr[-1])testdim.append(floor(f) - x)printff(f, x)tspsave('measure', setf=setf, out=testdim)
plt.plot(setf, testdim)
plt.xlabel("Frequency(Hz)")
plt.ylabel("Error")
plt.grid(True)
plt.tight_layout()
plt.show()printf('\a')

(3) 测量结果

▲ 图3.1.1 不同频率下的计数错误

▲ 图3.1.2 不同频率下的计数错误

▲ 图3.1.3 不同频率下的计数错误

  可以看到当频率实际超过26kHz的时候,输出的误差会突然增加了。

※ 实验结论 ※


  对于来自于科宇的角度编码器进行了初步测试。对于它的接口信号功能进行确认。

  利用ESP32的端口中断功能来对于角度传感器的脉冲进行计数。如果脉冲的频率快的话,会出现一定的脉冲丢失现象。

  使用DG1062可编程信号源对于ESP32的端口中断最大程序进行测试,当频率超过26kHz时,丢失脉冲的线性会突然增加。


■ 相关文献链接:

  • ESP32-S模块转接板设计与实现
  • MicroPython: Interrupts with ESP32 and ESP8266 | Random Nerd Tutorials

● 相关图表链接:

  • 表1-1 编码器管脚功能定义
  • 图1.1.1 A,B电压波形
  • 图1.1.2 Z,A波形
  • 表2-1 连接方案
  • 图2.0 实验平台
  • 图2.1 程序输出计数结果
  • 图2.2 技术模式输出结果
  • 图3.1.1 不同频率下的计数错误
  • 图3.1.2 不同频率下的计数错误
  • 图3.1.3 不同频率下的计数错误

微型角度编码器 : KYTB-1503-1024相关推荐

  1. 角度编码器 ST-3806-15-RS

      在 两轴机械臂+机械爪整体控制板设计与机械爪控制调试 双轴机械臂的控制中,使用了基于 BH38旋转编码器初步测试 作为两个关节的运动角度测量,但是由于BH38传感器采用了MODBUS协议,所使用的 ...

  2. 海德汉角度编码器RCN727F与替代型号RCN8390F参数对比

    广州希洛登自动控制技术有限公司 海德汉圆光栅尺编码器RCN727F是 fanuc系统专用的绝对式编码器 Fanuc02串口孔径有60和100mm2种 电缆有0.5米.1米.3米.5米几大类 精度是2角 ...

  3. 利用中断在 ESP32 MicroPython 程序中读取AM2302

    简 介: 由于使用MicroPython,如果使用指令查询方式读取AM2302的数据,无法控制到非常精确读取时间信息.利用ESP32 MicroPython中的IO中断,获取AM2302的上升沿时间, ...

  4. 计算编码器零点电角度偏移量

    编码器零点电角度偏移量 同步电机的控制,转子的位置是必要的反馈.电机的磁极的换向,控制的是电角度. 编码器的安装和电角度,存在误差. 机械角度的反馈,在多极对数时,需要做一个电角度的转换,进入控制的转 ...

  5. 对机械臂的肩关节与肘关节编码器连接与设置

    ▌01 编码器 在 双旋转轴机械臂 的肩部和肘部安装有 角度编码器 ST-3806-15-RS ,通过角度编码器 STM32F103控制器 来对肩部和肘部的运动进行控制运动补偿. 在 三管脚机械臂控制 ...

  6. 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取

    ➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...

  7. ST-3806系列单圈编码器 说明书

    ▲ 角度编码器 ST-3806-15-RS https://item.taobao.com/item.htm?spm=a1z09.2.0.0.745e2e8dPZ3LXR&id=5928237 ...

  8. stm32正交编码器 原理图_恶劣环境下应用的电感式增量编码器和绝对编码器

    编码器可分为两种基本类型 - 增量编码器和绝对编码器. 增量编码器的显着特征是它报告角度的变化.换句话说,当增量编码器通电时,它不会报告其角位置,直到它具有测量的参考点. 绝对编码器明确地在比例或范围 ...

  9. 线扫相机 编码器_面阵和线扫工业相机选型

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/snowbird13/article/d ...

最新文章

  1. Matlab与线性代数 -- 矩阵的大小
  2. Python开发基础总结之XML+time+OO
  3. 每周一荐: Google Dictionary,The Polar Express
  4. Tomcat常见问题 (配置)及解决方法
  5. Spring和SpringMVC自动扫描注解类的冲突问题
  6. Android属动画ObjectAnimator和ValueAnimator应用
  7. 安卓html可以删除吗,如何删除android中的html标签
  8. POJ-2155 Matrix 二维线段树 | 树状数组
  9. poj 2010(优先队列)
  10. APT: Package ‘vnc4server‘ has no installation candidate 排查过程及解决方法
  11. 帝国cms linux伪静态规则,帝国cms7.2伪静态规则怎么写
  12. [PWA] Check Online Status by using the NavigatorOnLine API
  13. 力扣-64 最小路径和
  14. c语言 归一化图片大小,OpenCV学习笔记(1)——resize函数实现图像大小归一化
  15. mysql能将查询结果与表左查询,MySQL查询与结构
  16. EasyCHM:本程序可能被病毒或者人为修改!的解决方案
  17. 举例 微积分 拉格朗日方程_理解微积分真谛:微分方程
  18. 语言学句法分析树形图怎么画_树形图(句法)
  19. TVS瞬态抑制二极管的工作原理和特点
  20. 2006年网络名言100句(转)

热门文章

  1. 通过 .gitlab-ci.yml配置任务-官方配置文件翻译
  2. 线上应用故障排查之二:高内存占用
  3. 模糊测试(fuzz testing)介绍(一)
  4. canvas百分比加载动画
  5. 12/12 day06
  6. Windows cmd(DOS)命令窗口中echo命令ANSI转义显示彩色字或背景
  7. ide setting
  8. 数据库弱一致性四个隔离级别
  9. 高级运维工程师的打怪升级之路
  10. windows 下xampp集成环境安装mongodb扩展