单片机实现简易波形发生器

单片机实现简易波形发生器
单片机实现简易波形发生器

电子信息工程专业

单片机课程设计报告

题目简易波形发生器

姓名

学号

班级

指导教师

2013年7 月4 日

要求:

1.指导教师按照课程设计大纲要求完成学生课程设计指导工作。2.课程设计任务书由指导教师照大纲要求填写,内容要全面。

3.课程设计报告由参加本学生填写。课程设计结束时交指导教师。4.指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。

5.课程设计任务书和报告要语言流畅,图表正确规范。

6.本表要用钢笔、圆柱笔填写或打印,字迹工整。

课程设计报告

1 设计原理和技术方法:

1.1 电路工作原理分析

本次单片机实习采用的是单片机STC89C52,对于简易波形发生器设计的硬件电路主要为三个部分,为显示部分、键盘部分、D/A转换电路,以下对三个部分分别介绍。

1.1.1 显示电路原理

如图1.1所示八位八段数码管为共阴极数码管,通过两个74HC573锁存器和单片机连接,一片573的LE 为位选信号另一片的LE 为段选信号,分别由单片机的P2.7和P2.6控制,高电平有效。当P2.7=1、P2.6=0时,位选有效,P0.0-P0.7分别控制01-08八位数码管选通,低有效,即通过P0口送出数据,哪一位为0则哪一位数码管有显示;当P2.6=1、P2.7=0时,段选有效,此时P0.0-P0.7分别控制每一位八段数码管的每一段a b c d e f g dp 的亮灭,高有效,从而使数码管显示数字0-9。显示段码如表1.1所示。

表1.1 共阴极数码管显示段码

显示字符 0 1 2 3 4 5 6 7

8

显示段码 3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

显示字符 9

A

b

C

D

E

F

显示段码

6FH 77H 7CH 39H 5EH 79H 71H 00H

1.1.2 键盘电路原理

如图1.2所示为4×4的矩阵式键盘和单片机的P3口相连,行连接P3.0-P3.3,列连接P3.4-P3.5。用扫描法对按键进行扫描,先将所有行置0,所有列置1,当有按键按下时,通过对P3口的状态查询则按下的按键所在列将为0,其余仍未1,通过延时去抖动判断是否真有按键按下,若有,则逐行扫描,判断按键所在行,最后返回按键键码,并去执行相应按键的程序。返回键码如表1.2所示。

图 1.1 显示电路

表1.2 键盘扫描返回键码

1.1.3 D/A 转换电路原理

如图1.3所示为AD/DA 转换芯片PCF8591

和单片机相连的电路,其中4路D/A ,一路A/D ,简易波形发生器用到的为D/A 转换,单片机的P2.0及P2.1口和PCF8591的时钟线SCL 、数据线SDA 相连,通过I2C 串行总线向PCF8591发送数据并进行数字量转换成模拟量后输出。

1.2 元器件选择及说明

简易波形发生器是由单片机向D/A 转换器中输入数字量,通过D/A 转换成模拟量从而

按键 0

1

2

3

4

5

6

7

返回键码 EEH

DEH

BEH

7EH

EDH

DDH

BDH

7DH

按键 8

9

A

B

C

D

E

F

返回键码

EBH DBH BBH 7BH E7H D7H B7H 77H

图1.2 键盘电路图

图1.3 D/A 转换电路

输出波形,因此用到的器件主要有单片机STC89C51,AD/DA转换芯片PCF8591,四位共阴极数码管,4×4的矩阵式键盘。下面对两种芯片进行说明。

1.2.1 单片机STC89C51

单片机的引脚可分为电源、外接晶振、控制和可编程输入/输出引脚。

(1)电源引脚(2根)

VCC:电源输入,接+5V电源

GND:接地线

(2)外接晶振引脚(2根)

XTAL1:片内振荡电路的输入端

XTAL2:片内振荡电路的输出端

(3)控制引脚(4根)

RST:复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG:地址锁存允许信号/片内EPROM编程脉冲

PSEN:外部存储器读选通信号

EA/VPP:程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

(4)可编程输入/输出引脚(32根)

STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

P0口(P0.0~P0.7):8位双向I/O口线;

P1口(P1.0~P1.7):8位准双向I/O口线;

P2口(P2.0~P2.7):8位准双向I/O口线;

P3口(P3.0~P3.7):8位准双向I/O口线。

1.2.2 AD/DA转换芯片PCF8951

PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串行I2C总线接口。3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C总线而不需要额外硬件。器件的地址、控制和数据通过两线双向I2C 总线传输。

其引脚如下:

AIN0~AIN3:模拟信号输入端。

A0~A3:引脚地址端。

VDD、VSS:电源端(2.5~6V)。

SDA、SCL:I2C 总线的数据线、时钟线。

OSC:外部时钟输入端,内部时钟输出端。

EXT:内部、外部时钟选择线,使用内部时钟时EXT 接地。

AGND:模拟信号地。

器件功能包括多路复用模拟输入、片上跟踪和保持功能、8位模数转换和8位数模转换。最大转换速率取决于I2C总线的最高速率。具体功能描述如下:

(1)地址

I2C 总线系统中的每一片PCF8591通过发送有效地址到该器件来激活。该地址包括固定部分和可编程部分。可编程部分必须根据地址引脚A0、A1和A2来设置。在I2C 总线协议中地址必须是起始条件后作为第一个字节发送。地址字节的最后一位是用于设置以后数据传输方向的读/写位。地址如图1.4所示。

(2)控制字

发送到 PCF8591 的第二个字节将被存储在控制寄存器,用于控制器件功能。控制寄存器的高半字节用于允许模拟输出,和将模拟输入编程为单端或差分输入。低半字节选择一个由高半字节定义的模拟输入通道。控制字如图1.4所示。

(3)D/A 转换

发送给 PCF8591 的第三个字节被存储到DAC 数据寄存器,并使用片上D/A 转换器转换成对应的模拟电压。这个D/A 转换器由连接至外部参考电压的具有256个接头的电阻分压电路和选择开关组成。接头译码器切换一个接头至DAC 输出线。D/A 转换顺序的波形如图1.5。

1.3 程序设计及流程图

本次优秀的设计为当输入任意频率,数码管显示出频率并输出相应频率的方波,此次设计是由定时时间决定,频率范围为30Hz —500Hz ,当由按键输入次频率范围内任意频率 时,对应数码管显示出来并在示波器上输出方波,流程图如图1.6所示。程序见附录。

图1.3 地址

图1.4 控制字

×××

×××

msb

lsb

A/D CHANNEL NUMBER

CONTROL BYTE AUTO-INCREMENT FLAG

ANALOGUE INPUT PROGRAMMING

ANALOGUE OUTPUT ENABLE FLAG

图1.5 D/A 转换顺序

开始I2C 总线初始化

有数字键 按下么?

数字键按下次数n=3?

是数码管显示按键数字

单片机向PCF8591发送地址位、控制位发送方波数据位并延时是否有幅值加减按键按下?

是“幅值加”键按下?

幅值加0.1V

幅值减0.1V 是

图1.6 优秀设计流程图

2 课程设计工作记录

2.1 设计步骤和时间安排

6月17日至6月18日,选课题,查阅资料。

6月19日至6月21日,研究电路图。

6月22日至7月1日,根据课题要求,编写程序,从及格开始,然后中,良,优秀依次展开。并进行仿真,纠正程序的功能错误,不断完善程序。

7月2日,进行答辩。

7月4日,交实习报告。

