国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

格雷碼的來源以及格雷碼的應(yīng)用

2017-03-14 22:55梅媛沈祖斌
科技視界 2016年27期
關(guān)鍵詞:毛刺

梅媛 沈祖斌

【摘 要】簡(jiǎn)述了格雷碼的來源和發(fā)展歷史,介紹了格雷碼的軸角編碼器的輸出原理,以及格雷碼的兩大特點(diǎn),一是數(shù)與數(shù)之間都只發(fā)生一位跳變,二是在利用格雷碼計(jì)數(shù)器時(shí)會(huì)降低功耗。另外介紹了格雷碼與二進(jìn)制之間的兩種轉(zhuǎn)換方法:公式法和查表法;以及格雷碼計(jì)數(shù)器的應(yīng)用中出現(xiàn)的毛刺狀態(tài)和格雷碼計(jì)數(shù)器的應(yīng)用原理。

【關(guān)鍵詞】格雷碼;格雷碼計(jì)數(shù)器;毛刺;軸角編碼器

1 格雷碼來源

格雷編碼在被工程師所熟知之前一直應(yīng)用于機(jī)械應(yīng)用。1878年,法國(guó)工程師Emile Baudot在運(yùn)用電報(bào)的過程中使用了格雷編碼。他因此也獲得了法國(guó)榮譽(yù)軍團(tuán)勛章。但是在當(dāng)時(shí)格雷編碼并不適用于所有地方,比如脈沖編碼調(diào)制的原則就不符合格雷編碼的原理。

Frank Gray ,貝爾實(shí)驗(yàn)室的研究員,發(fā)明了一種方法使用真空座裝置將模擬信號(hào)轉(zhuǎn)化為格雷編碼。1953年,這個(gè)方法和裝置被Frank Gray申請(qǐng)專利,于是這個(gè)編碼被命名為格雷碼[1]。其中利用了軸角編碼器將格雷碼輸出,編碼器是附接到旋轉(zhuǎn)軸的圓盤,圓盤包含了對(duì)于二進(jìn)制1是透明的區(qū)域和對(duì)于二進(jìn)制0是不透明的區(qū)域,光源放置在圓盤的一側(cè),傳感器在圓盤另一側(cè)。當(dāng)光源和傳感器之間出現(xiàn)清晰的區(qū)域時(shí),傳感器以二進(jìn)制1輸出;出現(xiàn)不透明區(qū)域時(shí),傳感器以二進(jìn)制0輸出。

格雷碼是一種無權(quán)碼,其編碼特點(diǎn)是任意兩相鄰代碼間只有一位數(shù)碼不同,這對(duì)數(shù)碼的傳輸有很大的幫助,因?yàn)樗蟠鬁p少了由一個(gè)狀態(tài)到下一個(gè)狀態(tài)時(shí)電路中的模糊狀態(tài),提高了電路的抗干擾能力,所以格雷碼是一種錯(cuò)誤最小化的編碼。

格雷碼的顯著特點(diǎn)是所表示的數(shù)遞增時(shí)不發(fā)生較大誤差。例如,當(dāng)十六進(jìn)制數(shù)由7變?yōu)?時(shí),若采取的是二進(jìn)制碼,則其編碼將由0111變?yōu)?000。此時(shí),四位二進(jìn)制狀態(tài)都發(fā)生變化,對(duì)于實(shí)現(xiàn)二進(jìn)制碼的具體設(shè)備而言,其四位設(shè)備狀態(tài)不可能同時(shí)發(fā)生改變,于是有可能出現(xiàn)下列情況:7(0111),5(0101),4(0100),12(1100),8(1000)。盡管最終結(jié)果是從7(0111)變到8(1000),但出現(xiàn)錯(cuò)誤的中間轉(zhuǎn)換過程。若無措施禁止這些中間錯(cuò)誤輸出,則會(huì)發(fā)生較大誤差。若采用格雷碼,則不會(huì)產(chǎn)生這種誤差。因當(dāng)十六進(jìn)制數(shù)由7變?yōu)?時(shí),其對(duì)應(yīng)的格雷碼將從0100變?yōu)?100,只有一位二進(jìn)制數(shù)發(fā)生改變,也無中間錯(cuò)誤結(jié)果出現(xiàn)。

