摘要

本文以STC89C51单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率798.6HZ的波形。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。

1设计选题及任务

设计题目:基于单片机的信号发生器的设计与实现

任务与要求:

设计一个由单片机控制的信号发生器。运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。信号发生器所产生的波形的频率、幅度均可调节。并可通过软件任意改变信号的波形。

基本要求:

1.产生三种以上波形。如正弦波、三角波、矩形波等。

2.最大频率不低于 500Hz。并且频率可按一定规律调节,如周期按1T,2T,3T,4T或1T,2T,4T,8T变化。

3.幅度可调,峰峰值在0——5V之间变化。

扩展要求:产生更多的频率和波形。

2系统概述

2.1方案论证和比较

2.1.1总体方案:

方案一:采用模拟电路搭建函数信号发生器,它可以同时产生方波、三角波、正弦波。但是这种模块产生的不能产生任意的波形(例如梯形波),并且频率调节很不方便。

方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。

方案三:使用集成信号发生器发生芯片,例如AD9854,它可以生成最高几十MHZ的波形。但是该方案也不能产生任意波形(例如梯形波),并且价格昂贵。

方案四:采用AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净。它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ以上。性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。

经比较,方案四既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案.

2.1.2改变幅度方案:

方案一:可以将送给DA的数字量乘以一个系数,这样就可以改变DA输出电流的幅度,从而改变输出电压;但是这样做有很严重的问题,单片机在做乘法运算时需要很长的时间,这样的话输出波形的频率就会很低,达不到至少500HZ的要求;

并且该方案的输出电压做不到连续可调,当DA的输入数字量比较小时,输出的波形失真就会比较严重。

方案二:将输出电压通过一个运算放大器的放大。这样还有个优点是幅度连续可调。

经比较,方案二既可满足课程设计的基本要求,并且电路也挺简单。

2.2工作原理

数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成系统框图如下图所示。

系统框图

89C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。当数字信号电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。

波形ROM表是将信号一个周期等间距地分离成64个点,储存在单片机得RON内。具体ROM表是通过MATLAB生成的,例如正弦表,MATLAB生成的程序如下:

x=0:2*pi/64:2*pi; y=round(sin(x)*127)+128

3单元电路设计与分析

3.1.1主控电路

设计中主要采用STC89C51型单片机,它具有如下优点:

(1)拥有完善的外部扩展总线,通过这些总线可方便地扩展外围单元、外围接口等。(2)该单片机内部拥有4K字节的FLASH ROM程序存储器空间和256字节的RAM数据存储空间,完全可以满足程序的要求。由于该芯片可电擦写,故可重复使用。如果更改程序内容,可将芯片拿下重新烧写。

(3)该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。

中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU正在

处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧

急事件。

在波形发生器中,用两个开光直接与外部中断0和外部中断1的管脚相连,其中S1开光用来改变波形,S2开光用来改变频率。在程序主函数中,我们写了个死循环一直输出一个默认的波形,当S1或S2按下又抬起时,程序会暂时跳出死循环,进入中断处理程序,从而对波形和频率进行改变。

时钟电路。由于频率较大时,三角波、正弦波、方波等波中每一点延时时间为几微秒,故延时时间还要加上指令时间即可得到指定频率的波形,该电路用11.0592MHz晶振。

主控电路图

3.1.2 数/模转换电路

由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。

根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。本设计选用直通方式。

DAC0832的数据口和单片机的P0口相连。

CSDA:片选信号输入线(选通数据锁存器),低电平有效;

WR:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;

数模转换电路

3.1.3运算放大电路和低通滤波电路

LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连.

第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-(R2/R1)倍。

题目要求输出的电压在0-5V可调,而V1的电压大约是5V,所以R1选择5K的电阻,R2选择10K的电位器,这样最大的输出电压为5*(10/2)=10,最小电压为0,可以实现题目要求的0-5V。

在第二个运算放大器的输出端连了一个低通滤波器。如果不加低通滤波器,也能够生成波形,但是产生的信号中毛刺很多,加一个低通滤波器不仅起到的滤波的作用,还起到了平滑的作用。低通滤波器的截止频率F=1/(2*pi*R3*C6),这里我们选择R3 为100欧姆电阻,C6为104电容,截止频率F=16KHZ。实验表明,此时的输出波形效果不错。

3.1.4串口通信电路

通用异步收发器(UART)是一种串行接口,一般微处理器中都包含这种外设接口。异步串行接口提供了一种简单的途径,使两个器件无需共享同一个时钟信号就能进行通信。如果再加入一个合适的电平转换器MAX232,串口就能能用在RS232和RS485等网络中实现通信,或者与计算机的COM端口连接。串口只需两根信号线(RX和TX)即可实现,而且只要两端器件都采用同样的位格式和波特率,那么它们无需其它任何对方的信息就可以成功传输数据。

