第一篇:基于单片机设计的简易信号发生器资料
辽东学院信息技术学院
《可编程逻辑器件原理及应用》教学实习报告
简易信号发生器
学生姓名: 杨刚 学 号: 0915110619 班 级: B1106 专 业: 电子信息工程 指导教师: 张俊芳
2014年07月
辽东学院EDA教学实习报告
简易信号发生器
1引言
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。
本设计采用FPGA来设计制作多功能信号发生器。该信号发生器可以产生锯齿波、三角波、方波等波形。FPGA简介
FPGA(Field-Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
与传统们阵列和掩模可编程门阵列(MPGA)相比,FPGA具有很多的优点,传统门阵列可以用来设计任何电路,但是只能在工厂中一次性编程,而且还需要针对该电路的特定的掩模。FPGA是标准通用器件。使用其代替MPGA,可以将设计时间由几个月缩短至几小时,并且使设计更加简单,从而减少了错误修改和设计指标变更的花费。
FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:可编程快CLB(Configurable Logic Blocks)、可编程I/O模块IOB(Input Block)和可编程内部连线PI(Programmable Interconnect)。CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。
FPGA也存在缺点,FPGA中,每个可编程的点都有电阻和电容。电阻和电容的使用
辽东学院EDA教学实习报告
减慢了信号的传输速度,所以FPGA的速度比传统门阵列要低,而且,FPGA中互联延迟是不可预测的。
FPGA的基本特点主要有:
一、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
二、FPGA可做其它全定制或半定制ASIC电路的中试样片。
三、FPGA内部有丰富的触发器和I/O引脚。
四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
五、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
使用FPGA时,可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。VHDL & Verilog简介
VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)是一种用来描述数字系统行为和结构的硬件描述语言,被广泛的运用于描述和仿真各种数字系统,小到几个门,大到许多复杂集成电路相连的系统。
VHDL诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(The Institute of Electrical and Electronics Engineers)的一种工业标准硬件描述语言。相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(Library Based)的设计的特点,因此设计者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的FPGA器件中去,从而
辽东学院EDA教学实习报告
实现可编程的专用集成电路(ASIC)的设计。
Verilog也是一种流行的硬件描述语言,他是由工业界开发的,1984年,Verilog作为一种私用的硬件描述语言,由Gateway Design Automation公司给出,1988年,Synopsis公司为Verilog开发了综合工具。1995年,Verilog成为IEEE的一个标准。Verilog 适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述。
VHDL的语法是基于ADA语言的,而Verilog的语法是基于C语言的。由于是基于C语言,所以它更容易掌握,但是VHDL语言在设计和描述大型系统时具有突出优势。目前两种语言各占一半市场份额,两种语言都可以满足数字系统设计者的需求。
本设计中采用VHDL语言进行设计。设计工具简介
本次设计是基于Altera公司的QuartusII软件。
Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII支持Altera的IP核,包含了LPM/MegaFuction宏功能模块库,使用它,可以简化设计的复杂性,加快设计速度。QuartusII平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。此外,QuartusII通过和DSP Builder工具与Matlab/SIMULINK相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统开发,集系统级设计、嵌入式软件设计、可编程逻辑设计于一体,是一种综性的开发平台。系统设计
基于VHDL语言设计一个多功能信号发生器,通过选择输入信号,可以输出递增锯齿波、递减锯齿波、三角波、方波等四种信号。信号发生器的控制模块可以选用数据选择器实现,4种信号的数据选择可以使用4选1数据选择器实现。
辽东学院EDA教学实习报告
5.1 VHDL程序语言基本设计
一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU,一般情况下,一个完整的VHDL语言程序至少包括实体、结构体和程序包三个部分。实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。
第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;第二部分是程序的实体,定义电路单元的输入/输出引脚名称。程序的实体名称可以任意取,但必须与VHDL程序的文件名称相同。实体的标示符是ENTITY,实体以ENTITY开头,以END结束。
ENTITY fulladder IS PORT(a,b,Ci:in std_logic;Co,s: out std_logic_vector(7 downto 0));END fulladder;其中,定义了a,b, Ci为输入信号引脚,定义Co,s为输出信号引脚。
第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、数据流(DATAFLOW)描述方式和结构描述方式。其中数据流描述方式又被称为寄存器(RTL)描述方式。结构体以表示ARCHITECHTURE开头,以END结尾。结构体的名称可以任取。
architecture behav of fulladder is BEGIN
s<=a xor b xor Ci;Co<=(a and b)or(a and Ci)or(b and Ci);
辽东学院EDA教学实习报告
END fulladder 上面程序段中结构体的描述方式属于程序流描述方式。以上三段程序是一个完整的VHDL程序段,实现的功能是一位全加器。
5.2 波形发生器设计
采用DDS技术可以很方便地产生各种高质量的波形。DDS技术是从相位概念出发之结合成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于ROM表中,表中包含着一个周期正弦波的数字幅度信息,每个地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。在实物设计中,可以使用D/A接口来实现波形信号的输出。
为简化设计过程,本设计并未采用DDS技术,而是采用描点输出的方式,实现波形发生器的设计。程序中设置一个波形的起始点,经过比较、计算得出波形的其他数值,将这些点依次连续输出,从而实现波形的仿真。以递增锯齿波为例,首先定义初始点为
tmp=“00000000”;在时钟上升沿到来时,执行tmp<=tmp+1;语句,同时将tmp输出,当
tmp=“11111111”;时,将tmp值清零,执行下一个循环。
在本设计中,采用QuartusII软件仿真,所以可以通过波形文件直观的反映出输出的数字量的变化情况,以达到波形输出的仿真。
设计中分别对四种波形进行编程,编译无误后,封装生成模块文件,以供在后面的顶层电路设计中使用。
inst3triangleclkresetq[7..0]squareclkresetq[7..0]sawtooth_adderclkresetq[7..0]sawtooth_minusclkresetq[7..0]instinst16
inst2辽东学院EDA教学实习报告
图5-1 四种波形封装图块
本设计中设置了四种波形,分别是递增锯齿波、递减锯齿波、三角波、方波。四种波形通过一个4选1数据选择器来实现选择性输出。
5.3 四选一数据选择器设计
可以采用集成四选一数据选择器CT54153/CT74153,也可以使用软件编程生成模块的方式实现数据四选一的功能。在本设计中采用后者,程序中,为每一种波形分配一个通道,并为之赋予一唯一的代码,当在sel端输入不同的代码时,被选中的通道打开,响应的波形发生模块产生波形。
entity mux41 is port(sel:in std_logic_vector(2 downto 0);--定义输入端口sel d1,d2,d3,d4: in std_logic_vector(7 downto 0);--定义输入端口d1,d2,d3,d4 q: out std_logic_vector(7 downto 0));--定义输出端口 end mux41;architecture behav of mux41 is begin process(sel)begin
case sel is when “001”=>q<=d1;
mux41when “010”=>q<=d2;when “011”=>q<=d3;when “100”=>q<=d4;when others=>null;end case;
sel[2..0]d1[7..0]d2[7..0]d3[7..0]d4[7..0]inst4q[7..0]end process;
图5-2四选一数据选择器封装图块 end behav;以上为四选一数据选择器程序段,其中sel端口为外部输入选择信号,d1,d2,d3,d4分
辽东学院EDA教学实习报告
别连接四个波形发生模块,以二进制形式给sel幅值,选择相应的通道。q为输出端口,将波形信息的数字代码输出。
5.4 程序设计
递增锯齿波递减锯齿波12开始波形选择(1、2、3、4)43三角波方波波形输出结束图5-3 系统流程图
5.5 主要函数语句分析
在程序设计中,主要使用的函数语句有两种:If-else语句和case-when语句。这两种语句也是VHDL程序设计中常用的语句。二者都属于流程控制语句。流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或几条语句或跳过一条或几条语句。
IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。IF语句的语句结构有以下三种:
IF 条件句 Then
--第一种IF语句结构
顺序语句
END IF
辽东学院EDA教学实习报告
IF 条件句 Then
--第二种IF语句结构
顺序语句
ELSE
顺序语句
END IF
IF 条件句 Then
--第三种IF语句结构
顺序语句
ELSIF 条件句 Then
顺序语句
ELSE
END IF
...顺序语句
CASE语句根据满足的条件直接选择多项顺序语句中的一项执行,CASE语句的结构如下:
CASE 表达式 IS When 选择值 => 顺序语句 When 选择值 => 顺序语句
...END CASE
当执行到CASE语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值。执行对应的顺序语句,最后结束 CASE语句。表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。
5.6 系统顶层文件
将上述5个模块(递增锯齿波sawtooth_adder、递减锯齿波sawtooth_minus、三角波triangle、方波square、4选1数据选择器mux41)封装成为模块文件,供顶层电路调用。可以得到以下顶层文件电路:
sel[2..0]sawtooth_adderclkINPUTVCCINPUTVCCINPUTVCCclkresetq[7..0]resetinst1sawtooth_minussel[2..0]辽东学院EDA教学实习报告
clkresetq[7..0]mux41sel[2..0]d1[7..0]d2[7..0]d3[7..0]d4[7..0]q[7..0]OUTPUTq[7..0]图5-4 系统顶层电路图
inst2triangleclkresetq[7..0]
instinst4squareclkresetq[7..0]
inst3 10
辽东学院EDA教学实习报告
6系统仿真
通过选择不同的sel值,可以实现不同的波形输出。仿真中reset复位信号一直置高电平,即没有仿真复位情况。
输入的选择信号为1时,信号发生器顶层电路的仿真输出波形为递增锯齿波。输出的波形线性递增。
图6-1 递增锯齿波仿真波形
输入的选择信号为2时,信号发生器顶层电路的仿真输出波形为递减锯齿波。输出的波形线性递减。
图6-2 递减锯齿波仿真波形
输入的选择信号为3时,信号发生器顶层电路的仿真输出波形为三角波。输出的波形线性减小到最小值0后,再线性增加。
图6-3 三角波仿真波形
辽东学院EDA教学实习报告
输入的选择信号为4时,信号发生器顶层电路的仿真输出波形为方波。输出的波形为周期性的全0或全1。(在仿真中,只有将CLK信号频率取得很高的时候,才可以清晰地看出仿真效果。)
图6-4 方波仿真波形 设计总结
7.1 小结
FPGA是当前数字系统设计领域比较火热的一种工具,它可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。使用VHDL语言描述硬件系统使得FPGA技术有了更广阔的应用领域。本设计使用了基于Altera公司的FPGA系列,采用Altera公司提供的系统开发工具Quartus II软件进行了系统的设计和仿真。数字信号发生器在实验室以及工业场所都被大量使用着,本系统即实现了可以输出四种波形的简易多功能波形发生器,仿真结果证明,该设计正确有效,可以作为制作实物的理论依据。但由于设计者能力有限,本系统仍然有着很多可改进的地方,比如可以升级为输出频率、幅值可调的波形,或者输出任意波形以更贴近实际情况。
7.2 心得体会
对FPGA一直都有着浓厚的兴趣,借做课设的机会,认真的研究了一下这门科学。发现FPGA技术比我想象中的要有很大的难度。里面有很多的思想来源于信息电子技术里面的基本知识,包括门电路的概念以及寄存器传送的基本知识。VHDL语言与C语言有很大的不同,但是C语言的编程思想也可以移植到VHDL语言中,尤其是一些逻辑算法的设计,需要有很强的C语言编程功底。学习一门知识要从最基本的体系架构开始,倘若一开始就从
辽东学院EDA教学实习报告
顶层设计入手,就会造成很多基本原理、基本概念上的偏差,甚至会拖延学习设计的时间,事倍功半。虽然课设完成了,但是我意识到,我对FPGA技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。
辽东学院EDA教学实习报告
参考文献
[1] 蒋小燕,俞伟钧.EDA技术及VHDL.南京:东南大学出版社.2008年12月.[2] 李国丽,朱维勇.EDA与数字系统设计.北京:机械工业出版.2005年3月.[3] 江国强.EDA技术与实验.北京:电子工业出版社.2005年1月.[4] 欧伟明.基于MCU、FPGA、RTOS的电子系统设计方法与实例.北京:北京航空航天大学出版社.2007年4月.[5] Charles H.Roth,Jr、Lizy Kurian John著,金明录译.数字系统设计与VHDL.北京:电子工业出版社.2008年8月
辽东学院EDA教学实习报告
附录
附录一:递增锯齿波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;
entity sawtooth_adder is port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end sawtooth_adder;
architecture behav of sawtooth_adder is begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='0'then
tmp:=“00000000”;
elsif rising_edge(clk)then
if tmp=“11111111”then
tmp:=“00000000”;
else
tmp:=tmp+1;
end if;
end if;q<=tmp;
end process;
end behav;
附录二:递减锯齿波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sawtooth_minus is port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end sawtooth_minus;architecture behav of sawtooth_minus is begin process(clk,reset)variable tmp:std_logic_vector(7 downto 0);begin
if reset='0'then
tmp:=“11111111”;
elsif rising_edge(clk)then
--程序包
--定义clk、reset为输入信号--定义q为输出信号--实体
--定义进程
--定义变量,8位
--如果复位信号为0,tmp为0--捕捉时钟上升沿
--如果tmp递增至最大,增归零
--否则,tmp继续递增
--q等于变量tmp--进程结束
--结构体结束
辽东学院EDA教学实习报告
if tmp=“00000000”then
tmp:=“11111111”;
else
tmp:=tmp-1;
end if;
end if;q<=tmp;end process;end behav;附录三:三角波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity triangle is
port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end triangle;architecture behav of triangle is
begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
variable a:std_logic;begin
if reset='0'then
tmp:=“00000000”;
elsif rising_edge(clk)then
if a='0'then
if tmp=“11111110”then
tmp:=“11111111”;
a:='1';
else
tmp:=tmp+1;
end if;
else
if tmp=“00000001”then
tmp:=“00000000”;
a:='0';
else
tmp:=tmp-1;
end if;
end if;
end if;q<=tmp;
end process;end behav;
--程序包
--定义三角波实体
--定义三角波结构体--进程开始
--定义中间变量tmp、a
--复位信号设置
--捕捉时钟信号上升沿
--a=0时依次输出三角波上升沿--a=1时依次输出三角波下降沿--输出信号q=tmp--结构体结束
辽东学院EDA教学实习报告
附录四:方波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square is port(clk,reset: in std_logic;
q:out std_logic_vector(7 downto 0));end square;architecture behav of square is signal a:std_logic;begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='0'then
a<='0';
elsif rising_edge(clk)then
if tmp=“11111111”then
tmp:=“00000000”;
else tmp:=tmp+1;
end if;
if tmp<=“10000000”then
a<='1';
else
a<='0';
end if;
end if;end process;process(clk,a)
begin
if rising_edge(clk)then
if a='1' then
q<=“11111111”;
else
q<=“00000000”;
end if;
end if;end process;end behav;附录五:四选一数据选择器程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity mux41 is
port(sel:in std_logic_vector(2 downto 0);
--程序包
--定义实体
--信号选择端口sel
辽东学院EDA教学实习报告
d1,d2,d3,d4: in std_logic_vector(7 downto 0);
--d1d2d3d4分别连接四个波形发生模块
q: out std_logic_vector(7 downto 0));end mux41;architecture behav of mux41 is
begin
process(sel)
begin
case sel is
when “001”=>q<=d1;
when “010”=>q<=d2;
when “011”=>q<=d3;
when “100”=>q<=d4;
when others=>null;
end case;end process;
end behav;
--定义输出信号端口
--结构体
--case when语句进行信号位的选择
--进程结束
--结构体结束
第二篇:简易信号发生器设计
《单片机原理及应用》课程设计任务书 课程设计题目:简易信号发生器设计
一、设计目的和要求
(一)、设计目的通过设计简易信号发生器,完成系统设计、编码、调试及维护工作的实践,了解单片机应用系统的一般设计思路,熟悉和掌握硬件系统和软件设计的一般方法。
(二)、设计要求
1.设定功能:能通过按键设定信号类型、频率
2.显示功能:通过数码管或液晶显示当前波形类型和频率。
3.计数功能:能设定自动输出多少个周期该波形后停止输出,直到再次按下触发按钮
二、设计内容及步骤
1.系统分析,完成系统分析报告
2.根据的系统结构图、课程实验,查阅资料,确定系统各个模块的译码电路和地址范围以及其它硬件型号,详细画出系统硬件原理图。
3.程序流程图,编制程序。
4.调试修改显示子模块、键盘扫描子模块、定时器中断子模块和主程序
5.编写课程设计报告
内容包括:题目、摘要、目录、正文、结论、致谢、参考文献等。学生在完成上述全部工作之后,应将全部内容以先后顺序写成设计报告一份,阐述整个设计内容,要求重点突出、特色鲜明、语言简练、文字通畅,字迹工整。报告要求在专用报告书上书写。
6.完成课程设计报告,设计报告字数不得少于3000 字撰写要求如下: ·设计任务
·问题定义、理论分析
·理论设计(程序功能结构、算法说明和程序框图)
·上机调试(实验环境、实验说明和程序清单)
·结果分析
·心得体会
三、进度安排
按教学计划规定,单片机原理及应用课程设计总学时为一周,其进度及时间大致分配如下:
序号 设计内容天数(约占比例)查阅资料(约占8%)确定设计思路(约占15%)画出硬件图、确定各个模块的电路实现方法(约占27%)编写程序(约占25%)调试修改各子模块和主程序(约占15%)总结设计过程,编写课程设计报告1(约占10%)
第三篇:简易正弦信号发生器的设计
实验六 简易正弦信号发生器的设计
一、实验目的1.进一步熟悉Quatus软件的使用方法;
2.掌握逻辑分析仪的使用方法;
3.掌握LPM-ROM的使用方法;
二、实验内容
定制LPM-ROM模块,并利用其设计一个简易的正弦信号发生器,该信号发生器由以下三部分组成:
(1)计数器或地址信号发生器;
(2)正弦信号数据存储器ROM(6位地址线,8位数据线),含有128个8位波形数据(一个正弦波形周期)。
(3)VHDL顶层程序设计
注意:本实验中未给正弦信号波形接D/A转换器,因而采用逻辑分析仪进行观察,具体观察方法见教材208页。
本实验中待测信号为ar和q。时钟选择clk;时能信号为en,高电平触发。
三、实验记录
1.VHDL语言程序
2.仿真波形
3.逻辑分析仪观察结果。
四、问题讨论
1.总结宏功能模块的应用环境,可实现哪些设计?
2.设计一个方波生成器。
第四篇:基于51单片机函数信号发生器设计.
摘 要: 本系统利用单片机AT89S52采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz—3kHz的波形。通过键盘来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机AT89S52、DAC0832、液晶1602 Abstract: this system capitalize on AT89s52,it makes use of central processor to generate three kinds of waves, they are triangle wave, and use D/A conversion module, wave generate module and liquid crystal display of 1602, it can have the 1Hz-3KHz profile.In this system it can control wave form choosing, frequency, range,can have the sine wave, the square-wave, the triangular wave.Simultaneously may also take the frequency measurement frequency,and displays them through liquid crystal display of 1602.this design includes three modules.They are D/A conversion module, wave generate module and liquid crystal display of LED module.In this design, the wave generator into wave form module and D/A conversion module are discussed in detail.key word: AT89S52, DAC0832, liquid crystal 1602.目录
1.系统设计
1.1 设计要求
1.2方案设计与论证
1.2.1 信号发生电路方案论证 1.2.2 单片机的选择论证 1.2.3 显示方案论证 1.2.4 键盘方案论证 1.3 总体系统设计 1.4 硬件实现及单元电路设计 1.4.1 单片机最小系统的设计
1.4.2 波形产生模块设计 1.4.3 显示模块的设计 1.4.4 键盘模块的设计
1.5 软件设计流程 1.6 源程序
2.输出波形的种类与频率的测试
2.1 测试仪器及测试说明
2.2 测试结果 3.设计心的及体会 4.附录 4.1 参考文献 4.2 附图
1、系统设计
经过考虑,我们确定方案如下:利用AT89S52单片机采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
1.1、设计要求
1、利用单片机采用软件设计方法产生三种波形 2)、三种波形可通过键盘选择 3)、波形频率可调
4)、需显示波形的种类及其平率
1.2方案设计与论证
1.2.1 信号发生电路方案论证
方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。
以上三种方案综合考虑,选择方案一。
1.2.2 单片机的选择论证
方案一:AT89S52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。
方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,而且执行速度快。但其价格较贵
以上两种方案综合考虑,选择方案一
1.2.3 显示方案论证
方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。
方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母。
以上两种方案综合考虑,选择方案二。
1.2.4 键盘方案论证
方案一:矩阵式键盘。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处。当键盘上没有键闭合时,所有的行和列线都断开,行线都呈高电平。当某一个键闭合时,该键所对应的行线和列线被短路。
方案二:编码式键盘。编码式键盘的按键触点接于74LS148芯片。当键盘上没有闭合时,所有键都断开,当某一键闭合时,该键对应的编码由74LS148输出。
以上两种方案综合考虑,选择方案一。
1.3总体系统设计
该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。图(1)为系统的总体框图
图(1)总体方框图
1.4硬件实现及单元电路设计
1.4.1单片机最小系统的设计
89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用80C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图(2)89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:
(1 有可供用户使用的大量I/O口线。(2 内部存储器容量有限。(3 应用系统开发具有特殊性。
图(2)89C51单片机最小系统
1.4.2 波形产生模块设计
由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。其电路图如下:
图(3)波形产生电路
如上图所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。DAC0832的为八位数据并行输入的,其结构图如下:
图(4)DAC0832的内部结构
1.4.3 显示模块的设计
通过液晶1602显示输出的波形、频率,其电路图如下:
图(5)液晶显示
如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P3.2—P3.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。
1.4.4 键盘显示模块的设计
本系统采用独立键盘,其连接电路图如下:
图(6)键盘
图中键盘独立键盘引出的八跟线分别接单片机的P2口,只用其第四列,因此在程序初始化时P2.7脚给低电平。如图开关3用来切换输出波形、开关7和8用
来调节频率的加减。当按开关7时输出波形的频率增加,按开关8时输出波形的频率减小。
1.5 软件设计流程
本系统采用AT89S52单片机,用编程的方法来产生三种波形,并通过编程 来切换三种波形以及波形频率的改变。
具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。
软件调通后,通过编程器下载到AT89S52芯片中,然后插到系统中即可独立完成所有的控制。
软件的流程图如下:
图(7)程序流程图
1.6源程序
#include #define uchar unsigned char #define uint unsigned int
sbit lcdrw=P3^3;sbit lcdrs=P3^2;sbit lcde=P3^4;sbit d=P2^7;sbit s1=P2^0;sbit s2=P2^1;sbit s3=P2^2;sbit cs=P3^5;sbit wr=P3^6;uchar s1num,a,ys,j;uint fre;uchar code tosin[256]={ 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2, 0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5, 0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1, 0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5, 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd, 0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1, 0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda, 0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc, 0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99, 0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51, 0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16, 0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06, 0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05, 0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15, 0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e, 0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e, 0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72, 0x76,0x79,0x7c,0x80 };/*正弦波码 */ void delay(uint z //延时子程序 { uchar i,j;for(i=z;i>0;i--for(j=110;j>0;j--;} void delay1(uint y { uint i;for(i=y;i>0;i--;} void write_com(uchar com //1602写指令
{ lcdrs=0;P1=com;delay(5;lcde=1;delay(5;lcde=0;} void write_data(uchar date //1602数据 { lcdrs=1;P1=date;delay(5;lcde=1;delay(5;lcde=0;} void init(//初始化 { lcdrw=0;lcde=0;wr=0;cs=0;
write_com(0x38;write_com(0x0c;write_com(0x06;write_com(0x01;write_com(0x80+0x00;write_data(0x77;//写wave: write_data(0x61;write_data(0x76;write_data(0x65;write_data(0x3a;write_com(0x80+0x40;//写 f: write_data(0x66;write_data(0x3a;} void write_f(uint date //写频率 { uchar qian,bai,shi,ge;qian=date/1000;bai=date/100%10;shi=date/10%10;ge=date%10;write_com(0x80+0x42;write_data(0x30+qian;
write_data(0x30+bai;write_data(0x30+shi;write_data(0x30+ge;write_data(0x48;write_data(0x5a;} void xsf(//显示频率 { if(s1num==1 { fre=(1000/(9+3*ys;write_f(fre;} if(s1num==2 { fre=(100000/(3*ys;write_f(fre;} if(s1num==3 { fre=(1000/(15+3*ys;write_f(fre;}
} void keyscanf({ d=0;if(s1==0 { delay(5;if(s1==0 { while(!s1;s1num++;if(s1num==1 { ys=0;write_com(0x80+0x05;write_data(0x73;//写sine: write_data(0x69;write_data(0x6e;write_data(0x65;write_data(0x20;write_data(0x20;} if(s1num==2
{ ys=10;write_com(0x80+0x05;write_data(0x73;//写squrae write_data(0x71;write_data(0x75;write_data(0x61;write_data(0x72;write_data(0x65;} if(s1num==3 { ys=0;write_com(0x80+0x05;//train write_data(0x74;write_data(0x72;write_data(0x61;write_data(0x69;write_data(0x6e;write_data(0x20;} if(s1num==4 {
s1num=0;P1=0;write_com(0x80+0x05;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_com(0x80+0x42;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;write_data(0x20;} } } if(s2==0 { delay(5;if(s2==0
{ while(!s2;ys++;} } if(s3==0 { delay(5;if(s3==0 { while(!s3;ys--;} } } void main({ init(;while(1 { keyscanf(;if(s1num==1 //正弦波// {
for(j=0;j<255;j++ { P0=tosin[j];delay1(ys;} } if(s1num==2 //方波// { P0=0xff;delay1(ys;P0=0;delay1(ys;} if(s1num==3 //三角波// { if(a<128 { P0=a;delay1(ys;} else { P0=255-a;
delay1(ys;} a++;}
if(!(s1&s2&s3 { xsf(;} } }
2、输出波形的种类与频率的测试
2.1、测量仪器及测试说明
测量仪器:稳压电源、示波器、数字万用表。
测量说明:正弦波、矩形波、三角波信号的输出,通过对独立键盘来实现其的不同波形的输出以及其频率的改变。
2.2测试过程
当程序下进去时经过初始化,液晶屏的上只显示“wave:”和“f:“,当开关三按一下是此时输出波形为正弦波,按两下时输出为方波,按三下时输出为三角波。另外两个开关可以调节频率,三种波形的频率可调范围不同,分别如下: 正弦波:1—180HZ 方 波:1——3.3KHZ 三角波:1——180HZ
根据示波器的波形频率的显示计算出三种波形的频率计算公式如下: 正弦波:f=(1000/(9+3*ys 方 波:f=(100000/(3*ys 三角波:f=(1000/(15+3*ys 其中ys为延时的变量。三种波形的仿真波形图如下:
图(8)正弦波图形
图(9)方波图形
图(10)三角波图行
2.3、测试结果
各项指标均达到要求。
测试数据如下:
1)、产生正弦波、方波、三角波基本实现
2)、三种波形的频率都可调,但不能步进的调节,其中方波的可调范围最广为1—3.3KHZ,其他两种波形的频率范围不大1—180HZ 3)、显示部分基本实现 4)、键盘功能实现
3、设计心的及体会
通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果,进一步加深了我对专业知识的了解和认识以及动手的能力。虽然在这次设计中对于所学知识的运用和衔接还不够熟练,作品完成的还不是很出色。但是我将在以后的工作和学习中继续努力、不断完善。这个设计是对我们过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。
4、附录
4.1 参考文献
[1] 戴仙金主编 51单片机及其C语言汇编程序开发实例 清华大学出版社,2008 [2] 高吉祥主编 全国大学生电子设计竞赛培训系列教程 电子工业出版社,2007 [3] 杨素行主编 模拟电子技术基础简明教程 高等教育出版社,2007 [4] 蒋辉平主编 单片机原理与应用设计 北京航空航天大学出版社 2007 4.2 附图
图(11)总体原理设计图
第五篇:基于51单片机函数信号发生器设计
湘南学院
电子工程设计
题 目: 基于51单片机的函数信号发生器设计
学院(系): 电子信息与电气工程学院 年级专业: 2013级电子信息科学与技术 学 号: 201314110144,201314110106 学生姓名: 周 慧 程迅 指导教师: 王 龙
2016年 4 月 1 日
课程设计任务书
学生姓名:程迅 周慧
专业班级:电子信息科学与技术
(一)班 指导教师:王 龙 工作单位:电子信息与电气工程学院
题 目:
基于51单片机的函数信号发生器的设计 初始条件:
1.运用所学的单片机原理与接口技术知识和数字电路知识; 2.51单片机最小系统; 3.PC机及相关应用软件。
要求完成的主要任务: 系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,通过程序设计方法产生锯齿波、正弦波、三角波、矩形波四种波形,通过按键来控制四种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及频率值。
1.完成函数信号发生器的设计和调试。
2.撰写课程设计说明书,说明书使用A4打印纸计算机打印,用proteus等仿真软件绘制电子线路图纸。
基于51单片机的函数信号发生器的设计
摘 要
本系统利用单片机STC89C52采用程序设计方法产生锯齿波、正弦波、三角波、矩形波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产0Hz—535Hz的波形。通过按键来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机STC89C52、DAC0832、液晶1602
目录
前言..........................................................................1 第一章 系统设计要求及设计方案..................................................2
1.1 设计要求.................................................................2 1.2 方案设计与论证...........................................................2 1.2.1 信号发生电路方案论证...............................................2 1.2.2 单片机的选择论证..................................................2 1.2.3 显示方案论证.....................................................3 1.2.4 键盘方案论证......................................................3 1.3 系统主要功能.............................................................3 第二章 系统的硬件设计..........................................................4 2.1 总体系统设计.............................................................4 2.2 硬件实现及单元电路设计...................................................4 2.2.1 振荡电路..........................................................4 2.2.2 复位电路设计.....................................................5 2.2.3 波形产生模块设计..................................................6 2.2.4显示模块的设计.....................................................7 2.2.5 键盘显示模块的设计.................................................7 2.3 软件设计流程.............................................................8 第三章 proteus的简介..........................................................9 3.1 proteus介绍.............................................................9 3.1.1 keil调试.........................................................10 3.1.2 proteus仿真调试..................................................10 3.2 测试过程................................................................11 附录一:总电路图..............................................................12 附录二:部分程序..............................................................12
前言
信号发生器是一种常用的信号源,广泛应用于电子电路、自动控制系统和教学实验等领域。信号的产生有模拟电路、专用硬件和软件产生等方法。采用模拟电路搭建函数信号发生器,可产生方波、三角波、正弦波、锯齿波,但不能产生任意波形,存在波形质量差、控制难、可调范围小,电路复杂和体积大等缺点,且频率调节不方便。专用硬件方法产生的信号频率分辨率高、稳定性好、在线调整方便,如目前在通讯系统中应 用广泛的直接数字频率合成(DDS)技术,例如 AD9854是一种典型的信号产生方法,但是价格昂贵。
利用单片机通过程序设计方法产生低频信号,其频率底线较低,具有线路简单、结构紧凑、体积小、价格低廉、频率稳定度高、抗干扰能力强、用途广泛等优点,且如需要产生新的波形时,只需对程序进行修改即可。该系统利用单片机STC89C52和D /A 转换器DAC0832 转换数字信号为 0 ~ 5 V 模拟电压信号,并在 LCD1602 显示,通过示波器就能得知产生的信号波形。
第一章 系统设计要求及设计方案
1.1 设计要求
1)、利用单片机采用软件设计方法产生四种波形 2)、四种波形可通过按键选择输出 3)、波形频率可调 4)、需显示波形的频率
1.2 方案设计与论证 1.2.1 信号发生电路方案论证
方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。
以上三种方案综合考虑,选择方案一。
1.2.2 单片机的选择论证
方案一:STC89C52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。
方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,而且执行速度快。但其价格较贵。
以上两种方案综合考虑,选择方案一
1.2.3 显示方案论证
方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。
方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母。
以上两种方案综合考虑,选择方案二。
1.2.4 键盘方案论证
方案一:矩阵式键盘。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处。当键盘上没有键闭合时,所有的行和列线都断开,行线都呈高电平。当某一个键闭合时,该键所对应的行线和列线被短路。
方案二:独立点触按键。点触按键体积小,安装方便,成本低。以上两种方案综合考虑,选择方案二。
1.3 系统主要功能
经过考虑,我们确定方案如下:利用STC89C52单片机采用程序设计方法产生锯齿波、正弦波、矩形波锯齿波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过按键来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
第二章 系统的硬件设计
2.1 总体系统设计
该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。下
图2.1为系统的总体框图
图2.1 总体方框图
2.2 硬件实现及单元电路设计
2.2.1 振荡电路
单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产
4(电容和一般取30pF)。这样就构成一个稳定的自激振荡器。
生ALE信号,此时得到的信号时机器周期信号。
振荡电路如图2.2.1所示:
图2.2.1 振荡电路
2.2.2 复位电路设计
复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2.2.2所示。
图2.2.2 复位电路
2.2.3 波形产生模块设计
由单片机采用编程方法产生四种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。
其电路图如下图2.2.3(1):
图2.2.3(1)波形产生电路
如上图2.2.3(1)所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。DAC0832的为八位数据并行输入的,其结构图如下图2.2.3(2):
图2.2.3(2)DAC0832的内部结构
2.2.4显示模块的设计
通过液晶1602显示输出的波形、频率。1602的八位数据端接单片机的P0口,其使能端RS、E分别接单片机的P3.5、P3.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。
其电路图如下图2.2.4:
图2.2.4 液晶显示
2.2.5 键盘显示模块的设计
其连接电路图如下图2.2.5:
图2.2.5 键盘
图中键盘引出的5跟线分别接单片机的P1口,其中P1.0连接按键1用于切换波形,P1.1、P1.2连接按键2、3用于调节波形的频率的增减,P1.3连接的按键用于占空比的升高。
2.3 软件设计流程
本系统采用STC89C52单片机,用编程的方法来产生四种波形,并通过编程 来切换四种波形以及波形频率的改变。
具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。
软件调通后,通过编程器下载到STC89C52芯片中,然后插到系统中即可独立完成所有的控制。
软件的流程图如下图2.3:
图2.3 程序流程图
第三章 proteus的简介
3.1 proteus介绍
Proteus软件是来自英国Labcenter electronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARES PCB设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。支持许多通用的微控制器,如PIC,AVR,HC11以及8051。最新支持ARM。交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。强大的调试工具,包括寄存器和存储器,断点和单步模式。IAR C-SPY 和Keil uVision2等开发工具的源层调试。应用特殊模型的DLL界面-提供有关元件库的全部文件。
在完成了函数信号发生器的硬件设计和软件设计以后,便进入系统的调试阶段。系统的调试步骤和方法基本上是相同的,但具体细节和所采用的开发系统以及用户系统选用的单片机型号有关,我们选用的是Keil软件进行软件调试,用Proteus软件完成硬件调试。
3.1.1 keil调试
3.1.2 proteus仿真调试
3.2 测试过程
1)、当程序下进去时经过初始化,液晶屏的上只显示“Frequency:”和“0050Hz”,默认状态输出波形为正弦波,按一下按键1时输出为方波,按按键1两下时输出为锯齿波,按按键1三下时输出三角波。按键2、3可以调节频率,三种波形的频率可调范围,分别如下: 正弦波:0—535Hz 方 波:0——535Hz 三角波:0——535Hz 锯齿波:0——535Hz 根据示波器的波形频率的显示计算出三种波形的频率计算公式如下:
正弦波:f= 65536-10^6//(512*FREQ)方 波:f= 65336-10^6/(256*FREQ)三角波:f= 65336-10^6/(256*FREQ)锯齿波:f= 100(+-)n*2Hz.2)、四种种波形的仿真波形图如下:
图3.2(1)方波图形
图3.2(2)正弦波图形
图3.2(3)三角波图形 图3.2(4)锯齿波图形
附录一:总电路图
附录二:部分程序
//调节部分——频率 void freq_ud(void){ unsigned int temp;if(freq_d==0){ FREQ--;
} else if(freq_u==0){ FREQ++;} if(cho==1|cho==3)//锯齿波256次中断一周期,否则他的频率是100(+-)n*2Hz.{temp=0xffff-3906/FREQ;//默认为100hz,切换后频率为50HZ65336-10^6/(256*FREQ)TIME0_H=temp/256;TIME0_L=temp%256;} else if(cho==0|cho==3)//正弦波 三角波默认周期50hz 65536-10^6//(512*FREQ){temp=0xffff-1953/FREQ;TIME0_H=temp/256;TIME0_L=temp%256;}}
//调节部分——方波的占空比
void duty_ud(void)//方波也采用512次中断构成一个周期。{ if(duty_d==0&sqar_num>0)sqar_num--;else if(duty_u==0&sqar_num<255)} //波形发生函数 void sint(void){ if(!flag){ cs=0;P2=sin_num[num++];cs=1;if(num==0){num=255;flag=1;} sqar_num++;} else if(flag){
} void square(void){ if(i++ cs=0;P2=num++;cs=1;} void stw(void){ if(~flag){ cs=0;P2=num++;cs=1;if(num==0){num=255;flag=1;} } else if(flag){ } void main(){ TMOD=0X01;TH0=0xff;TL0=0xd9;IT0=1;//设置中断触发方式,下降沿 EA=1;EX0=1;ET0=1;IP=0X01;//键盘中断级别高 init_1602();//初始化lcd write_command(0x80);//液晶显示位置 delay(5); for(i=0;i { } write_data(value1[i]);delay(5);TR0=1;while(1){ show_frequency();} } //按键中断处理程序。void it0()interrupt 0 { if(chg==0){FREQ=50;if(++cho==4){cho=0;num=0;}}//num=0;所有数据从新开始,保证波形的完整性 else if(freq_u==0|freq_d==0){freq_ud();} else if(cho==1&(duty_d==0|duty_u==0)){duty_ud();} else;}