![]() |
|
||||||||||||||
| . 网站首页 . 产品新知 . 业界资讯 . 技术文库 . 下载中心 . 服务导航 . 邮购需知 . 技术论坛 . | ||
|
||
|
|||||
| 基于CPLD 的三相多波形函数发生器设计 | |||||
作者:尹佳喜 尹… 文章来源:国外电子元器件 点击数: 更新时间:2008-2-4 ![]() |
|||||
|
作者:尹佳喜 尹 仕 来源:国外电子元器件 摘要:介绍了基于可编程逻辑器件CPLD 和直接数字频率合成技术(DDS)的三相多波形函数发生器的基本原理,并在此基础上给出了基于CPLD 的各模块设计方法及其VHDL 源程序。 关键词:CPLD;直接数字频率合成;函数发生器;VHDL 1 引言 2 系统原理 2.2 CPLD的外围电路 图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=‘ temp:=temp(15 down to 0)&datain; end if; out1<=temp; end process s2p; mux:process(out1(16)) begin if out1(16)=‘ ad<=out1(15 down to 0); --1号寄存器为幅度控制字 else freq<=out1(15 downto 0); --0号寄存器为频率控制字 end if; end process mux; end; 3.2 分频比可变的分频器模块设计 该设计主要是根据频率控制字决定分频倍数,从而输出与频率控制字相对应的频率时钟,此模块的输出可作为寻址计数器的时钟。具体代码如下: process clk --clk为外部时钟(如晶振) variable temp,fen:std_logic_vector(15 down to 0); constant temp1:std_logic_vector(15 down to 0):=“111111111 variable a:std_logic; begin fen:=temp1-fen_in; --使分频后的频率正比于频率控制字 if clk=‘ if temp=(‘ a:=not a; temp:=temp+1; elsif temp=fen then a:=not a; temp:=“ 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 temp integer 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=“ case adress is when 000=>data<=0; when 001=>data<=4; ......--正弦波查找表 when others=>null; end case; else if sel=“ if adress<180 then data<=255; else data<=0; end if; else if sel=“ data<=adress/2; else --三角波 if adress<180 then data<=adress; else data<=adress-180; end if; end if; end process; 4 结束语 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 基于CPLD的CCD驱动时序电路设… CPLD在嵌入式系统与CAN总线网… 基于CPLD 的单片机PCI 接口设… 基于CPLD 器件的单稳态脉冲展… CPLD 120MHz高速A/D采集设计… CPLD 技术在时差法超声波流量… CPLD与PC机通讯VHDL代码 基于CPLD的位同步时钟提取电… 基于CPLD的雷达仿真信号设计… 在CPLD管理下实现高效多串口… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|