《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于Verilog HDL的一種絕對值編碼器實時讀出算法
基于Verilog HDL的一種絕對值編碼器實時讀出算法
來源:微型機與應用2013年第3期
岳 振,顧海峰,李范鳴
(中國科學院上海技術物理研究所,上海 200083)
摘要: 針對所設計的絕對值編碼器讀出電路板,用Verilog HDL設計了一種絕對值編碼器實時讀出程序。可以將編碼器數(shù)據(jù)讀入FPGA,并將編碼器輸出的普通二進制數(shù)據(jù)轉(zhuǎn)換為角度值,最后驅(qū)動液晶顯示屏實時讀出角度值。經(jīng)過測試,該程序能夠穩(wěn)定運行在電路板上,完全滿足編碼器數(shù)據(jù)在液晶顯示屏上的實時讀出。本程序基于模塊化設計,易于移植。
Abstract:
Key words :

摘  要: 針對所設計的絕對值編碼器讀出電路板,用Verilog HDL設計了一種絕對值編碼器實時讀出程序。可以將編碼器數(shù)據(jù)讀入FPGA,并將編碼器輸出的普通二進制數(shù)據(jù)轉(zhuǎn)換為角度值,最后驅(qū)動液晶顯示屏實時讀出角度值。經(jīng)過測試,該程序能夠穩(wěn)定運行在電路板上,完全滿足編碼器數(shù)據(jù)在液晶顯示屏上的實時讀出。本程序基于模塊化設計,易于移植。
關鍵詞: 線性變換;編碼器;液晶顯示屏驅(qū)動;Verilog HDL

 光電編碼器是通過光電轉(zhuǎn)換將輸出軸上的機械幾何位移量轉(zhuǎn)換成一串脈沖或數(shù)字量的傳感器。在電機伺服控制系統(tǒng)中,它與電機同軸連接,常用來測量電機轉(zhuǎn)子的速度和位置[1]。近年來,隨著研究室小批量軍工生產(chǎn)的開展,需要批量采購部分絕對值編碼器等外協(xié)器件。為方便檢驗采購的編碼器,保障生產(chǎn)任務的按時完成,設計了一個單圈絕對值編碼器實時讀出電路板,其結(jié)構(gòu)如圖1所示。基于此電路板,開發(fā)出了一個程序,它能夠?qū)崿F(xiàn)將絕對值編碼器的數(shù)據(jù)讀入FPGA,并將數(shù)據(jù)轉(zhuǎn)換為角度值,最終驅(qū)動液晶顯示屏實時輸出角度值。這使得不需要將編碼器數(shù)據(jù)輸入到計算機就可以處理轉(zhuǎn)化為角度值,使用更加方便。程序中用到了線性變換思想,可以應用到其他程序中。電路板中用到的絕對值編碼器是BEI-IDEACOD公司的CHO5系列。液晶顯示屏為3.3 V供電的1602型LCD,F(xiàn)PGA采用的是Xilinx的Spartan-6系列。

1 數(shù)據(jù)讀入及去抖動
 本文所采用的絕對值編碼器是BEI-IDEACOD公司的CHO5系列,它采用并行輸出模式,有13 bit數(shù)據(jù)(Data[0]~Data[12]),讀出速度快。由于電動機的旋轉(zhuǎn)或機械設備的震動,會使編碼器輸出脈沖抖動[2],因此首先對編碼器脈沖進行了去抖動處理。下面的程序?qū)崿F(xiàn)了數(shù)據(jù)讀入,并在去抖動后被鎖存在Gray_data中。
 always@(posedge clk_50M)
 begin
 D0<={D0[1:0],Data[0]};
 D1<={D1[1:0],Data[1]};
  ......
 D11<={D11[1:0],Data[11]};
 D12<={D12[1:0],Data[12]};
 end
 always@(posedge clk_50M)
 begin
 Gray_data[0]<=D0[2]&D[1]&D[0];
 Gray_data[1]<=D1[2]&D[1]&D[0];
 ......
 Gray_data[11]<=D11[2]&D[1]&D[0];
 Gray_data[12]<=D12[2]&D[1]&D[0];
 end
