基于CPLD的三相多波形函数发生器设计
出处:维库电子市场网 发布于:2023-07-21 17:04:55
摘要:介绍了基于可编程逻辑器件CPLD和直接数字频率合成技术(DDS)的三相多波形函数发生器的基本原理,并在此基础上给出了基于CPLD的各模块设计方法及其VHDL源程序。
1 引言
直接数字频率合成 Direct Digital Synthesis ,DDS是20世纪60年代末出现的第三代频率合成技术。该技术从相位概念出发,以Nyquist时域采样定理为基础,在时域中进行频率合成。DDS频率转换速度快,频率分辨率高,并在频率转换时可保持相位的连续,因而易于实现多种调制功能。DDS是全数字化技术,其幅度、相位、频率均可实现程控,并可通过更换波形数据灵活实现任意波形。此外,DDS易于单片集成,体积小,价格低,功耗小,因此DDS技术近年来得到了飞速发展,其应用也越来越广泛。
基于CPLD和DDS技术的函数发生器可以实现信号波形的多样化,而且方便可靠,简单经济,系统易于扩展,同时可大大提高输出信号的带宽。
2 系统原理
2.1 CPLD内部设计
CPLD的内部结构框,首先由控制寄存器将外部控制器(如单片机)送入的数据转换为频率和幅度控制字;然后再由分频器根据频率控制字进行分频并将输出作为寻址计数器的时钟;寻址计数器的寻址空间为360字节,可对ROM中的查找表进行寻址;而通过模360加法器可以产生120°的相位差。
2.2 CPLD的外围电路
CPLD幅度控制字经D/A转换输出后,可作为查找表输出DAC的参考电压,该参考电压可通过改变幅度控制字来进行改变,从而改变输出信号的幅度。
3 CPLD各模块的设计
3.1 控制寄存器的设计
控制寄存器设计主要是将外部控制器输入的数据转换为频率和幅度控制字。其程序代码如下:
--////////////调库////////////--
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.2 分频比可变的分频器模块设计
该设计主要是根据频率控制字决定分频倍数,从而输出与频率控制字相对应的频率时钟,此模块的输出可作为寻址计数器的时钟。具体代码如下:
processclk --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 寻址计数器设计
寻址计数器主要用于产生对ROM寻址输出波形数据的寻址信号,寻址空间为360字节,具体的程序代码如下:
process(clk)
variable temp:integer range 0 to 359;
begin
if clk=‘1' and clk'event then
if temp<359 then
temp:=temp+1;
else
temp:=0;
end if;
end if;
adress<=temp;
end process;
3.4 模360加法器设计
此模块用来产生120°的相移,以形成三相相差为120°的输出波形。由于寻址空间为360字节,故在输出寻址数大于360时,须对360取模。程序如下:
process(adress_in)
variable tempinteger range 0 to 511;
begin
temp:=adress in+120;--相移120°
if temp<360 then;
adress out<=temp
else
adress_out<=temp-360;--综合工具不支持取模运算,故采用减法器来实现
end if;
end process;
3.5 查找表ROM设计
此模块主要用于存储各种波形数据,以便通过寻址计数器寻址输出并经D/A转换来输出各种波形,其中包括正弦波、三角波、方波以及锯齿波。代码如下:
process(adress,sel)
begin
if sel=“00” then --sel为波形选择端口,选择输出波形,00为正弦波
case adress is
when 000=>data<=0; when 001=>data<=4; ......--正弦波查找表
when others=>null;
end case;
else if sel=“01” then --01输出方波,
if adress<180 then
data<=255;
else
data<=0;
end if;
else if sel=“10” then --锯齿波
data<=adress/2;
else --三角波
if adress<180 then
data<=adress;
else
data<=adress-180;
end if;
end if;
end process;
由以上各模块组成的三相波形发生器。
4 结束语
此方案可以方便地输出多种三相波形,而且,由于CPLD具有可编程重置特性,因而可以方便地改变控制方式或更换波形数据,而且简单易行,易于系统升级,同时具有很高的性价比。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- PLC的34个基础知识2024/1/17 16:25:58
- 印刷电路板的组装方法2023/9/15 17:04:46
- 模拟量输入测量值显示满量程(上溢)的故障处理方法2023/8/31 11:09:13
- 什么是PLC?看完就明白2023/5/5 16:37:01
- 可编程逻辑控制器 (PLC) 中的梯形逻辑2023/4/23 15:48:34
- 英特尔数据存储如何操作和实现
- 什么是微动开关_微动开关有什么用_微动开关使用方法
- VCC,VDD,VEE,VSS在电源原理图中有什么区别?
- 低压配电系统设计规范_低压配电系统设计注意事项
- xEV 主逆变器电源模块中第四代 SiC MOSFET 的短路测试
- 光耦详细应用教程
- 定义绝缘耐久性评估的电压脉冲测试要求
- 采用沟槽MOS结构,使存在权衡关系的VF和IR相比以往产品得到显著改善 ROHM推出实现业界超快trr的100V耐压SBD“YQ系列”
- NOVOSENSE - 纳芯微推出车规级温湿度传感器NSHT30-Q1,助力汽车智能化发展
- Keysight - EV 电池设计创新:扩大续航里程、延长电池寿命