|
在《阿莫電子論壇》上找到了代碼,鏈接如下:
www點(diǎn)amobbs點(diǎn)com/thread-840211-1-1.html
CPLD應(yīng)用:光柵旋轉(zhuǎn)編碼器的4倍頻解碼
發(fā)表于 2007-10-27 10:22:55 | 只看該作者 回帖獎(jiǎng)勵(lì)
CPLD應(yīng)用:增量式光柵旋轉(zhuǎn)編碼器的4倍頻解碼
剛學(xué)了幾天的CPLD,上傳我的第一個(gè)應(yīng)用,不知道實(shí)際工作情況如何,希望高手指點(diǎn)指點(diǎn),謝謝
如果CLK時(shí)鐘頻率為25Mhz,則至少可以對(duì)輸出頻率2.5Mhz以下增量式光柵旋轉(zhuǎn)編碼器的進(jìn)行4倍頻解碼
概念如下:
增量式光柵旋轉(zhuǎn)編碼器分辨率:2500p/r (常用伺服系統(tǒng)的編碼器)
按工作時(shí)最大的輸出頻率為2.5Mhz計(jì)算,編碼器可以工作到60000r/m,當(dāng)然這樣的旋轉(zhuǎn)速度實(shí)際上是很難達(dá)到的,實(shí)際上的常用的伺服電機(jī)最大工作到5000r/m
CLK:倍頻用時(shí)鐘頻率
A:編碼器A相
B:編碼器B相
CP:解碼后的脈沖
DIR:旋轉(zhuǎn)方向
仿真圖片如下:
CPLD應(yīng)用:光柵旋轉(zhuǎn)編碼器的4倍頻解碼.PNG (8.19 KB, 下載次數(shù): 54)
下載附件
仿真圖片
2019-1-6 11:23 上傳
Verilog hdl代碼:
module decoder(CLK, A, B, CP, DIR);
input CLK;
input A;
input B;
output CP;
output DIR;
reg CP;
reg DIR;
wire a_xor_b;
reg a_xor_b_temp;
reg[3:0] a_xor_b_counter;
xor (a_xor_b, A, B);
always @(posedge CLK)
begin
if(a_xor_b_temp != a_xor_b)
begin
CP = 1'b1;
a_xor_b_temp = a_xor_b;
a_xor_b_counter = 4'b0000;
end
else
begin
a_xor_b_counter = a_xor_b_counter + 4'b0001;
if(a_xor_b_counter >= 4'b0010) // 根據(jù)實(shí)際應(yīng)用,可以改變a_xor_b_counter上限值來(lái)改變輸出脈寬
begin
CP = 1'b0;
end
end
end
always @(posedge A) begin
DIR = ~B;
end
endmodule
不明白,為什么編碼器還要外接時(shí)鐘?
|
|