注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

龙的天空

在路上

 
 
 

日志

 
 

基于AT89S51的信号发生器设计(1)  

2010-01-04 20:34:12|  分类: 大学 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

摘   要

本文介绍了电子电路设计常用单片机中的AT89S51,以及模拟/数字转换芯片DAC0832的基本知识和使用,并且详细介绍了该单片机与DAC0832几种典型的接口方式。设计了一个基于AT89S51单片机,采用芯片DAC0832双极性输出的信号发生器。详细给出了电路各个部分设计的原理图及程序控制流程,并且附带了完整原理图、PCB、电路元件及程序清单。 

关键字:信号发生器   AT89S51   单片机   DAC0832

 

1设计任务及要求

      1.1设计任务

    用单片机设计简易低频信号发生器

      1.2设计要求

       1、实现100Hz正弦波、方波、三角波(或锯齿波)等波形的产生,用DAC0832输出规定的波形;

      2、各波形的输出通过按键进行切换;

      3、方波占空比可调(10%~90%,间隔10%);

4、可以扩展其他功能(如波形频率可在10Hz~10KHz范围可调,幅度在0~5V可调,通过键盘输入及显示等其他功能)。

     2方案论证

      2.1单片机与DAC0832接口设计方案

   单片机890S51与DAC0832的几种较为典型的连接电路

 

 

 

 

 

 

 

 

 

 

2.1.1 DAC0832 与51 单片机的第一种连接方式

图2.1.1

  这是一种使用双芯片调整波形的方式,如图2.1.1。若P0口向其送的数据为00H, 则U1 的输出电压为0V;若P0口向其送的数据为0FFH时, 则U1的输出电压为-5V. 故当U1 输出电压为0V时,由公式                   

 

 

得Vout = - 5V.当输出电压为- 5V时,可得:Vout = +5V,所以输出波形的电压变化范围为- 5V~+ 5V. 故可推得,当P0所送数据为80H时,Vout为0V。

当单片机用P2.4、 P2.5口选通DAC0832,使用低电平选通DA0832.并且往DA0832送数据就可以输出波形

       编程概要:

sbit CS1=P2^5;

sbit CS1=P2^4;

           CS = 0;        选通DA地址

int DAC0832(uchar datas)

{Px=datas;

};                选通DAC0832并且送值进行数/模转换

2.1.2 DAC0832 与51 单片机的第二种连接方式

图2.1.2

电路设计中运用/WR与DAC的WR1WR2相连,P2.0控制DAC片选信号CS,IL接VCC一直有效,Xfer接地,

编程概要:

sbit CS=P2^0;

CS = 0;选通DA地址

int DAC0832(uchar datas)

{

P2=datas;

};选通DAC0832并且送值进行数/模转换

要求在程序第一条指令中选中整个DAC0832芯片的/CS段,送到数据指针DPTR。在本电路中,要求P2.0为低电平选通DAC0832,同时在第三条指令的时候有单片机自动生产WR为低电平,使得数据可以在DA中直接进行转换。

2.1.3 DAC0832 与51 单片机的第三种连接方式


图2.1.3

如图2.1.3。 相应的启动程序和读数程序都非常简单。

编程概要:

int DAC0832(uchar datas)

{

P0=datas;

                            }; 选通DAC0832并且送值进行数/模转换

   图2.13电路图才是真正意义上的直通电路,只要往DA送数据就可以对数据直接进行数/模转换,可以有效减少编程工作量而且还可以确保DAC0832有效工作,避免因无法选通DAC0832导致的故障。

方案一需要使用两块DAC0832芯片,导致制作成本大幅上升,而且导致电路板制作难度加大,并且其功能远超过设计要求中所要求的功能,过于浪费资源。方案二相对方案一大幅消减成本,制作简单且程序控制难度也下降,但是相对方案三,根据以往的设计经验,DAC0832片选直接接地,直接处于接通状态会更有利于电路设计。所以最终选择方案三作为制作方案。

 

2.2器件选择

单片机:主控选用ATMEL公司的AT89S51

D/A芯片: DAC0832

放大器:  LM358

晶振电路:12M晶振,30pF电容

供电电压:+5V直流稳压电源供电

DAC0832参考电压:+5V直流稳压电源;实际电路中直接运用单片机供电电源,DAC输出使用双极性输出

 

3.工作原理

3.1 工作原理简介

   主要工作为单片机89S51对P1低四位口读回按键值通过单片机分析判断对应按键是否按下,向DAC0832输入对应的不同的波形参数。控制DAC0832输出不同的波形和改变波形参数,电路增加上电源指示灯,和相应按钮控制单片机复位,

3.2 系统框图

从工作原理,设计出来的电路框图如图3.1所示。直流稳压电源提供电路工作电压及其D/A参考电压;单片机作为一个主控芯片,需要做大量工作,包括读入数据、数据处理、数据输出、器件驱动、状态检测等功能;状态检测电路由单片机P1口读回键值进行键值判断,输出对应的数据送到DAC0832进行波形输出;单片机读入按键的值控制实现相应的功能;下载口按照实验室提供的相应标准制作而成,结合ISPDOWN软件支持在线编程下载,实现在线调试状态。

 

 

 

系统框图如图3.1所示:

 

 

 

电源指示灯

按键控制电路

下载口

DAC0832数模转换器