2.2 课题完成结果说明

(1)此次简易波形发生器实现了以下功能:

及格:上电之后,数码管最后四位将显示1234,当按键1按下时,显示1234灭亮闪烁一次,时间间隔为0.5s;当按键2按下时,显示1234灭亮闪烁两次,当按键3按下时,显示1234灭亮闪烁三次;当按键4按下时,显示1234灭亮闪烁四次。

中等:上电之后,示波器显示100Hz方波,数码管显示频率100。当有“频率加”按键按下时,频率加100Hz;当有“频率减”按键按下时,频率减100Hz;当有“幅值加”按键按下时,幅值加0.1V;当由“幅值减”按键按下时,幅值减0.1V。

良好:上电之后,数码管无显示,示波器无波形。当有按键1按下时,示波器出现方波,数码管显示对应频率,此时若有频率加减按键按下,方波频率加减100Hz,若有幅值加减按键按下时,方波幅值加减0.1V;当有按键2按下时,示波器出现三角波,数码管显示对应频率,此时若有频率加减按键按下,三角波频率加减100Hz;当有按键3按下时,示波器出现正弦波,数码管显示对应频率,此时若有频率加减按键按下,正弦波频率加减100Hz。

优秀:上电之后示波器无波形,数码无显示,当输入030Hz—500Hz内的任意频率后,数码管显示所输频率,示波器显示相应频率的波形。、

(2)实验中遇到的问题:

1.由于是用I2C总线串行输入数据,延时时间较长,定时时间不准确,方波频率显示只能到700Hz,三角波和正弦波频率只能显示到400Hz。

2.由于显示部分占用了延时时间,为了增大频率,将显示部分的延时减小里许多,导致了数码管后两位显示较暗。

3.由于定时不是很准确,优秀中的各个频率所输出的波形也不是特别精确。

(3)总结

通过这三周的实习,感觉时间很紧迫,我认为想要真正做好一次设计三周的时间真的不够用,觉得还有很多不足的地方需要改进,但却已经没有时间。在之前学习单片机感觉还能驾驭,即使在平时实验中也还能凑合应付。但当自己真正做一个模块时,有种无从下手的感觉。并且这次设计我们用的是C语言编程,对于单片机的C语言编程我们还不太了解,后来通过去图书馆借书和查阅资料慢慢的了解了许多C语言程序,之后便开始研究电路图并开始编程,刚开始比较困难,问题很多,但在不断的失败和解决问题的过程中,我

一点点进步,最终完成了这次设计任务。

这次课程实习是我受益匪浅,让我对单片机的原理和功能有了进一步的了解,学到了更多的电路知识,在对单片机编程过程中,认识了解了IIC总线输入方式,了解了PCF8591类芯片的使用方法。从这次实习,我也发现了自己的许多不足,并更加完善了自我,锻炼了动手能力,而且学会了将理论知识和实际相结合。

课程设计验收

指导教师评语及成绩:

成绩

指导教师签字

年月日

教研室主任意见

教研室主任签字

年月日

附录

简易波形发生器优秀设计程序:

#include

#include

#include

#include

#define uint unsigned int //宏定义

#define uchar unsigned char

sbit SCL=P2^0; //时钟位

sbit SDA=P2^1; //数据位

sbit dula=P2^6; //数码管段选锁存端

sbit wela=P2^7; //数码管位选锁存端

uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管段码uchar code weima[]={0xdf,0xbf,0x7f};

uchar code plth_tab[]={0xc4,0xc6,0xc8,0xca,0xcc,0xce,0xcf,0xd1,0xd2,0xd3,0xd4,0xd6,0xd7, 0xd8,0xd9,0xda,0xdb,0xdb,0xdc,0xdd,0xde,0xdf,0xdf,0xe0,0xe0,0xe1,0xe2,0xe3,0xe3,0xe4,0xe 4,0xe5,0xe5,0xe6,0xe6,0xe7,0xe7,0xe7,0xe8,0xe8,0xe9,0xe9,0xe9,0xea,0xea,0xea,0xeb,0xeb,0x eb,0xeb,0xec,0xec,0xec,0xed,0xed,0xed,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xef,0xf0,0xf 0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,0xf3,0xf3,0 xf3,0xf3,0xf3,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5 ,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0x f7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, 0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf 9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xf a,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x

fb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0 xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0 xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd, 0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xf d,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0 xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0 xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0 xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0 xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x ff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x ff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x ff};

uchar code pltl_tab[]={0xf0,0xf0,0xf0,0xf0,0xe0,0x20,0xf0,0x00,0x20,0x40,0xf0,0x50,0x50,

0x60,0x30,0x20,0x00,0xf0,0x90,0x40,0x20,0x00,0xa0,0x1a,0x50,0xd0,0x60,0x20,0xb0,0x05,0x 95,0x25,0xb5,0x15,0xa5,0x05,0x95,0xf5,0x4a,0xaa,0x0a,0x6a,0xca,0x20,0x80,0xe0,0x0a,0x6a, 0xca,0xfa,0x5a,0xba,0xea,0x4a,0x7a,0xaa,0x0a,0x3a,0x6a,0xca,0xfa,0x2a,0x5a,0x8a,0xea,0x1a, 0x4a,0x7a,0xaa,0xda,0x0a,0x3a,0x60,0x90,0xc0,0xf0,0x20,0x55,0x7f,0x9f,0xcf,0xf0,0x3f,0x6f, 0x87,0x9f,0xcf,0xed,0x0b,0x2a,0x5a,0x72,0x8a,0xba,0xd2,0xea,0x15,0x2d,0x45,0x5d,0x75,0xa 5,0xbd,0xd5,0xeb,0x00,0x18,0x30,0x48,0x60,0x78,0x90,0xa8,0xc0,0xd8,0xf0,0x04,0x18,0x30, 0x48,0x60,0x78,0x88,0x98,0xa8,0xc0,0xd8,0xe8,0xf8,0x08,0x20,0x38,0x45,0x52,0x60,0x78,0x 90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0,0x00,0x10,0x20,0x30,0x40,0x50,0x5c,0x69,0x75,0x80,0x90 ,0xa0,0xb0,0xbc,0xc9,0xd5,0xe0,0xf0,0x00,0x10,0x1c,0x29,0x35,0x40,0x4c,0x59,0x65,0x70,0x 7c,0x89,0x95,0xa0,0xac,0xb9,0xc5,0xd0,0xda,0xe3,0xed,0xf6,0x00,0x0d,0x1a,0x27,0x35,0x40, 0x4a,0x55,0x5f,0x6a,0x74,0x7d,0x87,0x90,0x9a,0xa4,0xad,0xb7,0xc0,0xca,0xd2,0xda,0xe2,0xe a,0xf2,0xfa,0x02,0x0a,0x12,0x1a,0x22,0x2a,0x32,0x3a,0x42,0x4a,0x52,0x5a,0x62,0x6a,0x72,0 x7a,0x82,0x8a,0x91,0x98,0x9e,0xa5,0xac,0xb3,0xba,0xc1,0xc8,0xce,0xd5,0xdc,0xd3,0xea,0xf0 ,0xf6,0xfc,0x02,0x08,0x0e,0x14,0x1a,0x20,0x26,0x2c,0x32,0x38,0x3e,0x44,0x4a,0x50,0x56,0x 5c,0x62,0x68,0x6e,0x74,0x7a,0x80,0x85,0x8a,0x8f,0x94,0x9a,0x9f,0xa4,0xaa,0xb0,0xb5,0xba, 0xc0,0xc5,0xca,0xcf,0xd4,0xda,0xdf,0xe4,0xe8,0xed,0xf2,0xf6,0xfb,0x00,0x05,0x0a,0x0f,0x13, 0x17,0x1b,0x20,0x24,0x28,0x2c,0x30,0x35,0x3a,0x3e,0x41,0x44,0x48,0x4b,0x4e,0x52,0x56,0 x5a,0x5d,0x61,0x65,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7d,0x80,0x83,0x86,0x8a,0x8e,0x93,0x9 7,0x9b,0x9f,0xa3,0xa8,0xac,0xb0,0xb4,0xb8,0xbc,0xc0,0xc5,0xc9,0xcc,0xcf,0xd2,0xd5,0xd8,0 xdc,0xdf,0xe2,0xe5,0xe8,0xeb,0xee,0xf1,0xf5,0xf8,0xfb,0xfe,0x01,0x03,0x06,0x08,0x0b,0x0e, 0x10,0x13,0x15,0x18,0x1b,0x20,0x23,0x25,0x28,0x2b,0x2d,0x30,0x32,0x35,0x37,0x3a,0x3d, 0x3f,0x42,0x44,0x47,0x4a,0x4f,0x52,0x55,0x58,0x5b,0x5f,0x62,0x64,0x68,0x6a,0x6d,0x70,0x 73,0x76,0x79,0x7b,0x7d,0x80,0x82,0x85,0x88,0x8a,0x8c,0x8e,0x91,0x93,0x96,0x99,0x9b,0x9 d,0x9f,0xa3,0xa6,0xa8,0xaa,0xad,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,0xbf,0xc1,0x c3,0xc5,0xc6,0xc8,0xca,0xcc,0xce,0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xdd,0xdf,0xe0,0xe2, 0xe3,0xe4,0xe6,0xe8,0xe9,0xea,0xec,0xee,0xf0,0xf2,0xf4,0xf5,0xf6,0xf8,0xfa,0xfb,0xfc,0xfe, 0xff};