格雷碼的另一個(gè)特點(diǎn)是在工作計(jì)數(shù)狀態(tài)時(shí),每次都只有一位發(fā)生跳變,跳變的次數(shù)遠(yuǎn)遠(yuǎn)少于二進(jìn)制計(jì)數(shù)器,所以使用格雷碼計(jì)數(shù)器可以大大降低系統(tǒng)的功耗。對(duì)于表1,我們很清楚的看出來,在從0-8的轉(zhuǎn)變中,格雷碼計(jì)數(shù)器發(fā)生了8位改變,而二進(jìn)制計(jì)數(shù)器發(fā)生了14位的改變。因此,如果采用CMOS電路,功耗主要產(chǎn)生在電路狀態(tài)的切換處,在格雷碼的計(jì)數(shù)器輸出端消耗的功率僅為二進(jìn)制計(jì)數(shù)器輸出消耗的功率的57%。

表1 二進(jìn)制計(jì)數(shù)器和格雷碼計(jì)數(shù)器的比較

2 格雷碼與二進(jìn)制碼的轉(zhuǎn)換

因?yàn)楦窭状a是一種無權(quán)碼,并且在工程上有廣泛的應(yīng)用,這都要進(jìn)行格雷碼和二進(jìn)制碼的轉(zhuǎn)換。通過軟件轉(zhuǎn)換則會(huì)降低運(yùn)算速度,用硬件方法轉(zhuǎn)換數(shù)據(jù),使數(shù)據(jù)能得到即時(shí)轉(zhuǎn)換,運(yùn)算過程較為簡(jiǎn)捷,加快了處理速度。用異或邏輯門芯片及電阻網(wǎng)絡(luò)組成轉(zhuǎn)換電路很容易實(shí)現(xiàn)格雷碼和二進(jìn)制碼的轉(zhuǎn)換,但成本比較高。因此在對(duì)速度要求不是很高的地方一般都用軟件方法來實(shí)現(xiàn)。

軟件轉(zhuǎn)換有多種方法:

2.1 公式法

格雷碼轉(zhuǎn)換為二進(jìn)制碼的算法則較為繁瑣,如下:

Rn為n位的格雷碼,Cn為轉(zhuǎn)換后的二進(jìn)制碼

Cn = Rn

Cn-1 = Rn⊕Rn-1

Cn-2 =Rn⊕Rn-1⊕Rn-2

……

C1 = Rn⊕Rn-1⊕Rn-2⊕…⊕R2⊕R1,

C0 = Rn⊕Rn-1⊕Rn-2⊕…⊕R2⊕R1⊕R0

2.2 查表法

最簡(jiǎn)單的一種方法,根據(jù)傳輸位數(shù),建立二進(jìn)制碼和格雷碼一一對(duì)應(yīng)的表格,例如列出一個(gè)長(zhǎng)度為2048個(gè)碼組的各類碼表,每組碼的長(zhǎng)度為11位,為方便查表,每一碼組占用兩個(gè)字節(jié),碼表共占用4KB的程序空間。程序設(shè)計(jì)的核心是通過循環(huán)查表指令把格雷碼轉(zhuǎn)換為二進(jìn)制碼,再將二進(jìn)制碼轉(zhuǎn)換成BCD碼和顯示碼,但如果碼組太多,系統(tǒng)的程序空間也會(huì)相應(yīng)增大,單片機(jī)必須擴(kuò)展外部程序存儲(chǔ)器。同時(shí)查表指令的循環(huán)次數(shù)也相應(yīng)增加,大大增加了譯碼的時(shí)間。