放大器

输出波形

复位电路

直流稳压电源

 

 

 

 

 

 

 

 

 

 

 

图3.1  波形发生器系统框图

4.硬件设计

  4.1 AT89S51与DAC0832接口设计

因为P0口在4组I/O口中驱动能力最大,所以89S51与0832数据传递采用P0口, P3口基本没有用到第二功能引脚,所以这里可以放心使用。P0口驱动能力最大。具体电路见图4.1。


图4.1

4.2波形输出电路设计


图4.2

4.3复位电路


    这里采用的是电平按钮复位方,电路图如图4.3所示:

4.4振荡电路

   电路设计中采用12M晶振,电路设计图见图4.4。


图4.4

4.5控制电路


图4.5

为了便于控制和增加相应功能:调节方波的占空比、波形变换,频率变换和幅度变换。特别设置了4个控制按钮。

4.6电源供电电路

    电源电路设计见图4.6所示,在电源供电时,应该增加一个指示灯加以指示,电路中采用一个电源和地直间用一只1K欧姆电阻和一只LED。

 


图4.6

4.7 下载口电路

    方便电路调试和程序下载,本电路设计中设计了一个专门用来下来51单片机程序的下载口,下载程序时不用从电路上拔下89S51,直接就可以下载程序,做到在线调试。下载电路见图4.7。


图4.7

5.器件选择

  5.1 AT89S51简介

AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

5.1.1 主要特性

  1) 与MCS-51 产品指令系统完全兼容

2) 4K字节可编程FLASH存储器(寿命:1000写/擦循环)

3) 全静态工作:0Hz-24KHz

4) 三级程序存储器保密锁定

5) 128*8位内部RAM

6) 32条可编程I/O线

7) 两个16位定时器/计数器

8) 6个中断源

9) 可编程串行通道

10) 低功耗的闲置和掉电模式

5.1.2 管脚说明

    VCC:供电电压。

    GND:接地。

    P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

    P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

          


图 5.1 I/O口的内部结构图

    P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

    P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口同时为闪烁编程和编程校验接收一些控制信号。

    I/O口作为输入口时有两种工作方式:读端口与读引脚。读端口实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口,锁存器只有读端口才真正地把外部的数据读入到内部总线。

读引脚时也就是把端口作为外部输入线时,首先要通过外部指令把端口锁存器置1,然后再实行读引脚操作否则就可能读入出错。


P3口除了作为一般的I/O口线外,更重要的是它的第二功能,如下表所示:

                     表5.1 P3口第二引脚功能

RST:复位输入。振荡器复位时,要保持RST脚两个机器周期的高电平时间。

    ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。

   /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,/PSEN信号将不出现。

    /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

    XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

    XTAL2:来自反向振荡器的输出。

5.1.3 振荡器特性

     XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

5.1.4 选择理由

89X51系列单片机具有较多的接口(4*8=32口),有利于设计、分配电路接口,减轻设计压力,使设计电路时有很高的自由选择性。其可重复擦写的FLASH内存也便于在线更改控制程序,可以验证并方便修改控制程序。

5.2DAC0832简介

5.2.1 主要特性

1)DI7~DI0 :8位的数据输入端,DI7为最高位.

2)IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0.

3)IOUT2 :模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数。

4)Vcc :芯片供电电压,范围为(+5~ 15)V。

5)RFB :反馈电阻引出端,DAC0832内部已经有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。

6)工作温度范围为-40~+85摄氏度

7)VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10~-10)V。VREF端与D/A内部T形电阻网络相连。

8) AGND :模拟量地,即模拟电路接地端, DGND :数字量地。

5.2.2 内部结构

图5.1 DAC0832内部结构框图                 图5.2 DAC0832引脚图

5.2.3  DAC0832引脚图

5.2.4 DAC0832工作原理

DAC0832的工作过程是:当ILE为高电平,片选信号/CS和写信号/WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。此后,当/WR1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。

对第二级锁存来说,传送控制信号 /XFER 和写信号 /WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当 /WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。

6 程序流程图

6.1 主程序流程图

开始

 

                          

                          ←

 

键值判断

送对应波形数据

 

 

 

 

 

D/A转换

 

 

 

 

 

 

波形输出

返回

按键扫描

图 6.1  系统主程序流程图

6.2 按键识别子程序流程图

 

设置P1口

读取按键值

屏蔽键值高四位

 

 

 

 

键值取反

 

程序返回

 

 

                        图 6.2 按键识别子程序流程图                                    

6.3波形输出子程序流程图

 6.3.1频率调节子程序

 

 

 

 

 

 

 

 

返回

对应频率调节按键S1按下

变量F加1

初始化定时器

                        图6.3.1 频率调节子程序

  6.3.2波形发生子程序

主要是通过把数据存入R1中,并送P0口的数模转换。其流程图如下:

 

开始

R1送P0口

送P0口

延时

 初始化定时器

键值送R1寄存器

 

 

 

 

 

 

 

 

 

                                            

R1寄存器单元数值增加1

 

 

 

                 

 

判断R1中值是否达到输出最后值

 

 

                                   

 

                        否

 

        

                

 

                               是

 

 

                          判断是否有键按下               否

 

            是↓

返回

 

  图 6.4  波形输出子程序流程图

  评论这张
 
阅读(224)| 评论(6)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018