基于FPGA的实用信号源的设计
源代码如下:
library ieee
use ieee.std_logic_1164.all
use ieee.std_logic_unsigned.all
entity dds is
port(clk:in std_logic
rst:in std_logic
fword:in std_logic_vector(7 downto 0)
pword:in std_logic_vector(7 downto 0)
fout:out std_logic_vector(9 downto 0))
end
architecture one of dds is
component reg32b
port(load:in std_logic
din:in std_logic_vector(31 downto 0)
dout:out std_logic_vector(31 downto 0))
end component
component reg10b
port(load:in std_logic
din:in std_logic_vector(9 downto 0)
dout:out std_logic_vector(9 downto 0))
end component
component ADDER32B
PORT(
A :IN STD_LOGIC_VECTOR (31 DOWNTO 0)
B :IN STD_LOGIC_VECTOR (31 DOWNTO 0)
S :OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
)
end component
component adder10b
port(a:in std_logic_vector(9 downto 0)
b:in std_logic_vector(9 downto 0)
s:out std_logic_vector(9 downto 0))
end component
component sin_rom
port(address:in std_logic_vector(9 downto 0)
inclock:in std_logic
q:out std_logic_vector(9 downto 0))
end component
signal f32b:std_logic_vector(31 downto 0)
signal d32b:std_logic_vector(31 downto 0)
signal din32b:std_logic_vector(31 downto 0)
signal p10b:std_logic_vector(9 downto 0)
signal lin10b:std_logic_vector(9 downto 0)
signal sin10b:std_logic_vector(9 downto 0)
begin
f32b(27 downto 20)<=fwordf32b(31 downto 28)<="0000"
p10b(1 downto 0)<="00"
f32b(19 downto 0)<="00000000000000000000"p10b(9 downto 2)<=pword
u1:ADDER32b port map(A=>f32b,B=>d32b,S=>din32b)
u2:reg32b port map(dout=>d32b,din=>din32b,load=>clk)
--u3:sin_rom port map(address=>sin10b,q=>fout,inclock=>clk)
--u4:adder10b port map(a=>p10b,b=>d32b(31 downto 22),s=>lin10b)
--u5:reg10b port map(dout=>sin10b,din=>lin10b,load=>clk)
end
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
USE IEEE.STD_LOGIC_UNSIGNED.ALL
ENTITY adder10b IS
port(a:in std_logic_vector(9 downto 0)
b:in std_logic_vector(9 downto 0)
s:out std_logic_vector(9 downto 0))
END adder10b
ARCHITECTURE BHV OF adder10b IS
BEGIN
s<=a+b
END BHV
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
USE IEEE.STD_LOGIC_UNSIGNED.ALL
ENTITY ADDER32B IS
PORT(
A :IN STD_LOGIC_VECTOR (31 DOWNTO 0)
B :IN STD_LOGIC_VECTOR (31 DOWNTO 0)
S :OUT STD_LOGIC_VECTOR (31 DOWNTO 0)
)
END
ARCHITECTURE BHV OF ADDER32B IS
BEGIN
END BHV
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
ENTITY reg10b IS
PORT(
load:in std_logic
din:in std_logic_vector(9 downto 0)
dout:out std_logic_vector(9 downto 0))
END reg10b
ARCHITECTURE BHV OF reg10b IS
BEGIN
PROCESS (load,din)
BEGIN
IF load 'EVENT AND load ='1'
THEN dout <= din
END IF
END PROCESS
END BHV
-- megafunction wizard: %ROM: 1-PORT%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altsyncram
-- ============================================================
-- File Name: rom_data.vhd
-- Megafunction Name(s):
--altsyncram
--
-- Simulation Library Files(s):
--altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 7.1 Build 156 04/30/2007 SJ Full Version
-- ************************************************************
--Copyright (C) 1991-2007 Altera Corporation
--Your use of Altera Corporation's design tools, logic functions
--and other software and tools, and its AMPP partner logic
--functions, and any output files from any of the foregoing
--(including device programming or simulation files), and any
--associated documentation or information are expressly subject
--to the terms and conditions of the Altera Program License
--Subscription Agreement, Altera MegaCore Function License
--Agreement, or other applicable license agreement, including,
--without limitation, that your use is for the sole purpose of
--programming logic devices manufactured by Altera and sold by
--Altera or its authorized distributors. Please refer to the
--applicable agreement for further details.
LIBRARY ieee
USE ieee.std_logic_1164.all
LIBRARY altera_mf
USE altera_mf.all
ENTITY rom_data IS
PORT
(
address : IN STD_LOGIC_VECTOR (4 DOWNTO 0)
inclock : IN STD_LOGIC
outclock : IN STD_LOGIC
q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0)
)
END rom_data
ARCHITECTURE SYN OF rom_data IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (9 DOWNTO 0)
COMPONENT altsyncram
GENERIC (
address_aclr_a : STRING
init_file : STRING
intended_device_family : STRING
lpm_type : STRING
maximum_depth : NATURAL
numwords_a : NATURAL
operation_mode : STRING
outdata_aclr_a : STRING
outdata_reg_a : STRING
widthad_a : NATURAL
width_a : NATURAL
width_byteena_a : NATURAL
)
PORT (
clock0 : IN STD_LOGIC
clock1 : IN STD_LOGIC
address_a : IN STD_LOGIC_VECTOR (4 DOWNTO 0)
q_a : OUT STD_LOGIC_VECTOR (9 DOWNTO 0)
)
END COMPONENT
BEGIN
q<= sub_wire0(9 DOWNTO 0)
altsyncram_component : altsyncram
GENERIC MAP (
address_aclr_a =>"NONE",
init_file =>"rom_data.mif",
intended_device_family =>"Cyclone",
lpm_type =>"altsyncram",
maximum_depth =>1024,
numwords_a =>32,
operation_mode =>"ROM",
outdata_aclr_a =>"NONE",
outdata_reg_a =>"CLOCK1",
widthad_a =>5,
width_a =>10,
width_byteena_a =>1
)
PORT MAP (
clock0 =>inclock,
clock1 =>outclock,
address_a =>address,
q_a =>sub_wire0
)
END SYN
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-- Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone"
-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "1024"
-- Retrieval info: PRIVATE: MIFfilename STRING "rom_data.mif"
-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "32"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-- Retrieval info: PRIVATE: RegOutput NUMERIC "1"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: SingleClock NUMERIC "0"
-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "0"
-- Retrieval info: PRIVATE: WidthAddr NUMERIC "5"
-- Retrieval info: PRIVATE: WidthData NUMERIC "10"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: INIT_FILE STRING "rom_data.mif"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: MAXIMUM_DEPTH NUMERIC "1024"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "32"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "ROM"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK1"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "5"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "10"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 5 0 INPUT NODEFVAL address[4..0]
-- Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT NODEFVAL inclock
-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT NODEFVAL outclock
-- Retrieval info: USED_PORT: q 0 0 10 0 OUTPUT NODEFVAL q[9..0]
-- Retrieval info: CONNECT: @address_a 0 0 5 0 address 0 0 5 0
-- Retrieval info: CONNECT: q 0 0 10 0 @q_a 0 0 10 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 inclock 0 0 0 0
-- Retrieval info: CONNECT: @clock1 0 0 0 0 outclock 0 0 0 0
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data.inc TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data.cmp TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data.bsf TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data_inst.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data_waveforms.html TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL rom_data_wave*.jpg FALSE
-- Retrieval info: LIB_FILE: altera_mf
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
ENTITY sin_rom IS
port(address:in std_logic_vector(9 downto 0)
inclock:in std_logic
q:out std_logic_vector(9 downto 0))
END sin_rom
ARCHITECTURE SYN OF sin_rom IS
signal sub_wire0 :std_logic_vector(9 downto 0)
component lpm_rom
generic (lpm_widthad:natural
lpm_address_control:string
lpm_outdata:string
lpm_file:string)
port(address:in std_logic_vector(9 downto 0)
inclock:in std_logic
q:out std_logic_vector(9 downto 0))
end component
BEGIN
q<=sub_wire0(9 downto 0)
lpm_rom_component:lpm_rom GENERIC MAP (LPM_WIDTH=>10,
LPM_WIDTHAD=>10,LPM_ADDRESS_CONTROL=>"REGISTERED",
LPM_OUTDATA=>"UNREGISTERED",
LPM_FILE=>"./data/LUT10x10.mif")
port map(address=>address,inclock=>inclock,q=>sub_wire0)
END SYN
《全国大学生电子设计竞赛获奖作品选编:1994-1995》
作者: 第二届全国大学生电子设计竞赛组委会编
出版日期: 1997年06月第1版
这本书上有众多的方案。可以去找电子书,没有的话给个联系方式,找时间给你发一下
音频功率放大器典型应用电路
如图音频功率放大器的典型应用电路。音频信号输入后,经过C2耦合加到放大器的反相输入端,内部有两个放大器,第一个放大器的增益可由增益选择端控制,第二个放大器增益由内部两个20kΩ电阻固定为1。以电桥差动形式输出时,功率放大器的增益Av为2×20kΩ/20kΩ或2×40kΩ/20kΩ。当1脚为逻辑低电平时放大器微功率关断,为逻辑高电平时放大器全功率工作。
基本电路在AD9851的datasheet的后半部分有的,可以参考。
这个设计是比较简单的,在数电模电的课本里都有专门讲555定时器的,555定时器的各种使用方法也都有介绍。
下面我简单讲一下设计矩形脉产生电路(只是理论设计不考虑实际情况),由:T=T1+T2=0.7(R1+2R2)C=1S;T1/(T1+T2)=2/3这两个公式,可解得R1+R2=952KΩ,R2=476KΩ,按照这个数值去设置R1、R2的阻值,出来的就是按题目要求设计的矩形脉冲信号,占空比为2/3,电容C=1UF,周期T=1S
扩展资料:
555定时器可工作在三种工作模式下:
1.单稳态模式:在此模式下,555功能为单次触发。应用范围包括定时器,脉冲丢失检测,反弹跳开关,轻触开关,分频器,电容测量,脉冲宽度调制(PWM)等。
在单稳态工作模式下,555定时器作为单次触发脉冲发生器工作。当触发输入电压降至VCC的1/3时开始输出脉冲。输出的脉宽取决于由定时电阻与电容组成的RC网络的时间常数。当电容电压升至VCC的2/3时输出脉冲停止。根据实际需要可通过改变RC网络的时间常数来调节脉宽。输出脉宽t,即电容电压充至VCC的2/3所需要的时间由下式给出:
虽然一般认为当电容电压充至VCC的2/3时电容通过OC门瞬间放电,但是实际上放电完毕仍需要一段时间,这一段时间被称为“弛豫时间”。在实际应用中,触发源的周期必须要大于弛豫时间与脉宽之和(实际上在工程应用中是远大于)。
2.无稳态模式:在此模式下,555以振荡器的方式工作。这一工作模式下的555芯片常被用于频闪灯、脉冲发生器、逻辑电路时钟、音调发生器、脉冲位置调制(PPM)等电路中。如果使用热敏电阻作为定时电阻,555可构成温度传感器,其输出信号的频率由温度决定。
无稳态工作模式下555定时器可输出连续的特定频率的方波。电阻R1接在VCC与放电引脚(引脚7)之间,另一个电阻(R2)接在引脚7与触发引脚(引脚2)之间,引脚2与阈值引脚(引脚6)短接。工作时电容通过R1与R2充电至2/3VCC,然后输出电压翻转,电容通过R2放电至1/3VCC,之后电容重新充电,输出电压再次翻转。
对于双极型555而言,若使用很小的R1会造成OC门在放电时达到饱和,使输出波形的低电平时间远大于上面计算的结果。
3.双稳态模式(或称施密特触发器模式):在DIS引脚空置且不外接电容的情况下,555的工作方式类似于一个RS触发器,可用于构成锁存开关。
双稳态工作模式下的555芯片类似基本RS触发器。在这一模式下,触发引脚(引脚2)和复位引脚(引脚4)通过上拉电阻接至高电平,阈值引脚(引脚6)被直接接地,控制引脚(引脚5)通过小电容(0.01到0.1μF)接地,放电引脚(引脚7)浮空。所以当引脚2输入高(有误应为低)电压时输出置位,当引脚4接地时输出复位。
参考资料:百度百科-555定时器
后来是用晶体管电路,
共同的特点,是要用高输入电阻的放大器,低漏电的大容量电容器,不能用电解电容器。
现在都是用单片机来实现了,就十分简单啊。因为是数字编程的,没有难度啦。
系别:电子工程系 专业:应用电子技术 届:07届 姓名:李贤春
摘 要
本系统以ICL8038集成块为核心器件,制作一种函数信号发生器,制作成本较低。适合学生学习电子技术测量使用。ICL8038是一种具有多种波形输出的精密振荡集成电路,只需要个别的外部元件就能产生从0.001Hz~30KHz的低失真正弦波、三角波、矩形波等脉冲信号。输出波形的频率和占空比还可以由电流或电阻控制。另外由于该芯片具有调制信号输入端,所以可以用来对低频信号进行频率调制。
关键词 ICL8038,波形,原理图,常用接法
一、概述
在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。
二、方案论证与比较
2.1·系统功能分析
本设计的核心问题是信号的控制问题,其中包括信号频率、信号种类以及信号强度的控制。在设计的过程中,我们综合考虑了以下三种实现方案:
2.2·方案论证
方案一∶采用传统的直接频率合成器。这种方法能实现快速频率变换,具有低相位噪声以及所有方法中最高的工作频率。但由于采用大量的倍频、分频、混频和滤波环节,导致直接频率合成器的结构复杂、体积庞大、成本高,而且容易产生过多的杂散分量,难以达到较高的频谱纯度。
方案二∶采用锁相环式频率合成器。利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需要频率上。这种频率合成器具有很好的窄带跟踪特性,可以很好地选择所需要频率信号,抑制杂散分量,并且避免了量的滤波器,有利于集成化和小型化。但由于锁相环本身是一个惰性环节,锁定时间较长,故频率转换时间较长。而且,由模拟方法合成的正弦波的参数,如幅度、频率 相信都很难控制。
方案三:采用8038单片压控函数发生器,8038可同时产生正弦波、方波和三角波。改变8038的调制电压,可以实现数控调节,其振荡范围为0.001Hz~300KHz。
三、系统工作原理与分析
3.1、ICL8038的应用
ICL8038是精密波形产生与压控振荡器,其基本特性为:可同时产生和输出正弦波、三角波、锯齿波、方波与脉冲波等波形;改变外接电阻、电容值可改变,输出信号的频率范围可为0.001Hz~300KHz;正弦信号输出失真度为1%;三角波输出的线性度小于0.1%;占空比变化范围为2%~98%;外接电压可以调制或控制输出信号的频率和占空比(不对称度);频率的温度稳定度(典型值)为120*10-6(ICL8038ACJD)~250*10-6(ICL8038CCPD);对于电源,单电源(V+):+10~+30V,双电源(+V)(V-):±5V~±15V。图1-2是管脚排列图,图1-2是功能框图。8038采用DIP-14PIN封装,管脚功能如表1-1所示。
3.2、ICL8038内部框图介绍
函数发生器ICL8038的电路结构如图虚线框内所示(图1-1),共有五个组成部分。两个电流源的电流分别为IS1和IS2,且IS1=I,IS2=2I;两个电压比较器Ⅰ和Ⅱ的阈值电压分别为 和 ,它们的输入电压等于电容两端的电压uC,输出电压分别控制RS触发器的S端和 端;RS触发器的状态输出端Q和 用来控制开关S,实现对电容C的充、放电;充点电流Is1、Is2的大小由外接电阻决定。当Is1=Is2时,输出三角波,否则为矩尺波。两个缓冲放大器用于隔离波形发生电路和负载,使三角波和矩形波输出端的输出电阻足够低,以增强带负载能力;三角波变正弦波电路用于获得正弦波电压。
3.3、内部框图工作原理
★当给函数发生器ICL8038合闸通电时,电容C的电压为0V,根据电压比较器的电压传输特性,电压比较器Ⅰ和Ⅱ的输出电压均为低电平;因而RS触发器的 ,输出Q=0, ;
★使开关S断开,电流源IS1对电容充电,充电电流为
IS1=I
因充电电流是恒流,所以,电容上电压uC随时间的增长而线性上升。
★当上升为VCC/3时,电压比较器Ⅱ输出为高电平,此时RS触发器的 ,S=0时,Q和 保持原状态不变。
★一直到上升到2VCC/3时,使电压比较器Ⅰ的输出电压跃变为高电平,此时RS触发器的 时,Q=1时, ,导致开关S闭合,电容C开始放电,放电电流为IS2-IS1=I因放电电流是恒流,所以,电容上电压uC随时间的增长而线性下降。
起初,uC的下降虽然使RS触发的S端从高电平跃变为低电平,但 ,其输出不变。
★一直到uC下降到VCC/3时,使电压比较器Ⅱ的输出电压跃变为低电平,此时 ,Q=0, ,使得开关S断开,电容C又开始充电,重复上述过程,周而复始,电路产生了自激振荡。
由于充电电流与放电电流数值相等,因而电容上电压为三角波,Q和 为方波,经缓冲放大器输出。三角波电压通过三角波变正弦波电路输出正弦波电压。
结论:改变电容充放电电流,可以输出占空比可调的矩形波和锯齿波。但是,当输出不是方波时,输出也得不到正弦波了。
3.4、方案电路工作原理(见图1-7)
当外接电容C可由两个恒流源充电和放电,电压比较器Ⅰ、Ⅱ的阀值分别为总电源电压(指+Vcc、-VEE)的2/3和1/3。恒流源I2和I1的大小可通过外接电阻调节,但必须I2>I1。当触发器的输出为低电平时,恒流源I2断开,恒流源I1给C充电,它的两端电压UC随时间线性上升,当达到电源电压的确2/3时,电压比较器I的输出电压发生跳变,使触发器输出由低电平变为高电平,恒流源I2接通,由于I2>I1(设 I2=2I1),I2将加到C上进行反充电,相当于C由一个净电流I放电,C两端的电压UC又转为直线下降。当它下降到电源电压的1/3时,电压比较器Ⅱ输出电压便发生跳变,使触发器输出为方波,经反相缓冲器由引脚9输出方波信号。C上的电压UC,上升与下降时间相等(呈三角形),经电压跟随器从引脚3输出三角波信号。将三角波变为正弦波是经过一个非线性网络(正弦波变换器)而得以实现,在这个非线性网络中,当三角波的两端变为平滑的正弦波,从2脚输出。
其中K1为输出频段选择波段开关,K2为输出信号选择开关,电位器W1为输出频率细调电位器,电位器W2调节方波占空比,电位器W3、W4调节正弦波的非线性失真。
图1-1
3.5、两个电压比较器的电压传输特性如图1-4所示。
图1-4
3.6、常用接法
如图(1-2)所示为ICL8038的引脚图,其中引脚8为频率调节(简称为调频)电压输入端,电路的振荡频率与调频电压成正比。引脚7输出调频偏置电压,数值是引脚7与电源+VCC之差,它可作为引脚8的输入电压。
如图(1-5)所示为ICL8038最常见的两种基本接法,矩形波输出端为集电极开路形式,需外接电阻RL至+VCC。在图(a)所示电路中,RA和RB可分别独立调整。在图(b)所示电路中,通过改变电位器RW滑动的位置来调整RA和RB的数值。
图1-5
当RA=RB时,各输出端的波形如下图(a)所示,矩形波的占空比为50%,因而为方波。当RA≠RB时,矩形波不再是方波,引脚2输出也就不再是正弦波了,图(b)所示为矩形波占空比是15%时各输出端的波形图。根据ICL8038内部电路和外接电阻可以推导出占空比的表达式为
故RA<2RB。
为了进一步减小正弦波的失真度,可采用如图(1-6)所示电路,电阻20K与电位器RW2用来确定8脚的直流电压V8,通常取V8≥2/3Vcc。V8越高,Ia、Ib越小,输出频率越低,反之亦然。RW2可调节的频率范围为20HZ20~KHZ。V8还可以由7脚提供固定电位,此时输出频率f0仅有Ra、Rb及10脚电容决定,Vcc采用双对电源供电时,输出波形的直流电平为零,采用单对电源供电时,输出波形的直流电平为Vcc/2。两个100kΩ的电位器和两个10kΩ电阻所组成的电路,调整它们可使正弦波失真度减小到0.5%。在RA和RB不变的情况下,调整RW2可使电路振荡频率最大值与最小值之比达到100:1。在引脚8与引脚6之间直接加输入电压调节振荡频率,最高频率与最低频率之差可达1000:1。
3.7、实际线路分析
可在输出增加一块LF35双运放,作为波形放大与阻抗变换,根据所选择的电路元器件值,本电路的输出频率范围约10HZ~20KHZ;幅度调节范围:正弦波为0~12V,三角波为0~20V,方波为0~24V。若要得到更高的频率,还可改变三档电容的值。
图1-6
表 1-1 ISL8038管脚功能
管 脚 符 号 功 能
1,12 SINADJ1,SINADJ2 正弦波波形调整端。通常SINADJ1开路或接直流电压,
SINADJ2接电阻REXT到V-,用以改善正弦波波形和减小失真。
2 SINOUT 正弦波输出
3 TRIOUT 三角波输出
4,5 DFADJ1,DFADJ2 输出信号重复频率和占空比(或波形不对称度)调节端。通常DFADJ1端接电阻RA到V+,DFADJ2端接RB到V+,改变阻值可调节频率和占空比。
6 V+ 正电源
7 FMBIAS 调频工作的直流偏置电压
8 FMIN 调频电压输入端
9 SQOUT 方波输出
10 C 外接电容到V-端,用以调节输出信号的频率与占空比
11 V- 负电源端或地
13,14 NC 空脚
四、制作印刷电路板
首先,按图制作印刷电路板,注意不能有断线和短接,然后,对照原理图和印刷电路板的元件而进行元件的焊接。可根据自己的习惯并遵循合理的原则,将面板上的元器件安排好,尽量使连接线长度减少,变压器远离输出端。再通电源进行调试,调整分立元件振荡电路放大元件的工作点,使之处于放大状态,并满足振幅起振条件。仔细检查反馈条件,使之满足正反馈条件,从而满足相位起振条件。
制作完成后,应对整机进行调试。先测量电源支流电压,确保无误后,插上集成快,装好连接线。可以用示波器观察波形发出的相应变化,幅度的大小和频率可以通过示波器读出 。
五、系统测试及误差分析
5.1、测试仪器
双踪示波器 YB4325(20MHz)、万用表。
5.2、测试数据
基本波形的频率测量结果
频率/KHz
正弦波 预置 0.01 0.02 2 20 50 100
实测 0.0095 0.0196 2.0003 20.0038 50.00096 100.193
方波 预置 0.01 0.02 2 20 50
实测 0.095 0.0197 1.0002 2.0004 20.0038
三角波 预置 0.01 0.02 1 2 20 100
实测 0.0095 0.0196 1.0002 2.0004 20.0038 100.0191
5.3、误差分析及改善措施
正弦波失真。调节R100K电位器RW4,可以将正弦波的失真减小到1%,若要求获得接近0.5%失真度的正弦波时,在6脚和11脚之间接两个100K电位器就可以了。
输出方波不对称,改变RW3阻值来调节频率与占空比,可获得占空比为50%的方波,电位器RW3与外接电容C一起决定了输出波形的频率,调节RW3可使波形对称。
没有振荡。是10脚与11脚短接了,断开就可以了
产生波形失真,有可能是电容管脚太长引起信号干扰,把管脚剪短就可以解决此问题。也有可能是因为2030功率太大发热导致波形失真,加装上散热片就可以了。
5.4、调试结果分析
输出正弦波不失真频率。由于后级运放上升速率的限制,高频正弦波(f>70KHz)产生失真。输出可实现0.2V步进,峰-峰值扩展至0~26V。
图1-2
图 1−7
六、结论
通过本篇论文的设计,使我们对ICL8038的工作原理有了本质的理解,掌握了ICL8038的引脚功能、工作波形等内部构造及其工作原理。利用ICL8038制作出来的函数发生器具有线路简单,调试方便,功能完备。可输出正弦波、方波、三角波,输出波形稳定清晰,信号质量好,精度高。系统输出频率范围较宽且经济实用。
七、参考文献
【1】谢自美《电子线路设计.实验.测试(第三版)》武汉:华中科技大学出版社。2000年7月
【2】杨帮文《新型集成器件家用电路》北京:电子工业出版社,2002.8
【3】第二届全国大学生电子设计竞赛组委会。全国大学生电子设计竞赛获奖作品选编。北京:北京理工大学出版社,1997.
【4】李炎清《毕业论文写作与范例》厦门:厦门大学出版社。2006.10
【5】潭博学、苗江静《集成电路原理及应用》北京:电子工业出版社。2003.9
【6】陈梓城《家用电子电路设计与调试》北京:中国电力出版社。2006
结合外围电路产生占空比和幅度可调的正弦波、方波、三角波该函数信号发生器的频率可调范围为1~100kHz, 步进为0.1kHz, 波形稳定, 无明显失真。
1.系统设计框图如图1 为系统设计框图。本设计是利用键盘设置相应的频率值, 根据所设置频率段选择相应电容, 经计算获得相应数字量送数字电位器实现D/A 转换, 同时与参考电压( 本例为5.5V) 相加后形成数控调压去控制ICL8038 第8 脚, 这样即可由ICL8038 实现对应频率值的矩形波、三角波和正弦波。方波幅度经衰减后送单片机可测得信号源频率并由数码管显示。
2.电路原理图
图2 为电路原理图。其中AT89C2051 是8 位单片机, 其中: P1.4~P1.7、P1.2、P1.3、P3.0、P3.1 作为数
码显示P3.3、P3.5 、P3.7 作为键盘输入口P3.4 作为计数口, 用于测量信号源频率P3.0~P3.2 作为数字电位器的SPI总线P1.1、P1.0 可根据需要扩展继电器或模拟开关选择ICL8038第10 脚( CAP) 与第11 脚间的电容C。
MCP41010 是8 位字长的数字电位器, 采用三总线SPI 接口。/CS: 片选信号, 低电平有效SCK:时钟信号输入端SI: 串行数据输入端, 用于寄存器的选择及数据输入。MCP41010 可作为数字电位器, 也可以作为D/A 转换器, 本设计是将MCP41010 接成8 位字长的D/A 转换器, MCP41010 根据输入的串行数据, 对基准电压进行分压后由中间抽头输出模拟电压, 即VPWO =DN/256VREF ( 式中VREF=5V) 。
函数发生电路ICL8038, 图2所示是一个占空比和一个频率连续可调的函数发生电路。ICL8038是一种函数发生器集成块, 通过外围电路的设计, 可以产生高精密度的正弦波、方波、三角波信号, 选择不同参数的外电阻和电容等器件, 可以获得频率在0.01Hz~300kHz 范围内的信号。通过调节RW2 可使占空比在2%~98%可调。第10 脚( CAP) 与第11 脚间的电容C 起到很重要的作用, 它的大小决定了输出信号频率的大小, 当C 确定后, 调节ICL8038 第8 脚的电压可改变信号源的输出频率。从ICL8038 引脚9(要接上拉电阻)输出的波形经衰减后送单片机P3.4 进行频率测量。
正弦函数信号由三角波函数信号经过非线性变换而获得。利用二极管的非线性特性, 可以将三角波信号的上升和下降斜率逐次逼近正弦波的斜率。ICL8038 中的非线性网络是由4 级击穿点的非线性逼近网络构成。一般说来, 逼近点越多得到的正弦波效果越好, 失真度也越小, 在本芯片中N= 4, 失真度可以小于1。在实测中得到正弦信号的失真度可达0.5 左右。其精度效果相当满意。为了进一步减小正弦波的失真度, 可采用图2 所示电路中两个电位器RW3 和RW4 所组成的电路, 调整它们可使正弦波失真度减小。当然, 如果矩形波的占空比不是50% , 矩形波不再是方波, 引脚2 输出也就不再是正弦波了。 图2 电路原理图
经实验发现, 在电路设计中接10 脚和11 脚的电容值和性能是整个电路的关键器件, 电容值的确定也就确定电路能产生的频率范围, 电容性能的好坏直接影响信号频率的稳定性、波形的失真度, 由于该芯片是通过恒流源
对C 充放电来产生振荡的, 故振荡频率的稳定性就受到外接电容及恒流源电流的影响, 若要使输出频率稳定, 必须采用以下措施:外接电阻、电容的温度特性要好外部电源应稳定电容应选用漏电小、质量好的非极化电容器。3.实验结果
当±12V 工作电源时, 输出频率如下表: 失真度情况, 实验数据如下表: 4.软件流程图
图3 为软件流程图。T0 设为计数器,T1 设为定时器(初值为5ms)。5ms 启动主循环, 主要用于键盘扫描及扫描显示, 图2 中K0 作为控制键, K1 作为调整键, K2 作为增加键上电时程序进入频率设置模式, 按一下K0 键程序进入数控模式, 按二下K0 键程序进入扫频模式, 按三下K0 键程序进入频率设置模式, 周而复始。在频率设置模式, 由K1 键和K2 键完成频率设置。图3 软件流程图基于ICL8038的函数发生器函数发生器是一种可以同时产生方波、三角波和正弦波的专用集成电路。当调节外部电路参数时,还可以获得占空比可调的矩形波和锯齿波。因此,广泛用于仪表之中。一、电路结构函数发生器ICL8038的电路结构如图虚线框内所示,共有五个组成部分。两个电流源的电流分别为IS1和IS2,且IS1=I,IS2=2I;两个电压比较器Ⅰ和Ⅱ的阈值电压分别为 和 ,它们的输入电压等于电容两端的电压uC,输出电压分别控制RS触发器的S端和 端;RS触发器的状态输出端Q和 用来控制开关S,实现对电容C的充、放电;两个缓冲放大器用于隔离波形发生电路和负载,使三角波和矩形波输出端的输出电阻足够低,以增强带负载能力;三角波变正弦波电路用于获得正弦波电压。RS触发器是数字电路中具有存储功能的一种基本单元电路。Q和 是一对互补的状态输出端,当Q=1时, ;当Q=0时, 。S和 是两个输入端,当 时,Q=0时, ;反之,当 时,Q=1时, ;当S=0, 时,Q和 保持原状态不变。两个电压比较器的电压传输特性如下图所示。二、工作原理★当给函数发生器ICL8038合闸通电时,电容C的电压为0V,根据电压比较器的电压传输特性,电压比较器Ⅰ和Ⅱ的输出电压均为低电平;因而RS触发器的 ,输出Q=0, ;★使开关S断开,电流源IS1对电容充电,充电电流为IS1=I因充电电流是恒流,所以,电容上电压uC随时间的增长而线性上升。★当上升为VCC/3时,电压比较器Ⅱ输出为高电平,此时RS触发器的 ,S=0时,Q和 保持原状态不变。★一直到上升到2VCC/3时,使电压比较器Ⅰ的输出电压跃变为高电平,此时RS触发器的 时,Q=1时, ,导致开关S闭合,电容C开始放电,放电电流为IS2-IS1=I因放电电流是恒流,所以,电容上电压uC随时间的增长而线性下降。起初,uC的下降虽然使RS触发的S端从高电平跃变为低电平,但 ,其输出不变。★ 一直到uC下降到VCC/3时,使电压比较器Ⅱ的输出电压跃变为低电平,此时 ,Q=0, ,使得开关S断开,电容C又开始充电,重复上述过程,周而复始,电路产生了自激振荡。由于充电电流与放电电流数值相等,因而电容上电压为三角波,Q和 为方波,经缓冲放大器输出。三角波电压通过三角波变正弦波电路输出正弦波电压。结论:改变电容充放电电流,可以输出占空比可调的矩形波和锯齿波。但是,当输出不是方波时,输出也得不到正弦波了。三、性能特点ICL8038是性能优良的集成函数发生器。可用单电源供电,即将引脚11接地,引脚6接+VCC,VCC为10~30V;也可双电源供电,即将引脚11接-VEE,引脚6接+VCC,它们的值为±5~±15V。频率的可调范围为0.01Hz~300kHz。输出矩形波的占空比可调范围为2%~98%,上升时间为180ns,下降时间为40ns。输出三角波(斜坡波)的非线性小于0.05%。输出正弦波的失真小于1%。四、常用接法如图所示为ICL8038的引脚图,其中引脚8为频率调节(简称为调频)电压输入端,电路的振荡频率与调频电压成正比。引脚7输出调频偏置电压,数值是引脚7与电源+VCC之差,它可作为引脚8的输入电压。如图所示为ICL8038最常见的两种基本接法,矩形波输出端为集电极开路形式,需外接电阻RL至+VCC。在图(a)所示电路中,RA和RB可分别独立调整。在图(b)所示电路中,通过改变电位器RW滑动的位置来调整RA和RB的数值。当RA=RB时,各输出端的波形如下图(a)所示,矩形波的占空比为50%,因而为方波。当RA≠RB时,矩形波不再是方波,引脚2输出也就不再是正弦波了,图(b)所示为矩形波占空比是15%时各输出端的波形图。根据ICL8038内部电路和外接电阻可以推导出占空比的表达式为故RA<2RB。 为了进一步减小正弦波的失真度,可采用如下图所示电路中两个100kΩ的电位器和两个10kΩ电阻所组成的电路,调整它们可使正弦波失真度减小到0.5%。在RA和RB不变的情况下,调整RW2可使电路振荡频率最大值与最小值之比达到100:1。在引脚8与引脚6之间直接加输入电压调节振荡频率,最高频率与最低频率之差可达1000:1。