DAC0832波形发生器课程设计实验报告1

时间:2024.4.5

                     

DAC的输出控制

           级:      1221201      

    业:   测控技术与仪器  

姓    名: xxxxx             

学    号:  xxxxx             

指导老师:        周伟       

           

          

 东华理工大学

                                     2015年1月12日

 

1系统设计方案………………………………………………………………………2

1.1 设计思路…………………………………………………………………………………2

1.2 方案比较与选择………………………………………………………………………....2

2系统硬件设计……………………………………………………………………….2.

2.1 主控制器电路……………………………………………………………………………2

2.2 数模转换电路……………………………………………………………………………3

3系统软件设计…………………………………………………………………….. .6

3.1 系统整体流程………………………………………………………………………….. .6

3.2 数模转换程序………………………………………………………………………….. .6

4系统调试…………………………………………………………………………… 8

4.1 proteus的调试……………………………………………………………………….......8

5结论与总结…………………………………………………………………………11

5.1 结论………………………………………………………………………………….......11

(系统总体设计与完成做一个总结,是客观的,主要包括:设计思路,设计过程,测试结果及完善改进的方向。)

5.2 总结……………………………………………………………………………………...11

(这是一个主观的总结,谈谈自己收获和不足等方面的内容。)

1系统设计方案

1.1 设计思路

(一)、课设需要各个波形的基本输出。如输出矩形波、锯齿波,正弦波。这些波形的实现的具体步骤:正弦波的实现是非常麻烦的。它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。然而为了实现100HZ的频率,终于发现,将总时间除了总步数,根据每步执行时间,算出延时时间,最终达到要求,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。这样做的好处在于,查表所耗费的时钟周期相同,这样输出的点与点之间的距离就相等了,输出的波形行将更趋于完美,当然更让我们感到的高兴的是它输出波形的频率将近达到了100赫兹,能够满足我们设计的扩展要求了。而三角波,则每次累加1,当达到初值时,每次累减1,算出延时时间,也就达到要求了,矩形波和锯齿波类似。

(二)、这次做的三种波形可以相互转换,这个实现起来找了很多人最终发现,在每次循环之初进行扫描,而在每个中断入口处,对中断优先级进行设定,最终达到设计目的。

1.2 方案比较与选择

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

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

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

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

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

2系统硬件设计

2.1 主控制器电路

89C52可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。其内部还有一个控制寄存器,即控制口。通常A口、B口作为输入输出的数据端口。C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。

89C52可编程并行接口芯片工作方式说明:

方式0:基本输入/输出方式。适用于三个端口中的任何一个。每一个端口都可以用作输入或输出。输出可被锁存,输入不能锁存。 方式1:选通输入/输出方式。这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。方式2:双向总线方式。只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。

u 原理框图:

硬件设计

2.2 数模转换电路

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

1、DAC0832的引脚及功能:

DAC0832是8分辨率的D/A转换集成芯片。与微处理器兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

u 各引脚功能说明:

D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);

ILE:数据锁存允许控制信号输入线,高电平有效;

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

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

XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;

WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。

IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;

IOUT2:电流输出端2,其值与IOUT1值之和为一常数;

Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;

Vcc:电源输入端,Vcc的范围为+5V~+15V;

VREF:基准电压输入线,VREF的范围为-10V~+10V;

AGND:模拟信号地

DGND:数字信号地

u   DAC0832三种数据输入方式:
  (1)双缓冲方式:即数据经过双重缓冲后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。这种方式可在D/A转换的同时,进行下一个数据的输入,可提高转换速率。更为重要的是,这种方式特别适用于要求同时输出多个模拟量的场合。此时,要用多片DAC0832组成模拟输出系统,每片对应一个模拟量。
  (2)单缓冲方式:不需要多个模拟量同时输出时,可采用此种方式。此时两个寄存器之一处于直通状态,输入数据只经过一级缓冲送入D/A转换电路。这种方式只需执行一次写操作,即可完成D/A转换。
  (3)直通方式:此时两个寄存器均处于直通状态,因此要将端都接数字地,ILE接高电平,使LE1、LE2均为高电平,致使两个锁存寄存器同时处于放行直通状态,数据直接送入D/A转换电路进行D/A转换。这种方式可用于一些不采用微机的控制系统中或其他不须0832缓冲数据的情况。

