当前位置:文档之家› 单片机低频信号发生器课程设计.

单片机低频信号发生器课程设计.

目录一、题目的意义 (1)二、本人所做的工作 (1)三、课设要求 (2)四、课设所需设备及芯片功能介绍 (2)4.1、所需设备 (2)4.2、芯片功能介绍 (2)五、总体功能图及主要设计思路 (5)5.1、总体功能图 (5)5.2、主要设计思想 (5)六、硬件电路设计及描述 (7)6.1、硬件原理图 (7)6.2、线路连接步骤 (7)七、软件设计流程及描述 (7)7.1、锯齿波的实现过程 (7)7.2、三角波的实现过程 (8)7.3、梯形波的实现过程 (9)7.4、方波的实现过程 (11)7.5、正弦波的实验过程 (12)7.6、通过开关实现波形切换和调频、调幅 (13)八、程序调试步骤与运行结果 (15)8.1、调试步骤 (15)8.2、运行结果 (15)九、课程设计体会 (17)十、参考文献 (18)十一、源代码及注释 (18)一、题目的意义(1)、利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。

(2)、我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的函数发生器。

(3)、掌握各个接口芯片(如0832等的功能特性及接口方法,并能运用其实现一个简单的微机应用系统功能器件。

(4)、在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习。

因此,缺乏一种系统的设计锻炼。

在课程所学结束以后,这样的课程设计十分有助于学生的知识系统的总结到一起。

(5)、通过这几个波形进行组合形成了一个函数发生器,使得我对系统的整个框架的设计有了一个很好的锻炼。

这不仅有助于大家找到自己感兴趣的题目,更可以锻炼大家单片机知识的应用。

二、本人所做的工作本次课设组员:刘正、邓强、刘志组长:刘正经过了这一个星期的时间,我们已经基本完成了老师所提出的课程设计要求。

其中,我本人是组长整个系统的设计框架和编写代码由我亲自完成。

由于我们上课没有接触过正弦波因此通过在图书馆和网络上找资料已经顺利完成。

然后通过上机连接线路把电路板和PC 机相连接之后对每一个波形单个调试完成后,再组合起来通过开关控制波形的输出,最后实现老师所要求的功能。

三、课设要求1、设计接口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图。

2、编写下列控制程序(1)能输出正弦波、三角波、锯齿波、方波、梯形波。

(2)由K0-K4键分别控制以上所述波形的产生。

(3)根据开关对输出波形的频率、幅度进行控制调节。

四、课设所需设备及芯片功能介绍4.1、所需设备单片机最小开发系统,DAC0832一片,PC 机一台,运算放大器,其他器件任选。

4.2、芯片功能介绍(1)、DAC0832芯片介绍:DAC0832为一个8位D/A转换器, 单电源供电, 在+5~+15V范围内均可正常工作。

基准电压的范围为±10V, 电流建立时间为1μs,CMOS 工艺, 低功耗20mW 。

DAC0832的内部结构框图如下图所示。

< 图4 ―― 1 >DAC0832的外部引脚及功能介绍图如下:< 图4 ―― 2 >(2)、DAC0832的应用:DAC0832一是用作单极性电压输出,二是用作双极性电压输出,最后是用作程控放大器。

(3)、DAC0832与8031的连接方式:DAC0832的与单片机的连接方式有三种方式:一、单缓冲二、双缓冲、三是直通方式。

本程序采用的是方式一即单缓冲方式,ILE为高电平,CS 、WR1、WR2、XFER 为低电平。

< 图4 ―― 3 >电源及时钟引脚:Vcc 、Vss ;XTAL1、XTAL2控制引脚PSEN、ALE 、EA 、RESET (即RST ).I/O口引脚:P0、P1、P2、P3为4个8位I/O口的外部引脚.RST/VPD(9脚)RST:单片刚接上电源时,其内部各寄存器处于随机状态,在此脚输入24个时钟周期宽度以上的高电平将使单片机复位。

单片机正常工作时,此脚应为≤0.5V 低电平。

VPD:备用电源输入端。

当Vcc 下降到低于规定的值,而VPD 在其规定的电压范围内(5±0.5V )时,VPD 就向内部RAM 提供备用电源以保持内部RAM 的数据。

ALE/PROG(30引脚)ALE 引脚输出为地址锁存允许信号, 当单片机上电工作后,ALE 引脚不断输出正脉冲信号. 当访问片外存储器时,ALE(地址锁存允许信号输出脉冲的负跳沿用于16位地址的低8位锁存信号。

不访问片外存储器,ALE 端以时钟振荡器频率的1/6固定输出正脉冲。

在访问外部数据存储器时(执行MOVX 指令),ALE 会丢失一个ALE 脉冲。

MCS-51单片机的片外总线结构< 图4 ―― 4 >MCS-51系列单片机片外引脚可以构成如上图所示的三总线结构:地址总线(AB )数据总线(DB )控制总线(CB )8031各个口的功能定义P0口:双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可带8个LSTTL 负载。

P1口:8位准双向I/O口,可带4个 LSTTTL负载。

P2口:8位准双向I/O口,与地址总线(高8位)复用。

P3口:8位准双向I/O口,双功能复用口。

五、总体功能图及主要设计思路5.1、总体功能图< 图5 ―― 1 >5.2、主要设计思想从此题的要求我的设计思路分以下几步:(一)、课设需要各个波形的基本输出。

如输出锯齿波、三角波、梯形波、方波、正弦波。

这些波形的实现的具体步骤:锯齿波实现很简单,只需要一开始定义一个初值,然后不断的加1,当溢出后又重初值开始加起,就这样循环下去。

三角波的实验过程是先加后减,我的一开始的实现方法是先是从00H 开始加1直到溢出后就执行减1操作,就这样不断调用这个循环。

梯形波的实现过程是前后加和减的速度不同而已,如你可以在上升加的步数大一些,减时少一些。

方波的实现方法是连续输出一个数,到某个时候就改变一下值,可以把值定义为正极性的,也可以是负极性。

正弦波的实现是非常麻烦的。

它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。

在设计之初,我一直都在尝试使用数学的泰勒级数展开来计算输出波形,使用这种方法,实现起来相对来说要比较困难一点,而且会使得频率会下降。

要使得它达到更高的频率,就得另辟蹊径了。

分析一下为什么频率上不去,主要原因在于,使用单片机进行正弦函数的运算时占去了不少时间,如果去掉这一计算过程波形的频率应该大有提高,另外就是CPU 时钟频率没有调至最高,以及DAC 转换过程需要时间。

为了达到更高的频率,首先就要免去单片机的计算负担,我使用的解决方法是人为计算出要输出的点,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。

这样做的好处在于,查表所耗费的时钟周期相同,这样输出的点与点之间的距离就相等了,输出的波形行将更趋于完美,当然更让我们感到的高兴的是它输出波形的频率将近达到了100K 赫兹,能够满足我们设计的扩展要求了。

为了实现频率的调整,我在一个正弦波周期里建了两百个点,如果我们隔一个取点的话,且在CPU 时钟频率不改变的情形下,正弦波频率将相对于前面的频率提高将近一倍。

这样我们就得到了解决频率调整的方法,首先进行CPU 时钟频率选择,再调整一个正弦函数一个周期输出的点数,幅度的调节是通过初始幅度设置再通过外部放大电路来调节,设计程序流程图如图所示。

(二)、通过P3口和开关K0-K5相连接来控制各个波形的输出。

能根据k0-k5键状态进行波形切换,开关键向上接“1”,产生波形,向下拔接“0”,无波形输出。

如K0键向上拔,K1-K4键向下拔,产生锯齿波; K1键向上拔,K0、K2-K4键向下拔,产生三角波;……以此类推。

通过K5键来控制调频/调幅。

六、硬件电路设计及描述6.1、硬件原理图< 图6 ―― 1 >6.2、线路连接步骤(1)D/A区0832片选信号CS 插孔和译码输出Y2插孔相连。

(2)用排线将D/A区D0~D7连到BUS2区XD0~XD7。

(3)将0832的WR 信号线连到BUS3区的XWR 上。

(4)D/A区的±12V 插孔分别与外置电源的±12V 端相连。

(5)W2区的VIN 接+12V,如果电源内置,VIN 插孔和D/A区的+12V插孔相连。

(6)D/A区的Vref 接W2区 Vref,并调节W2使 Vref=+5V。

(7)K0-K5开关分别接到P3口的P3.0-P3.5七、软件设计流程及描述7.1、锯齿波的实现过程锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。

然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。

流程图如下所示:< 图7 ―― 1 >7.2、三角波的实现过程三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。

此程序输入的VREF 的电压是+5V ,因此该波形输出的最大频率是初值为00H 和最终值为0FFH ,且步数为1,这样输出的波形是最大的。

程序流程图如下图所示:< 图7 ―― 2 >7.3、梯形波的实现过程梯形波输出跟锯齿波和三角波相似,只不过当加到顶峰后的一段时间内不改变A 的值,过了一段时间后再将减少A 的值,不过先后的步数可以一样也可以不一样。

然后减到初始的值后也要持续一段时间,然后再进行加数,如此循环下去。

< 图7 ―― 3 >7.4、方波的实现过程此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。

这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。

流程图如下图所示:< 图7 ―― 4 >7.5、正弦波的实验过程正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。

输出的数据刚好是256个数据,这样则可以直接相加就行了。

7.6、通过开关实现波形切换和调频、调幅通过开关实现波形的切换比较简单只需通过输出波形后不断返回到检测开关的子程序中,判断是否有别的开关拨动,如果有别的开关拨动则执行别的程序,否则输出原来的波形,不过如果要能够识别别的开关发生变化,必须将此开关关掉否则会识别不了别的键按下。

当然开关的调频和调幅的实现也一样,不过首先先输出一个波形,然后再检测开关是否需要调频或者调幅,如果需要则转入到相应的程序中,最后再重新输出波形。

相关主题