3 格雷碼的應(yīng)用

從廣義上來說,寄存器是由一系列的觸發(fā)器和組合門電路組成,用來執(zhí)行數(shù)據(jù)處理任務(wù)。觸發(fā)器保存數(shù)據(jù),組合門電路是確定要傳送到觸發(fā)器中的新的或變換的數(shù)據(jù)。而計(jì)數(shù)器是在施加時(shí)鐘脈沖時(shí)經(jīng)過預(yù)定的狀態(tài)序列的寄存器,他的門電路以產(chǎn)生規(guī)定的二進(jìn)制狀態(tài)序列的方式連接。

計(jì)數(shù)器在數(shù)字系統(tǒng)中應(yīng)用廣泛,如在電子計(jì)算機(jī)的控制器中對(duì)指令地址進(jìn)行計(jì)數(shù),以便順序取出下一條指令;在數(shù)字儀器中對(duì)脈沖的計(jì)數(shù)等等。計(jì)數(shù)器可以用來顯示產(chǎn)品的工作狀態(tài),一般來說主要是用來表示產(chǎn)品已經(jīng)完成了多少份的折頁配頁工作。它主要的指標(biāo)在于計(jì)數(shù)器的位數(shù)。

在實(shí)際應(yīng)用中,二進(jìn)制計(jì)數(shù)器是最廣泛應(yīng)用的一種方法,它可以在電路設(shè)計(jì)中被調(diào)用來實(shí)現(xiàn)系統(tǒng)在一定時(shí)間間隔后完成動(dòng)作,但是二進(jìn)制計(jì)數(shù)器的進(jìn)位過程會(huì)出現(xiàn)一些中間狀態(tài)。在表一中我們很清楚的了解二進(jìn)制在碼值變化的時(shí)候位數(shù)的變化情況。在我們的邏輯思維里,如4位異步串行二進(jìn)制計(jì)數(shù)器進(jìn)位期間讀數(shù)由0111變化到1000時(shí),0->1、1->0、1->0、1->0這四位的變化是同時(shí)進(jìn)行的,但是在實(shí)際的物理器件中,在信號(hào)變化的瞬間,組合邏輯的輸出有先后順序,這四位并不是同時(shí)變化,往往會(huì)出現(xiàn)一些不正確的尖峰信號(hào),這些尖峰信號(hào)稱為“毛刺”。電路低速運(yùn)行的時(shí)候,這些毛刺不能被檢測(cè)到,對(duì)后續(xù)電路不會(huì)有影響,但是電路高速運(yùn)行的時(shí)候,這些毛刺就不能被忽視,這就有可能會(huì)得到0110、0100和0000三個(gè)錯(cuò)誤數(shù)值。由此可以看出,用二進(jìn)制計(jì)數(shù)器是有可能在數(shù)據(jù)變化中有較大的毛刺產(chǎn)生。

而計(jì)數(shù)器在整個(gè)系統(tǒng)被頻繁的調(diào)用,所以對(duì)計(jì)數(shù)器的要求是要求非常準(zhǔn)確的。正如前文所述,格雷碼的特點(diǎn)就是相鄰兩個(gè)數(shù)值之間只有一位發(fā)生跳變,那么可以采用格雷碼計(jì)數(shù)器代替二進(jìn)制計(jì)數(shù)器,即利用格雷碼計(jì)數(shù)時(shí)每次計(jì)數(shù)變化只有一位的輸出電平發(fā)生翻轉(zhuǎn),這樣就可以減少中間的轉(zhuǎn)換過程,有效地避免了毛刺的產(chǎn)生。

此時(shí)可以采用格雷碼計(jì)數(shù)器,盡管格雷碼計(jì)數(shù)器的設(shè)計(jì)比較復(fù)雜,占用的FPGA的內(nèi)部資源更多,但是現(xiàn)在半導(dǎo)體的成本越來越低,并且采用格雷碼計(jì)數(shù)器可以大大增強(qiáng)系統(tǒng)的穩(wěn)定性和可靠性。

