黄冈职业技术学院(论文)
校正和对实现功能的可靠新的确认,并记录观察结果。 测试数据如下(以正弦波为例) (1)电压峰值测试数据如表5-1
表5-1 电压峰值测试数据 设定电压(V) 2.0 相对误差示波器测试电压值(V) 值。 。1.5 2.0 34.0 6.0 8.0 4.0 26.0 58.0 40.5 0.8 30.5 (2)频率测试数据如表 5-2
表5-2 电压峰值测试数据 设定频率(Hz) 2.0 8 相对误差示波器测试电压值(Hz) 值。 。0 0.625 2.0 7.94 10 20 9.56 19.93 0.44 0.35 40.0 80.0 39.1 79.64 0.45 0.45 0.48 0.6 100.0 200.0 104.8 201.2 所能测得正弦波的最高频率为1MHz。 锯齿波和反锯齿波的最高频率为1.01MHz
36
黄冈职业技术学院(论文)
三角波测得的最高频率为1.01Hz
方波测得的最高频率为1.12MHz 3.数据分析
电压误差分析:
产生误差的原因有:DAC0832的非线性、电压运算过程中四舍五入产生的误差、直流电源存在的误差、电阻及运放等器件存在的误差。 频率误差分析:
延时计算误差、示波器示数不稳定。 高频时存在较大误差的原因是,高频时调用延时程序的次数较少,因此计算调用次数时产生的误差较大。
频率存在上限的原因是程序运行的耗时以及DAC0832在进行DA转换时损耗的时间。
综上所述,由上述数据可以看出,函数信号发生器峰峰值和频率的误差还是很低的,精度较高。
37
黄冈职业技术学院(论文)
6 结论与展望
6.1 结论
经过几个月的努力,终于完成了函数发生器的设计,总结几个月来来的工作,主要有以下几个方面:
(1)通过查阅大量资料使自己对函数发生器的研究现状、原理、工作方式等的基本概念及技术发展有了更好的理解。
(2)针对设计的任务和要求,确定了函数发生器的硬件和软件设计方案。 (3)本系统使用了单片机作为中央控制器,直接由软件产生波形信号的输出,可通过修改软件,还可以输出其它任意波形。硬件简单,可以把电源和发生器分开来制作,减少电源对发生器的干拢,这样使发生器输出的波形更加稳定。
(4)论述了函数发生器的调试方法和测试结果,基本完成了设计的要求。 (5)用protel 99SE设计并制作了函数发生器的印制电路板PCB。
6.2 展望
由于时间和条件的限制,本系统也存在一些不足之处,可在今后的工作中改进。
(1)本系统的核心控制芯片单片机,由于单片机本身的晶振频率为35MHz,因此得频率调节范围仅在1~1M Hz,仅适用于中高频信号源的电路当中,对于超过1M HZ就无法满足了。为了使频率范围能够扩大,在以后的设计中,应采用更高晶振频率的控制器件如DSP等。 (2)设想在波形的输出口增加A / D模块电路对输出信号进行反馈,单片机对反馈信号进行误差的较验、调整再输出,在没有达到所要求的精度的波形输出时,再一次进行反馈、较验、调整直到符合所需要求的波形输出。或者我们可以利用更改精度的A/D,例如12位的A/D,MAX197。来提高输出波形的质量。 (3)直流偏移的调节目前是通过电位器实现的,并不能进行数字控制,可以再增加一片DAC0832产生直流电压,与产生的波形累加,可以实现数字调节
38
黄冈职业技术学院(论文)
致 谢
在本次系统的研究和设计过程中,我得到了老师和同学们的热情帮助。在此,对他们表示衷心的感谢。
首先,要对我的指导老师马老师表示衷心的感谢。从方案的选取、审题、查找资料,到系统软硬件的各部分设计工作,到最后论文的书写和完成,老师在我的整个毕业设计工作中给了我很大的帮助和支持。老师的谆谆教导,使我受益匪浅。
其次,要对大学三年以来所有给我授课的老师们表示感谢。是他们教会了我大学应该掌握的知识和技能,给我打下了坚实的理论基础。只有运用三年学习的基础知识和经验的积累,才能使我能够顺利的完成本次毕业设计工作。
最后,要感谢我们班的众多同学,本次设计能够圆满完成,和各位同学的帮助是息息相关的。在本次设计中,我遇到了无数困难,在需要帮助的时候,各位同学给了我无私的帮助,助我度过了一个又一个的难题。
39
黄冈职业技术学院(论文)
附 录
附录一 系统软件部分源程序
#include
#define pi 3.1415926
//#define DEBUGZLG7289 1 //#define DEBUGTIME0 1 sbit CS=P1^0; sbit CLK=P1^1; sbit DIO=P1^2; sbit KEY=P1^3;
//#define uchar unsigned char typedef unsigned char uchar; #define DAC1 XBYTE[0x7fff] #define DAC2 XBYTE[0xbfff]
void key_function(void); void key_number(void);
uchar rebuf,sebuf;
unsigned char amp=0x80; uchar number; //按键数码设置 uchar dis_bit=0; //按键显示位数设置
bdata uchar com_data;
sbit mos_bit=com_data^7; sbit low_bit=com_data^0; //uchar th=0xff; //uchar tl=0xff; uchar valid=0; //按键确认标志 uchar fun=1; //函数类型声明
uchar cnt=0; //a=0,b=0,c=0,d=0; uchar tl=0x00,th=0xf0; //计数器计数初值按键while循环无法正常工作 //uchar tl=0x13,th=0x1c;
40
//函数计数 //fffd计数值太快导致,