蔡領++朱金剛



摘要:本文以一種SPLD器件為例,設計了一個周期和個數可控的脈沖發生系統。首先給出本設計的目標,并根據目標分析可行的各種方案,接著分四部分介紹了一種理想的實現方法,本文還首次提出了脈沖奇數分頻中克服簡單計數分頻法無法實現50%占空比的新方法。最后對該系統進行測試并總結,它是目前較為實用的低成本高精度的可控脈沖發生系統,它同時也為處于相關教學一線的老師提供了一個實施案例。
關鍵詞:電子技術;信號;SPLD;脈沖;奇數分頻;占空比
中圖分類號:TN7
文獻標識碼:A
DOI:10.3969/j.issn.1003-6970.2015.12.007
本文著錄格式:蔡領,朱金剛.可編程脈沖發生器的若干技術問題研究[J].軟件,2015,36(12):31-34
0 引言
可編程脈沖器在電子產品中應用廣泛,目前大部分都是使用PLD(Programmable Logic Device)器件來實現,PLD器件通過編程可靈活方便地構建和修改數字電子系統。SPLD則是簡單(Simple) PLD的意思,典型器件是Lattice公司生產的GAL16V8、GAL22VIO和Atmel公司生產的ATF16V8。SPLD器件使得電路設計段時間即可完成,且修改容易。早在20世紀90年代的數字電路實驗的教學過程中就已經開始使用。許多文獻中提到CPLD等大規模可編程邏輯器件將成為數字電路應用的大趨勢,而作為聯系模擬電路和各門技術課程的紐帶的數字電路的設計中,SPLD雙列直插封裝更易用,開發環境要求低,成本低,在一些小規模設計中還是普遍使用。在高校教育中它更有助于學生理解和掌握技術,它使得設計難度大大降低,極大地吸引學生的注意力。分頻電路和單脈沖電路等是電子技術中常用的模塊,尤其是奇數分頻中如何實現50%占空比的問題由來已久,本文將針對可編程脈沖發生器的設計目標,以對這些技術在SPLD上的實現為例展開探索。
1 系統概述
本設計以SPLD器件為例,制作一個多脈沖發生器,輸出脈沖的個數和周期可預設置。電路框圖如圖l所示:
其中:
(1)輸出脈沖周期可調。通過3路邏輯開關控制,分別為ImS、2mS、3mS、4mS...7mS。
(2)輸出脈沖的數目可調。輸出脈沖個數由3路邏輯開關控制,分別為1-7。
對于輸出脈沖周期可調要求為1ms到7ms其實就是對周期為1ms的信號進行1到7分頻;脈沖個數l到7個可編程實現一個3位的二進制計數器配合一些邏輯操作來完成。當然更多的脈沖個數和周期需要規模更大的PLD器件去實現。
2 系統設計與實現
2.1 脈沖信號源
脈沖信號源可以用555定時器電路或品振產生,在進行數字電路設計時,多用幾種方法進行設計可以培養分析和設計能力。如果考慮頻率的穩定性,可選擇晶振產生。具體實現為4.096MHz的晶振,結合CD4060產生lkHz的方波信號(周期為1ms),如圖2所示。
2.2 輸出脈沖周期控制電路
采用可編程分頻電路來實現。
三位二進制計數器輸出值為Q2Q1Q0,開關K0、K1、K2分別處于不同的狀態(斷開或閉合)時,產生相應的邏輯電平值(‘0或‘l),為D0-D7信號;Q2與D2,…,Q0與D0分別進行異或運算,當Q2與D2,…,Q0與D0都相等時CLR的狀態為‘0,對計數器產生一次清‘0操作,計數器的最大值通過K0、K1、K2來設置。
這里簡單比較下SPLD器件中22V1O和16V8這兩類。22V1O的資源更為多些,但漸漸被復奈(Complex)PLD器件(CPLD)取代而面臨淘汰,價格更是達到了20元左右一片,應用已經很少,16V8雖然資源相對少些,但是使用靈活,價格低,在簡單數字電路設計中仍然發揮著舉足輕重的作用。這里我們用廉價的16V8去實現單元邏輯電路。
在16V8的編程中,有幾個地方需要注意。一是計數器無法實現1分頻,即當輸入設定為二進制001時通過計數器無法實現,需要用組合邏輯電路來實現。第二,16V8沒有異步清零的功能,這樣在計數時實際的計數周期要比設定的值多l,這可以用計數初值置為l的方法解決。
2.3 奇數分頻對稱波形實現的新方法
在分頻數為3及以上的奇數時,簡單的計數分頻無法實現占空比50%,這是本設計的一個難點,也是由來已久的分頻器里一個老問題。首先回顧下前輩們的方法,早在2004年,南開大學的高清運博士在他的一篇論文中提到了奇數分頻器的設計,他提到可以分兩步走:先對信號做N/2(帶小數)分頻(文中N都是指3以上的奇數),然后再做2分頻。這種方法使用模(N+1)/2計數器進行計數,從0計數至(N-1)/2;將2分頻器的輸出反饋到輸入待分頻信號,在模(N+1)/2計數器計數至(N-I)/2時2分頻器輸出反向,同時使得原來輸入待分頻信號的上升沿計數變成下降沿計數。也就是說在2分頻器輸出由0變l或由l變0的外輸入始終周期里,模(N+1)/2計數器的狀態變化了2次,從而使計數循環減少了0.5個時鐘,得到半整數輸出。這種方法的電路實現相對節省資源,但是有些不容易理解;而后來提出的基于類扭環計數器的分頻方法、各為上升沿計數和下降沿計數的雙計數器輸出相或法、先2倍頻再整數分頻法等,都將電路更加復雜化。
這里本文首次提出了一個新的節省資源且容易理解的方法:輸入輸出相與法。具體來說,N分頻則用模N計數器,計數超過一半(N-1)/2和最大值N-1時電平反轉,并在計數至一半時將輸出波形與時鐘信號進行邏輯與實現輸出信號50%的占空比。下面以5分頻為例。
圖4清楚得展示了5分頻時占空比控制的情況。其中“輸入”即為待分頻信號;“輸出l”是指當模5計數器在計數至2和4后輸出翻轉的信號,顯然這個信號還不是50%占空比;“輸出2”即為最后的輸出,占空比為50%。觀察虛線部分可以發現,只要在計數值為2時將“輸入”和“輸出l”相與,而在其它計數值時保持原來的“輸出l”,這樣最后的“輸出2”剛好就是50%占空比。按照這一簡單的原理,本文基于16V8器件實現了3-7分頻時占空比50%的要求,其中5分頻輸出測試結果圖可見第4節的圖8右半部分;對于更高奇數分頻數,原理也是一樣的,這里就不再詳述。
2.4 脈沖數目的控制
圖5表示了一個基于二進制減計數器的脈沖控制電路框圖。二進制減計數器有兩個工作狀態:置數狀態和計數狀態,由邏輯控制腳RS R決定。當計數器的值從置入值減至0時,四輸入或門輸H{邏輯‘0,在時鐘CLK的同步下,D觸發器的輸出為‘0,RS觸發器的輸出RS R為‘1,計數器執行“置數”功能,將由K0、K1、K2設定的邏輯狀態D2D1D0置人計數器,但由于RS觸發器的輸出RS R必須由另一個輸入端sinle_pulse_in來清‘0后,才能進入下一輪的計數周期,因此,sinle_pulse_in每出現一個負脈沖,就會觸發一輪新的計數循環。開始計數時,RS R=0,停止計數時,RS R=l。將RS R通過一個非門倒相后接到一個與門的輸入端,CLK接與門的另一個輸入端,這樣,當RS R=0時,與門就輸出與CLK相同的脈沖,當RS R=l,與門就輸出邏輯‘0。
2.5 單脈沖電路
上文已經提到,本系統中需要的單脈沖是一個負脈沖,即穩態時處于高電平,只當按鍵按下時出現一段低電平。由于機械按鍵在按下或松開時會發生機械抖動,會輸出一系列的短脈沖波形,為了保證電路工作可靠,在用機械按鍵產生觸發脈沖時,必須作去抖動處理。常用的按鍵防抖電路有同向緩沖器防抖電路,基于R—S觸發器的防抖電路,基于電容充放電的防抖電路等。在本系統中,顯然對于脈沖的寬度也有要求。詳細來說,就是一次按鍵按下輸出一串固定個數的脈沖,而在該串脈沖結束前,單脈沖輸入端必須已經返回穩態(高電平),否則將繼續引發下一串脈沖,因此,這里必須嚴格控制負脈沖的寬度。顯然這里的脈沖寬度不能超出一個時鐘周期,考慮16V8器件的D觸發器資源,采用如圖6所示的單脈沖產生電路。
因為單脈沖電路只用到2個D觸發器,可以將這部分邏輯電路合并到輸出脈沖數目控制的16V8芯片中。這里需要注意,由于單脈沖電路和輸出脈沖數目控制電路共用一個時鐘,所以輸出脈沖數目控制電路右上方的D觸發器應該去掉,否則輸出脈沖個數將比設置值多l。
3 系統測試
本系統已經在萬能板上焊接實驗成功,用3個帶鎖按鍵用于控制調節周期;3個帶鎖按鍵用于調節輸出脈沖個數;1個不帶鎖按鍵用來觸發脈沖輸出。
如圖8所示,左邊為周期設置成1ms、脈沖個數控制為l時的測試結果,可以看出,示波器顯示為500us每格;右邊為周期設置成5ms、脈沖個數控制為4個時的測試結果,其示波器顯示5ms每格,且占空比為50%。
4 結論
本文以SPLD器件為例設計實現了一個可編程沖發生器,討論了設計中的各個技術問題。對于更高分頻數目和更多的脈沖個數的發生器,其原理是一樣的,只需使用規模更大邏輯芯片即可。設計中奇數分頻50%占空比的實現是本文最新提出的簡單而有效的方法;單脈沖電路與脈沖輸出個數控制電路進行了恰到好處的整合,可靠性高。同時本文設計思路清晰,可操作性強,可作為高校相關專業基礎課堂教學的一個實施案例。