<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 用FPGA做正交解碼

用FPGA做正交解碼

作者: 時(shí)間:2023-12-25 來(lái)源:電子森林 收藏

非常適合用邏輯來(lái)實(shí)現正交解碼的功能。

本文引用地址:http://dyxdggzs.com/article/202312/454241.htm

正交信號是兩個(gè)相位差為90度的信號。它們在機械系統中用于確定軸的運動(dòng)(或旋轉)。

這是一個(gè)向前移動(dòng)幾步的軸。

如果對脈沖計數,則可以說(shuō)軸移動(dòng)了3步。
如果計算邊緣,則可以說(shuō)軸移動(dòng)了12步。這就是我們在此頁(yè)面上所做的。

現在,軸向后移動(dòng)了相同的量。

因此,想法是通過(guò)查看邊緣和水平,我們可以確定運動(dòng)的方向和距離。
這是一個(gè)示例,其中軸向前移動(dòng)10步,然后向后移動(dòng)7步。

它們在哪里使用?

  • 在機械手軸中,用于反饋控制。
  • 用旋鈕確定用戶(hù)輸入。
  • 在電腦鼠標中,確定運動(dòng)方向。

如果您打開(kāi)機械鼠標,則會(huì )看到以下內容。

有兩個(gè)光學(xué)正交編碼器,每個(gè)編碼器由開(kāi)槽輪,光發(fā)射器和一對光電探測器制成。
鼠標包括負責正交解碼和串行/ PS2接口的IC。由于創(chuàng )建正交解碼器(在中)比串行或PS2接口要容易得多,因此我們修改了鼠標,并用四緩沖器施密特觸發(fā)器輸入IC替換了原始IC。

我們使用CD4093,每個(gè)NAND門(mén)的輸入連接在一起形成反相器。
現在,鼠標輸出正交編碼信號!

正交解碼器

我們要實(shí)現一個(gè)根據正交信號遞增或遞減的計數器。我們假設有一個(gè)比正交信號快的“過(guò)采樣時(shí)鐘”(在此頁(yè)面中稱(chēng)為“ clk”)。
控制計數器的硬件電路非常簡(jiǎn)單。

這是軸向前移動(dòng)的波形,計數器會(huì )遞增。

該電路有時(shí)稱(chēng)為“ 4x解碼器”,因為它會(huì )計算正交輸入的所有躍遷。
在verilog HDL中,這為我們提供了:

module quad(clk, quadA, quadB, count);
input clk, quadA, quadB;
output [7:0] count; 
reg quadA_delayed, quadB_delayed;
always @(posedge clk) quadA_delayed <= quadA;
always @(posedge clk) quadB_delayed <= quadB; 
wire count_enable = quadA ^ quadA_delayed ^ quadB ^ quadB_delayed;
wire count_direction = quadA ^ quadB_delayed; 
reg [7:0] count;
always @(posedge clk)begin
  if(count_enable)
  begin
    if(count_direction) count<=count+1; 
    else count<=count-1;
  endend endmodule

實(shí)際生活中的電路

先前的電路假定“ quadX”輸入與“ clk”時(shí)鐘同步。在大多數情況下,“ quadX”信號與時(shí)鐘不同步。經(jīng)典解決方案是每個(gè)輸入使用2個(gè)額外的D觸發(fā)器,以避免將亞穩性引入計數器。

module quad(clk, quadA, quadB, count);
input clk, quadA, quadB;
output [7:0] count; 
reg [2:0] quadA_delayed, quadB_delayed;
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];
wire count_direction = quadA_delayed[1] ^ quadB_delayed[2]; 
reg [7:0] count;
always @(posedge clk)begin
  if(count_enable)
  begin
    if(count_direction) count<=count+1; 
    else count<=count-1;
  endend endmodule

總之,創(chuàng )建正交解碼器/計數器所需的硬件很少。FPGA可以容納多個(gè)軸,因此可以同時(shí)跟蹤多個(gè)軸。



關(guān)鍵詞: FPGA L正交解碼

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>