uchar code fz_tab[]={0x05,0x0a,0x0f,0x14,0x1a,0x1f,0x24,0x29,0x2e,0x33,0x38,0x3d,0x43,

0x48,0x4d,0x52,0x57,0x5c,0x61,0x66,0x6c,0x71,0x76,0x7b,0x80,0x85,0x8a,0x8f,0x94,0x9a,0x 9f,0xa4,0xa9,0xae,0xb3,0xb8,0xbd,0xc3,0xc8,0xcd,0xd2,0xd7,0xdc,0xe1,0xe6,0xeb,0xf0,0xf5,0 xfa,0xff}; //方波幅值

void delay(uchar i);

void delayNOP();

void display();

void iic_start();

void iic_Init();

void check_ack();

void iic_sendbyte(uchar indata);

void DAC_fangbo(uchar dat);

void time(uchar th0,uchar tl0);

uchar jianzhi();

uchar kbscan();

void xsfb();

void plfzxs();

uint n=0;

uint t;

uchar a[3]={0,0,0};

uint shu;

uint m=0;

uint f=49; //幅值变量

uint flag=0;

uint flag_fb;

/***************************************

主程序

***************************************/

void main()

{

iic_Init(); //I2C总线初始化

while(1)

{

xsfb();

if(n==3)

DAC_fangbo(fz_tab[f]); //发送高位数据

}

}

/***************************************

定时子程序

***************************************/

void time(uchar th0,uchar tl0)

{

TMOD=0x01; //设置定时计数器T0,方式1定时

TH0=th0; //定时初值

TL0=tl0;

EA=1; //开总中断

ET0=1; //开T0中断

TR0=1; //启动T0

while(EA==1); //等待中断

}

/***************************************

中断子程序

***************************************/

void timer0() interrupt 1 using 1

{

EA=0; //定时时间到,关总中断

}

/***************************************

us延时函数(约2us)

***************************************/

void delayNOP()

{

_nop_();

_nop_();

}

/***************************************

延时子函数

***************************************/

void delay(uchar i) //延时函数1

{

for(;i>0;i--);

}

/***************************************************** 启动I2C总线子程序

时钟保持高,数据线从高到低一次跳变,I2C通信开始

******************************************************/ void iic_start()

{

SDA=1;

SCL=1;

delayNOP(); // 延时2us

SDA=0;

delayNOP();

SCL=0;

}

/***************************************

初始化I2C总线子程序

***************************************/

void iic_Init()

{

SCL=1;

delayNOP();

SDA=1;

delayNOP();

}

/************************************************* 主机应答位检查子程序,迫使数据传输过程结束

*************************************************/ void check_ack()

{

SDA=1; //置成输入

SCL=1;

F0=0;

delayNOP();

if(SDA==1) //若SDA=1表明非应答

F0=1; //置位非应答标志F0

SCL=0;

}

/***************************************

发送一字节子程序

***************************************/

void iic_sendbyte(uchar indata)

{

uchar n=8; //发送一字节数据,共八位

while(n--)

{

SDA=(bit)(indata&0x80); //发送最高位

SCL=1;

delayNOP();

SCL=0;

indata=indata<<1; //数据左移一位

}

}

/***************************************

发送数据子程序

***************************************/

void DAC_fangbo(uchar dat)

{

flag_fb=1;

iic_start(); //启动I2C

delayNOP();

iic_sendbyte(0x90); //发送地址位

check_ack(); //检查应答位

iic_sendbyte(0x40); //发送控制位

check_ack(); //检查应答位

while(flag_fb)

{

iic_sendbyte(dat); //发送数据

check_ack(); //检查应答位

time(plth_tab[shu-30],pltl_tab[shu-30]); //定时延时delay(90);

iic_sendbyte(0x00); //发送地位数据

check_ack(); //检查应答位

time(plth_tab[shu-30],pltl_tab[shu-30]); //定时延时plfzxs();

dat=fz_tab[f];

xsfb();

}

}

/*************************************** 显示子程序

***************************************/

void display()

{

uchar j;

for(j=0;j

{

dula=1;

P0=duanma[a[j]];

dula=0;

P0=0xff;

wela=1;

P0=weima[j];

wela=0;

delay(10);

}

}

/***************************************

返回键值子程序

***************************************/ uchar jianzhi()

{

uchar key;

key=kbscan();

switch(key)

{

case 0x11:flag=1;flag_fb=0;return(0);break;

case 0x21:flag=1;flag_fb=0;return(1);break;

case 0x41:flag=1;flag_fb=0;return(2);break;

case 0x81:flag=1;flag_fb=0;return(3);break;

case 0x12:flag=1;flag_fb=0;return(4);break;

case 0x22:flag=1;flag_fb=0;return(5);break;

case 0x42:flag=1;flag_fb=0;return(6);break;

case 0x82:flag=1;flag_fb=0;return(7);break;

case 0x14:flag=1;flag_fb=0;return(8);break;

case 0x24:flag=1;flag_fb=0;return(9);break;

default:flag=0;flag_fb=1;break;

}

}

/***************************************

键盘扫描子程序

***************************************/

uchar kbscan() //键盘扫描函数,使用行列逐级扫描法{

uchar sccode,recode;

P3=0xf0; //全"0"行扫描,列线输入

if((P3&0xf0)!=0xf0) //若有键按下

{

delay(1); //延时去抖动

if((P3&0xf0)!=0xf0) //再判断是否有键按下

{

sccode=0xfe; //若有,则逐行扫描初值

while((sccode&0x10)!=0)

{

P3=sccode; //输出行扫描码

if((P3&0xf0)!=0xf0) //本行有键按下

{

recode=(P3&0xf0)|0x0f;

while((P3&0xf0)!=0xf0);

delay(1);

while((P3&0xf0)!=0xf0);

return((~sccode)+(~recode)); //返回键码

}

else sccode=(sccode<<1)|0x01; //行扫描码左移一位

}

}

}

return 0xff; //无键按下,返回值为0xff

}

