学术论文网
基于51单片机的信号发生器设计与实现
发布日期:2024-11-03 23:55:47

  3.2 方波频率和占空比可调的实现

对方波的频率和占空比进行调节的编程思想与前面调节正弦波、三角波和锯齿波频率的编程思想类似。同样要引入频率控制字fword,对于频率控制字的由来及它与频率设定值之间的关系前面已有详细说明,在此处不再赘述。同前面对其他三种波的频率控制时一样,引入了无符号整型变量count(范围为065535),并且定义count=fword+count。

  以占空比为50%,频率1000Hz的方波为例,说明具体的控制方法:

  由前面知,在设定进入中断的时间为154us的前提下,输出1000Hz的方波总共进入中断的时间约65次,故想要达到同时控制占空比的目的只需要控制DA0832输入数字量由0xff翻转到0x00的具体时间即可。

经分析知道,当占空比Duty=100%时,有,故可以通过判断count值与Duty*655的大小关系来达到控制占空比的目的。

  因为中断中的程序为:

  count=fword+count;

  ......

  if(count>Duty*655)

  DAPort = 0xff;

  else

  DAPort = 0x00;

  ......

  所以,当占空比设置为50%时,在中断中对count与50*655相比较,当count>Duty*655时控制频率的相关DAC0832输入的数字量为0xff,当count<=Duty*655时控制频率的相关DAC0832输入的数字量为0x00。以此来达到控制方波的占空比和频率的目的。

  方波频率和占空比控制程序流程图如下图3-3所示:

  图3-3 方波频率和占空比控制程序流程图

  3.3 信号发生器幅值可调的实现

  3.3.1 幅值可调的硬件设计

由于要实现4种波形的幅值可调,并且要对设定的幅值进行精确显示,可以采用另外一块DAC0832完成这一工作。这一块DAC0832的8位数据口与P2口相接,参考电压端口Uref 与前一块DAC0832的波形输出口相接。结合前面可知此时DAC0832的参考电压Uref 为峰-峰值为5V的信号,故通过控制单片机P2口输出0-255的数字量可以间接地控制运放LM324的1脚输出峰-峰值为05V的信号(电压正负符号与参考电压Uref相反)。

为了扩大输出信号的峰-峰值,可以在LM324的1脚后面接上正向比例放大器,将1脚的输出信号放大2倍,及理论上7脚输出的信号峰-峰值可实现010V可调。具体硬件电路如下图3-4所示。

  图3-4 幅值可调硬件电路

  3.3.2 幅值可调的软件设计

  结合电路,在单片机内部,首先经过按键设置所需信号的峰-峰值(为了结合LCD1602编程方便,这里设定信号峰-峰调节范围为0-9.9V),然后对设定值进行处理。

令电压中间变量 amptemp=电压设定值个位数10+电压设定值小数位, 假设电压设定值为8.0V,则首先,电压中间变量amptemp =810+0=80。由于此8.0V电压值是在正向比例放大器放大为原来的2倍后得到的,故需要将计算得到的amptemp值除以2。然后给幅值控制字AmPort赋值,即:

  AmPort= (unsigned char)(amptemp*5.1);

(因为参考电压峰-峰值为5V,DAC0832为8位DA,有:),

  让P2口输出的数字量为AmPort(范围为0-255),即可达到控制最终输出电压峰-峰值为8.0V的目的。

  幅值控制的程序流程图见下图3-5所示:

  图3-5 幅值控制程序流程图

  3.4 信号发生器偏置电压可调的设计

  经过对硬件电路的仔细分析,我发现如果将电路做如下改动同样可以达到控制偏置电压的目的。电路如下图3-6所示:

  图3-6 偏置电压可调电路

从TL431的1脚引出2.5V直流电压,经过500K的电位器R4和10K的电阻R5后与运放LM324的13脚相接,这样的话根据反向比例放大器的输入输出电压关系可知:在运放LM324的14脚的输出电压上可以附加上的直流偏置电压为:,即可以在14脚提供-5V0V的直流偏置电压,在经过后面幅值的相关处理从而达到控制输出波偏置电压的目的。

