增量編碼盤輸出信號A和B具有90°的相位差。A和B的相位關(guān)系反映了被測對象的旋轉(zhuǎn)方向,若A超前于B,表明編碼器是順時(shí)針旋轉(zhuǎn)的,反之,編碼器為逆時(shí)針旋轉(zhuǎn)。當(dāng)增量編碼盤的細(xì)分?jǐn)?shù)為N時(shí),增量編碼盤的每一個(gè)脈沖代表的角位移為360°/N,A、B信號的頻率相同,頻率大小反映當(dāng)前電機(jī)速度,由這兩個(gè)信號就可得到電機(jī)轉(zhuǎn)向、轉(zhuǎn)角和轉(zhuǎn)速。[6]如圖2所示,在A和B的上升沿和下降沿計(jì)數(shù)器均做相應(yīng)變化,得到count脈沖,在FPGA中計(jì)數(shù),即可得到編碼器輸出的脈沖數(shù),經(jīng)過計(jì)算就可以得到電機(jī)一定時(shí)間內(nèi)實(shí)際走過的路程或者單位時(shí)間內(nèi)的速度。

本系統(tǒng)主要在FPGA中編程實(shí)現(xiàn)對編碼器的硬件解碼。主要程序如下:
if(shift_a==2’b01)
begin
if(b)
cnt<=#2cnt-1’b1;
else
cnt<=#2cnt+1’b1;
end
elseif(shift_a==2’b10)
begin
if(b)
cnt<=#2cnt+1’b1;
else
cnt<=#2cnt-1’b1;
end
elseif(shift_b==2’b01)
begin
if(a)
cnt<=#2cnt+1’b1;
else
cnt<=#2cnt-1’b1;
end
elseif(shift_b==2’b10)
begin
if(a)
cnt<=#2cnt-1’b1;
else
cnt<=#2cnt+1’b1;
其中,cnt為十六位寄存器,shift_a=2’b01和shiftb=2’b01分別表示A和B出現(xiàn)上升沿,同理如果是等于2’b10則表示下降沿。電機(jī)編碼器硬件解碼程序仿真模擬后效果如圖3所示。圖中number為FPGA計(jì)算所得的編碼器輸出脈沖數(shù)。
電子發(fā)燒友App























































評論