/***************************************

频率、幅值调节子程序

***************************************/

void plfzxs()

{

uchar key;

key=kbscan(); //返回键盘扫描键码

if(key==0x48) //若幅值加按键按下,幅值变量加1即幅值加0.1V {

if(f<49)

f++;

}

if(key==0x88) //若幅值减按键按下,幅值变量减1即幅值减0.1V {

if(f>0)

f--;

}

}

void xsfb()

{

shu=a[0]*100+a[1]*10+a[2];

display();

t=jianzhi();

if(flag==1)

{

a[m]=t;

n++;

m++;

flag=0;

}

if(m==3)

m=0;

if(n==4)

n=1;

}

简易波形发生器设计

摘要:单片机主要面对的是测控对象,突出的是控制功能,所以它从功能和形态上来说都是应测控领域应用的要求而诞生的。随着单片机技术的发展,它在芯片内部集成了许多面对测控对象的接口电路,如ADC、DAC、高速I/O接口、脉冲宽度调制器(Pulse Width Modulator,PWM)、监视定时器(Watch Dog Timer,WDT)等。这些对外电路及外设接口已经突破了微型计算机传统的体系结构,所以单片机也称为微控制器(Micro Controller)。 关键词:中央处理器;随机存储器;只读存储器

引言:一般函数发生器是由硬件组成的,它的输出频率范围宽,各项指标高,性能优良,因而在对输出波形要求较高的地方被广泛应用,这种仪器的缺点是电路复杂,成本高,输出波形种类不多,不够灵活。在对波形指标要求不高,频率要求较低的场合,可以用单片机构成一个波形发生器。产生所需要的各种波形,这样的函数发生器靠软件产生各种波形,小巧灵活,便于修改,且成本低廉,容易实现。 1设计概述 1.1 课程设计的目的 通过对本课题的设计,掌握A/D,D/A转换的应用,用单片机产生各种波形的方法及改变波形频率的方法。熟悉单片机应用系统的设计以及软硬件的调试。单片机本身并没有开发能力,必须借助开发工具即硬件开发环境才能进行开发。单片机的硬件开发环境有PC机、编程器和仿真机等。 1.2 设计的内容、要求 设计一个简易波形发生器,要求该系统能通过开关或按钮有选择性的输出正弦波、三角波、方波、及阶梯波等四种波形,并且这四种波形的频率均可通过输入电位器在一定范围内调节。 对于四种波形的切换,用两个开关的四种状态来表示(或用按钮)。选用常用的A/D转换芯片0809来实现模拟量的输入。D/A转换器选用0832来输出波形。

基于51单片机的波形发生器的设计讲解

目录 1 引言 (1) 1.1 题目要求及分析 (1) 1.1.1 示意图 (1) 1.2 设计要求 (1) 2 波形发生器系统设计方案 (2) 2.1 方案的设计思路 (2) 2.2 设计框图及系统介绍 (2) 2.3 选择合适的设计方案 (2) 3 主要硬件电路及器件介绍 (4) 3.1 80C51单片机 (4) 3.2 DAC0832 (5) 3.3 数码显示管 (6) 4 系统的硬件设计 (8) 4.1 硬件原理框图 (8) 4.2 89C51系统设计 (8) 4.3 时钟电路 (9) 4.4 复位电路 (9) 4.5 键盘接口电路 (10) 4.7 数模转换器 (11) 5 系统软件设计 (12) 5.1 流程图: (12) 5.2 产生波形图 (12) 5.2.1 正弦波 (12) 5.2.2 三角波 (13) 5.2.3 方波 (14) 6 结论 (16) 主要参考文献 (17) 致谢...................................................... 错误!未定义书签。