根據(jù)格雷碼計(jì)數(shù)的特點(diǎn),格雷碼計(jì)數(shù)器的設(shè)計(jì)大概思路就是:將相應(yīng)的普通二進(jìn)制碼轉(zhuǎn)換成對(duì)應(yīng)的格雷碼。在二進(jìn)制計(jì)數(shù)過程中,通過異或關(guān)系將其轉(zhuǎn)換成格雷碼再輸出,而二進(jìn)制數(shù)并不輸出,這樣就得了格雷碼計(jì)數(shù)器[2]。從而有效地避免了毛刺的產(chǎn)生,保證了計(jì)數(shù)的穩(wěn)定和可靠。

4 總結(jié)

簡(jiǎn)單的敘述了格雷碼產(chǎn)生的歷史、格雷碼和二進(jìn)制的轉(zhuǎn)換方法以及利用格雷碼的錯(cuò)誤最小化的特點(diǎn)運(yùn)用于格雷碼計(jì)數(shù)器。由于格雷碼計(jì)數(shù)的時(shí)候只有一位碼數(shù)發(fā)生變化,在計(jì)數(shù)時(shí)只有一位發(fā)生跳變,減少了毛刺的產(chǎn)生,所以相較于其他計(jì)數(shù)器更具有穩(wěn)定性和可靠性。

關(guān)于格雷碼不僅僅只有錯(cuò)誤最小化和功耗低的特點(diǎn),他還有很多其他的性質(zhì),對(duì)格雷碼有興趣的學(xué)者可以更加深入的去研究格雷碼。

【參考文獻(xiàn)】

[1]Knuth, Donald E. “Generating all n-tuples.” The Art of Computer Programming, Volume 4A: Enumeration and Backtracking, pre-fascicle 2a, October 15, 2004.

[2]沙燕萍,皇甫偉, 曾烈光.異步FIFO的VHDL設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2001;(6):13-17.

[3]段波.格雷碼及其轉(zhuǎn)換的應(yīng)用[J].國(guó)外建材科技,2005(8).

[4]李莉.基于FPGA的多位格雷碼計(jì)數(shù)器[J].科學(xué)技術(shù)與工程,2009(12).

[5]M.Morris Mano,Charles R.Kime.邏輯與計(jì)算機(jī)設(shè)計(jì)基礎(chǔ)(英文版·第四版)[M].機(jī)械工業(yè)出版社.

[責(zé)任編輯:張濤]

猜你喜歡
毛刺
航空液壓系統(tǒng)零部件毛刺主動(dòng)控制技術(shù)
復(fù)雜鋁合金閥體零件毛刺的控制與去除
閥芯去毛刺工藝研究
一種鑄鐵鉆孔新型去毛刺刀具的應(yīng)用
兩種去除齒部毛刺工裝的研究
一種筒類零件孔口去毛刺工具
柴油機(jī)油道自動(dòng)去毛刺專機(jī)的設(shè)計(jì)
關(guān)于機(jī)械加工中毛刺的影響分析及其控制探討
可抑制毛刺的鉆頭結(jié)構(gòu)
新型銅合金化學(xué)去毛刺劑的研制
普定县| 石台县| 信阳市| 隆昌县| 繁峙县| 民乐县| 祁连县| 双峰县| 周至县| 牙克石市| 襄城县| 弋阳县| 中牟县| 清新县| 崇左市| 贵州省| 易门县| 绥德县| 岐山县| 梧州市| 南通市| 娱乐| 阿坝县| 思茅市| 峡江县| 工布江达县| 贵南县| 阜宁县| 府谷县| 苍南县| 确山县| 兰坪| 扬州市| 盐源县| 靖宇县| 祁阳县| 大庆市| 休宁县| 三明市| 南通市| 巴林左旗|