串口通信电路图

3.2系统软件设计

软件设计上,根据功能分了几个模块编程。模块主要有:主程序模块、外部中断0模块,外部中断1模块。

主程序:

主程序先是进行一些初始化的工作,然后根据波形标志a,b,c,d,e的值进入相应的while 循环。这样写的好处是输出的波形频率可以790多HZ。在while循环中,单片机根据地址标志位不停低查表,然后把查得的值赋给DAC0832的数据口,然后地址标志位加一,并判断地址标志位是否等于64,如果是就置0再往下执行,如果不是直接往下执行。然后根据频率标志位进行相应的延时。

主程序流程图

中断服务程序:

本程序中两个外部中断分别起到了控制波形和频率的作用。在程序中还加入了消抖部分。

4安装调试及测量数据分析

4.1调试过程;

1.不通电,用万用表根据电路图仔细检查各线路连接是否正常。

2.首先是调试单片机部分,DA和运算放大器芯片不接。用STC_ISP_V483软件通过串口下程序。看是否可以正常下程序。

3.当可以正常下程序时,给51单片机下一个让所有I/0口一会儿输入0,延时,再输出1,以此类推。用万用表测量各I/O口得电压是不是一会儿高,一会儿低。

4.安上DA和运算放大器芯片,给单片机下一个输出正弦波的测试程序,通过示波器看输出是否正常。

5.给单片机下一个完整的程序,分别按下S1,看波形是否改变。按下S2,看频率是否改变。

4.2频率的测量数据:

单位:HZ周期T2T3T4T5T6T7T8T

理论值798.6399.3266.2199.7159.7133.1114.199.8

实际值798.6399.6266.5199.9159.9133.3114.299.9

4.3出现的问题与解决的方法:

1.调试单片机的串口时,发现不能正常的下程序。我想可能是单片机坏了借了一块学习板测试了一下单片机芯片,发现可以正常下载。这说明很可能是MAX232的电路出了问题。我仔细查看了电路图,又上网查了下其他的MAX232的电路图,发现我的电路图和别人的不一样。我是按照郭天翔的那本《新概念51单片机C语言教程 入门、提高、开发、拓展全》第130页的串口电路画的图,电路图中MAX232的TIOU1接串口的第3脚。而其他书上有些电路图却是MAX232的TIOU1接到了串口的第2脚。于是我将MAX232的TIOU1接串口的第2脚,再下程序,终于可以正常下载了。

2.刚开始写的测试程序输出的波形失真很大。我想可能是波形的ROM表里的数据值过小,导致DA输出的误差很大。因而卧将波形的ROM表里的数据值调大,在测试时发现波形变得好多了。

3.调试波形的时候我发现矩形波的失真比较大。我想到可能是低通滤波器的截止频率太低了,因而我将RC低通滤波器的电阻由1K换成了100欧姆,效果好了很多。

4.4系统仿真波形:

矩形波

锯齿波

正弦波

4.5效果分析:

由4.2的频率理论值与实际值,可知频率在T,2T,3T,4T,5T,6T,7T,8T上频率误差很小。

最终的波形输出效果也很不错。

4.6测量仪器

示波器

直流稳压电源

万用表

5结束语

基于单片机的信号发生器设计,这个信号发生器的设计中涉及到一个典型的控制过程。通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM324可以将其电流输出线性地转换成电压输出,再将电压经过运算放大器的放大,可以得到足够幅度的信号。通过程序的控制,可以产生一系列有规律的波形。这样一个信号发生装置在控制领域有相当广泛的应用范围。

最终做出来的信号发生器满足了题目中的所有要求:

1.产生五种波形。正弦波、三角波、矩形波、梯形波,锯齿波。

2.最大频率为798.6HZ。并且频率可按按1T,2T,3T,4T,5T,6T,7T,8T变化。

3.幅度可调,峰峰值在0——5V之间变化。

当然还是存在不足的地方,比如不能实现频率的按一个小的步进调整。并且当频率太小时矩形波会有些失真。

信号发生器可以生成更多的波形,只需要再加些波形表即可。

在这里得感谢学校为我们提供个这样一个实践的机会,当然还得感谢实验室指导老师们的细心指导。

参考文献:

[1] 郭天翔.新概念51单片机C语言教程 入门、提高、开发、拓展全.北京.电子工业出版社 2009.1

[2] 童诗白.模拟电路技术基础[M].北京:高等教育出版社,2000.171~202.

附录

1:总电路图

