本次作品是一个基于单片机设计的函数信号发生器。函数信号发生器的设计方法有多种,利用单片机设计的函数信号发生器具有编程灵活,功能更以扩充等实际的优点。利用单片机设计的函数信号发生器能够产生正弦波,锯齿波,三角波,方波,并实现对频率和占空比的调节,以及液晶屏显示波形名称和波形频率,波形的切换和频率的调节以及占空比的改变都可以用按键实现。在编程语言上,我们选择自身比较熟悉的 C语言,这样在后期波形的调试及与硬件衔接方面更容易发挥出自身优势。经过设计及后期长时间的调试,设计的所有功能均已实现。
关键词:单片机,函数发生器,液晶LCD
第一章 绪论
1.1单片机概述
随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的[9,10]。
1.2信号发生器的分类
信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。
1.3 研究内容
本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、锯齿波、矩形波、正弦波的发生。根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出
第二章:函数信号发生器的设计
设计一个基于单片机的函数信号发生器,该函数信号发生器可以输出四种波形,有正弦波,锯齿波,三角波,方波。在此基础上进一步实现对波形频率和占空比的调节,并用液晶屏分两行显示波形名称和波形频率。
2.1课程设计的目的:
1、巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决实际课题设计的能力。
2、培养针对课题需要,选择和查阅有关手册、图表及文献资料的能力,提高组成系统、编程、调试的动脑动手能力。
3、通过对课题设计方案的分析、选择、比较,熟悉运用单片机系统开发、软硬件设计的方法内容及步骤。
4、掌握DAC0832,LM324,74LS22的接口电路,及使用方法。
5、熟悉掌握函数信号发生器的工作原理。
2.2 课程设计要求:
熟悉组成系统中的实验模块原理,画出实验原理图。
2、 写出完整的设计任务书:课题的名称、系统的功能、硬件原理图、软件框图、元件清单、程序清单、参考资料。
3、输出几种波形,实现对频率和占空比的调节,以1HZ作为步进进行调节。
第三章:设计方案
3.1 系统主要功能
该函数信号发生器可以输出四种波形,有正弦波,锯齿波,三角波,方波。在此基础上进一步实现对波形频率和占空比的调节,并用液晶屏分两行显示波形名称和波形频率。
3.2 系统硬件构成及功能
函数信号发生器的设计总体框图如图所示,主要有单片机AT89C52,电源,键盘模块,LCD1602显示模块构成。
按案件模块:由5个复位开关与74LS21组成的系统通过对单片机传输中断信号来实现波形切换及频率和占空比的调节。
显示模块:用LCD1602,分行显示波形类型和波形频率的显示。
电源模块:电源模块有220V市变电压经变压,整流,稳压得到+ -5V, + -12V的电压,维持系统正常工作。
系统的总体框图如图1所示:
图1系统总体框图
3.2.3 D/A转换模块部件
DAC0832芯片原理
管脚功能介绍(如图6所示)
图3 DAC0832管脚图
DI7~DI0:8位的数据输入端,DI7为最高位。
ILE:数据锁存允许控制信号输入线,高电平有效。
CS:选片信号输入线(选通数据锁存器),低电平有效。
WR1:数据锁存器写选选通输入线,负脉冲有效,由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变化,LE1的负跳变时将输入数据锁存。
XFER:数据传输控制信号输入线,低电平有效,负脉冲有效。
WR2:DAC寄存器选通输入线,负脉冲有效,由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0。
IOUT2:模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数。
RFB:反馈电阻引出端,DAC0832内部已经有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。
VREF:参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10~-10)V。VREF端与D/A内部T形电阻网络相连。
Vcc:芯片供电电压,范围为(+5~+15)V。
AGND:模拟量地,即模拟电路接地端。
DGND:数字量地。
3.2.4 外部控制模块部件 74LS22
图4
74LS22为四输入双与门
A1,B1,C1,D1为第一个与门的输入,Y1为第一个与门的输出。
A2,B2,C2,D2为第一个与门的输入,Y2为第一个与门的输出。在此系统中用来给单片机提供中断信号。
3.2.5 放大部分 LM324
LM324引脚图(管脚图)
图5 LM324引脚图
简介:
LM324系列器件为价格便宜的带有真差动输入的四运算放大器。与单电源应用场合的标准运算放大器相比,它们有一些显著优点。该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。
3.3 系统的软件设计及接口电路
3.3.1 信号频率数据采集
本程序通过外部中断,接收减频或加频按键,单片机内部对接受的值经过运算得出波形的输出延时,从而产生频率的改变。电路较为简单,成本较低。
3.3.2 正弦波产生程序
输入正弦波的采样点,计算出256个(一个周期内)正弦波信号值。然后通过输出的两点间的延时来实现调频。依次循环输出,可得出正弦波。
采点值放在table2[]中,程序如下:
void sin()//正弦波
{
unsigned int i;
for(i=0;i<256;i++)
{
DAC0832=table2[ i];
delay(pinlv/256);
}
}
3.3.3 三角波产生程序
设个自变量i让它不断地自加1,直到加到255时,t=i,对t进行不断地自减1直到减到t=0,然后再不断地重复上述过程产生三角波。程序如下:
void tran()//三角波
{
unsigned char i;
for(i=0;i<255;i++)
{
DAC0832=i;
delay(pinlv/64);
}
for(i=255;i>0;i--)
{
DAC0832=i;
delay(pinlv/64);
}
}
3.3.4 方波产生程序
设个自变量i=0使之延时一段时间,再另i=255时在延时与i=0相同的时间,然后再重复上述过程。程序如下:
void fang()//方波
{
DAC0832=0;
delay(pinlv/2);
DAC0832=0xff;
delay(pinlv/2);
}
3.3.5 锯齿波产生程序
锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同的周期锯齿波。锯齿波发生原理与方波类似,只是高低两个时延的常数不同,所以用延时法,来产生锯齿波,设个自变量i让它不断地自加1,直到叫到255,DAC0832可以又自动归0,然后再不断地重复上述过程。程序如下:
void jvchi()//锯齿波
{
unsigned char i;
for(i=0;i<255;i++)
{
DAC0832=i;
delay(pinlv/256);
}
}
3.3.6信号放大模块设计
从单片机中输出的数字信号经过DAC0832转换后,由于信号的幅值比较小,所以
需要放大。采用常规的放大方式,采用两片运放,实现两级放大,设计的电路如图6:图6
图6放大电路接口
3. 3. 7数模转换模块设计
本设计模数转换采用常见的芯片:DAC0832,本设计采用直通方式进行模数转换。为了简洁起见,在仿真图中采用网络节点的方式进行连线,从单片机P0口输出的数据直接连接到模数芯片DAC0832的数据口。如图:
图7DA转换接口电路
第四章 仿真图及结果分析
4.1波形发生器的调试与测试
本系统是在protues下仿真,使用Keil C编程。从而实现其设计及仿真。
在测试本系统是采用的是将设置的数值与示波器所测值进行对比,进而可以知道本系统的性能。
频率测试数据:
设定频率(HZ)
示波器测试频率(HZ)
相对误差%
3.9
3.96
1.5
7.8
7.93
1.28
15.63
16.13
3.19
4.2仿真结果图
正弦波仿真图
图8正弦波图
三角波仿真图
图9三角波图
锯齿波仿真图
图10锯齿波图
方波仿真图
图11方波图
第五章 总结与展望
本次的设计中利用AT89C52和DAC0832以及放大器完成电路的设计,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察。
在这次的软件设计中,程序设计采用的是汇编语言。汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能。但是汇编语言也存在编写的代码非常难懂,不好维护,很容易产生 bug,难于调试的缺点。因此,在大型程序的设计中,多采用C语言进行程序编译。C语言简洁高效,是最贴近硬件的高级编程语言,经过多年的发展,现在已成熟为专业水平的高级语言。而且,现在单片机产品推出时纷纷配套了C语言编译器,应用广泛。不过就本次课程设计来说,汇编语言还是适用的。
由于真正意义上的程序设计还不多,因此还不是很得心应手,所以在设计中遇到一些问题和一些难点。比如:在程序设计中如何实现程序结构的最优化,以达到较高的质量。这是以后设计中要注意的问题。
通过这次课程设计,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的元件,而且重新温习了刚学不久的汇编语言,使我学得了许多知识,使我获益匪浅。
这次课程设计,使我的动手能力得到了很大的提高,更使我们懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是我们得到的理论知识得到验证,更能增加对理论知识的理解。
附录三 电路原理图
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/runweipa/article/details/139905868