0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

增量式编码器原理介绍

FPGA设计论坛 来源:FPGA设计论坛 2025-03-03 10:21 次阅读

一 增量式编码器原理介绍

增量式编码器是一种将位移信息转换成周期性电信号,再将电信号转换成脉冲计数的装置。

通常增量式编码器的接线输出为两根电源线,A,B,Z三个脉冲信号。其中可以通过A,B信号的相位关系来判断编码器的旋转方向,可以人为规定若A相在前,B相落后90o 则为正方向,反之为负方向。

旋转角度的计算也很简单,

顺时针:

θ = ( k + 1 ) ∗ 360 分 辨 率 heta=(k+1)*frac{360}{分辨率} θ=(k+1)∗分辨率360

逆时针:

θ = ( 分 辨 率 − ( k + 1 ) ) ∗ 360 分 辨 率 heta=(分辨率-(k+1))*frac{360}{分辨率} θ=(分辨率−(k+1))∗分辨率360

每旋转过一个单位刻度,A,B相都会产生一个脉冲,Z相信号是每转一圈产生一个周期的高电平。

倍频: 实际应用中往往会采用两倍频或者四倍频的方式来提高精度,一个周期内 A,B相的信号都会产生四次边沿跳变,两倍频可以在上升沿,下降沿各计数一次;四倍频则是每个边沿变化都计数。

两倍频计数规则: 在A或B的上升、下降沿都计数。

四倍频计数规则: 当A为高电平时,B在上升沿则加1,下降沿则减1;A为低电平时,B在下降沿则减1,上升沿则加1;B为高电平时,A在上升沿则减1,下降沿则加1;在B为低电平时,A在上升沿则加1,下降沿则减1。

PUL =(A1 ^ B2) ^ (A2 ^ B1)

二 硬件实现

在查阅资料论文后,发现大部分都是采用的是三个模块:顶层模块;倍频鉴相模块,以及计数模块。

其实完全可以综合为一个模块同时完成倍频鉴相计数工作。代码参考这位大佬

`timescale 1ns / 1ps
module bianmaqi2(clk,rst_n ,quadA, quadB, position_out,A,B,DIR,index);

input clk,rst_n, quadA, quadB,index; 
output [15:0] position_out; 
output A,B,DIR;

reg [2:0] quadA_delayed, quadB_delayed; 
reg A,B,DIR; 
reg [15:0] position;

always @(posedge clk) quadA_delayed <= {quadA_delayed[1:0], quadA}; 
always @(posedge clk) quadB_delayed <= {quadB_delayed[1:0], quadB};
//输入缓存打拍

wire count_enable = quadA_delayed[1] ^ quadA_delayed[2] ^ quadB_delayed[1] ^ quadB_delayed[2]; 
//PUL =(A1^B2)^(A2^B1)
wire count_direction = quadA_delayed[1] ^ quadB_delayed[2];
//DIR = C^D C是A1打一拍 D是B1打两拍
always @(posedge osc or negedge rst_n ) 
begin
if(!rst_n)begin
position<=16'd0;
A<=0;
B<=0;
DIR<=0;
//复位信号 必须有复位信号来赋初值 否则在testbench中输出为高阻态
end
else 
if(count_enable)
begin
if(count_direction) 
position<=position+1'b1; 
else 
position<=position-1'b1;
A <= quadA_delayed[2];
B <= quadB_delayed[2];
DIR <= count_direction;
end
else
   position<=position;
end
assign position_out = position;
endmodule

三 测试平台

分别测试正转和反转;
正转即A比B超前90°;反转即B比A超前90°。

`timescale 1 ps/ 1 ps
module bianmaqi2_tb();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg index;
reg rst_n;
reg osc;
reg quadA;
reg quadB;
// wires                                               
wire A;
wire B;
wire DIR;
wire [15:0]  position_out;

// assign statements (if any)                          
bianmaqi2 i1 (
// port map - connection between master ports and signals/registers   
.A(A),
.B(B),
.rst_n(rst_n),
.DIR(DIR),
.index(index),
.osc(osc),
.position_out(position_out),
.quadA(quadA),
.quadB(quadB)
);
initial  
begin                                                  
//initialize inputs
rst_n=1'b0;
osc=1'b0;
quadA  =1;
quadB  =0;
index  =0;
#5
    rst_n=1'b1;

end  
      
initial 
begin
repeat(50)begin
 #20
 quadB=1;
 #20
 quadA=0;
 #20
 quadB=0;
 #20
 quadA=1;
end
$stop;
end
always #10 osc =~osc;
//产生50MHz时钟源
                                       
