<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA的簡易電壓表設(shè)計

          基于FPGA的簡易電壓表設(shè)計

          作者: 時間:2018-09-13 來源:網(wǎng)絡(luò) 收藏

            傳統(tǒng)的數(shù)字電壓表設(shè)計通常以大規(guī)模(專用集成電路)為核心器件,并輔以少量中規(guī)模集成電路及顯示器件構(gòu)成。這種電壓表的設(shè)計簡單、精確度高,但是由于采用了器件使得它欠缺靈活性,其系統(tǒng)功能固定,難以更新擴(kuò)展。而應(yīng)用設(shè)計的電壓表,采用芯片控制通用A/D轉(zhuǎn)換器,可使速度、靈活性大大優(yōu)于通用數(shù)字電壓表。、

          本文引用地址:http://www.ex-cimer.com/article/201809/391848.htm

            本文采用STEP-MAX10M08核心板和STEP Base Board V3.0底板來完成簡易電壓表設(shè)計,我們將設(shè)計拆分成三個功能模塊實現(xiàn):

            ADC081S101_driver: 驅(qū)動SPI接口ADC芯片實現(xiàn)模擬電壓信號采集。

            bin_to_bcd:將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成BCD碼的方法。

            Segment_led:通過驅(qū)動獨(dú)立式數(shù)碼管將電壓數(shù)據(jù)顯示出來。

            Top-Down層次設(shè)計

            模塊結(jié)構(gòu)設(shè)計

            1. ADC介紹

            模數(shù)轉(zhuǎn)換器即A/D轉(zhuǎn)換器,或簡稱ADC,通常是指一個將模擬信號轉(zhuǎn)變?yōu)閿?shù)字信號的電子元件。通常的模數(shù)轉(zhuǎn)換器是將一個輸入電壓信號轉(zhuǎn)換為一個輸出的數(shù)字信號。由于數(shù)字信號本身不具有實際意義,僅僅表示一個相對大小。故任何一個模數(shù)轉(zhuǎn)換器都需要一個參考模擬量作為轉(zhuǎn)換的標(biāo)準(zhǔn),比較常見的參考標(biāo)準(zhǔn)為最大的可轉(zhuǎn)換信號大小。而輸出的數(shù)字量則表示輸入信號相對于參考信號的大小。

            模擬系統(tǒng)與數(shù)字系統(tǒng)結(jié)合模型

            并行ADC和串行ADC模型

            上圖兩個都是8位ADC模型,分辨率為 2的8次方等于256,即將Vref分成256份,能夠分辨的模擬步進(jìn)為Vref / 256,量化數(shù)據(jù)N = 256 * Vin / Vref 。

            并行ADC與數(shù)字電路接口包含一根clk和8根data管腳,clk為芯片時鐘管腳,data為芯片數(shù)據(jù)管腳,每個clk周期從data管腳采集8bit的數(shù)據(jù),完成一次模數(shù)轉(zhuǎn)換,所以clk頻率等于采樣率。

            串行ADC(以ADC081S101為例)與數(shù)字電路接口為三根線(cs,clk,din),兼容三線SPI總線,cs為芯片使能管腳,clk為芯片時鐘管腳,din為芯片數(shù)據(jù)管腳,當(dāng)ADC芯片使能時每個clk周期從din采集1bit的數(shù)據(jù),但是根據(jù)ADC081S101的時序,需要16個clk完成一次采樣,所以clk頻率至少等于采樣率的16倍。

            2. ADC模塊電路連接

            本設(shè)計所采用的STEP Base Board V3.0底板上的ADC模塊電路,其電路圖如下:

            ADC模塊電路

            直接連接ADC081S101芯片的控制端,ADC有6個管腳,3腳Vin為VCC和Vref功能復(fù)用,即Vin = VCC = Vref。ADC前端是運(yùn)放電路LMV721,運(yùn)放模塊為電壓跟隨電路,再往前端是一個跳冒排針,用來選擇ADC采樣信號的來源,當(dāng)短路帽將1、2腳短路時,ADC采集電位計電壓,當(dāng)短路帽將2、3腳短路時,ADC采射頻端子或P4排針信號。本設(shè)計我們是采集旋轉(zhuǎn)編碼器的電壓,所以需要用短路帽將1、2腳短路。

            3. ADC模塊驅(qū)動設(shè)計

            ADC081S101串行通信時序如下圖:

            注:

            1. SCLK空閑時為高電平,CPOL = 1,上升沿(第二個邊沿)采樣,CPHA = 1,如果例化通用SPI核完成設(shè)計,需要采用SPI的第四種工作模式。

            2. CS信號拉低有效,經(jīng)過16個時鐘完成一次ADC轉(zhuǎn)換并采樣,采樣回來的數(shù)據(jù)前3位無效,接下來為DB7~DB0(有效數(shù)據(jù)),再接下來為無效數(shù)據(jù)。

            針對ADC081S101時序,我們用Verilog設(shè)計一個計數(shù)器,當(dāng)計數(shù)器值不同時完成不同操作,實現(xiàn)一次ADC采樣,程序?qū)崿F(xiàn)如下:

            到這我們就完成了串行ADC芯片ADC081S101的驅(qū)動設(shè)計,整個采樣周期用了35個系統(tǒng)時鐘,如果我們采用12MHz時鐘作為該模塊系統(tǒng)時鐘,采樣率Fs = 12M/35 = 343Ksps,ADC主頻Fsclk = 12 MHz /2 = 6MHz。

            ADC081S101主頻及采樣率要求如下,按照要求我們當(dāng)前的主頻和采樣率不足,所以在使用該模塊時,可以使用更高的時鐘(比如24MHz)以達(dá)到芯片的要求

            注:時鐘頻率Fsclk,最小值為10MHz,最大值為20MHz,采樣率在500Ksps~1Msps

            模塊接口如下:clk和rst_n為系統(tǒng)時鐘及復(fù)位,adc_cs,adc_clk和adc_dat為ADC控制管腳,adc_data為ADC采樣數(shù)據(jù),adc_done產(chǎn)生一個脈沖對應(yīng)adc_data得到一個有效數(shù)據(jù)

            4. 時鐘獲取

            因為需要更高的時鐘供ADC模塊使用,我們例化pll核得到24MHz時鐘,同時例化pll模塊和ADC081S101_driver模塊,并將pll的輸出與ADC081S101_driver模塊的clk連線。

            Pll模塊和ADC081S101_driver模塊的連接程序?qū)崿F(xiàn)如下:

            5. 采樣結(jié)果顯示

            假設(shè)ADC模擬輸入電壓為3.3V,理論上我們得到的采樣數(shù)據(jù)adc_data應(yīng)該為8’hff,而電壓表最終顯示在數(shù)碼管上的數(shù)據(jù)應(yīng)該為3.3,我們?nèi)绾螌?’hff轉(zhuǎn)換成可以顯示的3.3數(shù)據(jù)呢?這就設(shè)計到ADC量化數(shù)據(jù)的逆向運(yùn)算了。

            我們知道量化運(yùn)算 N = 256 * Vin / Vref,

            那么逆向運(yùn)算為Vin = N * Vref / 256,其中Vref = 3.3V,所以Vin = N * 0.0129

            所以我們需要用FPGA計算adc_data * 0.0129的結(jié)果,然后為了使用十進(jìn)制的顯示,先將結(jié)果進(jìn)行BCD轉(zhuǎn)碼,然后顯示在數(shù)碼管上。

            將ADC采樣數(shù)據(jù)按規(guī)則轉(zhuǎn)換為電壓數(shù)據(jù)(乘以0.0129),這里我們直接乘以129,得到的數(shù)據(jù)經(jīng)過BCD轉(zhuǎn)碼后小數(shù)點(diǎn)左移4位即可,程序?qū)崿F(xiàn)如下:

            二進(jìn)制轉(zhuǎn)BCD碼程序?qū)崿F(xiàn)如下:

            最后得到20位的數(shù)據(jù)輸出,每4位表示一個BCD碼,所以有5位有效數(shù)據(jù),這里我們還需要將小數(shù)點(diǎn)左移4位,計算出來的數(shù)應(yīng)該是X.XXXX伏特,1個整數(shù)位和4個小數(shù)位,核心板上只有兩個數(shù)碼管,取最高的兩個BCD碼顯示到數(shù)碼管X.X伏特,個位小數(shù)點(diǎn)點(diǎn)亮,分位小數(shù)點(diǎn)熄滅,程序?qū)崿F(xiàn)如下:

            綜合后的設(shè)計框圖如下:

            RTL設(shè)計框圖

            到這一步就完成了基于FPGA的簡易電壓表設(shè)計。將程序下載到FPGA中,STEP Base Board V3.0底板上P3接口的1、2腳短路,旋轉(zhuǎn)底板右上角的電位計,觀察核心板數(shù)碼管變化,也可同時用萬用表測量P3短路處的電壓,與數(shù)碼管上的結(jié)果對比。

            實物圖:



          關(guān)鍵詞: FPGA ASIC

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();