精华内容
下载资源
问答
  • 增量式编码器计数, VHDL编写, 硬件描述, 4倍频,精准计数, 实现位置、位移测量, 不丢码
  • 西门子高速编码器计数模板基础,用于开发西门子编码器的计数的参考文档
  • 研华PCL833编码器计数卡中文说明书,包含硬件的接线及设置,测试
  • 编码器的使用 增量式编码器倍频技术 增量式编码器输出的脉冲波形信号形式常见的有两种: 一种是占空比 50% 的方波,通道 A 和...这样计数频率就是原始方波信号的 2 倍或 4 倍,换句话说就是,将编码器的分辨率提高了 2

    编码器的使用
    增量式编码器倍频技术

    增量式编码器输出的脉冲波形信号形式常见的有两种:

    1. 一种是占空比 50% 的方波,通道 A 和 B 相位差为 90°;
    2. 另一种则是正弦波这类模拟信号,通道 A 和 B 相位差同样为 90°。

    对于第 1 种形式的方波信号,如果把两个通道组合起来看的话,可以发现 A 和 B 各自的上升沿和下降沿都能计数,至少在 1/2 个原始方波周期内就可以计数一次,最多 1/4 个原始方波周期。这样计数频率就是原始方波信号的 2 倍或 4 倍,换句话说就是,将编码器的分辨率提高了 2 到 4倍,具体如下图所示。方波

    图中的方波信号如果只看其中一个通道的上升沿,那计数频率就等于这个通道信号的频率。如果在通道 A 的上升沿和下降沿都进行计数,计数频率就是通道 A 的两倍,即 2 倍频。如果同时对两个通道的上升沿和下降沿都计数,那计数频率就变成了原始信号的 4 倍,即 4 倍频。

    假设有个增量式编码器它的分辨率是 600PPR,能分辨的最小角度是 0.6°,对它进行 4 倍频之后就相当于把分辨率提高到了 600*4=2400PPR,此时编码器能够分辨的最小角度为 0.15°。

    常用测速方法简介
    • M 法:又叫做频率测量法
    这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。设编码器单圈总脉冲数为 C,在时间 T0 内,统计到的编码器脉冲数为 M0,则转速 n 的计算公式为:在这里插入图片描述

    公式中的编码器单圈总脉冲数 C 是常数,所以转速 n 跟 M0 成正比。这就使得在高速测量时 M0变大,可以获得较好的测量精度和平稳性,但是如果速度很低,低到每个 T0 内只有少数几个脉冲,此时算出的速度误差就会比较大,并且很不稳定。也有一些方法可以改善 M 法在低速测量的准确性,上一节提到的增量式编码器倍频技术就是其中一种,比如原本捕获到的脉冲 M0 只有4 个,经过 4 倍频后,相同电机状态 M0 变成了 16 个,也就提升了低速下的测量精度。

    • T 法:又叫做周期测量法
    这种方法是建立一个已知频率的高频脉冲并对其计数,计数时间由捕获到的编码器相邻两个脉冲的间隔时间 TE 决定,计数值为 M1。设编码器单圈总脉冲数为 C,高频脉冲的频率为 F0,则转速 n 的计算公式为:在这里插入图片描述

    公式中的编码器单圈总脉冲数 C 和高频脉冲频率 F0 是常数,所以转速 n 跟 M1 成反比。从公式可以看出,在电机高转速的时候,编码器脉冲间隔时间 TE 很小,使得测量周期内的高频脉冲计数值 M1 也变得很少,导致测量误差变大,而在低转速时, TE 足够大,测量周期内的 M1 也足够多,所以 T 法和 M 法刚好相反,更适合测量低速。

    • M/T 法:这种方法综合了 M 法和 T 法各自的优势,既测量编码器脉冲数又测量一定时间内的高频脉冲数。
    在一个相对固定的时间内,计数编码器脉冲数 M0,并计数一个已知频率为F0 的高频脉冲,计数值为 M1,计算速度值。设编码器单圈总脉冲数为 C,则转速 n 的计算公式为:在这里插入图片描述

    由于 M/T 法公式中的 F0 和 C 是常数,所以转速 n 就只受 M0 和 M1 的影响。电机高速时, M0 增大, M1 减小,相当于 M 法,低速时, M1 增大, M0 减小,相当于 T 法。

    STM32 的编码器接口简介
    STM32 芯片内部有专门用来采集增量式编码器方波信号的接口,这些接口实际上是 STM32 定时器的其中一种功能。不过编码器接口功能只有高级定时器 TIM1、 TIM8 和通用定时器 TIM2 到TIM5 才有。编码器接口用到了定时器的输入捕获部分,功能框图如下图所示。

    我们重点关注编码器接口是如何实现信号采集和倍频的。

    STM32使用的是定时器的编码器模式,定时器TIMx->CNT寄存器接收到的是编码器方波的数量。这里怎么处理是由STM32硬件来完成,大家理解的时候不需要太过纠结。

    通过读取CNT的值,可以知道单位时间内接收到多少方波,进而可以得出电机的转速、方向和转动的圈数。

    展开全文
  • STM32编码器计数

    2019-01-29 13:42:25
    用的stm32的定时器编码器模式,包括.c和.h文件。其中包含做项目时遗留的一些功能,添加进去时把未定义的部分直接删掉就可以使用。
  • 编码器计数原理与电机测速原理——多图解析

    千次阅读 多人点赞 2021-02-10 19:21:40
    编码器,是一种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。 编码器分类 按监测原理分类 光电编码器 光电编码器,是一种通过光电转换...

    编码器,是一种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。

    编码器分类

    按监测原理分类

    光电编码器

    光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是目前应用最多的传感器,光电编码器是由光源、光码盘和光敏元件组成。

    光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。

    此外,为判断旋转方向,码盘还可提供相位相差90°的两路脉冲信号。

    霍尔编码器

    霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。

    霍尔编码器是由霍尔码盘(磁环)和霍尔元件组成。

    霍尔码盘是在一定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

    按输出信号分类

    增量式编码器

    增量式编码器是将设备运动时的位移信息变成连续的脉冲信号,脉冲个数表示位移量的大
    小。其特点如下:

    • 只有当设备运动时才会输出信号。

    • 一般会输出通道A和通道B 两组信号,并且有90° 的相位差(1/4个周期),同时采集这两组信号就可以计算设备的运动速度和方向。

      如下图,通道A和通道B的信号的周期相同,且相位相差1/4个周期,结合两相的信号值:

      • 当B相和A相先是都读到高电平(1 1),再B读到高电平,A读到低电平(1 0),则为顺时针
      • 当B相和A相先是都读到低电平(0 0),再B读到高电平,A读到低电平(1 0),则为逆时针
    • 除通道A、通道B 以外,还会设置一个额外的通道Z 信号,表示编码器特定的参考位置

      如下图,传感器转一圈后Z 轴信号才会输出一个脉冲,在Z轴输出时,可以通过将AB通道的计数清零,实现对码盘绝对位置的计算。

    • 增量式编码器只输出设备的位置变化和运动方向,不会输出设备的绝对位置。

    绝对式编码器

    绝对式编码器在总体结构上与增量式比较类似,都是由码盘、检测装置和放大整形电路构成,但是具体的码盘结构和输出信号含义不同。

    它是将设备运动时的位移信息通过二进制编码的方式(特殊的码盘)变成数字量直接输出。其特点如下:

    • 其码盘利用若干透光和不透光的线槽组成一套二进制编码,这些二进制码与编码器转轴的每一个不同角度是唯一对应的。
    • 绝对式编码器的码盘上有很多圈线槽,被称为码道,每一条(圈)码道内部线槽数量和长度都不同。它们共同组成一套二进制编码,一条(圈)码道对应二进制数的其中一个位(通常是码盘最外侧的码道表示最低位,最内侧的码道表示最高位)。
    • 码道的数量决定了二进制编码的位数,一个绝对式编码器有N 条码道,则它输出二进制数的总个数是2的N次方个。
    • 读取这些二进制码就能知道设备的绝对位置,所以称之为绝对式编码器。
    • 编码方式一般采用自然二进制、格雷码或者BCD 码等。
      • 自然二进制的码盘易于理解,但当码盘的制造工艺有误差时,在两组信号的临界区域,所有码道的值可能不会同时变化,或因为所有传感器检测存在微小的时间差,导致读到错误的值。比如从000跨越到111,理论上应该读到111,但如果从内到外的3条码道没有完全对齐,可能会读到如001或其它异常值。
      • 格雷码(相邻的两个2进制数只有1个位不同)码盘可以避免二进制码盘的数据读取异常,因为格雷码码盘的相邻两个信号组只会有1位的变化,就算制造工艺有误差导致信号读取有偏差,最多也只会产生1个偏差(相邻信号的偏差)。

    编码器参数

    分辨率

    指编码器能够分辨的最小单位。

    • 对于增量式编码器,其分辨率表示为编码器转轴旋转一圈所产生的脉冲数,即脉冲数/转(Pulse Per Revolution 或PPR)

      码盘上透光线槽的数目其实就等于分辨率,也叫多少线,较为常见的有5-6000 线。

    • 对于绝对式编码器,内部码盘所用的位数就是它的分辨率,单位是位(bit),具体还分单圈分辨率和多圈分辨率。

    精度

    首先明确一点,精度与分辨率是两个不同的概念。

    精度是指编码器每个读数与转轴实际位置间的最大误差,通常用角度、角分或角秒来表示。

    例如有些绝对式编码器参数表里会写±20′′,这个就表示编码器输出的读数与转轴实际位置之间存在正负20 角秒的误差。

    精度由码盘刻线加工精度、转轴同心度、材料的温度特性、电路的响应时间等各方面因素共同决定。

    最大响应频率

    指编码器每秒输出的脉冲数,单位是Hz。计算公式为:

    最大响应频率= 分辨率* 轴转速/60

    例如某电机的编码器的分辨率为100(即光电码盘一圈有100条栅格),轴转速为120转每分钟(即每秒转2圈),则响应频率为100*120/60=200Hz,即该转速下,编码器每秒输出200个脉冲(电机带动编码器转了2圈嘛)。

    信号输出形式

    • 对于增量式编码器,每个通道的信号独立输出,输出电路形式通常有集电极开路输出、推挽输出、差分输出等。

    • 对于绝对式编码器,由于是直接输出几十位的二进制数,为了确保传输速率和信号质量,一般采用串行输出或总线型输出,例如同步串行接口(SSI)、RS485、CANopen 或EtherCAT 等,也有一部分是并行输出,输出电路形式与增量式编码器相同。

    码盘测速原理

    编码器倍频

    编码器倍频是什么意思呢,比如某光栅编码器一圈有N个栅格,理论上电机带动编码器转一圈,只能输出N个信号,通过倍频技术,可以实现转一圈,却能输出N*n个信号,这里的n为倍频数。

    增量式编码器输出的脉冲波形一般为占空比50% 的方波,通道A 和B 相位差为90°。

    • 如果只使用通道A计数,并且只捕获通道A的上升沿,则一圈的计数值=码盘的栅格数,即为1倍频(没有倍频)
    • 如果只使用通道A计数,并且捕获了通道A的上升沿和下降沿,则编码器转一圈的计数值翻倍,实现2倍频
    • 如果既使用通道A计数,又使用通道B计数,且都捕获了上升沿和下降沿,则实现了4倍频

    假设某个增量式编码器它的分辨率是600PPR,能分辨的最小角度是0.6°,对它进行4 倍频之后就相当于把分辨率提高到了600*4=2400PPR,此时编码器能够分辨的最小角度为0.15°。

    M法测速

    又叫做频率测量法。该方法是在一个固定的时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。M法适合测量高速

    假设:

    • 编码器单圈总脉冲数为C(常数)

    • 统计时间为T0T_0 (固定值,单位秒)

    • 该时间内统计到的编码器脉冲数为M0M_0(测量值)

    则:转速n(圈/秒)的计算公式为:

    在这里插入图片描述

    如何理解这个公式:

    M0M_0/C 即统计时间内有多少个编码器脉冲,再除以统计时间T0T_0 ,即1s(单位时间)内转了多少圈

    例如:统计时间T0T_0 为3s,在3s内测得的脉冲数M0M_0为60,而编码器的单圈脉冲数C为20,则转速n=60/(20*3)=1圈每秒

    由于C 是常数,所以转速n 跟M0M_0成正比。这就使得:

    • 在高速时,测量时M0M_0变大,可以获得较好的测量精度和平稳性
    • 但在低速时(低到每个T0T_0 内只有少数几个脉冲),此时算出的速度误差就会比较大,并且很不稳定。

    如下图,方波为编码器某一通道输出的脉冲。

    当转速较高时,每个统计时间T0T_0 内的计数值较大,可以得到较准确的转速测量值。

    当转速较低时,每个统计时间T0T_0 内的计数值较小,由于统计时间的起始位置与编码器脉冲的上升沿不一定对应,当统计时间的起始位置不同时,会有一个脉冲的误差(只统计上升沿时,最多会有1个脉冲误差,统计上升沿和下降沿时,最多会有2个脉冲的误差)。

    通过倍频提高单位时间测得的脉冲数可以改善M 法在低速测量的准确性(比如原本捕获到的脉冲M0M_0 只有4 个,经过4 倍频后,相同电机状态M0M_0变成了16 个),但也不能从根本上改变低速时的测量问题。

    T法测速

    又叫做周期测量法。这种方法是建立一个已知频率的高频脉冲并对其计数。T法适合测量低速

    假设:

    • 编码器单圈总脉冲数为C(常数)

    • 高频脉冲的频率为F0F_0 (固定值,单位Hz)

    • 捕获到编码器相邻两个脉冲的间隔时间为TET_E ,其间的计数值为M1M_1 (测量值)

    则:转速n 的计算公式为:
    在这里插入图片描述

    如何理解这个公式:

    1/TET_E 即1s内有多少个编码器脉冲,再除以一圈的脉冲数C,即1s内转了多少圈

    F0F_0/M1M_1 即1s内的高频脉冲数除以两编码器脉冲间的高频脉冲数,也即1s内有多少个编码器脉冲,再除以一圈的脉冲数C,即1s内转了多少圈

    例如:高频脉冲的周期是1ms,即频率F0F_0 为1000Hz,在编码器的两个脉冲之间,产生的高频脉冲数M1M_1为50个(即两个编码器脉冲的间隔TET_E 为0.05s),编码器一圈的脉冲数C为20,则转速n=1000/(5020)=1n=1000/(50*20)=1圈每秒。

    由于C 和F0F_0 是常数,所以转速n 跟M1M_1成反比。这就使得:

    • 在高速时,编码器脉冲间隔时间TET_E 很小,使得测量周期内的高频脉冲计数值M1M_1也变得很少,导致测量误差变大
    • 在低转速时,TET_E 足够大,测量周期内的M1M_1也足够多,所以T 法和M 法刚好相反,更适合测量低速。

    如下图,黑色方波为编码器某一通道输出的脉冲,黄色方波为高频测量脉冲。

    当转速较低时,高频测量脉冲数M1M_1较大,可以得到较准确的转速测量值。

    当转速较高时,编码器两脉冲间的时间间隔变短,导致高频测量脉冲数M1M_1较小,由于高频脉冲的上升沿位置与编码器脉冲的上升沿不一定对应,当两波的上升沿位置不同时,会有一个脉冲的误差

    M/T法测速

    这种方法综合了M 法和T 法各自的优势,既测量编码器脉冲数又测量一定时间内的高频脉冲数

    在一个相对固定的时间内,假设:

    • 编码器脉冲数产生 M0M_0个 (测量值)

    • 计数一个已知频率为F0F_0 (固定值,单位Hz)的高频脉冲,计数值为M1M_1 (测量值),计算速度值

    • 码器单圈总脉冲数为C(常数)

    则转速n 的计算公式为:
    在这里插入图片描述
    例如:在一个相对固定的时间内,编码器脉冲数 M0M_0为3个;高频脉冲的周期是1ms,即频率F0F_0 为1000Hz,产生的高频脉冲数M1M_1为150个;编码器一圈的脉冲数C为20,则转速n=10003/(15020)=1n=1000*3/(150*20)=1圈每秒。

    由于M/T 法公式中的F0F_0 和C 是常数,所以转速n 就只受M0M_0M1M_1 的影响。

    • 高速时,M0M_0 增大,M1M_1 减小,相当于M 法
    • 低速时,M1M_1 增大,M0M_0 减小,相当于T 法。

    冲数 M0M_0为3个;高频脉冲的周期是1ms,即频率F0F_0 为1000Hz,产生的高频脉冲数M1M_1为150个;编码器一圈的脉冲数C为20,则转速n=10003/(15020)=1n=1000*3/(150*20)=1圈每秒。

    由于M/T 法公式中的F0F_0 和C 是常数,所以转速n 就只受M0M_0M1M_1 的影响。

    • 高速时,M0M_0 增大,M1M_1 减小,相当于M 法
    • 低速时,M1M_1 增大,M0M_0 减小,相当于T 法。
    展开全文
  • # 最简化编码器计数程序( 有效5行,验证于arduino ) 合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...

    # 最精简arduino编码器计数程序( 有效5行,验证于arduino Nano


    #include <TM1637.h>
    TM1637 tm1637(3, 2 ); //定义引脚连接 这是编码器程序 可按可加减计数
    int coderCLK = 4; // Connected to CLK on KY-040 CLK接 pin4
    int coderDT = 5; // Connected to DT on KY-040 DT接pin5
    int coderSW = 6; // Connected to DT on KY-040 SW接pin6 SW是按键,
    int8_t ListDisp[4];
    int encoderPosCount = 50;
    int val = 0;
    void setup() {
    tm1637.set();
    tm1637.init();
    pinMode (10, OUTPUT);
    pinMode (11, OUTPUT);
    pinMode (12, OUTPUT);
    pinMode(coderCLK, INPUT);
    pinMode(coderDT, INPUT);
    pinMode (coderSW, INPUT);
    Serial.begin (9600);
    }
    void loop() {
    coder();
    ListDisp[0] =(encoderPosCount / 1000) % 10;
    ListDisp[1] =(encoderPosCount / 100) % 10;
    ListDisp[2] =(encoderPosCount / 10) % 10;
    ListDisp[3] =(encoderPosCount / 1) % 10;
    tm1637.display(0, ListDisp[0]);
    tm1637.display(1, ListDisp[1]);
    tm1637.display(2, ListDisp[2]);
    tm1637.display(3, ListDisp[3]);
    }
    void coder() {
    1 val = val * 10 + digitalRead(coderCLK);
    2 val = val * 10 + digitalRead(coderDT);
    3 if (val == 1110) encoderPosCount–;
    4 if (val == 1101) encoderPosCount++;
    //digitalWrite(10, val / 1000);
    //digitalWrite(11, val / 10);
    //digitalWrite(12, val % 10);
    //if (val / 100 != val % 100) { Serial.print(val); //Serial.print(" "); }
    5 val = val % 100;
    }
    **

    插入链接与图片

    链接: link.

    图片: 在这里插入图片描述

    展开全文
  • 初始化完成后开始计数,读取计数器值只增或只减,就是最开始是增就增,最开始是减就减,就是初始化完成后一旦开始计数正转反转都往一个方向计数
  • 记录下采集编码器数据的一些问题: 1.

    暂将代码上传,后续更新操作说明
    https://download.csdn.net/download/weixin_43761106/17173874

    展开全文
  • 在增量式编码器位置计数过程中,每经过一个计数溢出,根据运转方向,在update中断里我们会对圈数加1或者减1 if ((TIMx->SR & TIM_FLAG_Update) == TIM_FLAG_Update) { /* Clear the interrupt ...
  • STM32 16位定时器对正交编码器计数的方法(附检测输入脉冲的方法) 发布时间:2009-10-04 14:29:11 技术类别:医疗电子      今天决定在END开博,之前没有工作...
  • 错误1、pc6 pc7被用作其他用途,GPIO模式配置错误。导致计数不准确;...总结关于编码器的溢出处理:网上的检测数值突变的方法不可靠,会有漏检的情况。在滴答定时器中检测encoder的值突变void SysT...
  • verilog正交编码器计数模块

    千次阅读 2012-04-15 09:29:15
    module XY_QEP4_32 (qep_out, snap_out, clk_in, clr_in,a_in,b_in,z_in,z_en); ...内容:verilog正交编码器计数模块 作者:罗世洲 QQ370756740 xyy0215@qq.com 欢迎技术交流 */
  • ■ STC8H1K的高级PWM的正交编码功能 1. 8H单片机高级PWM功能 STC8H系列的单片机内部集成了两组高级PWM定时器,两组PWM的周期可不同,可分别单独设置。第一组可配置成4对互补/对称/死区控制的PWM,第二组可配置成4路...
  • 本文主要讲了编码器出现不计数的故障时,应该如何解决?
  • 编码器正反计数程序,编码器为AB两相输出,该程序有鉴相和计数功能
  • 在诸如F103系列、51系列的单片机中,由于没有正交解码模块,在需要测速的场合中,往往需要借助于输入捕获、甚至是计数的方法来获得编码器输出,这样会导致了主程序会经常被中断打断,并且计数也不是特别准确,而采用...
  • 摘 要: 旋转编码器应用于角度定位或测量时,由于旋转轴的晃动可能引起编码器输出波形的抖动,从而引发误计数现象。介绍了一个抗抖动计数电路,滤除了旋转编码器因抖动而造成的误计数。关键词: 旋转编码器 抗抖动...
  • stm32 编码器外部计数并显示

    热门讨论 2013-07-16 16:28:50
    用stm32编码器模式采集外部正交编码,并实时显示出来
  • 很详细! 一种高精度旋转编码器单片机计数电路的实现
  • 详细介绍了旋转编码器的抗抖动计数电路,对于工控技术的开发具有很大帮助
  • 1、TIM1编码器模式的 void Tim1_Init(void) //编码器模式初始化 { TIM1_DeInit(); TIM1_TimeBaseInit(0,TIM1_COUNTERMODE_UP,65536-1,0);//16分频,向上计数, TIM1_ICInit((TIM1_Channel_TypeDef)(TIM1_CHANNEL_...
  • 本程序思想为:增量式编码器的AB两相信号通过D触发器输出高低电平,再把A相脉冲接到外部中断0触发,当触发中断时判断D触发器的高低电平(即正反)然后进行加减计数,此方法结合软硬件,计数准确可靠,成本低廉,运行...
  • 根据编码器的差值,可知前一时刻与当前时刻编码器增量的计数脉冲,已知小车车轮行走一个周长的长度的编码器计数脉冲个数,可以推算出,一个计数脉冲的移动距离。代码实现如下: # (4096 * 7.5) dright is right ...
  • 编码器信号接入CP1H高数计数案例,编码器信号接入CP1H高数计数案例,
  • 基于FPGA的增量式光电编码器的高精度计数,吕利山,李治全,采用FPGA对增量式编码器输出的脉冲进行高分辨率位置数据处理。这一方法在FPGA内部使用一个计数器对由A,B相信号生成四倍频信号Q的周�
  • FX3U高速计数编码器运用例子视频教程 800M
  • 深度计数自动编码器可对scRNA-seq数据进行消噪 深度计数自动编码器网络使用具有零膨胀负二项式(ZINB)损失功能的深度自动编码器,通过考虑计数结构,数据的过度分散的性质和稀疏性来对scRNA-seq数据进行去噪并消除...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,083
精华内容 25,633
关键字:

编码器计数