单片机课程设计(论文)基于单片机的信号发生器设计.doc
1基于单片机的信号发生器设计摘 要在介绍MAX038 芯片特性的基础上,论述了采用MAX038 芯片设计数字函数信号发生器的原理以及整机的结构设计。对其振荡频率控制、信号输出幅度控制以及频率和幅度数显的实现作了较详细的论述。该函数信号发生器可输出三角波,方波和正弦波。本文重点论述了整机通过D/A转换电路控制MAX038的实现过程,D/A转换电路采用了8位4通道的MAX505来实现。在幅度的控制上采用数字电位器AD5171,该芯片是I²C总线方式控制,文中给出了I²C总线的读写控制程序。系统支持按键操作和上位机操作两种模式。关键词:函数信号;D/A ;单片机控制目 录绪论1第一章系统概述和设计方案21.1论文的内容和组织21.2方案选择21.3信号发生芯片选择214方案框图设计及基本控制原理31.5.1 频段控制调整参数计算41.5.2频率控制细调参数计算51.5.3占空比的数字控制参数计算61.5.4幅度的数控参数实现6第二章 系统硬件设计82.1 系统总体设计82.2单片机介绍及外围电路82.3 D/A转换电路(频率,占空比控制电路)102.3.1MAX505的引脚描述102.3.2MAX505的内部结构及原理112.3.3 D/A转换电路的电路说明132.4频段选择电路142.5 幅度控制电路152.6 键盘电路172.7电源电路18第三章 系统软件流程图设计203.1 主程序流程图203.2频段处理子程序213.3频率处理子程序213.4幅度处理子程序22系统分析与总结23参考文献24附录25绪 论基于单片机的信号发生器设计,该课题的设计目的是充分运用大学期间所学的专业知识,考察现在正在使用的信号发生器的基本功能,完成一个基本的实际系统的设计全过程。关键是这个实际系统设计的过程,在整个过程中我可以充分发挥自动化的专业知识。特别是这个信号发生器的设计中涉及到一个典型的控制过程。通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的幅度和频率可调的波形。这样一个信号发生装置在控制领域有相当广泛的应用范围。在现代社会中,自动化技术已经渗透到社会生活的各个领域中。在超声波测量技术中,超声换能器(发射换能器和接收换能器) 是超声波检测技术的核心部件。高精度、宽频率范围、高稳定性的激励源对于发射换能器及超声检测系统性能的改善和提高起着至关重要的作用。传统的波形发生器通常由晶体管、运放IC 等分离元件制成。与此相比,基于集成芯片的波形发生器具有高频信号输出、波形稳定、控制简便等特点。其中,信号发生器是自动化领域中的一个典型应用。因为现代的自动化控制中基本都会利用信号来控制设备的工作。利用信号的产生进行仪器的控制已经是自动控制中的一个重要的手段,那么一个幅度、频率、占空比以及波形可调的信号发生器的设计和完成更具有使用价值。只要将这个信号发生器设计的基本思路掌握,不但可以融会贯通所学的专业知识还可以在以后工作中利用到,作为用来控制其他设备或设计的一个参考。信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。本文介绍一种由集成电路MAX038设计的简易信号发生器,该仪器结构简单,虽然功能及性能指标赶不上标准信号发生器,但满足一般的实验要求。其成本低、体积小、便于携带等特点,亦可作为电子产品维修人员的重要随身设备之一。本文主要分五大部分:绪论、系统概述和设计方案、硬件部分、软件部分,总结。绪论,首先对课题研究背景和所涉及的相关技术领域进行了介绍;第一章对系统所要完成的功能和可扩展的功能进行描述,确定系统的设计方案主要参数计算,第二章对系统的硬件结构和各部分组成作了简要的介绍和讲解;第三章是软件部分,这部分重点介绍了主程序的流程框图及各个子程序的流程框图以及I²C的驱动程序。最后对整篇文章进行了总结。第一章 系统概述和设计方案1.1 论文的内容和组织本文提出并设计了一种基于AT89S51微处理器控制的MAX038信号发生芯片的信号发生器设计。文中详细介绍了该系统的原理、构成及其设计方法,着重分析了以美国MAXIM公司生产的高频信号发生芯片MAX038为核心的精密多波形高频函数信号发生系统的软硬件原理,并开发了基于AT89S51微处理器的软件程序。本次设计的基于单片机的信号发生器设计就是设计一个单片机控制系统,对信号发生芯片进行的控制。通过这个单片机对信号发生芯片进行精密控制,实现对波形的选择,频率、占空比以及波形幅度的控制。这些控制可以通过键盘设定。这就要求对选择的信号发生芯片,选用的单片机有初步的了解,并且对整个系统的结构有个合理地分配。1.2方案选择方案一:直接利用单片机编程产生三角波,方波,锯齿波。优点:简化了用于产生波形的硬件和软件,特别适用于交流感应电动机和无刷直流电机的速度控制以及变频电源的SPWM 控制。缺点:编程复杂,波形失真较大,并且不能达到要求输出的高频率信号。方案二:利用单片机控制波形信号产生芯片,通过单片机,键盘,LCD显示实现波形的数字控制。优点:控制简单,波形效果好,频率带宽。缺点:硬件电路复杂。为了满足设计要求,取得较好的效果。显然方案二较为理想。1.3信号发生芯片选择目前,集成化的函数波形发生器大多采用ILC8038 或5G8038,但它们只能产生300kHz 以下的中、低频的正弦波、矩形波(含方波)和三角波(含锯齿波),而且频率与占空比不能单独调节,两者互相影响,这就给实际应用带来了许多不便。此外,这些芯片的扩展功能较少,调节方式也不够灵活,且无法满足高频精密信号源的要求。美国MAXIM(马克希姆)公司应市场的需求而研制的MAX038 型单片集成高频精密函数发生器具有较高的频率特性、频率范围很宽、功能较全、单片集成化、外围电路简单、使用方便灵活等特点。14方案框图设计及基本控制原理如图1.1所示,利用单片机AT89C51对主信号发生芯片进行数字控制。因为MAX038原是模拟量控制型芯片,所以中间要通过数模转换电路,对MAX038产生的波形信号进行频率,占空比,幅度的在控制,以及产生波形的选择控制。图1.1 方案框图MAX038 的输出频率主要受振荡电容CF , IIN 端电流和FADJ 端电压的控制,其中前二者与输出频率的关系如图1.2 所示。选择一个CF 值,对应IIN 端电流的变化,将产生一定范围的输出频率。另外,改变FADJ 端的电压,可以在IIN 控制的基础上,对输出频率实现微调控制。为实现输出频率的数控调整,在IIN 端和FADJ 端分别连接一个电压输出的DAC 。首先,通过DACB 产生0V(00H)到2.5V(0FFH)的输出电压,经电压/ 电流转换网络,产生0A到748A的电流,叠加上网络本身产生的2A电流,最终对IIN 端形成2A到750A 的工作电流,使之产生相应的输出频率范围。DACB将此工作电流范围分为256级步进间隔,输出频率范围也被分为256级步进间隔。所以,IIN端的电流对输出频率实现粗调。第二步,通过DACA 在FADJ端产生一个从- 2.3V(00H)到+ 2.3V(0FFH)的电压范围,该范围同样包含256级步进间隔,IIN 端的步进间隔再次细分为256级步进间隔,从而在粗调的基础上实现微调。1.5.1 频段控制调整参数计算MAX038 的输出频率和CF电容与IIN 端的电流间的关系如表1.1 所示。固定一个CF值,当IIN 端的电流从到的变化时,对应产生一个频段的频率范围。经实验调整,我们选择了一系列的CF 如表1.1 所示,并确定了各CF 所对应的频段和频率范围。由于系统通过DAC 控制IIN 端电流和FADJ 端电压,将各频段的频率范围划分为65536 级间隔,因此各频段的输出误差为图1.2输出频率与IIN 电流及振荡电容CF 的关系另外,由于相邻频段之间存在着频率重叠现象。且考虑到各频段对应的误差大小不同,因此设定各频段的实际起止频率围:f3 ,f4 ,以期获得最小的误差。表1.1 输出波形频率范围与CF的关系表频段号CFf1(2µA)f2(750µA)ff3f4110pF200kHz65MHz1kHz600kHz10MHz21nF2kHz650kHz10Hz6kHz600kHz3100nF20Hz6.5kHz0.1Hz60Hz6kHz410µF0.2Hz65Hz0.001Hz0.2Hz60Hz在5脚COCS和6脚GND接上电容以后,10脚IIN是频率控制的电流输入端,利用恒定电流向电容充电和放电,便可形成振荡。是受8脚FADJ和7脚DADJ端电压的控制,振荡频率由下式确定。 (1.1)因为我们要求的频率范围在0.2Hz10MHz,分四个频段来满足要求,在每个频段上连续可调,由芯片内部参数可知道,当时,的容量范围可以在时,芯片有较好的性能。因此,有(1.1)式可知 (1.2)当时,;当时,,为了使数字控制能够使实现,我们在D/A转换模块使用图5所示的电阻连接方法。当数字量为00H时,输出为。MAX038的10脚IIN有的电流输入。当数字量为FFH时,输出为基准电压。MAX038的10脚IIN有的电流输入。用公式(1.1)(1.2)可以检验,确定表1.1所列的电容值可满足后面频率产生要求。1.5.2频率控制细调参数计算电阻、电容值选择和基频值由表3所列。其中的频率细分是指当基频确定后由MAX505输出的电压的细分值。MAX505 接2.5V 的基准电源,其双极性输出接到MAX038 的FADJ 调整端,通过内部的锁相环,作为精细的频率控制。这个电压从-2.5V变到+2.5V,引起基频(FADJ 是0V 时的输出频率值)的变化从1.70.3 倍(即)。当MAX505的接收数据为FFH 时,其频率输出值为基频的30%,当数据为0 时,频率输出值为基频的170%。当数据加(减)1 时其输出频率相应地加(减)一个细分量。FADJ 上的所需的电压引起输出偏离 为(以%表示),则, 以百分比(%)线性相关地偏离, 向0 的某一方变化时相应地向加或减的方向偏离。FADJ 上的电压所对应的频率由下式给出: (1.3)相应MAX505 的输入数据为 (1.4) 式中:为要求输出的频率; 为当 为0 时的基频。同样,我们可以知道当数据D在00H和FFH之间变化的时候,可以调节频率在当前频带内细调。1.5.3占空比的数字控制参数计算MAX038的占空比的调整有两种方式,一种时利用内部基准电压源调整,另一种是利用外加电源调整,为使电路简单,采用第一种调整方式。在MAX038 的DADJ端应用一个- 2.3V + 2.3V 的电压控制信号, MAX038 的DADJ引脚上的电压可控制波形的占空比(定义为输出波形为正时所占时间的百分数),并且能够改善正弦波的波形,可进行脉冲宽度调制和产生锯齿波。当接地(即)时,其占空比为50%,占空比的调整可采用MAX505的一片DAC,输出±2.3V 范围内的电压,占空比可在10%90%范围内改变,约每伏改变15%,当电压超过±2.3V 将使频率偏移或引起不稳定。为产生一定占空比而加在DADJ上的电压为: (1.5)对双极性输出的D/A 转换器,基准电源为2.3V时,MAX505接受数据与占空比的关系式为: (1.6)其中:为DADJ 引脚上的电压,为占空比。这样可完成激励信号的占空比设置。调整 的充放电时间,在10 %90 %的范围内调整振荡器输出的三角波,最终产生失真的正弦波,锯齿波和脉冲波。这三种波形同时送入混合器,由A0 ,A1 选择输出。微处理机通过,经比较器3 产生- 2. 3V + 2. 3V 的调节电压,对占空比实现数字控制。 的每一级步进对应着 (1.7) 和若设定占空比为 ,则对应的编码为: 1.5.4幅度的数控参数实现MAX038 的输出幅度为2Vp - p 。在输出端口OUT(19) 连接一个放大器,放大输出信号至5Vp - p ,再送入数字电位器AD5171中,将输入信号分解成64个等级。微处理机通过控制数字电位器AD5171,进而控制输出的衰减量,得输出幅度的步进量幅度= 5Vp - p / 64。图1.3 MAX038与D/A模块的连接第二章 系统硬件设计依据MAX038 输出频率的数控调节原理,配合单片机控制,我们可以实现数控的函数信号发生器。2.1 系统总体设计整机由图2.1所示的七大模块组成,分别是电源产生电路,频段选择电路,按键电路,单片机外围控制电路,D/A转换电路(包括信号的占空比,频率,幅度控制电路)。图2.1 总设计原理布局图 基于MAX038 的单片机多波调频信号产生器主要由单片机AT89C51、MAX038 和8位D/A芯片MAX505 构成,如图2.1 所示。由AT89C51 的P2.0 和P2.1 控制选定波形,MAX505 相应地接到MAX038 的FADJ 端和DADJ 端,AT89C51 通过D/A 转换器的数据产生控制电压并以近似线性的规律来调制频率和占空比。除此之外,D/A 转换的数字信号还要控制MAX038的IIN 引脚的电流输入用来控制频率的精密调节。从单片机的P0口出来的数据除了提供给D/A 外还与LCD的数据口共用。2.2单片机介绍及外围电路AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元。AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶休或陶瓷谐振器一起构成自激振荡器,振荡电路参见图2.2。 外接石英晶体(或陶瓷诺振器)及电容C1, C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1, C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,这里选择使用石英晶休,我们的电容使用30pF。如使用陶瓷谐振器的话,应选择40pF士10pF的容值的电容。 也可以采用外部时钟。采用外部时钟的电路的情况时,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。图2.2 单片机外围电路如图中所示,在单片机的I/O口分配上利用率比较高,应为I/O资源刚好可以满足控制设计的需要,所以不需要另外扩充I/O资源。根据P0口,P1口,P2口及P3口各自的特点,我们选用P0口作为数据口,通过分时复用的方法分别送数据给MAX505的A,B,C通道控制频率和占空比;送数据给LCD1602传送信息显示数据。选用P1口的P1.0P1.5做按键输入口。P1.6与P1.7做幅度控制的I²C数据输出口,单片机自身不具备I²C功能,所以要通过软件控制实现。另外,P2口与P3口做MAX505,MAX038,4052(段选芯片),的数据控制口及片选口。还有P3.0(RXD),P3.1(TXD)做上位机通信口分别接MAX232芯片的OUT输出IN与输入引脚。2.3 D/A转换电路(频率,占空比控制电路)MAX505是8位4通道的D/A转换芯片,内部包含逻辑输入双缓冲寄存器,可以允许所有的4路模拟量同时更新,也可以通过控制信号进行异步锁存输出。MAX505还含有四个独立的基准电压输入,允许分别对四路独立的D/A进行全程的独立设置。所有的逻辑输入可以是TTL或择是+5V的COMS。2.3.1MAX505的引脚描述图2.3是MAX505的封装图,MAX505是8位4路D/A转换芯片。24引脚封装,具体引脚功能详见表2.1:MAX505引脚功能表。图2.3 MAX505的封装图表2.1 MAX505引脚功能表引 脚名 称功 能1VOUTBDAC B 电压输出2VOUTADAC A 电压输出3VSS负电压输入4VREFDAC B 基准电压输入5VREFADAC A 基准电压输入6AGND模拟地7DGND数字地8LADC选通DAC(低电平有效) 9D7数据位710D6数据位611D5数据位512D4数据位413D3数据位314D2数据位215D1数据位116D0数据位017WR写输入(低电平有效)18A1DAC 地址选择位(高位)19A0DAC 地址选择位(低位)20VREFDDAC D基准电压输入21VREFCDAC C基准电压输入22VDD电源23VOUTDDAC D 电压输出24VOUTCDAC C 电压输出2.3.2MAX505的内部结构及原理MAX505内含4个独立的D/A转换电路,每一路都有自己独自的基准电压源输入引脚,可以通过功能控制引脚WR,A0,A1,LADC分别对每一路进行单独操作,也可以4路同时更新输出数据。如图2.4所示,MAX505内部每一路D/A都有数字输入的双缓冲寄存器。他主要有8位输入锁存器、8位DAC锁存器、8位D/A转换器和选通控制逻辑四部分组成。选通控制逻辑部分是通过地址线引脚A0,A1控制输入锁存器的选通,单独选择某一路信号输出。图2.4 MAX505 内部结构原理框图8位输入寄存器由8个D锁存器组成,作为输入数据的缓冲器。它的8位输入数据由写控制输入引脚WR控制其输入与锁存。当WR1时输入锁存器的输出随着输入变化,当WR0时输入数据被锁存,通过地址线引脚A0,A1控制输入锁存器的选通,单独选择某一路信号输出。功能控制引脚WR,A0,A1,LADC的具体控制状态见表2.2所列出。表2.2 功能引脚状态表LDACWRA1A0所存状态HH××输入和DAC数据锁存HLLLDAC A 数据锁存LH××4个DAC全部数据锁存LLLLDAC A输入数据寄存器 4个DAC被锁HLLHDAC B 数据锁存HLHLDAC C 数据锁存HLHHDAC D 数据锁存8位DAC锁存器也是由8个D锁存器组成的,它的控制端为LDAC。当LDAC=1时输出数据随输入变化,当LDAC=0时将第一级输出的数据锁存在DAC锁存器中。8位D/A转换器采用T型电阻网络实现D/A转换,输出的是与输入数字成比例的电流,需要外接运算放大器,才能得到模拟电压输出。2.3.3 D/A转换电路的电路说明如图2.5所示,我们用+2.5V做MAX505的基准电源。我们选用了MAX505的3路D/A输出分别控制MAX038的DADJ,FADJ和IIN引脚,在前面我们知道MAX038的DADJ和FADJ引脚要求输入的电压信号时在-2.3V+2.3V之间,IIN的输入要求是0µA750µA的电流。通过一个转换电路将MAX505的输出是02.5V的电压转换为所需要的电压电流。在MAX038 的DADJ端应用一个- 2.3V + 2.3V 的电压控制信号, MAX038 的DADJ引脚上的电压可控制波形的占空比(定义为输出波形为正时所占时间的百分数),并且能够改善正弦波的波形,可进行脉冲宽度调制和产生锯齿波。用DAC A通道做为DADJ的模拟输入。输出02.5V电压当时, (2.1)当时, (2.2)在MAX038 的FADJ端选择DAC B通道,同样的接法可以实现- 2.3V + 2.3V 的电压控制信号。在MAX038 的IIN端选择DAC C通道,需要的模拟控制量是0µA750µA的电流,用DAC C通道做为IIN的模拟输入。输出02.5V电压当时, (2.3)当时, 这样就实现了所需要的模拟量的输入,D/A转换图如图2.5所示。在前面式子中用到的2.74V电压是利用的MAX038的内部2.5V的基准源产生的,示意接线图如图1.3所示,根据结点法原理得下式: (2.4)图2.5 D/A转换电路图2.4频段选择电路MAX038 的输出频率和CF电容与IIN 端的电流间的关系如图1.2。固定一个CF值,当IIN 端的电流从到的变化时,对应产生一个频段的频率范围。如表1.1所示的选用的电容值分别为, ,。我们选用多路开关CD4052做为切换不同电容所需要用的芯片器件。多路开关CD4052的选通控制如表2.3所示,每当S1,S2出于不同的的组合状态的时候,可以同时选通两路开关AxBx,因此采用如图2.5所示的连接方式可以实现将电容连接到5脚COCS上。表2.3 CD4052功能状态表输入状态选通渠道ENBALES1S2LLLA0B0LLHA1B1LHLA2B2LHHA3B3HXX都选不通在5脚COCS和6脚GND接上电容以后,10脚IIN是频率控制的电流输入端,利用恒定电流向电容充电和放电,便可形成振荡。例如:当S1S2是H L时,A2B2通道被选通,电容C9被连接在MAX038的5脚COCS上。图2.6 频段选择电路2.5 幅度控制电路该部分电路主要有放大器电路和数字电位器电路两部分组成,其中放大器部分电路的作用是将MAX038产生的电压波形2Vp-p放大为5Vp-p,数字电位器电路的作用是为了实现产生的电压波形在-5V+5V之间数字可调。美国模拟器件公司推出一次性编程(OTP)数字电位计系列产品AD5171,具有接口,用来读/写滑片位置,而OTP性能则能永久设定滑片的位置。工作温度范围为-40到+125之间,温度系数为35ppm/,工作电压在2.7至5.5V之间,工作电流不大于5 A。AD5171是64滑点的数字电位计。I²CInter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I²C总线最主要的优点是其简单性和有效性。总线的构成及信号类型是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。当SCL保留高电位同时SDL变低时传送开始。这个开始状态之后,时钟信号变低来启动数据传送。在每一个数据位,时钟位在确保数据位正确时变高电平。在每一个8位数据的结尾发送一个确认信号,而不管它是地址还是数据。在确认时,传送端不会把SDL变为低电平,如果正确接收到了数据允许接收端把电位变为0。确认信号后,当SCL处于高电平时SDL从低变为高,指示数据传送停止。I²C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,因为地址码的作用各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。 I²C总线在传送数据过程有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况做出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。接口的设计也大大提高了芯片的利用效率,我们利用AT89C51的P1.6,P1.7脚就可以控制数据对模拟量进行数字控制。在I²C总线的应用中应注意的事项总结为以下几点 : 严格按照时序图的要求进行操作; 若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻; 程序中为配合相应的传输速率,在对口线操作的指令后可用软件延时程序加一定的延时; 为了减少意外的干扰信号将EEPROM内的数据改写可用外部写保护引脚(如果有),或者在EEPROM内部没有用的空间写入标志字,每次上电时或复位时做一次检测,判断EEPROM是否被意外改写。图2.7 幅度控制电路2.6 键盘电路键盘用的是上拉电阻,选通接地的形式。KEY0键功能:三角波,正弦波,矩形波的循环选择。KEY1键功能:频段,频率,占空比,幅度的控制的循环选择。KEY2键功能:选定的控制对象步进量增。KEY3键功能:选定的控制对象步进量减。KEY4键功能:选择确定。KEY5键功能:选择不确定(即返回)。例如产生一个正弦波的控制方式:在开始界面用KEY0键选择正弦波,用KEY4键确定进入频率,占空比,幅度的控制的循环选择界面,首先用KEY1键来选择频率,KEY4键确定进入,然后用KEY2和KEY3键来实现频率步进的增值或减值,数值确定后KEY4键确定,然后KEY5键返回到频率,占空比,幅度的控制的循环选择界面,用KEY2键来选择占空比,KEY4键确定进入,然后用KEY2和KEY3键来实现占空比步进的增值或减值,数值确定后KEY4键确定,然后KEY5键返回到频率,占空比,幅度的控制的循环选择界面,用KEY2键来选择幅度,KEY4键确定进入,然后用KEY2和KEY3键来实现幅度步进的增值或减值,数值确定后KEY4键确定。图2.8 键盘电路2.7电源电路根据整机要求,电源电路应为信号产生电路提供5V电压,其中±5V电压需要稳压输出,为此选用了7815, 7915两种三端集成稳压器,这种三端固定电压输出式集成稳压器,使用简单,价格较低,且由于内部具有过压过流保护,使整机的电源电路稳定,性能可靠。外接9V交流电输入,经绝对值电路,然后滤波通过7805,7905产生±5V的直流电压。电源部分电路图如图2.9所示。图2.9 电源电路图2.8通讯电路单片机作为主控制器,控制MAX038芯片产生信号,除此之外,单片机还与上位PC 机进行通讯,把频率值发送到PC 机上。PC 机串行接口采用的是RS232 电平标准,而AT80C51 单片机的管脚是TTL 电平,因此,要实现单片机与PC 机的通讯的话,必须要经过电平转换。电平转换选择美国美信公司生产的电平转换芯片MAX232.其接口电路如图2.10所示。图2.10 MAX232接口电路第三章 系统软件流程图设计3.1 主程序流程图图3.1 主程序流程图根据以上流程图可以利用六个按键来实现波形的所有参数的控制,当然这里只是给出的一种可行的设计方案,。3.2频段处理子程序该子程序通过控制译码电路选择不同的容值的电容,并且通过参数计算将频段号保存下来。通过控制CD4051的双路开关选择电容图3.2 频段处理子程序流程图3.3频率处理子程序该子程序通过控制MAX038的FADJ引脚和IIN引脚的电压电流的变化来控制基频内的频率控制与调解。根据参数计算在选择的基频的基础上,通过控制FADJ引脚的电压在±2.3V之间变化可以改变频率在基频的3070之间浮动。再通过控制IIN引脚的电流在2µA750µA之间变化可以精细控制频率改变。在D/A转换模块使用图5所示的电阻连接方法。当数字量为00H时,输出为。MAX038的10脚IIN有的电流输入。当数字量为FFH时,输出为基准电压。MAX038的10脚IIN有的电流输入。图3.3 频率处理子程序流程图3.4幅度处理子程序该子程序通过I²C总线法方式控制AD5171芯片,AD5171作为数字电位器可以对±5V 的电压进行分压。可以将幅度在±5V间的电压信号进行衰减得到幅度可控制的波形。I²C的控制子程序见附录。图3.4 幅度处理子程序流程图系统分析与总结采用MAX038 芯片制作函数信号发生器随设计思想不同,具有多种方法,本文只是一种可能实现的方法。此法的频率控制和幅度控制分辨率高,且硬件集成度高,整机自动化程度高,性能优良,具有很高的实用价值。同时该信号源设计尚存在的不足之处,主要有两个方面,第一为缺乏频率准确显示的手段,可以配备相应的数字频率计模块,但如何将显示的精度与信号源的频段配合有待讨论研究;第二为输出级可配以显示输出幅度的仪表,并且放大电路有待进一步改进,使其具有更强的输出能力。参考文献1康华光.电子技术基础(第四版)M.北京:高等教育出版社.1998,20232张友德等.单片微型机原理、应用与实验M.上海:复旦大学出版社.1993,1011 3陈泽宗等.单片精密函数发生器应用J.电子技术报,1997,20(7):344常新等.高频信号发生器原理,维修与鉴定M.北京:电子工业出版社,1996,12135谢嘉奎,宣月清.电子线路非线性部分M.北京:高等教育出版社,1988,1121136张肃文.高频电子线路M.北京:高等教育出版社,1984,50517解月珍等.信号产生电路M.北京:电子工业出版社,1994,11138黄晓林.测控应用中若干重要电路的设计M.北京:高等教育出版社,1991,589肖瑞珠等.小型HDTV码流发生器设计M.北京:高等教育出版社,2003,667810陈文峰.基于虚拟仪器检测系统J.单片机应用,2003,23(10):788011江太辉等.高频波形发生器的特性J.信息技术报,1999,19(7):1031附录I²C的单片机软件控制程序/*VIICC.H*/#pragma db cd small#include <intrins.h>#include <reg51.h>#define NOP nop ( ); nop ( ); nop ( ); nop ( )#define SDA P17#define SCL P16void sta( );void cack( );void stop( );void mnack( );void mack( );void wrbyt(uchar shu);void wrnbyta(uchar slaw,uchar gg,uchar n);void wrnbyt(uchar slaw,uchar ff,uchar number);uchar rdbyt( );void rdnbyt(uchar slar,uchar qq,uchar number);voidsta( ) /*启动I²C总线*/SDA=1;SCL=1;NOP;SDA=0;NOP;SCL=0;void stop( ) /*停止I²C总线*/SDA=0;SCL=1;NOP;SDA=1;NOP;SCL=0;void mack( ) /*发送应答位*/SDA=0;SCL=1;NOP;SCL=0;SDA=1;void mnack( ) /*发送非应答*/SDA=1;SCL=1;NOP;SCL=0;SDA=0;void cack( ) /*应答位检查*/SDA=1;SCL=1;F0=0;if(SDA=1)F0=1;SCL=0;nop( );/*向虚拟I²C总线上发送1个数据字节*/void wrbyt(uchar shu)uchar i;for(i=0;i<8;i+)if(shu&0x80)>0)SDA=1;SCL=1;NOP;SCL=0;SDA=0;elseSDA=0;SCL=1;NOP;SCL=0;shu=shu<<1;/*从I²C总线上读取1个数据字节*/uchar rdbyt( )uchar nn=0xff,mm=0x80,uu=0x7f;uchar j;for(j=0;j<8;j+)SDA=1;SCL=1;if(SDA=0)nn=(nn&uu);elsenn=(nn|mm);。nn=crol(nn