采用FPGA的可編程電阻的設計結構分析
現在市場上的各種電阻和電阻箱有不足之處不能滿足一些研發場所的要求為了解決這一問題本文介紹一種基于FPGA的可直接輸入阻值提供不同電阻的設計方法FPGA通過控制繼電器的吸合從而確定與其并聯的電阻的接入與否最后通過電阻的疊加得到不同阻值介紹了該設計的工作原理及軟件設計思想并有部分仿真結果
這種設計使用8421編碼原則和硬件描述語言減少了一些元器件的使用相比于市場上的產品其穩定性更高抗干擾性更強體積也更小同時它的操作更簡便顯示更直觀
0 引言
電阻幾乎是所有電路中必不可少的部分常見的也有很多不同阻值的電阻然而在一些電路中同一位置不同時刻還需要不同阻值在一些精度要求不高的場合可用滑動變阻器來實現但是我們不能確定其具體阻值隨著技術的進一步發展為了滿足教學研某些場合的需要阻值確定并可調的電阻箱應運而生電阻箱提供阻值的原理是通過電阻的串并聯得到的不同阻值因而用到的電阻數量較多精度也不夠高而且還需要對所需電阻的每一位數選擇相應的檔位比較麻煩也不夠直觀而在一些生產應用中如產品校驗需同時提供幾組不同電阻且要重復提供如做產品老化檢測實驗這就需要將該阻值記錄下來而以前的電阻箱都不具備記憶功能不能滿足要求
本文介紹了用FPGA來實現控制電阻的提供用軟件的方式來設計硬件設計過程中可用有關軟件進行各種仿真同時整個系統可集成在一個芯片上體積小功耗低可靠性高又因為其內部有存儲單元所以能夠滿足上述的記憶功能
1 硬件電路
基于FPGA的可編程電阻系統的硬件系統如圖1所示主要由以下幾個功能模塊組成
1.1 主控制器FPGA
FPGA本設計中選用的是CycloneII系列控制中心是整個設計的核心主要控制實現對系統的鍵盤輸入進行處理并根據輸入的信息轉換成輸出數據控制對應的繼電器的吸合從而得到不同的阻值
以往可編程網絡的主控制器有采用數字電路控制的也有采用單片機控制的本電路采用FPGA控制EPGA是近幾年來出現并被廣泛應用的大規模集成電路器件它的特點是直接面向用戶具有極大的靈活性和通用性使用方便硬件測試和實現快捷開發效率高成本低上市時間短技術維護簡單工作可靠性好等因而用來設計可編程電阻其靈活性更好
采用FPGA的可編程電阻的設計
目前市場上主要生產FPGA產品的公司有LatticeXilinxAltera在教學過程中一般使用Altera公司生產的FLEX系列和Cyclone系列較多鑒于產品的成本和通用性考慮本實驗中采用CycloneII它是第二代低成本FPGA系列它所擁有的獨特性能有NiosII嵌入式處理器支持嵌入式18*18數字信號處理乘法器中等容量的片內存儲器(能夠滿足本設計的要求)中等速度的I/O引腳和存儲器接口在性價比上更適合本設計所以在本設計中選用此系列|
1.2 鍵盤輸入電路
鍵盤輸入電路主要實現輸出電阻值大小的設定本設計中采用的4*4簡易鍵盤輸入即可滿足要求可提供簡單明了的數字鍵和功能鍵共16個鍵包括
數字輸入鍵數字鍵0~9按下數字鍵輸入一個數字就可在對應的數碼管上顯示
功能鍵電阻1電阻2本設計可以同時提供兩組電阻可以選擇電阻1也可以選擇電阻2提供一組電阻也可以電阻1電阻2同時選擇提供兩組電阻
存儲每輸入完一個數字后按一下存儲鍵以便能夠將幾個數據存儲下來運行后將按數據存儲的先后順序及預置的時間工作循環提供數據
運行此鍵作為存儲完數據后的啟動鍵
停止停止提供電阻
復位可作為修改數據時用按此鍵后可以使以前存儲的數據都清零然后重置一組數據
1.3 繼電器電阻網絡
電阻網絡其原理圖如圖2所示從圖中可以看出開關的閉合決定與其對應的電阻的接入與否本設計中采用8421編碼原理控制提供各阻值
采用FPGA的可編程電阻的設計
本設計所供用的電阻要精確到0.1Ω所以此電阻網絡所使用的電阻都是精密電阻這里我們以提供電阻阻值在1500Ω以內的電阻為例來說明此電阻網絡采用串聯的方式來實現8421編碼方式只要控制相應的繼電器將其對應的精密電阻短接就可以實現以1500Ω以內電阻為例只需16個電阻就可以滿足要求通過控制繼電器J1至J16的斷開或閉合其對應的電阻就會接入或斷開最后接入的電阻串聯相加就得輸出的電阻值
如通過鍵盤輸入一個預置值如果輸入的數值為545.7Ω輸出的阻值大小就可以表示R=400+100+40+4+1+0.4+0.2+0.1即只需將這些電阻需要接入相應的繼電器J1J2J3J5J7J11J13J15要斷開其余的繼電器則閉合對應的二進制代碼則為0101010001010111B通過此列可以看出用16個電阻就可以實現1500Ω以內的精度可達到0.1Ω的任何電阻使用電阻數量小通過程序來控制電阻的接入體積更小同時維護起來也更加方便如果需要大于1500Ω的電阻同樣可以根據此原理來增加電阻如8000400020001000等因為此設計中同時提供兩個電阻因而還要16個同樣的電阻原理同上根據不同場合如要提供三組或三組以上的電阻只需相應增加即可|
1.4 輸出顯示電路
輸出顯示電路主要功能是實時顯示對應的鍵盤輸入電阻值的大小當前工作的步數和預置時間根據要求本實驗采用數碼管來顯示其阻值即可能夠滿足要求為了顯示以上數據每個阻值的顯示至少需要九個數碼管其中五位用來顯示當前阻值的大小兩位用來顯示當前的工作步數兩位用來顯示數據的工作時間如果采用靜態顯示控制將會需要相當多的引腳端資源9×2×8=144個為了減少對FPGA引腳資源的使用本設計中采用掃描的方式來實現LED的動態顯示
2 軟件設計及部分仿真結果
本設計中主要控制程序都是通過FPGA的軟件編程來實現軟件設計大體可以分為三個大模塊鍵盤掃描模塊LED顯示模塊繼電器電阻驅動電路模塊
2.1 鍵盤掃描模塊
鍵盤掃描模塊主要用來檢測外界輸入的數據主要由分頻器電路鍵盤掃描計數器電路鍵盤行和列按鍵檢測電路按鍵抖動消除電路和鍵盤編碼電路組成
因為本設計中外接頻率為一般用6MHz的信號作為時鐘信號但是鍵盤掃描不需要那么高的頻率所以需要一個分頻電路將其頻率降低為1kHz鍵盤掃描計數器主要為鍵盤行和列按鍵檢測電路和鍵盤編碼電路服務鍵盤行和列按鍵檢測電路用來檢測鍵盤輸入所在行列的位置按鍵抖動消除電路主要目的是為了避免按鍵時鍵盤產生的拉動效應使按鍵使能位產生不必要的抖動變化而造成重復統計按鍵次數的結果同時鍵盤位置的代號并不是鍵盤上的按鍵值所以要用鍵盤編碼電路來傳遞真正的按鍵值
2.2 LED顯示模塊
LED顯示模塊采用動態顯示方式這種實現方法是依次點亮各個LED數碼管循環進行顯示這種顯示方式控制好數碼管之間的延時相當重要根據人眼視覺暫留原理LED數碼管每秒的導通16次以上人眼就無法分辯LED數碼管短暫的不亮認為是一直點亮的但延時也不是越小越好因為LED數碼管達到一定亮需要一定時間為了達到較好的效果本設計中延時取0.005s
2.3 繼電器電阻驅動電路模塊
繼電器電阻驅動電路模塊主要是FPGA根據鍵盤輸入的電阻值判斷相應的一些電阻是否要接入從而使電阻對應的繼電器閉合或斷開給予其對應的信號1或0即可
2.4 仿真結果
由上述理論可知電阻1的產生原理和電阻2的產生原理完全一樣為了使仿真結果更加明了這里的仿真波形只用電阻1來驗證其正確性其仿真波形如圖3所示
采用FPGA的可編程電阻的設計
此圖是仿真圖中的一部分只選擇了幾個有代表性的信號顯示出來加以說明從圖中可以看出有時鐘信號clk復位信號reset電阻1選擇信號resistance1num11至num51顯示的分別是電阻值的小數位個位十位百位千位step11和step21分別顯示的是當前工作的步數的個位和十位其中time11和time21分別顯示的是工作時間的個位和十位Bus9則是動態顯示時的數據信號JIDIANQI則代表的是16個繼電器的開關狀態從上圖中可以看出該電阻的小數位的段碼為07H對應的二進制就是00000111其對應顯示的數字是7即小數位為7同理可知其個位數為5十位數為4百位數為3千位數為1所以其阻值就為1345.7Ω從圖中可以看出總線上是循環傳遞著時間步數和數值信息根據阻值其相應的繼電器會閉合根據上述電阻網絡原理J4J6J8J9J10J12J14閉合其余的繼電器均斷開即對應的二進制代碼為0010101110101000B換算成十六進制即為2BA8從上圖可以看出其驗證結果是正確的
3 結束語
系統通過引進FPGA來實現電阻提供這一模塊且將周圍其他數字邏輯電路也集成至該芯片中這樣既解決了系統的特殊性又增強了系統的抗干擾性提高了控制精度也簡化了調試此外本系統還將驅動電路編解碼電路等硬件通過VHDL語言在FPGA芯片中實現相比以前的模擬電路和單片機的實現方法使用的元器件更少體積也更小針對不同場合修改起來也更加方便具有很好的市場前景