3系统软件设计

3.1 系统整体流程

3.2 数模转换程序

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define DAC0832 P2         

#define ALL 65536          

#define Fosc 12000000      

uchar TH_0,TL_0,flag1,flag=0;

uint  FREQ=100,num;

float temp;

uchar code sin_num[]={    

      0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,   2, 2, 2,

      2,    3,  3,  4,  4,  4,  5,  5,  6,  6,  7, 7, 8, 8, 9, 9,

      10,   10, 11, 12, 12, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 21,

      22,   23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37,

      38,   39, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56,

      57,   59, 60, 61, 63, 64, 66, 67, 68, 70, 71, 73, 74, 75, 77, 78,

      80,   81, 83, 84, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101,102,

      104,  106,107,    109,    110,    112,    113,    115,    116,    118,    120,   121, 123,  124,  126,  128,

      129,  131,    132,    134,    135,    137,    139,    140,    142,    143,    145,    146,   148,    149,  151,  153,

      154,  156,    157,    159,    160,    162,    163,    165,    166,    168,    169,  171,  172,  174,  175,  177,

      178,  180,    181,    182,    184,    185,    187,    188,    189,    191,    192,  194,  195,  196,  198,  199,

      200,  201,    203,    204,    205,    206,    208,    209,    210,    211,    213,  214,  215,  216,  217,  218, 

      219,  220,    221,    223,    224,    225,    226,    227,    228,    229,    230,  230,  231,  232,  233,  234, 

      235,  236,    237,    237,    238,    239,    240,    240,    241,    242,    243,  243,  244,  245,  245,  246, 

      246,  247,    247,    248,    248,    249,    249,    250,    250,    251,    251,    251,   252,  252,  253,  253, 

      253,  253,    254,    254,    254,    254,    254,    255,    255,    255,    255,    255,   255,  255,  255,  255

      };

sbit cs=P3^6;

sbit change1=P3^2;

sbit change2=P3^1;

sbit change3=P3^0;

void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

        for(y=110;y>0;y--);

}

void init()

{

    TMOD=0X01;  

    temp=ALL-Fosc/12.0/256/FREQ;

    TH_0=(uint)temp/256;

    TL_0=(uint)temp%256;

    EA=1;    

    EX0=1;   

    IT0=1;   

    ET0=1;   

    TR0=1;   

}

void changefreq(void)