最终输出波形的偏置电压调节范围与电压幅值的设定值有关,例如,波形电压幅值设定值为U,则偏置电压调节范围为0U;

  至此,到达了四种波形偏置电压可调的目的。

  第4章 系统调试

  4.1 硬件调试

  本系统在硬件方面稍微有些复杂,主要包括单片机最小系统部分、独立键盘部分、频率控制部分、幅值控制部分以及液晶显示部分。因此,对这个略显庞大的系统进行电路焊接自然是不容小觑的。

  在焊接电路之前首先需要做的是用Protues软件对所设计的电路进行仿真,仿真无错误后才可以进行焊接工作。在电路焊接过程中为了避免焊接出错,需要按模块依次进行焊接,并且需要格外的小心,以免出现虚焊或者短路的情况。在焊接完成后需要做的是下载程序后进行调试,调试工作十分的重要,因为电路板并不是焊接完成后就可以正常工作的。

  在本系统硬件调试的中遇到了很多的问题。回想这些问题,我觉得只要认真多思考都是可以避免的。以下为主要的问题:

  问题1:刚上电后运放LM324没几秒钟长就烧坏了。

  解决方法:在用万用表测试了直流15V供电电源的输出电压后发现直流供电电压有问题,虽然直流源标的是15V但实际的输出电压却是20.5V。知道问题所在后我更换了直流源后问题便解决了。

  问题2:上电后LCD1602不能够正常显示。

  解决方法:在用万用表对单片机的各管脚的电压进行排查后发现单片机的晶振焊接出了错从而导致晶振不能够正常起振,进而导致单片机不能够正常的工作,在对晶振电路进行修改后此问题得以解决。

  问题3:接上示波器后发现示波器并不能够得到预期的波形。

  解决方法:用万用表对电路的输出部分进行检查后发现电路的输出部分在焊接时出现了虚焊的情况从而导致输出波形异常,在对虚焊的地方进行重新的焊接后此问题便得以解决。

  4.2 软件调试

  本系统软件部分是关键,系统的各种功能能否实现主要依赖于软件部分。而就软件部分而言,主要分为三个部分:按键扫描件部分、LCD1602显示部分和定时器中断部分。在程序的调试过程中也存在诸多问题,主要有一下几个:

  问题一:在最初对频率进行控制时采用的是用延时函数来改变输出信号的周期从而达到改变输出信号频率的目的,但是由此产生的问题是输出信号的频率最大只能达到180Hz左右,并且不能以同一步进值实现频率的连续可调。

  解决方法:经过对延时函数进研究,我发现由于延时函数在调用、返回以及for循环判断过程花费了大量的时间,且定时不精确从而导致了以上问题。在查阅大量的资料后我将频率的控制方法改为论文中频率控制部分详述的采样输出的方法,该方法很好的解决了以上问题。

  问题2:在最初的调试过程中频率参数的设定值与示波器的测量值之间存在很大的误差。

  解决方法:在经过大量分析后我发现由于本单片机的晶振频率为12MHz,机器周期为1us,若直接在程序中对采样点进行计算时中会产生较大的误差。如果计算前将单片机的晶振频率假设为120MHz,这样的话单片机的机器周期就变成了0.1us,这样会大大降低采样点计算误差,且如果在频率设定值和输出值之间做10倍的转换便可以使得输出频率与设定频率一样。依据此原理修改程序后信号发生器的频率设定值与输出值之间的误差大大降低。

  第5章 波形与实测数据分析

  5.1 实物实测波形

  1、频率设定值为100Hz,幅值设定值为8.0V的正弦波:

  图5-1 实测正弦波

  2、频率设定值为132Hz,幅值设定值为6.1V,占空比设定值为50%的方波:

  图5-2 实测方波

  3、频率设定值为223Hz,幅值设定值为4.1V的正弦波:

  图5-3 实测三角波波

  4、频率设定值为225Hz,幅值设定值为4.5V的三角波:

  图5-4 实测锯齿波

  5.2 实物实测数据及其分析

  四种输出信号的频率、电压幅值及方波占空比的理论设定值与实测值数据记录如下表5-1所示:

  表5-1 实测数据记录表

  由表格数据可知,四种输出信号的频率、幅值以及方波的占空比等参数的实物实测数据与设定参数之间的误差很小,基本上都在小数点后一位,总体来说在误差允许范围之内。误差产生的来源可能在于程序算法自身的误差、焊接得到的电路板在信号传输过程中收到外界因素的干扰以及示波器的测量误差等。

  第6章 总结

  本次我的毕业设计内容是基于51单片机设计一个函数信号发生器。利用C语言编程完成方波、三角波等可调频率模拟信号的产生,同时要设计硬件调频和调幅电路,实现频率、幅值等参数可调,做成一个模拟的可控函数信号源。

  在指导老师的帮助下,我通过对课题的努力研究,想出了将单片机STC89C52与两块数模转换器DAC0832相结合,利用C 语言编程来完成课题内容的方法。最终设计出来的函数信号发生器可以准确的输出正弦波、三角波、锯齿波和方波四种波形。首先,为了实现对波形、幅值、频率和方波的占空比等参数可调,我在硬件上加上了按键模块,可以通过四个独立按键设定用户所需要的波形、幅值、频率以及方波的占空比等参数。其次,为了方便用户对参数的设定,我在硬件上加上了显示模块,可以利用液晶LCD1602对波形、幅值、频率以及方波的占空比这四个参数的设定值进行实时显示。最后,为了方便对四种输出信号的直流偏置电压进行调节,我在硬件电路上加了一个电位器,结合反相比例放大器在输出信号里加上了一个可以调节的直流电压,以此来实现对直流偏置电压的连续调节。其中频率的设定范围为0-1KHz,步进值为1Hz;方波的占空比设定范围为10%-90%,步进值为1%;电压峰-峰值的调节范围为0-9.9v,步进值为0.1v。

  通过本次毕业设计,我学到了许多课本上没有的知识,同时也锻炼了自己的动手能力和自主学习的能力,将以前所学过的零散的专业知识串接到一起。虽然本系统在功能上已经完全达到了设计任务书上所要求的内容并且有所突破,但是用于自身能力的限制,仍然存在以下的不足之处:

  1.由于对于正弦波、三角波和锯齿波采用的是采样输出的方法,使得在频率设定值太高时会因为采样点太少而出现波形失真的问题。最终这三种波形信号在频率设定值为0-500Hz时可以正常显示,在超过500Hz是会有些失真;

  2.幅值的调节范围为0-9.9v,调节范围与市面上的信号发生器相比有些小;

  3.由于采用的是LCD1602进行参数的显示,系统存在显示界面人性化不足的问题。

  总的来说,本次的毕业设计较为成功。让我的焊接能力、调试能力和C语言的编程能力都有了很大的提高。为今后的学习和工作打下了坚实的基础。

 3/3     1 2 3
Copyright © 2008-2020 学术论文网 版权所有 粤ICP备16093775号