硬體平台:zynq xcz7020
編碼器:歐姆龍e6b2 500線編碼器。
實現功能:每5ms測速週期對編碼器進行脈衝計數,換算得到轉速,並根據ab相關係得到旋轉方向。
在寫這塊**的時候也遇到了一些問題,程式雖小但也涉及到一些veilog中易錯的點。**如下
module encoder(
input clk_i,
input rst_n,
input encodera_i,//編碼器為500線
input encoderb_i,
output [31:0] speed_o,
output dir_o
);reg [18:0] clk_cnt;//fpga頻率計數
reg [31:0] speed=0;
reg dir=0;//0 正方向 1反方向
reg stop;
always@(posedge clk_i) begin
if(rst_n==0) begin
clk_cnt<=0;
endelse
begin
if(clk_cnt==19
'd50_0000) begin //100mhz時鐘計時5ms
clk_cnt<=0;
stop<=1;
endelse
begin
clk_cnt<=clk_cnt+1
'd1;
stop<=0;
endendend
reg[18:0] a_cnt;
always@(posedge encodera_i) begin
if(encoderb_i==1
'b1)
dir<=1;
else
dir<=0;
endalways@(posedge encodera_i or negedge rst_n or posedge stop) begin
if(rst_n==0)
a_cnt<=0;
else
begin
if(stop==1) begin
a_cnt<=0;
endelse
a_cnt<=a_cnt+1;
endend always@(*)begin
if(clk_cnt==19
'd49_9999)begin
speed<=24*a_cnt;//speed 單位為 r/min 24是5ms測速週期
//的單位換算係數
endelse speed<=speed;
endassign speed_o = speed;
assign dir_o = dir;
endmodule
完成編碼器模組的testbench測試之後,在axi_lite匯流排中進行呼叫,並封裝成ip,實現了zynq的soc開發,在pl部分進行測速,在ps部分實現資料的視覺化。最後在進行管腳約束時遇到乙個問題,編碼器的脈衝輸入訊號是時鐘訊號,需要將其約束到具有時鐘輸入能力的管腳,官方daatasheet中表述為clock capable i/os 這些管腳在zynq中的標識為mrcc/srcc。
若有問題請大家批評指正
旋轉編碼器
旋轉編碼器用來測位置角度速度位移等資訊。分類 按原理 光電式和磁電效應式 旋轉的永磁體和不動的監測裝置 按訊號 增量式 脈衝式 和絕對式 碼盤刻有絕對值圖譜,分為二進位制和格雷碼或格雷碼的餘碼輸出 初始位置不為0,非2的冪次方 安裝方式 軸型 加裝固定,安裝成本高 和軸套型 安裝空間小成本低 單圈 ...
連線編碼器 旋轉編碼器的接線方式
旋轉編碼器是一種光電式旋轉丈量裝置,它將被測的角位移直接改換成數碼訊號 高速脈衝訊號 因而可將旋轉編碼器的輸出脈衝訊號直接輸入給plc,運用plc的高速計數器對其脈衝訊號進行計數,歐姆龍觸控螢幕,以取得丈量成果。紛歧樣型別的旋轉編碼器,其輸出脈衝的相數也紛歧樣,有的旋轉編碼器輸出a b z三相脈衝,...
11旋轉編碼器原理 旋轉編碼器的工作原理和分類
旋轉編碼器是集光機電技術於一體的速度位移感測器。當旋轉編碼器軸帶動光柵盤旋轉時,經發光元件發出的光被光柵盤狹縫切割成斷續光線,並被接收元件接收產生初始訊號。該訊號經後繼電路處理後,輸出脈衝或 訊號。它的特點是體積小,功能全,頻響高,分辨能力高,重量輕,品種多,力矩小,耗能低,效能穩定,可靠使用壽命長...