c语言设计函数型号发生器,基于51单片机函数信号发生器相关推荐

  1. 基于51单片机的信号发生器

    目录 一.项目功能 二.仿真 三.程序 资料下载地址:基于51单片机的信号发生器 一.项目功能 1. 输出矩形波.梯形波.三角波.锯齿波.正弦波五种波形: 2. 每种波形的频率可更改: 3. 采用lc ...

  2. c语言爱心灯制作步骤,基于51单片机设计的心形花样灯(PCB+Proteus仿真+源程序+设计报告)...

    设计了一个基于51单片机的心形花样灯电路,该电路可以实现32个LED灯循环闪亮.依次熄灭.对角闪亮.对角熄灭.间隔闪亮.间隔熄灭等多种功能,可以显示42种不同形式的变化效果.该电路主要由单片机芯片ST ...

  3. 25、基于51单片机函数信号发生器四种波形和频率显示系统设计

    摘  要 本文所设计的系统是利用51单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,即采用STC89C51 单片机作为控制核心,而在外围采用数字/模拟转换电路(DAC0832).运放电 ...

  4. 基于51单片机低频信号发生器

    具体实现功能 系统由STC89C51/52+DAC0832模块+指示及按键模块+LM358模块+LCD1602显示模块+电源模块构成. 1.LCD1602显示波形种类和频率值(频率范围10-100HZ ...

  5. c语言程序 电子钢琴按键,基于51单片机8按键电子琴-简易版系统设计(原理图+程序仿真+论文)...

    一. 引言 单片机因其体积小,功能强,价格低廉而得到广泛应用,同时随着我国经济的飞速发展,单片机在越来越多的领域得到了广泛的应用,现在国内的单片机多用于电话,玩具和LCD等产品,预计在未来,利用单片机 ...

  6. c语言 修改密码源码,基于51单片机串口密码修改设计-(源码+电路图)

    名称:多功能电子密码锁(使用STM32平台 使用 keiluvision软件,用C语言写代码) 系统由STM32单片机核心板电路.7位按键电路.串口电路.电源电路.液晶1602电路.继电器模块电路和L ...

  7. 基于51单片机的信号发生器设计

    目    录 引言... 1 1  课题背景意义及研究内容... 1 1.1 课题背景及研究意义... 1 1.2 课题研究内容... 2 2  设计方案选择... 2 2.1 系统控制芯片选择... ...

  8. c语言单灯左移程序,基于51单片机的广告灯左移电路设计与程序分析

    1.实验任务 做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出"0"时,发光二极管亮,开始时P1.0→P1.1 ...

  9. c51语言花样流水灯汇编程序,基于51单片机的各种花样的流水灯c51程序

    /*----------------------------------------------- 功能:流水灯对称移动闪烁(双闪烁) -------------------------------- ...

  10. 基于51单片机的光照强度检测c语言程序,智能仪器课程设计-基于51单片机的光照强度检测报告.doc...

    该设计论文已经通过各大高校老师审核认可并通过答辩,.欢迎大家下载学习交流.如有疑问可随时联系店主,竭诚为您解答!! 课程设计报告 课程名称: 智能仪器课程设计 题 目: 基于51单片机的光照强度 摘要 ...

最新文章

  1. Java学习笔记10
  2. 英雄会解读:不一样的回答,一样的CTO
  3. python学习-序列化对象(pickle)
  4. 【数学】拉格朗日插值(luogu 4781/金牌导航 拉格朗日插值-1)
  5. 线性代数:线性方程组的解
  6. 计算机自爆命令,《我的世界》僵尸自爆指令一览 简单实用!
  7. lua的元表、模块和面向对象
  8. linux中kvm配置文件,linux操作系统内配置vlan+kvm虚拟机
  9. html自定义表格插件,简单实用的jQuery响应式表格插件
  10. windows程序设计基础知识
  11. 第六章、面向对象(oop)
  12. 安川机器人SOCKET 通讯
  13. 坐标转换 | 高斯坐标转经纬度坐标
  14. 怎么用计算机测出来体脂,怎么测体脂比较科学
  15. matlab怎么画碎石图,R语言学习笔记-主成分分析(PCA)
  16. C/C++二维数组传参
  17. SwiftUI学习笔记-【列表】
  18. 前端移动端端测试——显示控制台
  19. 第二篇第十一章灭火救援设施
  20. “智数据,创未来”——2018中国存储与数据峰会在京盛大举行

热门文章

  1. SQL常用字符串截取
  2. Cocos2d-X开发中国象棋《八》走棋
  3. 室内无源定位—激光SLAM在无人机上的飞行测试
  4. hmcl手机版_hmcl启动器手机版下载-hmcl启动器官方正版下载v3.3.172-1y2y游戏
  5. 二分查找法最大最小比较次数
  6. JT/T808校验码计算(按字节异或求和)
  7. 怎么制止qq刷屏代码-vbs
  8. Windows游戏编程大师技巧(第2版)
  9. 微信打飞机java 源代码_微信打飞机
  10. C语言程序设计C语言之父,C程序设计语言-美-里奇-C语言之父-机械工业出版社