{

   if(change==0)

   {flag++;    if(flag==4) {flag=0;num=0;}}

    TH_0=(uint)temp/256;

    TL_0=(uint)temp%256;

void sanjiaobo(void)

{

    for(num=0;num<255;num++)

    {cs=0;DAC0832=num;cs=1;}

    for(num=255;num>0;--num)

    {cs=0;DAC0832=num;cs=1;}

}

void fangbo(void)

{

    cs=0;DAC0832=0XFF;cs=1;

    for(num=0;num<255;num++);

    cs=0;DAC0832=0X00;cs=1;

    for(num=255;num>0;num--);

}

void juchibo(void)

{

    cs=0;DAC0832=++num;cs=1;  

}

void zhengxianbo(void)

{

    for(num=0;num<255;num++)

    {cs=0;DAC0832=sin_num[num];cs=1;}

    for(num=255;num>0;num--)

    {cs=0;DAC0832=sin_num[num];cs=1;}

}

void ext0() interrupt 0

{

    changefreq();

}

void timer0() interrupt 1

{

    TH0=TH_0;TL0=TL_0; 

    TR0=0;

    switch(flag)

    {

        case 0: {sanjiaobo();TR0=1;break;} 

        case 1: {fangbo();TR0=1;break;}

        case 2: {juchibo();TR0=1;break;}

        case 3: {zhengxianbo();TR0=1;break;}

        default: ;

    }

}

void main()

{

    init();

    while(1);

}

4系统调试

 4.1 proteus的调试

                                         

矩形波

锯齿波

正弦波

     

5结论与总结

5.1 结论

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

有了大概思路后,我就开始连接硬件电路。首先,我先根据要求找好了需要的原件,单片机AT89C52用作主控制模块;然后再连好数模转换电路这一块;再者把这两段组合在一起,就完成了一个简单硬件电路。最后根据连好电路写出所需程序,运行成功后形成Hex文件。再用自己连好的仿真图运行,如果运行正常,就可以得到我们需要的波形。按键可以切换波形和改变频率幅度的大小。

虽然波形图基本可以实现,但电路图还存在一些问题。就放大电路这块来说,我个人只用了一个放大器,反馈电路用的正向放大,幅度调节不明显。我后来就增大了放大倍数,效果相比较好了很多

5.2 总结

课设开始的时候由于没有经验,不知从何下手,所以就上网搜了很多关于信号发生器的资料,并翻阅了一些相关书籍。经过将近两周的单片机课程设计,终于完成了我的DAC输出控制的设计,基本达到设计要求,从心底里来说,还是很高兴的,但高兴之余不得不深思呀!

在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。

要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。

同时在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。偶而还会遇到错误的资料现象,这就要求我们应更加注重实践环节。

更多相关推荐:
简易波形发生器课程设计报告

课程设计报告设计题目简易波形发生器学院理学院专业班级08电子信息科学与技术1班学号20xx31120xx220xx31120xx220xx31120xx1姓名陈建泽纪婧如蔡国英电子邮件811781675qqco...

单片机课程设计报告书波形发生器

目录1课程设计目的12课程设计题目和实现目标13设计方案14Proteus仿真原理图15程序流程图16程序代码17调试总结18设计心得体会19参考文献11课程设计目的单片机原理及应用课程设计是与单片机原理及应用...

电子课程设计-多种波形发生器报告

课题名称多种波形发生器课题代码院系专业电气工程及其自动化班级学生时间指导教师签名教研室主任系主任签名一设计目的1了解并掌握电子电路的一般设计方法具备初步的独立设计能力2通过查阅手册和文献资料进一步熟悉常用电子器...

波形发生器课程设计报告

单片机及DSP课程设计报告专业电子信息工程班级信息101姓名史延凯学号指导教师何香铃时间20xx061728通信与电子工程学院1目录一设计目的及意义311设计目的312设计意义3二方案论证321设计要求错误未定...

波形发生器课设报告

西北工业大学课程设计报告题学专班日目波形发生器院自动化学院业自动化级09031201期20xx年1月15日摘要21题目本次实验主要是以FPGA作为基础制作一个简易波形发生器不仅可以显示学号同时可以通过按键输入产...

模电课程设计报告(波形发生器)

课程设计课程名称模拟电子技术基础课程设计题目名称波形发生电路学生学院物理与光电工程学院专业班级电子科学与技术5班学号学生姓名指导教师20xx12171摘要和关键词摘要用RC桥式正弦波振荡电路产生正弦波正弦波频率...

波形发生器设计报告2

电子技术课程设计报告课题名称学院专业班级姓名学号时间波形发生器昆明学院自机学院机械设计制造及自动化3班李飞飞王祥武20xx1401011120xx0410012620xx年7月10日摘要本文主要介绍能产生正弦波...

模电设计报告_波形发生器

模拟电子技术课程设计了可看看扬州大学能源与动力工程学院本科生课程设计题目函数发生器的设计课程模拟电子技术基础专业班级学号姓名指导教师纪晓华蒋步军完成日期20xx年11月模拟电子技术课程设计第一部分任务及指导书含...

函数信号发生器课程设计报告

漳州师范学院模拟电子技术课程设计函数信号发生器姓名学号系别专业年级指导教师20xx年4月3日1函数信号发生器摘要利用集成电路LM324设计并实现所需技术参数的各种波形发生电路根据电压比较器可以产生方波方波再继续...

DAC0832波形发生器课程设计实验报告1

微机原理与接口技术课程设计报告书题目DAC0832波形发生器学院名称湖南科技大学潇湘学院班级电子信息工程001班指导老师欧青立陈君宋芳学号0954030110姓名赵翔潇湘学院电子信息001班学号09540301...

波形发生器课程设计任务书

20xx20xx学年第2学期模拟电子技术基础课程设计报告题目波形发生器电路设计专业通信工程班级09通信二班姓名江飞指导教师吴慧电气工程系20xx年5月26日摘要本次课程设计的目的是利用已学的模电知识制作一种函数...

简易波形发生器设计报告

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

波形发生器课程设计报告(19篇)