在教学实验和教学研究中,信号发生器作为提供测试用电信号的仪器必不可少。目前通用的信号发生器一般只能输出常用的波形信号,不能满足某些特殊的需要,例如在电子测量教学中,通过用示波器测量晶体管的输出特性曲线实验,让学生理解晶体管测试仪的测量原理,就需要阶梯波信号。又如研究计数法测周期时,噪声信号引起的触发误差所需的某种噪声信号。鉴于教学实验和教学研究的需要,笔者设计了一种基于可编程逻辑器件cpld的多波形信号发生器,此设计采用max plus ii开发平台,vhdl编程实现,整个系统除晶体振荡器和a/d转换外,全部集成在一片美国altera公司生产的epm7256sr208-15的芯片上。他除了输出常用的正弦波、三角波、方波以外,专门设计了一个任意波形模块(在本设计中为阶梯波波形数据),以及两种波形线性组合共10种波形。任意波形模块可由用户自行编辑所需波形数据,经下载在不改变整个系统硬件连接的情况下,输出用户所需的特殊波形。该信号发生器输出波形的频率可数控选择,其范围为100 hz~30 khz。幅度调节范围为0~5 v。
1 设计原理
根据设计要求,多波形信号发生器由3部分组成,即时钟信号发生器、波形数据产生器和数/模转换电路。晶体振荡器产生稳定度很高的时钟信号,在时钟信号的作用下,波形数据产生器生成频率可变的波形数据数字信号,经数/模转换电路最终输出所需波形信号。幅度的调节可通过改变a/d转换芯片电阻网络的基准电压实现。基于cpld的波形数据产生器顶层电路如图1所示。
图1 波形数据产生器顶层电路图
图中dfr为数控分频器,根据仪器面板8位数字量开关产生的预置数据d输出不同频率的时钟,以改变输出信号的频率。在时钟的作用下,delta,sia,square,at_will模块分别产生三角波、正弦波、方波和任意波形的波形数据。selector(数据选择器)在面板上的波形选择开关cortrol的控制下,选择输出不同的波形数据,送至a/d转换电路。a/d转换采用8位的dac0832芯片。
2 各模块电路设计
2.1 数控分频器设计
数控分频器的功能是在输入端输入不同数据时,对输入时钟产生不同的分频比,输出不同频率的时钟,以改变输出信号的频率。本设计中利用并行预置数的减法计数器实现,他的工作原理是:减法计数器在并行预置数的基础上,在时钟的作用下进行减计数,当计数值为零时产生溢出信号,加载预置数据,并且将溢出信号作为分频器的输出信号,实现n分频信号输出。其分频系数n为n = d 1。d为预置数的值。为了得到占空比为50%的矩形时钟信号,将输出再进行二分频。由此,该分频器的总分频系数为2n。本设计中一个波形周期由64个时钟信号组成,则输出信号频率为:
时钟频率为4 mhz。数控分频器如程序1。
[程序1]
--略去申明部分
entity dfr is
port(clk:in std_logic;d:in integer range 0 to 255;fout:out std_logic);
end dfr;
architecture one of dfr is
signal full:std_logic; //定义内部溢出标志信号
begin
process(clk)
variable cnt9:integer range 0 to 312;
//内部变量,位宽同预置数据端
begin
if clk‘event and clk=’1‘ then
if cnt9= 0 then cnt9:=d; //计数值为0时,产生溢出信号
full《=’1‘; //同时,同步加载预置数据d
else cnt9:=cnt9=1;full《=’0‘;//否则,进行减1计数
end if;
end if;
end process;
--略去二分频进程
end one;
2.2 三角波波形数据产生模块设计
该模块可设计一个可逆计数器实现。设计时设置一变量作为工作状态标志,在此变量为全0时,当检测到时钟的上升沿时进行加同一个数操作,为全1时,进行减同一个数操作。由于a/d转换采用8位的dac0832芯片,且设64个时钟为一个三角波周期,则输出q每次加/减8。
2.3 正弦波波形数据产生模块设计
用加法计数器和译码电路完成。首先对幅度为1的正弦波的一个周期分为64个采样点,根据正弦波的函数关系计算得到每一点对应的幅度值,然后量化为8位二进制数据,最大值为255,最小值为0,以此得到正弦波波表。加法计数器生成译码电路的64个输入值,译码电路查波表输出。如程序2。
[程序2]
--略去申明和实体部分
architecture one of sia is
begin
process(clk,clr)
variable tmp:integer range 0 to 63;
begin
if clr=’0‘ then q《=0;
elsif clk’event and clk=‘1’ then
if tmp=63 then tmp:=0;
else tmp:=tmp 1;
end if;
case tmp is
--查表输出部分程序
when 00=》 q《=0;when 01=》 q《=1;when 02=》 q《=4;
……
when 29=》 q《=252;when 30=》 q《= 254;when 31=》 q《=255;
……
when 61=》 q《=4;when 62=》 q《=1 when 63=》 q《=0;when others=》 null;
end case;
end if;
end process;
end one;
2.4 方波波形数据产生模块设计
通过交替送出全0和全1,并给以32个时钟延时实现,64个时钟为一个周期。
2.5 任意波波形数据产生模块设计
设计原理同正弦波。译码器查表输出设计方法可以使用户编辑任意波形时,依据所需波表数据,修改case语句中条件赋值语句的赋值源数据即可。
2.6 数据选择器设计
用case语句设计完成。在cortrol的控制下选择输出一种波形数据输出,同时完成两种波形的线性组合。波形组合是将波形每一时刻的数值相加,为了不超出dac0832的输出范围,做相应的除2操作 。如程序3。
[程序3]
--略去申明和实体部分
architecture one of selector is begin
process(delta,sia,square,at_will,cortrol)
variable a:std_logic_vector(9 downto 0);
begin
case cortrol is
when “1000”=》 q《= delta;when “0100”=》 q《= sia;
when “0010”=》 q《= square;when “0001”=》 q《=at_will;
when “1100”=》 a:=“00”& delta sia;q《=a(8 downto 1);
when “1010”=》 a:=“00”& delta square;q《=a(8 downto 1);
when “1001”=》 a:=“00”& delta at_will;q《= a (8 downto 1);
when “0110”=》 a:=“00”& sia square;q《=a(8 downto 1);
when “0101”=》 a:=“00”& sia at_will;q《=a(8 downto 1);
when “0011”=》 a:=“00”& square at_will;q《=a(8 downto 1);
when others= 》 null:
end case;
end process;
end one;
以上各模块电路在max plus ii开发平台上经编译、仿真符合设计要求后,用原理图输入法完成顶层电路的设计、综合,最后下载至型号为epm7256sr208-15的cpld芯片中,最终完成硬件电路连接。经测试符合设计要求。用multisim仿真器仿真波形如图2所示。
图2中左图为正弦波 方波的输出波形,右图为三角波波形。从对输出10种波形的测试结果看:在整个频率范围内,频率误差最大为设计值的0.8%,最小为0.2%,低于传统的函数信号发生器的频率误差。
3 结语
实验表明,基于cpld的多波形信号发生器实现了各种波形的产生,尤其是实现了传统的函数信号发生器不具有的一些波形的产生。输出波形频率按设计要求可调,并达到一定的精度。满足了教学实验和开发新的实验项目对特殊波形的要求。整个设计采用vhdl编程实现,其
设计过程简单,极易修改,可移植性强。另外由于cpld具有可编程重置特性,因而可以方便地更换波形数据,且简单易行,所以为教学带来极大的方便。
明年推出的苹果MacBook Pro新品或将支持Face ID面容识别功能
TPSM82913低纹波降压模块,带集成铁氧体磁珠滤波器补偿
政策密集发布添助力 大陆成IIoT市场领头羊
英特尔称第二季度22nm将占总出货量的25%
Intel成功取得俄亥俄州土地,已经开始建设20A工艺晶圆厂
多波形信号发生器设计原理分析
电气火灾监控系统的功能都包括哪些
直流电阻测试仪的作用
minigui是什么
电动机发热严重原因解析
通过正点原子ATK-ESP8266 WiFi模块刷机智云Gagent固件
天马车载显示2020年前三季度累计出货全球第一 环比增长达到47.8%
触摸芯片的工作原理及应用范围
深天马揭秘全球首款LCD屏内指纹多点技术
如何利用5G来实现“每一个神经末梢”的数字化
SC01在指纹模块的应用案例
中国大陆汽车及新能源汽车市场的发展趋势
改锻造自动化工艺要注意哪些问题
面向工程师和科学家的大数据
DCDC为什么空载时输入电流为10mA呢?