一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

增量式編碼器原理介紹

FPGA設(shè)計論壇 ? 來源:FPGA設(shè)計論壇 ? 2025-03-03 10:21 ? 次閱讀

一 增量式編碼器原理介紹

增量式編碼器是一種將位移信息轉(zhuǎn)換成周期性電信號,再將電信號轉(zhuǎn)換成脈沖計數(shù)的裝置。

通常增量式編碼器的接線輸出為兩根電源線,A,B,Z三個脈沖信號。其中可以通過A,B信號的相位關(guān)系來判斷編碼器的旋轉(zhuǎn)方向,可以人為規(guī)定若A相在前,B相落后90o 則為正方向,反之為負(fù)方向。

旋轉(zhuǎn)角度的計算也很簡單,

順時針:

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

逆時針:

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

每旋轉(zhuǎn)過一個單位刻度,A,B相都會產(chǎn)生一個脈沖,Z相信號是每轉(zhuǎn)一圈產(chǎn)生一個周期的高電平。

倍頻: 實際應(yīng)用中往往會采用兩倍頻或者四倍頻的方式來提高精度,一個周期內(nèi) A,B相的信號都會產(chǎn)生四次邊沿跳變,兩倍頻可以在上升沿,下降沿各計數(shù)一次;四倍頻則是每個邊沿變化都計數(shù)。

兩倍頻計數(shù)規(guī)則: 在A或B的上升、下降沿都計數(shù)。

四倍頻計數(shù)規(guī)則: 當(dāng)A為高電平時,B在上升沿則加1,下降沿則減1;A為低電平時,B在下降沿則減1,上升沿則加1;B為高電平時,A在上升沿則減1,下降沿則加1;在B為低電平時,A在上升沿則加1,下降沿則減1。

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

二 硬件實現(xiàn)

在查閱資料論文后,發(fā)現(xiàn)大部分都是采用的是三個模塊:頂層模塊;倍頻鑒相模塊,以及計數(shù)模塊。

其實完全可以綜合為一個模塊同時完成倍頻鑒相計數(shù)工作。代碼參考這位大佬