2 二進制格雷碼轉(zhuǎn)普通格雷碼
 上面得到數(shù)據(jù)Gray_data還是格雷碼,因為絕對值編碼器(并行輸出)采用的是格雷碼二進制輸出。格雷碼的特點是任意兩個相鄰位其輸出格雷碼值只有一位不同[3],這提高了數(shù)據(jù)輸出的穩(wěn)定性。假設二進制格雷碼為Gn-1 Gn-2…G2G1G0,其所對應的普通二進制為Bn-1Bn-2…B2B1B0。那么它們最高位之間的對應關系如式(1)所示,其他各位的對應關系如式(2)所示。
 Bn-1=Gn-1(1)
 Bi-1=Gi-1^Bi, i=1,2,…,n-1(2)
 根據(jù)式(1)和式(2),格雷碼二進制轉(zhuǎn)化為普通二進制的Verilog HDL代碼如下:
 always@(posedge Clk_50M)
  begin
  Binary_data[12]=Gray_data[12];
  Binary_data[11]=Binary_data[12]^Gray_data[11];
  Binary_data[10]=Binary_data[11]^Gray_data[10];
   ......
  Binary_data[1]=Binary_data[2]^Gray_data[1];
  Binary_data[0]=Binary_data[1]^Gray_data[0];
  end
 該程序?qū)崿F(xiàn)了由格雷碼二進制Gray_data向普通二進制Binary_data的轉(zhuǎn)換。
3 將二進制轉(zhuǎn)為角度值
 絕對值編碼器的最小精度是由最低位決定的。因為所用的絕對值器是13 bit數(shù)據(jù)輸出,絕對值編碼器的最低位為1時,對應的角度值如式(3)所示:

 因此,絕對值編碼器的最小精度為min=0.043 945 312 5°。也就是說二進制編碼每加1,度數(shù)就應該增加0.043 945 312 5°。為方便在Verilog HDL中進行處理,對這種十進制數(shù)進行一個線性變換,將其最小精度值對應二進制min_degree=2′b000000000000011010001100011000010111000101,其實就是十進制數(shù)439 453 125對應的二進制數(shù)。相對于編碼器輸出的二進制數(shù),將這個二進制數(shù)稱為編碼二進制。這樣就對每一個編碼器輸出的13 bit二進制進行了一個線性變化,轉(zhuǎn)化為對應的編碼二進制Now_degree。其對應關系如式(4)所示,其中的“<<”是左移位運算符。
 Now_degree=Binary_data[0]min_degree+Binary_data[1](min_degree<<1)++Binary_data[11](min_degree<<11)+  Binary_data[12](min_degree<<12)    (4)
 為了得出在每一數(shù)據(jù)位(百位、十位、一直到小數(shù)點后10位)上需要輸出什么數(shù)據(jù),需要求出每個數(shù)據(jù)位權(quán)值(即次位數(shù)據(jù)為1時的值)對應的編碼二進制,數(shù)據(jù)位權(quán)值對應的編碼二進制如表1所示。其中Decimal10_degree指的是小數(shù)點后第10位權(quán)值所對應的編碼二進制,以此類推,Hundred_degree是百位上權(quán)值所對應的編碼二進制。

 通過將Now_degree與各位對應的編碼二進制一一比較,使用狀態(tài)機得出具體實現(xiàn)各數(shù)據(jù)位上的數(shù)值:Decimal1Decimal1、Single、Ten、Hundred。具體Verilog HDL代碼如下所示:
always@(posedge Clk_50M)
begin
 4′b0000:
 begin
  if(Buf_degree>=Hundred_degree)
  begin
   Buf_degree=Buf_degree-Hundred_degree;
   Temp_Hundred=Temp_Hundred+1;
   Sta=4′b0000;
    end
  else
  begin
   Sta=4′b0010;
  end
 end
4′b0001:
begin
 if(Buf_degree>=Ten_degree)
 begin
  Buf_degree=Buf_degree-Ten_degree;
  Temp_Ten=Temp_Ten+1;
  Sta=4′b0001;
 end
 else
 begin
  Sta=4′b0010;
 end
end
4′b1100:
begin
 if(Buf_degree>=Decimal10_degree)
 begin
 Buf_degree=Buf_degree-Decimal10_degree;
 Temp_Decimal10=Temp_Decimal10+1;
 Sta=4′b1101;
 end
 else
 begin
 Sta=4′b1101;
 end
  end
4′b1101:begin
  Hundred=Temp_Hundred;
  Ten=Temp_Ten;
  Single=Temp_Single;
  Decimal1=Temp_Decimal1;
  Decimal2=Temp_Decimal2;
  Decimal3=Temp_Decimal3;
  Decimal4=Temp_Decimal4;
  Decimal5=Temp_Decimal5;
  Decimal6=Temp_Decimal6;
  Decimal7=Temp_Decimal7;
  Decimal8=Temp_Decimal8;
  Decimal9=Temp_Decimal9;
  Decimal10=Temp_Decimal10;
  Sta=4′b0000;
  end  
 default:begin
 Sta=4′b0000;
 end
  endcase
 end
 該程序最終實現(xiàn)了將絕對值編碼器輸出的普通二進制數(shù)轉(zhuǎn)化為角度值。例如,一個普通二進制數(shù)0100100110010先通過式(3)運算,轉(zhuǎn)化為Now_degree,然后再通過上述代碼就可以被轉(zhuǎn)化為103447265625(依次為從百位上的值到小數(shù)點后第10位上的值)。這樣就得到了角度值103.447 265 625°。