endmodule
`timescale 1 ps/ 1 ps
module bianmaqi2_nishizhen_tb();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg index;
reg rst_n;
reg osc;
reg quadA;
reg quadB;
// wires                                               
wire A;
wire B;
wire DIR;
wire [15:0]  position_out;

// assign statements (if any)                          
bianmaqi2 i1 (
// port map - connection between master ports and signals/registers   
.A(A),
.B(B),
.rst_n(rst_n),
.DIR(DIR),
.index(index),
.osc(osc),
.position_out(position_out),
.quadA(quadA),
.quadB(quadB)
);
initial  
begin                                                  
//initialize inputs
rst_n=1'b0;
osc=1'b0;
quadA  =0;
quadB  =1;
index  =0;
#5
    rst_n=1'b1;

end  
      
initial 
begin
repeat(50)begin
 #20
 quadA=1;
 #20
 quadB=0;
 #20
 quadA=0;
 #20
 quadB=1;
end
$stop;
end
always #10 osc =~osc;
//产生50MHz时钟源
                                       
endmodule

586c65ae-f4be-11ef-9310-92fbcf53809c.png

58814ffa-f4be-11ef-9310-92fbcf53809c.png

四 总结

fpga设计模块其实实现很简单,主要还是Quartus和Modelsim的联合仿真部分遇到了问题,主要还是testbench的编写需要强化学习。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1643

    文章

    21933

    浏览量

    613017
  • 电源线
    +关注

    关注

    1

    文章

    377

    浏览量

    22409
  • 电信号
    +关注

    关注

    1

    文章

    842

    浏览量

    20956
  • 增量式编码器

    关注

    2

    文章

    39

    浏览量

    12844

原文标题:FPGA接口实现----增量式编码器

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐
    热点推荐

    增量光电编码器

    增量光电编码器原理及其结构 增量光电编码器的特点是每产生一个输出脉冲信号就对应于
    发表于 06-02 22:50 2w次阅读

    增量编码器的使用

    编码器的使用1.1 增量编码器倍频计数增量编码器
    发表于 09-01 06:58

    增量旋转编码器设计

    阅读目录一、增量旋转编码器二、硬件设计三、软件设计Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T6回到顶部一、增量
    发表于 12-01 07:57

    增量编码器的相关资料推荐

    增量编码器增量编码器也成为正交编码器,是通过两个
    发表于 01-10 06:08

    基于FPGA增量编码器的接口设计

    分析了光电编码器4倍频原理,提出了一种基于可编程逻辑器件FPGA对光电增量编码器输出信号4倍频、鉴相、计数的具体方法,它对提高编码器分辨率
    发表于 11-03 15:13 76次下载

    M30增量编码器介绍

    30米的模型是一个紧凑,模块化的增量编码器先进的磁传感和信号处理技术。决议1024心肺复苏,减刑渠道,多种输出类型和两个电源电压选项,可以对它进行配置广泛的工业、商业和消费者反馈
    发表于 10-13 16:34 3次下载
    M30<b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>编码器</b><b class='flag-5'>介绍</b>

    增量编码器与绝对编码器的区别

    本文主要阐述了增量编码器与绝对编码器的区别。
    的头像 发表于 11-06 14:56 6.4w次阅读

    STM32-增量旋转编码器测量

    阅读目录一、增量旋转编码器二、硬件设计三、软件设计Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T6回到顶部一、增量
    发表于 11-22 20:06 47次下载
    STM32-<b class='flag-5'>增量</b><b class='flag-5'>式</b>旋转<b class='flag-5'>编码器</b>测量

    增量编码器有哪些优点与缺点?

    增量编码器是能够依据旋转运动形成信号的编码器,其刻度方式为每一个脉冲都进行增量测算,因此得名。是能够依据旋转运动形成信号的
    的头像 发表于 02-16 17:37 5707次阅读

    增量编码器和绝对值编码器选哪个?

    增量编码器和绝对值编码器哪个好? 编码器是伺服系统上的重要组成部分,可以发送脉冲给驱动,用于
    的头像 发表于 03-19 23:30 4241次阅读

    增量编码器的三种类型介绍

    增量编码器一般分为3种类型:单通道增量编码器,双通道增量
    的头像 发表于 04-17 09:43 7841次阅读

    增量编码器

    增量编码器是能够依据旋转运动形成信号的编码器,其刻度方式为每一个脉冲都进行增量测算,因此得名。它常与机械设备转换装置搭配使用(如齿条-齿轮
    的头像 发表于 04-17 15:39 2854次阅读
    <b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>编码器</b>

    增量编码器和绝对值编码器有哪些区别?

    增量编码器和绝对值编码器有哪些区别?增量编码器
    的头像 发表于 07-05 13:34 5094次阅读
    <b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>编码器</b>和绝对值<b class='flag-5'>编码器</b>有哪些区别?

    选择增量编码器分辨率的方法,影响增量编码器分辨率的因素

    增量编码器的分辨率是以编码器轴转动一周所产生的输出信号基本周期数来表示的,即脉冲数/转(PPR)。本文主要介绍选择
    的头像 发表于 07-26 09:59 2234次阅读

    光纤绝对和光纤增量编码器的区别

    绝对编码器增量编码器二者有什么区别呢?分别有什么特征,适合什么样的应用呢?欢迎阅读文章了解~
    的头像 发表于 05-15 10:43 663次阅读
    光纤绝对<b class='flag-5'>式</b>和光纤<b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>编码器</b>的区别