- 相關(guān)推薦
基于CPLD的三相多波形函數(shù)發(fā)生器設(shè)計
摘要:介紹了基于可編程邏輯器件CPLD和直接數(shù)字頻率合成技術(shù)(DDS)的三相多波形函數(shù)發(fā)生器的基本原理,并在此基礎(chǔ)上給出了基于CPLD的各模塊設(shè)計方法及其VHDL源程序。1 引言
直接數(shù)字頻率合成 ?Direct Digital Synthesis ,DDS?是20世紀60年代末出現(xiàn)的第三代頻率合成技術(shù)。該技術(shù)從相位概念出發(fā),以Nyquist時域采樣定理為基礎(chǔ),在時域中進行頻率合成。DDS頻率轉(zhuǎn)換速度快,頻率分辨率高,并在頻率轉(zhuǎn)換時可保持相位的連續(xù),因而易于實現(xiàn)多種調(diào)制功能。DDS是全數(shù)字化技術(shù),其幅度、相位、頻率均可實現(xiàn)程控,并可通過更換波形數(shù)據(jù)靈活實現(xiàn)任意波形。此外,DDS易于單片集成,體積小,價格低,功耗小,因此DDS技術(shù)近年來得到了飛速發(fā)展,其應(yīng)用也越來越廣泛。
基于CPLD和DDS技術(shù)的函數(shù)發(fā)生器可以實現(xiàn)信號波形的多樣化,而且方便可靠,簡單經(jīng)濟,系統(tǒng)易于擴展,同時可大大提高輸出信號的帶寬。
2 系統(tǒng)原理
2.1 CPLD內(nèi)部設(shè)計
CPLD的內(nèi)部結(jié)構(gòu)框圖如圖1所示,圖中,首先由控制寄存器將外部控制器(如單片機)送入的數(shù)據(jù)轉(zhuǎn)換為頻率和幅度控制字;然后再由分頻器根據(jù)頻率控制字進行分頻并將輸出作為尋址計數(shù)器的時鐘;尋址計數(shù)器的尋址空間為360字節(jié),可對ROM中的查找表進行尋址;而通過模360加法器可以產(chǎn)生120°的相位差。
2.2 CPLD的外圍電路
圖2所示是CPLD的外圍電路連接圖。圖中,CPLD幅度控制字經(jīng)D/A轉(zhuǎn)換輸出后,可作為查找表輸出DAC的參考電壓,該參考電壓可通過改變幅度控制字來進行改變,從而改變輸出信號的幅度。
3 CPLD各模塊的設(shè)計
3.1 控制寄存器的設(shè)計
控制寄存器設(shè)計主要是將外部控制器輸入的數(shù)據(jù)轉(zhuǎn)換為頻率和幅度控制字。其程序代碼如下:
--////////////調(diào)庫////////////--
entity controller is
port(clk:in std_logic;
datain:in std_logic;
ad:out std_logic_vector(16 down to 0);
freq:out std_logic_ vector(16 down to 0));
end;
architecture dataflow of controller is
signal out1:std_logic_vector(16 down to 0);
begin
s2p:process(clk,datain)
variable temp:std_logic_vector(16 down to 0);?
begin
if clk'event and clk=‘1’ then
temp:=temp(15 down to 0)&datain;
end if;
out1<=temp;
end process s2p;
mux:process(out1(16))
begin
if out1(16)=‘1’ then
ad<=out1(15 down to 0); --1號寄存器為幅度控制字
else
freq<=out1(15 downto 0); --0號寄存器為頻率控制字
end if;
end process mux;
end;
圖3
3.2 分頻比可變的分頻器模塊設(shè)計
該設(shè)計主要是根據(jù)頻率控制字決定分頻倍數(shù),從而輸出與頻率控制字相對應(yīng)的頻率時鐘,此模塊的輸出可作為尋址計數(shù)器的時鐘。具體代碼如下:
process?clk? --clk為外部時鐘(如晶振)
variable temp,fen:std_logic_vector(15 down to 0);?
constant temp1:std_logic_vector(15 down to 0):=“1111111111111111”;
variable a:std_logic;
begin
fen:=temp1-fen_in; --使分頻后的頻率正比于頻率控制字
if clk=‘1’ and clk'event then
if temp=(‘0’&fen(15 down to 1)) then --相當于除2運算
a:=not a;
temp:=temp+1;
elsif temp=fen then
a:=not a;
temp:=“0000000000000000”;
else
temp:=temp+1;
end if;
end if;
fen out<=a; --fen out 為輸入時鐘的頻率fen倍分頻
end process;
3.3 尋址計數(shù)器設(shè)計
尋址計數(shù)器主要用于產(chǎn)生對ROM尋址輸出波形數(shù)據(jù)的尋址信號,尋址空間為360字節(jié),具體的程序代碼如下:
process(clk)
variable temp:integer rang
【基于CPLD的三相多波形函數(shù)發(fā)生器設(shè)計】相關(guān)文章:
基于單片機技術(shù)的波形發(fā)生器采用單片機設(shè)計(一)03-07
基于FPGA的DDS信號發(fā)生器的設(shè)計03-03
基于DDR SDRAM的信號發(fā)生器設(shè)計與實現(xiàn)03-30
基于CPLD/FPGA的半整數(shù)分頻器的設(shè)計03-18
基于CPLD的系統(tǒng)中I2C總線的設(shè)計03-18