基于STC89C51单片机的简单函数信号发生器设计

2018-08-08 06:28任英杰黄建清郭凯李亚军
电子设计工程 2018年14期
关键词:按键波形单片机

任英杰,黄建清,郭凯,李亚军

(海南大学热带农林学院,海南儋州571737)

简单函数信号发生器的设计从一出现就在国内外引来了前所未有的热潮,因为它在航空航天、仪器检测等方面起到了不可或缺的作用,更是对国民经济的发展有极大的贡献。其中不乏有一些复杂的方法去得到,用这些方法虽然可以得到常用的3种基本波形,但是出于对成本等方面的考虑,依旧没有得到大规模的使用。本文采用的是STC89C51单片机联合DA转换、电压放大等一系列措施去实现简单函数信号发生器的设计。在本次设计过程中要用到Proteus和AD10工具软件,它们均是集仿真、调试与设计合为一体的综合性软件。也会用到keil 3编程软件,这是目前比较流行的一款软件。

1 硬件设计

1.1 硬件的组成

主要以STC89C51为核心,同时也附带有数模转换芯片DAC0832去进行D/A转换,LM324芯片的作用是电压比较和放大。运用3个按键依次可实现控制系统的输出波形的类型和输出波形的周期。

1.2 处理器电路

中央控制芯片STC89C51。STC89C51单片机的内部含有4K Bytes的可反复擦写1 000次及以上的Flash只读程序存储器,此器件兼容标准MCS-51指令系统及89C51的引脚结构,芯片的内部集成了通用8位的中央处理器和ISP FLASH的存储单元,具有系统可编程的(ISP)良好特性。此次设计所使用的89C51芯片是一个40只引脚的和进行双列直插的DIP封装类别。拥有了32个I/O口对相应的外围电路实施及时准确的控制。该器件有两种复位的方式,即按键复位和上电复位,在通常的实物设计中我们一般用它们的复用方式,因为这样的好处是可以在一个出故障的时候保证系统可以正常复位,同时也会提高系统的稳定度。本次设计用到单片机一半以上的端口,更是对系统的稳定度有更高的要求。此外,51单片机用一个12 M的晶振去调整整个单片机运行,一般在晶振的两端并联两个相同容值的电容,可以起到滤波等一系列的作用。

1.3 波形产生电路

1.3.1 DA转换器与单片机连接

DAC0832是一个具有8位D/A转换的特定功能芯片,其中的模拟信号转换成为数字信号所需的时间仅为1 us,正常工作时的标准电压在+5 V~+15 V之间。单片机可以识别和输出的信号是数字信号,因此在输出端必须配置一个可以将数字信号转换成模拟信号的装置,也就是常说的DA转换器,该芯片输出的模拟量的幅值非常小,必须经过下一级的放大才可以在示波器或者其他设备显示和应用。

该芯片有单缓冲方式、双缓冲方式及直通方式3种,此设计应用的主要是直通方式,也就是把ILE等功能均设定为有效,这样就会使DAC0832芯片内部相应的输入寄存器和DAC寄存器均处于直通(开放)状态,通过这种方式就可以使其内部功能不需要控制信号。DAC0832芯片的信号输出实时跟随输入端信号的改变去改变,只要89C51单片机P2口八位数字量发生变化,就会直接让数模转换芯片进行准确快速的DA转换。该D/A转换的标准参考电压量是+5 V,芯片的模拟量信号输出信号会在相关单位内变化(D为数字输入量,k为对应的比值,与该芯片相应的内部电路有关系)。因为数模转换芯片DAC0832输出的信号是电流量,在此需要运算放大器LM324实现电流量转换为电压量的功能。

1.3.2 放大电路

LM324芯片。LM324芯片内部包含有四个各自独立的、且完全相同的运算放大器,此芯片的电源电压范围比较宽。虽然LM324芯片中存在四组完全相同且独立的运算放大器,但在本次设计中只是用到了其中一组运算放大器。该芯片也起到了运算放大和低通滤波的作用,因为此次试验的最终目的是输出比较完美的波形,因此该芯片滤波和放大在其中起到了不可忽略的作用。

DAC0832有两个输出口,本设计中让OUT2输出接地,OUT1输出送到放大器的反相端构成反相放大电路,输出端引一负反馈到DA转换芯片的Rfd,第一级的输出接到第二级反相输入端构成二级放大,同样,二级的输出接负反馈到第一级的输出端。

