傳統(tǒng)的數字電壓表設計通常以大規(guī)模ASIC(專用集成電路)為核心器件,并輔以少量中規(guī)模集成電路及顯示器件構成。這種電壓表的設計簡單、精確度高,但是由于采用了ASIC器件使得它欠缺靈活性,,其系統(tǒng)功能固定,難以更新擴展。而應用FPGA設計的電壓表,,采用FPGA芯片控制通用A/D轉換器,可使速度,、靈活性大大優(yōu)于通用數字電壓表,。、
本文采用STEP-MAX10M08核心板和STEP Base Board V3.0底板來完成簡易電壓表設計,,我們將設計拆分成三個功能模塊實現(xiàn):
ADC081S101_driver: 驅動SPI接口ADC芯片實現(xiàn)模擬電壓信號采集,。
bin_to_bcd:將二進制數據轉換成BCD碼的方法。
Segment_led:通過驅動獨立式數碼管將電壓數據顯示出來,。
Top-Down層次設計
模塊結構設計
1. ADC介紹
模數轉換器即A/D轉換器,,或簡稱ADC,通常是指一個將模擬信號轉變?yōu)閿底中盘柕碾娮釉?。通常的模數轉換器是將一個輸入電壓信號轉換為一個輸出的數字信號,。由于數字信號本身不具有實際意義,僅僅表示一個相對大小,。故任何一個模數轉換器都需要一個參考模擬量作為轉換的標準,,比較常見的參考標準為最大的可轉換信號大小。而輸出的數字量則表示輸入信號相對于參考信號的大小,。
模擬系統(tǒng)與數字系統(tǒng)結合模型
并行ADC和串行ADC模型
上圖兩個都是8位ADC模型,,分辨率為 2的8次方等于256,即將Vref分成256份,,能夠分辨的模擬步進為Vref / 256,,量化數據N = 256 * Vin / Vref 。
并行ADC與數字電路接口包含一根clk和8根data管腳,,clk為芯片時鐘管腳,,data為芯片數據管腳,每個clk周期從data管腳采集8bit的數據,,完成一次模數轉換,,所以clk頻率等于采樣率。
串行ADC(以ADC081S101為例)與數字電路接口為三根線(cs,,clk,,din),兼容三線SPI總線,,cs為芯片使能管腳,,clk為芯片時鐘管腳,din為芯片數據管腳,,當ADC芯片使能時每個clk周期從din采集1bit的數據,,但是根據ADC081S101的時序,,需要16個clk完成一次采樣,所以clk頻率至少等于采樣率的16倍,。
2. ADC模塊電路連接
本設計所采用的STEP Base Board V3.0底板上的ADC模塊電路,,其電路圖如下:
ADC模塊電路
FPGA直接連接ADC081S101芯片的控制端,ADC有6個管腳,,3腳Vin為VCC和Vref功能復用,,即Vin = VCC = Vref。ADC前端是運放電路LMV721,,運放模塊為電壓跟隨電路,,再往前端是一個跳冒排針,用來選擇ADC采樣信號的來源,,當短路帽將1,、2腳短路時,ADC采集電位計電壓,,當短路帽將2,、3腳短路時,ADC采射頻端子或P4排針信號,。本設計我們是采集旋轉編碼器的電壓,,所以需要用短路帽將1、2腳短路,。
3. ADC模塊驅動設計
ADC081S101串行通信時序如下圖:
注:
1. SCLK空閑時為高電平,,CPOL = 1,上升沿(第二個邊沿)采樣,,CPHA = 1,,如果例化通用SPI核完成設計,需要采用SPI的第四種工作模式,。
2. CS信號拉低有效,,經過16個時鐘完成一次ADC轉換并采樣,采樣回來的數據前3位無效,,接下來為DB7~DB0(有效數據),,再接下來為無效數據。