分頻器是數字系統設計中最常見的電路之一 ,在數字系統設計中 , 經常需要對時鐘進行小數倍分頻 。
基本介紹
- 中文名:小數分頻器
- 外文名:fractional divider
小數分頻的基本原理
電路組成及工作原理
該電路是在單片機或 CPLD 的其它模組配合下工作的 ,當需要實現某個係數的分頻時,單片機等控制電路向該模組設定參數 ,包括分頻係數的整數部分 、預置數、hight05 、和 equal05 。當分頻係數 N =0 . 5時 , equal05 =1 , 整數分頻係數為 N 。當分頻係數N ≠0 . 5時 ,如果小數部分小於 0 . 5 ,如分頻係數為 N=0 . 23456 ,則控制方法為 equal05 =0 、high05 =0 、datain =N 、pdata0 、pdata1 、pdata2 、pdata3 、pdata4 分別為2 、3 、4 、5 、6 ; 小數部分大於 0 . 5 時 , 則用 1 減去小數部分後的差值作為預置數 , 如分頻係數為 N =0 . 765 67 ,則控制方法為 equal05 =0 、high05 =1 、datain =N 、pdata0 、pdata1 、pdata2 、pdata3 、pdata4 分別為 2 、3 、4 、3 、3 ,即 pdata0 、pdata1 、pdata2 、pdata3 、pdata4 =1 -0 . 765 67 =0 . 234 33 。
VHDL 語言的實現
( 1) 頂層模組
頂層模組包括底層模組之間的連線和輸出信號的選擇 2 部分 ,模組連線用元件語句,輸出的選擇直接用進程描述 。由於某些模組的連線是類同的, 為節省篇幅而又不失其總體框架, 已將類同部分刪除。
ENTITY nbit pset pdivfre2 IS
GENERIC( leng : INTEGER: =7);
PORT( inclk ,EN ,reset : IN STD LOGIC ;
high05 ,equal05 : IN STD LOGIC ;
pdata0 , pdata1 , pdata2 , pdata3 , pdata4 : IN STD
LOGIC VECTOR( 2 DOWNTO 0
outclk , test1 , test2 : OUT STD LOGIC—);
END nbit pset pdivfre2 ;
ARCHITECTURE nppdf2 OF nbit pset pdivfre2 ISBEGIN
outclk <= outclk tmp ;
modecontmp<= high05 XOR ( requst0 OR requst1 OR requst2 OR requst3 OR requst4);
ff0d <= requst0 ;ff1 d <=( NOT requst0) AND requst1 ;
ff2d <=( NOT requst0) AND ( NOT requst1) ANDrequst2 ;
ff3d <=( NOT requst0) AND ( NOT requst1) AND( NOT requst2) AND requst3 ;
ff4d <=( NOT requst0) AND ( NOT requst1) AND( NOT requst2) AND ( NOT requst3) AND requst4 ;
U0 : nbit psetp divfre —整數/半整數分頻PORTMAP( inclk =>inclk , EN =>EN , reset =>reset , mode con =>mode con tmp , data in =>data in ,outclk21 = >clk21 tmp , outclkn = >clkn tmp ,clkb =>clkb tmp);
PROCESS ( equal05 , data in , pdata0 , pdata1 , pdata2 , pdata3 , pdata4)—輸出信號的選擇BEGINIF ( equal05 =' 0' ) THEN outclk tmp <=clkn tmp ;
ELSIF ( equal05 = ' 1' ) THEN outclk tmp<=clk21 tmp ;
ELSIF( data in =1 AND pdata0 =0 AND pdata1 =0 AND pdata2 =0 AND pdata3 =0 AND pdata4 =0) THENoutclk tmp <= inclk ;
END IF ;
END PROCESS ;
U1 : difre dec —計數解碼部分的元件連線PORTMAP( EN =>EN , reset =>reset , difre in
=>clkb tmp , clr requst =>clr requst0 , pset data =>pdata0 , requst =>requst0 , cnt co =>cnt0 co);
……U5 : difre decPORTMAP( EN =>cnt3 co , reset =>reset , difrein =>clkb tmp , clr requst =>clr requst4 , pset data=>pdata4 , requst =>requst4 , cnt co =>cnt4 co);
U6 : D ff PORT MAP( D =>ff0 d , reset =>GND ,CLK =>clkb tmp , outq =>ff0 q); —觸發器部分的連線……U15 : D ff PORT MAP( D =>ff4 q , reset =>GND ,CLK =>inclk , outq =>clr requst4);
END nppdf2 ;
( 2) 計數解碼模組
該模組對輸入脈衝計數, 以決定何時在輸出中插入或去除 1 個脈衝(吞脈衝), 所以該模組由計數( 分頻)、解碼和控制信號產生等 3 部分構成 ,其中解碼部分的源程式用流程圖表示:
PROCESS( difre in , reset , EN)—10 分頻的描述VARIABLE state : INTEGER RANGE 0 TO 1 ;
BEGINIF reset =' 1' THEN count q <=( OTHERS =>' 0' );
cnt co <=' 1' ;
cnt co <=' 0' ;
END IF ;
ELSE cnt co <=' 0' ;
count q <=count q ;
END IF ;
END IF ;
END PROCESS ;
—解碼進程( 見右側流程圖)PROCESS ( dec out ,clr requst)
BEGIN
IF( clr requst =' 1' ) THEN requst <=' 0' ;
ELSIF( dec out' EVENT AND dec out =' 1' ) THENrequst <=' 1' ;
END IF ;
END PROCESS ;
END dd ;
( 3) N 位整數/半整數分頻模組該模組根據單片機或 CPLD 等設定的參數不同,可以選擇整數分頻輸出或半整數分頻輸出 ,取決於分頻係數。
BEGIN
clk <=inclk XOR divide2 ;
coutclk <=outclk tmp ;
PROCESS ( clk , EN)BEGIN
IF ( CLK' EVENT AND CLK =' 1' ) THEN
IF ( EN =' 1' ) THEN
IF ( cnt q =0) THEN
FOR i IN 0 TO leng -1 LOOP
cnt q( i)<=data in( i);
END LOOP ;
outclk tmp <=' 1' ;
ELSE
outclk tmp <=' 0' ;
END IF ;
END IF ;
END IF ;
END PROCESS ;
PROCESS ( outclk tmp)
BEGIN
IF ( outclk tmp' EVENT AND outclk tmp =' 1' ) THEN divide2 <=NOT divide2 ;
END IF ;
END PROCESS ;
END nppdf ;
幾種小數分頻器的設計方法
用 BCD 比例乘法器 4527 加法級聯能對基頻進行 10 n /X 倍分頻 , 其中 , n 為 4527 的級聯級數 , X 為對 4527 的置數 ; 積分分頻器是比較常見的小數分頻器 , 其基本原理是將小數分頻比轉換為整數比值 ,再採用計數器對輸入時鐘進行計數 , 根據計數值吞掉一些脈衝 ,從而得到所需的頻率輸出 ; 累加器分頻則是一種基於相位累加器基本原理的一種分頻技術 ,將累加器最高位作為分頻輸出 , 根據送入累加器中不同的累加步長改變分頻倍數 。
BCD 比例乘法器 4527 接成加法級聯方式 , C LK 端輸入基準時鐘頻率 f in 由晶振電路提供 ,高位置數 K 1 , 低位置數 K 2 , 在 10 個 C LK脈衝內 4527 (1)輸出 K1 個脈衝 , 同時由 IN HO UT禁止低位 4527(2)對 CLK 進行比例分配 , K 1個脈衝直通 4527 (2)送出 。 10 個 C LK 脈衝結束時 , INHO UT 發出脈衝允許 4527 (2)的 CLK 進入 , 則可有一個脈衝插入 。如此下去 , 在 100 個 C LK 脈衝內 ,會有 10 ×K 1 個脈衝直通送出 , 以及 10 個 INHO UT 脈衝 , 這樣輸出端 f out 便有 K 2 個脈衝插入 ,共送出(10K 1 +K 2 )個脈衝 ,即輸出時鐘頻率 :fout = (10K 1 +K 2 )f in /100 (1)
2 積分分頻器
積分分頻器的設計首先需將小數分頻比轉換為整數比值 ,再採用計數器對輸入時鐘進行計數 ,根據計數值對輸入時鐘及插入脈衝進行選擇分配 , 從而得到 需 要的 頻 率輸 出 脈 沖。 設“1010101010”代表 5kH z 信號中的一段信號 , 在同樣長的時間內設法得到另一脈衝串“1010100000”信號 ,若其‘0’ 、 ‘1’ 寬度與 5kH z 信號中的‘0’ 、 ‘1’寬度相同 ,即為輸入時鐘的寬度 ,則可得到 3kHz 的時鐘信號 。這樣 ,多路選擇器可在前三個周期選擇輸入時鐘直接輸出 , 而在後兩個周期選擇輸出‘0’ ,就可以得到脈衝串“ 1010100000” , 從而完成 3 /5 倍的分頻 ,得到 3kH z 的信號 。
3 累加器分頻
在 DDS 技術中經常採用相位累加器來進行頻率控制 , 對於頻率不變的輸入基準時鐘 ,可採用對相位累加器置不同的累加步長來得到不同的定址速率 。從中得到啟示 ,也可採用累加器進行小數分頻。累加器由加法器與並行數據暫存器組成 , 頻率控制字經數據轉換模組轉換為累加器的累加步長 , 將並行數據暫存器的高位作為時鐘輸出 。
設輸入時鐘為頻率 fin , 相位累加器的位數為 N , 則輸出頻率的解析度(當送入的頻率控制字 K 為 1 時的輸出頻率)為f out min =f in2N (3)從式(3)可看出 , 在累加器位數足夠高時 , 最小輸出頻率(頻率解析度)可接近零頻 。實際設計過程中 , 可根據分頻倍數的要求來選擇累加器的位數 。
若設頻率控制字為 K , 則輸出頻率為f out =K f in2N (4)以上三種小數分頻器各有其特點 ,採用 4527 的分頻電路比較複雜 , 適用於頻率為 10 的冪的輸入 ;積分分頻器首先需把分頻倍數轉換為兩整數之比值 , 故在使用中 ,對分頻倍數要求比較嚴格,靈活性受到一定限制 ; 累加器分頻則對頻率為 2 的冪的輸入時鐘分頻效果比較好 ,而且輸出時鐘有一定的抖動 , 但還是可以套用於一些特殊場合 。
小數分頻器的套用
在 DDS 波形發生器設計和步進電機驅動中, 需要對輸出信號頻率進行控制 , 若採用一般計數器來進行分頻 ,由上述分析可知,輸出信號頻率值的連續性就受到限制 。為了使輸出信號頻率值能連續可控,就需進行小數分頻。
1 在 DDS 技術中的套用
2 在步進電機驅動中的套用
步進電機是一種用電脈衝信號進行控制 , 將電脈衝信號轉換為相應的角位移或線位移的控制電機。在步進電機的驅動中, 需要對步進電機轉速進行控制。基準時鐘在頻率控制字作用下分頻得到所需頻率的脈衝作為脈衝分配器的時鐘, 這樣即可控制脈衝分配器輸出驅動脈衝的速率 ,經功率放大後驅動步進電機 。
此外 ,步進電動機的最高起動頻率(突跳頻率)一般為幾百 H z 到三、四千 H z , 而最高運行頻率則可以達到幾萬 H z 。以超過最高起動頻率的頻率直接起動, 將出現“失步”(失去同步)現象 ,有時根本就轉不起來 。而如果先以低於最高起動頻率的某一頻率起動, 再逐步提高頻率, 使電機逐步加速 ,則可以到達最高運行頻率。而且, 對於正在快速旋轉的步進電動機 ,若需停轉, 立即停發脈衝 , 令其立即準確鎖定 ,也是很難實現的; 由於慣性, 電動機往往會衝過頭 ,也會出現失步 。如果電動機的工作頻率總是低於最高起動頻率 ,當然不會失步 ,但電動機的潛力沒有發揮 ,工作速度太低了 。