4 液晶顯示屏驅(qū)動
 LCD1602是一個16行2列的液晶顯示屏,因為所需要的數(shù)據(jù)位(算上小數(shù)點)總共14位,所以完全滿足角度值輸出要求。LCD1602內(nèi)置192種字符,顯示字符時,要先輸入顯示字符地址,即告訴模塊在哪里顯示字符[4]。由于只需要顯示角度,因此只需要知道數(shù)字0~9和小數(shù)點(.)的地址就可以了,如表2所示。從表2中可以看出,數(shù)字地址的前4位都是0011,而后4位正好是數(shù)字的二進制表示,這給編寫驅(qū)動液晶屏的編碼帶來了很大方便,可以直接采用類似下面的語句輸出:
 Lcd_data<={4′b0011,Hundred};
 這樣就將從百位上的值Hundred到小數(shù)點后10位上的值Decimal10依次輸?shù)揭壕э@示屏上了。其中的Lcd_data是接LCD1602的8 bit數(shù)據(jù)位。上面并不是程序中的真正代碼,因為液晶顯示屏驅(qū)動需要初始化,且需要嚴格時序控制,程序較長,這里就不給出具體代碼了。

 

 

 把程序下載到開發(fā)板后,程序運行正常,角度值被寫到了液晶顯示屏第一行上,如圖3所示。液晶屏動態(tài)刷新顯示,程序中設計每隔900 ns讀入一個字符,讀入16個字符共需0.014 4 ms。顯示所有的8 192個狀態(tài)(即旋轉(zhuǎn)一周)最短需要117.964 8 ms,因此能夠?qū)崿F(xiàn)實時顯示。通過檢驗,該系統(tǒng)運行穩(wěn)定,能夠獲得穩(wěn)定的角度值輸出。
 本文用Verilog HDL設計了一種絕對值編碼器實時讀出程序,仿真和在電路板上的測試表明,該絕對值編碼器運行正常。程序采用模塊化編程,一致性較好。其中,在二進制數(shù)轉(zhuǎn)角度值時用到了線性變換的思想,解決了在用Verilog HDL處理角度值輸出問題。使編碼器數(shù)據(jù)不傳入計算機也可以得到處理,具有較大實用性。