`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;
//復(fù)位信號 必須有復(fù)位信號來賦初值 否則在testbench中輸出為高阻態(tài)
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

三 測試平臺

分別測試正轉(zhuǎn)和反轉(zhuǎn);
正轉(zhuǎn)即A比B超前90°;反轉(zhuǎn)即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;
//產(chǎn)生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;
//產(chǎn)生50MHz時鐘源
                                       
endmodule

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

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

四 總結(jié)

fpga設(shè)計模塊其實實現(xiàn)很簡單,主要還是Quartus和Modelsim的聯(lián)合仿真部分遇到了問題,主要還是testbench的編寫需要強(qiáng)化學(xué)習(xí)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1642

    文章

    21918

    瀏覽量

    611981
  • 電源線
    +關(guān)注

    關(guān)注

    1

    文章

    376

    瀏覽量

    22367
  • 電信號
    +關(guān)注

    關(guān)注

    1

    文章

    842

    瀏覽量

    20929
  • 增量式編碼器
    +關(guān)注

    關(guān)注

    2

    文章

    39

    瀏覽量

    12819

原文標(biāo)題:FPGA接口實現(xiàn)----增量式編碼器

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    增量光電編碼器

    增量光電編碼器原理及其結(jié)構(gòu) 增量光電編碼器的特點是每產(chǎn)生一個輸出脈沖信號就對應(yīng)于
    發(fā)表于 06-02 22:50 ?2w次閱讀

    增量編碼器的使用

    編碼器的使用1.1 增量編碼器倍頻計數(shù)增量編碼器
    發(fā)表于 09-01 06:58

    增量旋轉(zhuǎn)編碼器設(shè)計

    閱讀目錄一、增量旋轉(zhuǎn)編碼器二、硬件設(shè)計三、軟件設(shè)計Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T6回到頂部一、增量
    發(fā)表于 12-01 07:57

    增量編碼器的相關(guān)資料推薦

    增量編碼器增量編碼器也成為正交編碼器,是通過兩個
    發(fā)表于 01-10 06:08

    基于FPGA增量編碼器的接口設(shè)計

    分析了光電編碼器4倍頻原理,提出了一種基于可編程邏輯器件FPGA對光電增量編碼器輸出信號4倍頻、鑒相、計數(shù)的具體方法,它對提高編碼器分辨率
    發(fā)表于 11-03 15:13 ?76次下載

    M30增量編碼器介紹

    30米的模型是一個緊湊,模塊化的增量編碼器先進(jìn)的磁傳感和信號處理技術(shù)。決議1024心肺復(fù)蘇,減刑渠道,多種輸出類型和兩個電源電壓選項,可以對它進(jìn)行配置廣泛的工業(yè)、商業(yè)和消費者反饋
    發(fā)表于 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>

    增量編碼器與絕對編碼器的區(qū)別

    本文主要闡述了增量編碼器與絕對編碼器的區(qū)別。
    的頭像 發(fā)表于 11-06 14:56 ?6.4w次閱讀

    STM32-增量旋轉(zhuǎn)編碼器測量

    閱讀目錄一、增量旋轉(zhuǎn)編碼器二、硬件設(shè)計三、軟件設(shè)計Development kit:MDK5.14IDE:UV4MCU:STM32F103C8T6回到頂部一、增量
    發(fā)表于 11-22 20:06 ?47次下載
    STM32-<b class='flag-5'>增量</b><b class='flag-5'>式</b>旋轉(zhuǎn)<b class='flag-5'>編碼器</b>測量

    增量編碼器有哪些優(yōu)點與缺點?

    增量編碼器是能夠依據(jù)旋轉(zhuǎn)運(yùn)動形成信號的編碼器,其刻度方式為每一個脈沖都進(jìn)行增量測算,因此得名。是能夠依據(jù)旋轉(zhuǎn)運(yùn)動形成信號的
    的頭像 發(fā)表于 02-16 17:37 ?5661次閱讀

    增量編碼器和絕對值編碼器選哪個?

    增量編碼器和絕對值編碼器哪個好? 編碼器是伺服系統(tǒng)上的重要組成部分,可以發(fā)送脈沖給驅(qū)動,用于
    的頭像 發(fā)表于 03-19 23:30 ?4196次閱讀

    增量編碼器的三種類型介紹

    增量編碼器一般分為3種類型:單通道增量編碼器,雙通道增量
    的頭像 發(fā)表于 04-17 09:43 ?7770次閱讀

    增量編碼器

    增量編碼器是能夠依據(jù)旋轉(zhuǎn)運(yùn)動形成信號的編碼器,其刻度方式為每一個脈沖都進(jìn)行增量測算,因此得名。它常與機(jī)械設(shè)備轉(zhuǎn)換裝置搭配使用(如齒條-齒輪
    的頭像 發(fā)表于 04-17 15:39 ?2805次閱讀
    <b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>編碼器</b>

    增量編碼器和絕對值編碼器有哪些區(qū)別?

    增量編碼器和絕對值編碼器有哪些區(qū)別?增量編碼器
    的頭像 發(fā)表于 07-05 13:34 ?5063次閱讀
    <b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>編碼器</b>和絕對值<b class='flag-5'>編碼器</b>有哪些區(qū)別?

    選擇增量編碼器分辨率的方法,影響增量編碼器分辨率的因素

    增量編碼器的分辨率是以編碼器軸轉(zhuǎn)動一周所產(chǎn)生的輸出信號基本周期數(shù)來表示的,即脈沖數(shù)/轉(zhuǎn)(PPR)。本文主要介紹選擇
    的頭像 發(fā)表于 07-26 09:59 ?2171次閱讀

    光纖絕對和光纖增量編碼器的區(qū)別

    絕對編碼器增量編碼器二者有什么區(qū)別呢?分別有什么特征,適合什么樣的應(yīng)用呢?歡迎閱讀文章了解~
    的頭像 發(fā)表于 05-15 10:43 ?639次閱讀
    光纖絕對<b class='flag-5'>式</b>和光纖<b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>編碼器</b>的區(qū)別