1.4 人机交互电路

本设计采用的是目前最常用也最直观的LCD1602,一般用的有14个引脚,不过也有16引脚的,多出来的两个引脚分别是背光电源线VCC(第15引脚)和接地线GND(第16引脚),他们两者的控制原理完全相同,不过他们均不支持中文字符,本设计的模式是第一行显示输出的波形类型,第二行显示波形频率的大小。

Key1键与89C51单片机的P3.5端口相连接、按键Key2与89C51单片机P3.6口相连接、按键Key3与89C51单片机P3.7口相连接。Key1键用于调节相应的波形输出种类,Key2键用于增加波形的输出频率(周期),Key3键用于减小波形的输出频率。

1.5 电源模块

此次设计用到的电源模块是直接用220V交流电提供到变压器,然后由变压器输出+12 V、300 mA的直流电,输出经过4个型号为1N4007的整流二极管提供该模块的输入电压,其中LM7805CT芯片用来输出+5V直流电压,同样LM7812CT芯片和LM7912CT芯片分别用来输出+12V和-12V的直流电压,对各芯片的输出电压可以根据他的数字规律去去区分,如7805,最后两位数字代表输出的电压(此时05就是5 V),第二位数字用来辨别输出电压的极性,8代表是正极性,9则是代表负极性。

1.6 PCB设计

Proteus仿真软件是由英国的Labcenter electronics公司研究并设计的EDA应用型软件。此应用软件不仅仅兼备其他方面的EDA工具软件的仿真调试能力,还可以模拟、仿真与应用单片机和单片机周围的元器件(也就是它的外围电路)。这个软件是目前世界上现存最好的仿真单片机以及单片机周围的元器件的应用软件之一,也是当前世界上仅有的为电路仿真软件、PCB设计软件和虚拟模型仿真软件三者合为一体而搭建的平台,它的处理器模型能够支持 Cortex-M3、89C51、MSP430、AVR 单片机、ARM处理器和DSP处理器等,在编译功能领域,此应用软件也可以带动Keil3和MATLAB等各种编译处理器的运行。正因为如此本文才会选用Proteus模拟仿真软件担任此次设计的平台,因为它不仅可以实现对应设计目标的需求,也可以节省了许多计划所花费的时间和所需要的成本价格。

Proteus应用软件设计电路的步骤一般上是:绘制电路图、模拟调试与仿真、确认无误后自行生成PCB、系统自动布线或者自己手动连接电路,这些基本步骤均符合电子电路设计的原则和方法,因此大大减少了因考虑不周等因素而造成的成本花费。

针对此次的设计,因为Proteus软件里面没有button(按键)的封装库,因此需要在绘制PCB图之前需要填写button(按键)的封装库的正确信息参数。通过查找对应的按键封装的文献以及文档,目前国内的四角按键的物理信息是:引脚的直径大约是0.65 mm,引脚之间的距离是3.5 mm,尺寸的架构(宽和长)6.4~7.8 mm。给button按键加入正确的封装信息。最后一起加入到总的原理图和PCB图里面,经过绘制可以得出总的设计的构架。

本文采用模块化设计方法,即把各个功能的模块独立画在一起,方便后续的检查和理解,比如说本实验的原理图里面各模块之间是用红色实线隔开,显示模块放在一个方框图里面,控制电路模块放一块等等。

PCB图在连线的过程中也有好多原则和技巧去遵守,比如在本设计中,C51单片机的IO端口有许多被占用,如何在单层板的基础上去尽量少用跳线、节约电路板大小去布线。比如连线的时候尽量先使主器件(本设计是51单片机)放在主要位置,由大到小的去连接电路。这样既可以减少线路的总体长度和宽度,也能有效减少电路板的体积。

2 程序设计

2.1 主程序

本设计在主函数中对LCD1602和DAC0832进行初始化,并且定义按键扫描函数以及频率选择函数。输出波形的周期通过条件判断语句进行加减。再设计中,当输出波形的频率达到最大时再次按下增加的按键会使频率从最小开始。

该函数信号发生器系统的程序主要有3个部分构成:外部中断1模块、主要程序、外部中断2模块。