參考文獻
[1] 陳赟,趙興國.基于PCI總線的單圈絕對式光電軸角編碼器實時數(shù)據(jù)采集系統(tǒng)[J].光子學報,2007,36(3):421-424.
[2] 夏冬梅,孫林.基于CPLD的增量式旋轉(zhuǎn)編碼器接口電路模塊設計[J].機械制造與自動化,2009(5):156-157,160.
[3] 周政,李菊芬.絕對值編碼器在高爐料車控制中的應用[J].南鋼科技與管理,2006(2):47-48.
[4] 于志贛,劉國平,張旭斌.液晶LCD1602模塊的應用[J].機電技術,2009(3):58-59.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
日韩午夜电影av| 久久精品女人的天堂av| 欧美一区二区久久久| 中国成人黄色视屏| 99精品免费网| 亚洲裸体俱乐部裸体舞表演av| 亚洲高清在线精品| 亚洲福利视频专区| 亚洲国产合集| 最新日韩在线视频| 亚洲精品一区二区三区四区高清 | 狠狠色丁香久久婷婷综合_中| 国产精品一区二区三区四区五区 | 国产精品毛片在线看| 欧美午夜精品久久久久久久| 欧美日韩在线视频首页| 欧美日韩免费高清| 国产精品福利av| 国产欧美va欧美不卡在线| 国产视频自拍一区| 韩日欧美一区二区| 在线免费精品视频| 亚洲精品1区2区| aa级大片欧美| 亚洲欧美成人精品| 欧美伊人精品成人久久综合97| 久久精品成人一区二区三区| 亚洲黄色影片| 一区二区三区四区五区在线| 亚洲一区三区电影在线观看| 小嫩嫩精品导航| 久久永久免费| 欧美精品色网| 国产精品大片wwwwww| 国产农村妇女毛片精品久久莱园子| 国产欧美一区二区三区久久人妖| 国模 一区 二区 三区| 在线观看福利一区| 亚洲美女网站| 午夜久久久久久| 最新亚洲视频| 亚洲欧美日韩国产一区| 久久精品一区二区三区中文字幕| 嫩草影视亚洲| 国产精品扒开腿爽爽爽视频| 国产一区二区三区无遮挡| 亚洲国产精品第一区二区三区 | 久久精品视频va| 一区二区免费在线观看| 久久成人精品一区二区三区| 另类天堂视频在线观看| 欧美三级乱码| 黄色资源网久久资源365| 日韩午夜激情电影| 久久精品盗摄| 亚洲字幕一区二区| 老司机一区二区三区| 欧美午夜不卡| 在线成人性视频| 亚洲午夜黄色| 亚洲青涩在线| 性色av香蕉一区二区| 欧美成人一区二区三区片免费| 国产精品区一区二区三| 亚洲高清在线观看| 午夜精品影院在线观看| 一区二区欧美亚洲| 久久美女艺术照精彩视频福利播放| 欧美日本三级| 韩国av一区| 亚洲视频中文字幕| 亚洲精品视频在线| 久久久久久久一区二区三区| 欧美日韩视频一区二区| 红桃视频一区| 亚洲曰本av电影| 夜夜爽99久久国产综合精品女不卡| 久久九九国产| 国产精品久久影院| 亚洲人成亚洲人成在线观看图片| 欧美亚洲一级片| 亚洲天堂av综合网| 欧美精品999| 精品99一区二区| 香蕉成人伊视频在线观看| 在线亚洲欧美| 欧美成人免费观看| 国模私拍一区二区三区| 亚洲永久字幕| 中文网丁香综合网| 欧美xx69| 韩日欧美一区| 欧美亚洲网站| 性伦欧美刺激片在线观看| 欧美色欧美亚洲高清在线视频| 影视先锋久久| 欧美一区二区三区在线| 午夜精品久久久久久久99水蜜桃| 欧美人妖在线观看| 亚洲韩日在线| 亚洲欧洲日本一区二区三区| 久久精品综合一区| 国产目拍亚洲精品99久久精品| 夜夜爽www精品| 亚洲私人影院| 欧美日精品一区视频| 99re热这里只有精品视频| 日韩一二三在线视频播| 欧美成人一区在线| 亚洲黄色性网站| 日韩视频一区二区三区在线播放| 久久一区欧美| 伊人久久亚洲影院| 亚洲国产欧美一区二区三区同亚洲| 久久久久久穴| 国产专区精品视频| 久久国产精品电影| 美女精品网站| 亚洲国产精品女人久久久| 亚洲国产一区视频| 欧美激情1区2区3区| 91久久久久| 一区二区av| 欧美日韩免费高清| 一区二区高清在线| 亚洲欧美色婷婷| 国产麻豆精品久久一二三| 亚洲欧美视频一区| 久久激情综合| 国内精品伊人久久久久av影院| 小黄鸭精品aⅴ导航网站入口| 久久国产精品高清| 国产真实精品久久二三区 | 亚洲日本成人| 欧美精品乱码久久久久久按摩| 亚洲精品一级| 亚洲欧美日韩专区| 国产亚洲女人久久久久毛片| 亚洲第一免费播放区| 美国十次了思思久久精品导航| 亚洲大胆人体视频| 99在线热播精品免费| 欧美色大人视频| 午夜精品免费| 欧美成人a∨高清免费观看| 亚洲人成在线播放| 亚洲一区二区在线视频| 国产欧美日韩亚州综合| 亚洲国产精品国自产拍av秋霞 | 日韩一级黄色av| 香蕉av福利精品导航| 狠狠久久婷婷| 在线亚洲自拍| 国产三区二区一区久久| 亚洲国内自拍| 欧美亚州在线观看| 欧美淫片网站| 欧美乱人伦中文字幕在线| 亚洲午夜视频在线观看| 久久久精品2019中文字幕神马| 在线国产精品一区| 亚洲一区二区三区在线视频| 国产日韩欧美二区| 91久久久久久国产精品| 国产精品国内视频| 久久精品日韩一区二区三区| 欧美人与禽猛交乱配| 亚洲女爱视频在线| 免费欧美日韩| 亚洲性夜色噜噜噜7777| 免费观看一级特黄欧美大片| 亚洲视频你懂的| 久久综合久久综合久久| 一区二区三区精品视频在线观看| 久久久久久一区二区三区| 亚洲三级视频在线观看| 久久成人18免费网站| 亚洲日本中文字幕免费在线不卡| 欧美一区二区三区在线视频 | 亚洲国产精品一区制服丝袜| 亚洲欧美一区在线| 亚洲福利在线观看| 欧美中文在线观看| 亚洲日本视频| 久久亚洲精品欧美| 亚洲视频欧美视频| 欧美国产一区在线| 欧美一区二区三区视频免费| 欧美视频福利| 亚洲国产精品视频一区| 国产精品少妇自拍| 一本大道久久a久久精品综合| 国产亚洲欧美aaaa| 亚洲男女毛片无遮挡| 亚洲高清视频在线观看| 久久精品日产第一区二区三区| 日韩一级大片| 欧美成人综合| 久久精品99无色码中文字幕| 国产精品久久久一区二区三区|