• 成功的定义
  • 成功的秘决
  • 成功的作文
  • 成功故事
  • 成功人士
  • 成功之道
  • 成功学演讲
  • 成功学书籍
  • 成功语录
  • 成功案例
  • 当前位置: 工作范文网 > 成功 > 成功之道 > 正文

    波形发生器专业课程设计实验报告

    时间:2020-11-09 09:33:02 来源:工作范文网 本文已影响 工作范文网手机站

    DAC输出控制

    班 级: 1221201

    专 业: 测控技术和仪器

    姓 名: xxxxx

    学 号: xxxxx

    指导老师: 周伟

    东华理工大学

    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条线用作通讯联络信号和中止请求信号。

    原理框图:

    硬件设计

    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转换电路及转换控制电路组成。

    各引脚功效说明:

    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:数字信号地

    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 1 000

    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输出控制设计,基础达成设计要求,从心底里来说,还是很快乐,但快乐之余不得不深思呀!

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

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

    同时在此次设计过程中,我还学会了高效率查阅资料、利用工具书、利用网络查找资料。我发觉,在我们所使用书籍上有部分知识在实际应用中其实并不是十分理想,多种参数全部需要自己去调整。偶而还会碰到错误资料现象,这就要求我们应愈加重视实践步骤。

    有关的专题