要想使系统正常有序的运行,必须要先对主程序进行初始化操作,通过对外部中断1和与外部中断2的输出的变量进行相应的判断,然后依靠变量的值来判定函数信号输出的具体波形分类及周期,然后设置单片机中和中断有关的寄存器,比如TCON,可以设置IT0和IT1的位都为1,然后经过检查Key1键、按键Key2键、按键Key3键是不是已被按下,Key1键按下的时候会使程序进入INIT0(外部中断0),此时会对输出信号的波形进行变化,如果Key2键或者Key3键按下的话,则会让程序进入INIT1(外部中断1),此时程序会通过对时间的延迟或者缩短对波形的周期进行对应的变化。

2.2 数据产生程序

2.2.1 keil c51波形产生

利用MATLAB产生数组的方式去生成一定数量的点,然后对点线性处理后由单片机进行定期采样,采样的每一个点对应不同的相位。按照相位顺序进行采样,最后会输出一系列密集的点。

每个波形对应不同序列的点,此次编程中把延时函数、LCD1602的功能函数,单片机的工作方式的定义等函数进行分开定义,并且可通过主函数进行不同函数之间的互相调用。

中断函数用定时器T0,通过附不同的初始值来改变输出波形的频率,定时器工作在定时方式一,最大的定时时间为65 ms。对按键被按下的次数判断输出波形的种类,刚开机的时候显示正弦波。

2.2.2 各波形的理论产生方式

用51单片机输出方波相对来说还是比较简单的,相当于让P2引脚等间隔的输出0x00和0xFF。然后经过Key2键或者Key3键去调整高电平和低电平的相对维持时间去调整输出信号的周期。

正弦波的输出可以通过查找对应的点,里面会有正弦波在每个相位对应的的峰值,考虑到某些因素,本次设计在一个周期里对正弦波采样256个点,然后可以通过Key2键或者Key3键来调整正弦波点与点之间的缩短或延迟来调整正弦波的输出周期。

输出的梯形波可经过对DAC0832芯片的输入引脚按照次序从0增大至255,然后保持这个电平到设定的时间后再从255减小到0,如此循环。

锯齿波的生成完全可以经过给DAC0832芯片的输入端按照次序输入从0致255按照一定的比例增大,到了255后立即把输出(单片机的相应端口)置0,然乎再从0开始至255按刚才相同的比例进行变大,如此循环。经过Key2键或者Key3键同样可以改变波形输出频率。

3 实验测试

3.1 仿真测试

文中采用Proteus软件设计,因为它不仅可以实现对应设计目标的需求,也可以节省了许多计划所花费的时间和所需要的成本价格。同时还具有丰富的仿真与调试功能和有强大的画图能力。此次设计对应用STC89C51单片机的简单函数信号发生器的原理图进行实现与仿真,然后再通过keil 3软件和Proteus软件进行联合调制,也同时验证了此次实验的可行性和简易性。

调节KEY1键来转换输出波形,KEY2键和KEY3键分别可以用来增大和减小信号的频率。

3.2 实物测试

检查后,按照原理去连线并接通电源,观察输出波形的好坏以及输出的频率实际值和理论值进行对比去分析此次试设计的效果。

表1 测试结果

误差总结:从图1可以看出,相对误差均随着频率值的增大而有增大的趋势,可以得出此信号源适用于频率相对较低的场合。

4 结论

图1 实际电路的效果图

文中针对一些简单函数信号发生器设计复杂,可靠性不高的缺点,适当的进行改进,采用STC89C51单片机,设计了一种频率幅值可调、波形转换速度快、适应于绝大多数领域的产品。实验结果的误差也在允许的范围内。面向对象主要是中低频领域,设计的优点在于转换速度快、精度相对较高。此次实验对在STC89C51单片机方面的学习和应用均有特定的指导意义和参考价值。但是对高频还需要改进。

猜你喜欢
按键波形单片机
基于有限状态机的按键检测程序设计
对《压力容器波形膨胀节》2018版新标准的理解及分析
基于单片机的SPWM控制逆变器的设计与实现
基于单片机的层次渐变暖灯的研究
基于单片机的便捷式LCF测量仪
基于LFM波形的灵巧干扰效能分析
一种多方向导光按键结构设计
基于ARM的任意波形电源设计
大连台使用CTS-1记录波形特点
Microchip推出两个全新PIC单片机系列