1引言 1.1题目要求及分析 题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。 1.1.1示意图 图1:系统流程示意图 1.2设计要求 (1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。 (2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。 (3) 系统具有存储波形功能。 (4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。 (5) 系统输出波形幅度范围0~5V。 (6) 系统具有显示输出波形的类型、重复频率和幅度的功能。

北京邮电大学课设 基于MSP430的简单信号发生器的设计

基于MSP430的信号发生器 设计报告 学院:电子工程学院 班级:2013211212 组员:唐卓浩(2012211069) 王旭东(2013211134) 李务雨(2013211138) 指导老师:尹露

一、摘要 信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。本设计介绍一款基于MSP430G2553 单片机的信号发生器。该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。本次需要完成的任务是以MSP430 LaunchPad 的单片机为控制核心、DAC 模块作为转换与按键电路作为输入构成的一种电子产品。MSP430 LaunchPad 单片机为控制核心,能实时的进行控制;按键输入调整输出状态,DAC0832将单片机输出的数字信号转化为模拟量,经运放放大后,在示波器上输出。在本次程序设计中充分利用了单片机内部资源,涉及到了中断系统、函数调用等。 关键字:信号发生器 MSP430单片机数模转换 二、设计要求 以msp430单片机为核心,通过一个DA (数字模拟)转换芯片,将单片机输出的方波、三角波、正弦波(数字信号)转换为模拟信号输出。提供芯片:msp430G2553、DAC0832、REF102、LM384、OP07。参考框图如下: Lauchpad MSP430 电位器 按键1 DA 转换DAC0832 放大输出LM384 按键N 按键2 AD …… 图1 硬件功能框图 1、基本要求 (1) 供电电压 VDD= 5V~12V ;(√) (2) 信号频率:5~500Hz(可调);(√) (3) 输出信号电压可调范围:≥0.5*VDD ,直流偏移可调:≥0.5*VDD ;(√) (4) 完成输出信号切换;(√) (5) 方波占空比:平滑可调20%~80%;(√) (6) 通带内正弦波峰峰值稳定度误差:≤±10%(负载1K )。(√)

简易波形发生器设计报告

电子信息工程学院 硬件课程设计实验室课程设计报告题目:波形发生器设计 年级:13级 专业:电子信息工程学院学号:201321111126 学生姓名:覃凤素 指导教师:罗伟华 2015年11月1日

波形发生器设计 波形发生器亦称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。 波形发生器一般是指能自动产生方波、三角波、正弦波等电压波形的电路。产生方波、三角波、正弦波的方案有多种,如先产生正弦波,再通过运算电路将正弦波转化为方波,经过积分电路将其转化为三角波,或者是先产生方波-三角波,再将三角波变为正弦波。本课程所设计电路采用第二种方法,利用集成运放构成的比较器和电容的充放电,实现集成运放的周期性翻转,从而在输出端产生一个方波。再经过积分电路产生三角波,最后通过正弦波转换电路形成正弦波。 一、设计要求: (1) 设计一套函数信号发生器,能自动产生方波、三角波、正弦波等电压波形; (2) 输出信号的频率要求可调; (3) 根据性能指标,计算元件参数,选好元件,设计电路并画出电路图; (4) 在面包板上搭出电路,最后在电路板上焊出来; (5) 测出静态工作点并记录; (6) 给出分析过程、电路图和记录的波形。 扩展部分: (1)产生一组锯齿波,频率范围为10Hz~100Hz , V V 8p -p =; (2)将方波—三角波发生器电路改成矩形波—锯齿波发生器,给出设计电路,并记录波形。 二、技术指标 (1) 频率范围:100Hz~1kHz,1kHz~10kHz ; (2) 输出电压:方波V V 24p -p ≤,三角波V V 6p -p =,正弦波V V 1p -p ≥; (3) 波形特性:方波s t μ30r < (1kHz ,最大输出时),三角波%2V <γ ,正弦波y~<2%。 三、选材: 元器件:ua741 2个,3DG130 4个,电阻,电容,二极管 仪器仪表: 直流稳压电源,电烙铁,万用表和双踪示波器 四、方案论证 方案一:用RC 桥式正弦波振荡器产生正弦波,经过滞回比较器输出方波,方波在经过积分器得到三角波。

任意波形发生器

基于CPLD和单片机的任意波形发生器设计 在电子工程设计与测试中,常常需要一些复杂的、具有特殊要求的信号,要求其波形可任意产生,频率方便可调。通常的信号产生器难以满足要求,市场上出售的任意信号产生器价格昂贵。结合实际需要,我们设计了一种任意波形发生器。电路设计中充分利用MATLAB的仿真功能,将希望得到的波形信号在MATLAB中完成信号的产生、抽样和模数转换,并将得到的数字波形数据存放在数据存储器中,通过单片机和CPLD控制,将波形数据读出,送入后向通道进行A/D转换和放大处理后得到所需的模拟信号波形。利用上述方法设计的任意波形发生器,信号产生灵活方便、功能扩展灵活、信号参数可调,实现了硬件电路的软件化设计。具有电路结构简单、实用性强、成本低廉等优点。 任意波形发生器的设计思想,是利用MATLAB的强大仿真功能,方便、快捷的生成给定频率、周期、脉宽的任意波形数据;并将数据预存在数据存储器中。在单片机控制下,利用CPLD电路产生地址读出数据,送入D/A转换电路,得到所需的任意波形信号。系统结构框图如图1;图中分频电路和地址发生器由CPLD实现。 图1 系统框图 单片机采用AT89C52芯片,通过软件编程产生所要求的控制信号。主要的控制参数包括:信号周期、脉宽;分频电路的开始信号、地址发生器的复位信号;E2PROM的选通信号;D/A转换电路的选通信号。在具体电路中,端口P1.0控制分频电路的启动、P1.1控制地址发生器的清零,P2.0控制 28C256和AD7545的选通信号。单片机工作在定时器0方式,软件设计利用C语言实现。流程图如图2所示。 图2 软件流程图 MATLAB作为一款优秀的数学工具软件,具有强大的运算功能;可以方便的产生各种信号波形,在软件中实现波形信号的产生、抽样和模数转换。设计的任意波形发生器,数据存储器选用28C256芯片,信号波形通过MATLAB仿真产生;得到的波形数据存放在数据存储器28C256中。具体设计中,我们要求产生周期为200ms,脉宽为5ms的单/调频混合信号,其中单频信号的脉宽为4ms,频率为 30KHz;调频信号的脉宽为1ms,频率为30KHz_35KHz。在MATLAB中设定抽样率为500KHz,得到了

简易函数信号发生器

课程设计任务书 (一)设计目的 1、掌握信号发生器的设计方法和测试技术。 2、了解单片函数发生器IC8038的工作原理和应用。 3、学会安装和调试分立元件与集成电路组成的多级电子电路小系统。 (二)设计技术指标与要求 1、设计要求 (1)电路能输出正弦波、方波和三角波等三种波形; (2)输出信号的频率要求可调; (3)拟定测试方案和设计步骤; (4)根据性能指标,计算元件参数,选好元件,设计电路并画出电路图; (5)在面包板上或万能板或PCB板上安装电路; (6)测量输出信号的幅度和频率; (7)撰写设计报告。 2、技术指标 频率范围:100Hz~1KHz 1KHz~10KHz; 输出电压:方波V P-P≤24V,三角波V P-P=6V,正弦波V P-P=1V;方波t r小于1uS。 (三)设计提示 1、方案提示: (1)设计方案可先产生正弦波,然后通过整形电路将正弦波变成方波,再由积分电路将方波变成三角波;也可先产生三角波-方波,再将三角波变成正弦波。 (2)也可用单片集成芯片IC8038实现,采用这种方案时要求幅度可调。 2、设计用仪器设备: 示波器,交流毫伏表,数字万用表,低频信号发生器,实验面包板或万能板,智能电工实验台。 3、设计用主要器件: (1)双运放NE5532(或747)1只(或741 2只)、差分管3DG100 4个、电阻电容若干; (2)IC8038、数字电位器、电阻电容若干。 4、参考书: 《电子线路设计·实验·测试》谢自美主编华中科技大学出版社 《模拟电子技术基础》康华光主编高等教育出版社 《模拟电子技术》胡宴如主编高等教育出版社 (四)设计报告要求 1、选定设计方案; 2、拟出设计步骤,画出设计电路,分析并计算主要元件参数值; 3、列出测试数据表格; 4、调试总结,并写出设计报告。 (五)设计总结与思考 1、总结信号发生器的设计和测试方法;

多种波形发生器的设计与制作

课题三 多种波形发生器的设计与制作 方波、三角波、脉冲波、锯齿波等非正弦电振荡信号是仪器仪表、电子测量中最常用的波形,产生这些波形的方法较多。本课题要求设计的多种波形发生器是一种环形的波形发生器,方波、三角波、脉冲波、锯齿波互相依存。电路中应用到模拟电路中的积分电路、过零比较器、直流电平移位电路和锯齿波发生器等典型电路。通过对本课题的设计与制作,可进一步熟悉集成运算放大器的应用及电路的调试方法,提高对电子技术的开发应用能力。 1、 设计任务 设计并制作一个环形的多种波形发生器,能同时产生方波、三角波、脉冲波和锯齿波,它们的时序关系及幅值要求如图3-3-1所示。 图3-3-1 波形图 设计要求: ⑴ 四种波形的周期及时序关系满足图3-3-1的要求,周期误差不超过%1±。 ⑵ 四种波形的幅值要求如图3-3-1所示,幅值误差不超过%10±。 ⑶ 只允许采用通用器件,如集成运放,选用F741。

要求完成单元电路的选择及参数设计,系统调试方案的选取及综合调试。 2、设计方案的选择 由给定的四种波形的时序关系看:方波决定三角波,三角波决定脉冲波,脉冲波决定锯齿波,而锯齿波又决定方波。属于环形多种波形发生器,原理框图可用3-3-2表示。 图3-3-2 多种波形发生器的方框图 仔细研究时序图可以看出,方波的电平突变发生在锯齿波过零时刻,当锯齿波的正程过零时,方波由高电平跳变为低电平,故方波发生电路可由锯齿波经一个反相型过零比较器来实现。三角波可由方波通过积分电路来实现,选用一个积分电路来完成。图中的u B电平显然上移了+1V,故在积分电路之后应接一个直流电平移位电路,才能获得符合要求的u B波形。脉冲波的电平突变发生在三角波u B的过零时刻,三角波由高电平下降至零电位时,脉冲波由高电平实跳为低电平,故可用一个同相型过零比较器来实现。锯齿波波形仍是脉冲波波形对时间的积分,只不过正程和逆程积分时常数不同,可利用二极管作为开关,组成一个锯齿波发生电路。由上,可进一步将图3-3-2的方框图进一步具体化,如图3-3-3所示。 图3-3-3 多种波形发生器实际框图 器件选择,设计要求中规定只能选用通用器件,由于波形均有正、负电平,应选择由正、负电源供电的集成运放来完成,考虑到重复频率为100Hz(10ms),故选用通用型运放F741(F007)或四运放F324均可满足要求。本设计选用F741。其管脚排列及功能见附录三之三。

C51单片机的波形发生器

通信专业技能实训报告 题目基于Proteus的波形发生器设计 学院信息科学与工程学院 专业通信工程 班级 学生 学号 指导教师魏长智 二〇一九年一月五日

济南大学通信专业技能实训报告 目录 1 前言 ...................................................................................................................... - 1 - 2 硬件设计 .............................................................................................................. - 2 - 2.1 启动方式选择 ........................................................................................... - 2 - 2.2 框图设计 ................................................................................................... - 2 - 2.3 电路图设计 ............................................................................................... - 3 - 3 DAC0832性能与特征....................................................................................... - 4 - 3.1 D/A转换器与单片机接口探究 ............................................................. - 4 - 3.1.1 数据线连接 .................................................................................... - 4 - 3.1.2 地址线连接 .................................................................................... - 4 - 3.1.3 控制线连接 .................................................................................... - 4 - 3.2 DAC0832的认识.................................................................................... - 5 - 3.2.1 DAC0832的结构......................................................................... - 5 - 3.2.2 DAC0832的引脚......................................................................... - 6 - 3.2.3 DAC0832的启动控制方式......................................................... - 7 - 4 程序设计 .............................................................................................................. - 8 - 4.1 程序流程图 ............................................................................................... - 8 - 4.1.1 程序设计思路 ................................................................................ - 8 - 4.1.2流程图 ............................................................................................. - 8 - 4.2 用C语言实现 ........................................................................................ - 10 - 5 Proteus仿真及结果 ......................................................................................... - 13 - 5.1方波: ...................................................................................................... - 13 - 5.2正弦波: .................................................................................................. - 14 - 5.3三角波: .................................................................................................. - 15 - 5.4梯形波: .................................................................................................. - 16 - 5.5锯齿波: .................................................................................................. - 17 -实训结语: ............................................................................................................ - 18 -参考文献 ................................................................................................................ - 19 -

简易函数信号发生器的设计

单片机课程设计报告书 课题名称 简易函数信号发生器的设计 姓 名 ** 学 号 ** 院、系、部 ** 专 业 电子信息科学与技术 指导教师 ** 2011年12月12日 ※※※※※※※※※ ※ ※ ※※ ※ ※ ※※※※※※※※※ **级学生单片机 课程设计

目录 一、绪言 (1) 二、系统方案论证 (1) 2.1设计要求 (1) 2.2 简易函数信号发生器方案论证 (1) 2.3 单片机的控制方案论证 (1) 2.4 键盘选择方案论证 (2) 三、系统设计 (2) 3.1 硬件电路设计 (2) 3.2 程序流程图 (4) 3.3 C语言程序设计 (5) 四、简易函数信号发生器的仿真 (8) 4.1 系统仿真 (8) 4.2工作原理分析 (10) 结束语 (11) 参考文献 (11) 修改通篇页面设置里面的左右边距

一绪言 函数发生器是一种多波形的信号源。它可以产生正弦波、方波、三角波、锯齿波,甚至任意波形。函数发生器有很宽的频率范围,使用范围很广,它是一种不可缺少的通用信号源。因此设计使用的AT89S52单片机构成的发生器,可以产生正弦波和方波。 二系统方案论证 2.1设计要求 1、设计一个基于AT89S52单片机的信号发生器; 2、能够输出方波和正弦波(正弦波是双极性的),要求可用按键选择; 3、可选电压值为1V、2V、3V、4V、5V五个档位; 4、可选频率值为:10Hz、20Hz、50Hz、100Hz、200Hz、500Hz、1KHz七个档位; 5、能够通过显示模块显示输出波形的主要参数。 2.2 简易函数信号发生器方案论证 方案一:用分立元件组成函数发生器,通常是单函数发生器且频率不高,其工作不很稳定,不易调试。 方案二:可以由晶体管,运放 IC等通用器件制作,更多的则是用专用的函数信号发生器IC产生。早期的函数信号发生器IC,如L8083、BA205等,他们的功能少,精度不高,频率上限只有300KHz,频率和占空比不能独立调节,二者相互影响。 方案三:利用专用直接数字合成DDS芯片的函数发生器:能产生任意波形并且达到很高的频率。但成本很高。 方案四:采用 AT89S52单片机和DAC0832芯片,直接连接按键和显示。该种方案主要对AT89S52单片机的各个I/0口充分利用,不再多用其他的芯片,从而减小了系统的成本,也对按照系统便携式低频信号发生器的要求所完成,占用空间小,使用空间小,使用芯片少,低功耗。 综合考虑,方案四各项性能和指标都优于其他各种方案,能使输出频率有较好的稳定性,充分体现了模块化设计的要求,而且这些芯片和器件均为通用器件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。 2.3 单片机的控制方案论证 方案一:采用可编程逻辑期间CPLD 作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。

基于51单片机波形发生器的设计与实现开题报告

基于51单片机波形发生器的设计与实现开题报告合肥师范学院本科生毕业论文(设计)开题报告 (学生用表) 课题基于51单片机波形发生器的设计与实现 系部电子信息工程学院专业电子信息工程学科工学 学生屠宝轩指导教师吴剑威一、课题的来源、背景及意义 (1)来源:科研/生产 (2)背景:单片机是再20世纪70年代中期发展起来的一种大规模集成电路芯 片,是由中央处理器(CPU), ROM、RAM芯片及I/O接口和一些外围电路等通过印刷版总线连接在一起的一个完整的讣算机系统。信号发生器是一种作为激励源或者信号源的电子设备,它能够产生各种各样的波形和频率,其在教学实验,生产装实践和科技领域有着广泛的应用,是最普遍使用的电子仪器之一。对于电子类专 业的学生,除了学习理论知识外,还必须将所学的理论知识付诸实践,在实践中订应用理论知识,提高动手能力,从而提高发现,解决问题的能力,所以试验是必 不可少的环节,而信号波形发生器是实验过程最普遍,最基本,也是应用最广泛线的电子设备之一,本研究不是针对高端的信号发生器开发,而是从降低经 济成本, 操作方便简单,输出波形实用角度出发,研究一套设备。

(3)意义:传统的正弦信号源根据实际需要一般价格昂贵,低频输出时性能不好且不便于自动调节,丄程实用性较差。现在利用单片机的优越性,制作一种体积小,实用性强,使用方便的低频信号发生器,以AT85C51单片机为核心,结合低俗D/A转换器,通过设计与编程实现了正弦波、方波、锯齿波的产生及其自山切换以及频率、相位的可调与多相波的同时输出。 二、国内外发展现状 信号波形发生器历史非常的久远,它产生于上个世纪20年代,那会,电子设备刚刚诞生,随后,雷达发展了起来,通信技术也在不断地发展,到了40年代,标准信号发生器开始出现,它的出现主要是为了进行各种接收机的测试,使信号发生器诞生之初主要是用来做定性分析的,随着使用的要求不断提升,慢慢发展成为了定量分析的测量仪器,还是在这个时期,脉冲信号发生器也出现了,这个主要是用于脉冲方面的测量的,上面说的这些信号波形发生器都是早期的一些产品,复杂的机械结构,比较 [1]大的功率,比较简单的电路,速度发展总体是比较慢的。这种发展速度一直持续到1964年,笫一台全电子晶体管做的信号发生器出现。 从60年代以后,信号波形发生器的发展速度就开始加快了,有个代表产品,那就是函数信号发生器,但是模拟的电子方面的技术在这段时期是占主要的,组成的部分一般都是分立元件,或者是采用模拟的集成方面的电路,电路结构相比于60年代以前,要复杂了,产生的波形就多了一些,比如有方波、正弦波、三角波,还有了锯齿波,但是波形还是比较简单的,加上模拟电路会产生较大的漂移,输出波形的稳定性还是比较差的,70年代乂是一个转折点,出现了微控制器,这个时候信号波形发生器的功能就开始强大了起来,波形的产生也比较复杂了。对信号波形发生器而言,软件成为这个时期的主要特征,通过程序用微控制器进行相应的处理就能方便灵活的获得一些简单的信号波形,当然这种方式也是有缺陷的,那就是波形输出的频率不会很

简易信号发生器设计制作

简易信号发生器设计制作 一、训练目的 (1)掌握正弦波、三角波、矩形波和方波发生电路的工作原理; (2)学会正弦波、三角波、矩形波和方波发生电路的设计方法; (3)进一步熟悉电子线路的安装、调试、测试方法。 二、工作原理 正弦波、三角板、矩形波是电子电路中常用的测试信号,如测试放大器的增益、通频带等均要用到正弦信号作为测试信号。下面分别介绍产生这三种信号电路结构和工作原理。 1.正弦信号发生器 正弦信号的产生电路形式比较多,频率较低时常用文氏电桥振荡器,图7-1为实用文氏电桥振荡电路。图中R 1、R 2、R 3、RW 2构成负反馈支路,二极管D 1、D 2构成稳幅电路,C 2、R 11(或R 12或R 13)、C 1、R 21(或R 22或R 23)串并联电路构成正反馈支路,并兼作选频网络。调节电位器RW 2可以改变负反馈的深度,以满足振荡的振幅条件和改善波形。二极管D 1、D 2要求温度稳定性好,特性匹配以确保输出信号正负半周对称,R 4接入用以消除二极管的非线性影响,改善波形失真。如K1接电阻R 11、K2接R 21,并且R 11= R 21=R ,C 1= C 2=C ,则电路的振荡频率为: 1 2f RC π= (7-1) 起振的幅值条件: 1 1f v R A R =+ (7-2) 图7-1 正弦信号发生器 通过调整RW 2可以改变电路放大倍数,能使电路起振并且失真最小。该电路可通过开关K1、K2选择不同的电阻以得到不同频率的信号输出。 2.方波和矩形波发生器

方波发生电路如图7-2,其基本原理是在滞回比较器的基础上增加了由R 4和C 1构成的积分电路,输出电压通过该积分电路送人到比较器的反相输入端。其中R 3 、D Z1和D Z2构成双向限幅电路,这样就构成了方波发生器电路,其工作原理如下: 假设在接通电源瞬间,输出电压o v 为Z V +(稳压二极管D Z1、D Z2额定工作时的稳压值),这时比较器同相端的输入电压为 2 12 Z R v V R R +≈ + (7-3) 同时输出电压o v 会通过电阻R 4给C 1充电,反相端的输入电压v -就会逐步升高,当反向输入端的电压v -略大于同相端输入电压v +时,比较器输出电压立即从Z V +翻转为Z V -,这时输出端电压o v 为Z V -,比较器同相端输入电压v +'为 2 12 Z R v V R R +'≈- + (7-4) 这时输出的电压o v 会通过R 4对C 1进行反向充电,当反相输入端的电压略低于v +'时,输出状态再翻转回来,如此反复形成方波信号。所产生方波信号的频率为 41 1 2f R C = 方波 (7-5) R 4 o 图7-2 方波发生电路

简易信号发生器的设计实现

EDA课程设计简易信号发生器的设计实现 小组成员:XXXXXX XXXXX 专业:XXXXX 学院:机电与信息工程学院指导老师:XXXXXX 完成日期:XX年XX月XX日

目录 引言 (3) 一、课程设计内容及要求 (3) 1、设计内容 (3) 2、设计要求 (3) 二、设计方案及原理 (3) 1、设计原理 (3) 2、设计方案 (4) (1)设计思想 (4) (2)设计方案 (4) 3、系统设计 (5) (1)正弦波产生模块 (5) (2)三角波产生模块 (6) (3)锯齿波产生模块 (6) (4)方波产生模块 (6) (5)波形选择模块 (6) (6)频率控制模块 (6) (7)幅度控制模块 (6) (8)顶层设计模块 (7) 三、仿真结果分析 (7) 波形仿真结果 (7) 1、正弦波仿真结果 (7) 2、三角波仿真结果 (8) 3、锯齿波仿真结果 (8) 4、方波仿真结果 (8) 5、波形选择仿真结果 (9) 6、频率控制仿真结果 (9) 四、总结与体会 (10) 五、参考文献 (10) 六、附录 (11)

简易信号发生器 引言 信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广范的应用。它能够产生多种波形,如正弦波、三角波、方波、锯齿波等,在电路实验和设备检验中有着十分广范的应用。 本次课程设计采用FPGA来设计多功能信号发生器。 一、课程设计内容及要求 1、设计内容 设计一个多功能简易信号发生器 2、设计要求 (1)完成电路板上DAC的匹配电阻选择、焊接与调试,确保其能够正常工作。 (2)根据直接数字频率合成(DDFS)原理设计正弦信号发生器,频率步进1Hz,最高输出频率不限,在波形不产生失真(从输出1KHz正弦转换为输出最高频率正弦时,幅度衰减不得大于10%)的情况下越高越好。频率字可以由串口设定,也可以由按键控制,数码管上显示频率傎。 (3)可以控制改变输出波形类型,在正弦波、三角波、锯齿波、方波之间切换。 (4)输出波形幅度可调,最小幅度步进为100mV。 二、设计方案及原理 1、设计原理 (1)简易信号发生器原理图如下

课程设计——波形发生器

1.概述 波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。本课程采用采用RC正弦波振荡电路、电压比较器、积分电路共同组成的正弦波—方波—三角波函数发生器的设计方法。先通过RC正弦波振荡电路产生正弦波,再通过电压比较器产生方波,最后通过积分电路形成三角波。

2.设计方案 采用RC正弦波振荡电路、电压比较器、积分电路共同组成的正弦波—方波—三角波函数发生器的设计方法。先通过RC正弦波振荡电路产生正弦波,再通过电压比较器产生方波,最后通过积分电路形成三角波。文氏桥振荡器产生正弦波输出,其特点是采用RC串并联网络作为选频和反馈网络,其振荡频率f=1/2πRC.改变RC的值,可得到不同的频率正弦波信号输出。用集成运放构成电压比较器,将正弦波变换成方

3. 设计原理 3.1正弦波产生电路 正弦波由RC 桥式振荡电路(如图3-1所示),即文氏桥振荡电路产生。文氏桥振荡器具有电路简单、易起振、频率可调等特点而大量应用于低频振荡电路。正弦波振荡电路由一个放大器和一个带有选频功能的正反馈网络组成。其振荡平衡的条件是AF =1以及ψa+ψf=2n π。其中A 为放大电路的放大倍数,F 为反馈系数。振荡开始时,信号非常弱,为了使振荡建立起来,应该使AF 略大于1。 放大电路应具有尽可能大的输入电阻和尽可能小的输出电阻以减少放大电路对选频特性的影响,使振荡频率几乎仅决定于选频网络,因此通常选用引入电压串联负反馈的放大电路。正反馈网络的反馈电压U f 是同相比例运算电路的输入电压,因而要把同相比例运算电路作为整体看成电路放大电路,它的比例系数是电压放大倍数,根据起振条件和幅值平衡条件有 31 1≥+ =R Rf Av (Rf=R2+R1//D1//D2) 且振荡产生正弦波频率 Rc f π210= 图中D1、D2的作用是,当Vo1幅值很小时,二极管D1、D2接近开路,近似有Rf =9.1K +2.7K =11.8K ,,Av=1+Rf/R1=3.3>=3,有利于起振;反之当Vo 的幅值较大时,D1或D2导通,Rf 减小,Av 随之下降,Vo1幅值趋于稳定。

51单片机-波形发生器

单片机课程设计报告 题目波形发生器 专业电子信息科学与技术 班级 2008级1班 学生姓名 ***** 学号 3080422*** 指导老师 ***** 2011年 7 月 8 日

目录 一、设计目的……………………………………………………错误!未定义书签。 二、设计的主要内容和要求……………………………………错误!未定义书签。 2.1基本内容和要求…………………………………………………………错误!未定义书签。 2.2创新部分…………………………………………………………………错误!未定义书签。 三、整体设计思路………………………………………………错误!未定义书签。 3.1设计思路…………………………………………………………………错误!未定义书签。 3.2元件选型…………………………………………………………………错误!未定义书签。 3.3功能原理图………………………………………………………………错误!未定义书签。 四、方案论证…………………………………………………… - 3 - 五、硬件电路设计……………………………………………… - 4 - 5.1硬件连线图………………………………………………………………错误!未定义书签。 5.2主要芯片介绍……………………………………………………………错误!未定义书签。 六、软件设计………………………………………………………错误!未定义书签。 6.1正弦波的产生过程………………………………………………………错误!未定义书签。 6.2方波产生过程……………………………………………………………错误!未

定义书签。 6.3锯齿波的产生过程……………………………………………………错误!未定义书签。 6.4三角波的产生过程……………………………………………………错误!未定义书签。 6.5通过开关实现波形切换和调频…………………………………………错误!未定义书签。 6.7附程序代码………………………………………………………………错误!未定义书签。 七、调试与仿真……………………………………………………错误!未定义书签。 八、总结……………………………………………………………错误!未定义书签。 九、参考文献……………………………………………………错误!未定义书签。 波形发生器 一、设计目的 (1)利用所学单片机机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。 (2)我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的波形发生器。 (3)掌握各个接口芯片(如0832等)的功能特性及接口方法,并能运用其实现一个简单的单片机应用系统功能器件。 (4)在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习。因此,缺乏一种系统的设计锻炼。在课程所学结束以后,这样的课程设计十分有助于学生的知识系统的总结到一起。 (5)通过这几个波形进行组合形成了一个波形发生器,使得我对系统的整个框架的设计有了一个很好的锻炼。这不仅有助于大家找到自己感兴趣的题目,更可以

51单片机制作的波形发生器

51单片机制作的波形发生器 相信很多朋友都可能接触到一个波型发生器的制作,可能刚刚入门,做的东西也不会说是很复杂。可能就一 个矩形波,或者是三角波。但是网上的很多资料是忽悠 人的,就此,我也提供一个比较完整的波型发生器 C51 原代: 该系统的软件比较典型:包括键盘的应用,显示的 应用和 DA 转换器的应用。本设计中,输出的波形有三种:正弦波,方波,三角波。 方波的输出最为简单,只要按照设定的周期值将输 出的电压改变即可。 三角波的输出也比较简单,单片机的输出只要完成 数字量递增和递减交替进行即可。、 正弦波的输出最麻烦,如果在软件中计算出输出的 各点电压值,将会浪费很多的 CPU 时间,以至于无法满足频率的要求。通常最简单的方法是通过手动的方法计 算出输出各点的电压值,然后在编写程序时以数组的方 式给出。当需要时,只要按照顺序进行输出即可。这种 方法比运算法速度快且曲线的形状修改灵活。在本设计 中将 360 度分为 256 个点,则每两个点之间的间隔为1.4 度,然后计算出每个点电压对应的数字量即可。只

要反复输出这组数据到 DAC0832, 就可以在系统输出端得到想要的正弦波。 具体程序如下: #include ; #define uchar unsigned char #define uint unsigned int #define DAdata P0 uchar code Sinetab[256]= { 0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e, 0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e, 0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad, 0xaf,0xb1,0xb2,0xb4,0xb6,0xb7,0xb9,0xba, 0xbc,0xbd,0xbf,0xc0,0xc1,0xc3,0xc4,0xc5, 0xc6,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce, 0xce,0xcf,0xd0,0xd1,0xd1,0xd2,0xd2,0xd3, 0xd3,0xd3,0xd2,0xd2,0xd1,0xd1,0xd0,0xcf, 0xce,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8, 0xc6,0xc5,0xc4,0xc3,0xc1,0xc0,0xbf,0xbd, 0xbc,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb1, 0xaf,0xad,0xab,0xaa,0xa8,0xa6,0xa4,0xa2, 0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,

简易函数信号发生器的设计

简易函数信号发生器的设计 一、 电路功能 能同时输出方波、三角波和正弦波三种波形。 二、 技术指标 信号发生器能产生方波、三角波和正弦波三种周期性波形输出信号频率范围在100Hz —10KHz 可调,输出信号的峰峰值可调,方波的峰峰值约为8V ,三角波的峰峰值约为5V ,正弦波的峰峰值约为6V 。 三、 电路原理框图 (电路原理框图) 四、 元器件的介绍 1、 集成运算放器LM324 每块运放集成电路内含有四个相同的运算放大器,它们电源共用,彼此独立工作,管脚排列如图一所示。 图一(集成运算放大器LM324)

2、发光二极管LED 本次设计所用的发光二极管有绿色和红色两种圆头发光二极管,发光二极管的管脚有长短,长的为正极,短的为负极。 3、二极管 二极管具有单向导电性,如图3所示。如图中所示,二极管的一端是银色的,此端口为负极。 图二(二极管) 4、PNP和NPN PNP和NPN分别有三个管脚,分别有基极b,集电极c和发射极e,他们的分布店铺是如图四所示。 图三(三极管) 五、电路中元件参数的计算与取值,元器件清单 1、方波、三角波电路 2、

电路图如图四所示是产生方波和三角波的电路原理图。如图所示,A U 1构成有源积分器, A U 2构成迟滞比较器。 A U 2中,根据“虚短虚开”得 当n v =p v =0时,01v 的值为门限电压 当01V 单独作用时,p v = 01122 V R R R + (1) 当02V 单独作用时,p v = 022 11 V R R R + (2) ∴ 022 11 01212V R R R V R R R +++ = 0 (3) ∴此时01v 为门限电压T V T V ∴=01V = 022 1 V R R - (4) 又02V = z V ± = ±4V ∴ +T V = Z V R R 21 (5) -T V = z V R R 2 1 - (6) ∴ 当01v 达到+T V 时,三角波反转;当01v 达到-T V 时,三角波再次反转 ∴ +T V 和-T V 分别代表三角波的峰-峰值 ∴ 峰-峰值 m m v 01 = +T V --T V = z V R R 2 1 2,又称回差电压 又由原理图可知,方波的峰-峰值为z V 2 图四(方波三角波产生电路) 300 -4V +4V 2 0R

相关文档
最新文档