51单片机 | DAC数模转换实验

本文详细介绍了51单片机如何通过DAC(数字模拟转换器)进行数模转换,讲解了DAC的工作原理、关键技术指标,并通过电阻网络型DAC展示了输出电压计算。此外,还讨论了在成本考虑下使用PWM(脉冲宽度调制)模拟DAC输出的方法,阐述了PWM的工作原理。最后,文章给出了硬件设计和软件设计的实现步骤,包括PWM的实现函数和主函数,实现实验中指示灯的呼吸灯效果。
摘要由CSDN通过智能技术生成


  这一节来介绍下如何使用 51 单片机输出模拟信号,要让 51 单片机输出模拟信号,同样需要相应的转换器,这种转换器我们称之为 DAC 数模转换器,但 DAC 专用芯片价格是比较高的,在实际应用中通常使用 PWM 技术来模拟 DAC 输出。我们开发板上集成了一个 DAC( PWM)模块电路,通过单片机 IO 口生成 PWM 波来模拟 DAC 输出。本节要实现的功能是:系统运行时, DAC( PWM)模块上的指示灯 DA1 呈呼吸灯效果,由暗变亮再由亮变暗。

一、DAC介绍

  DACDigital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
  DAC 的主要技术指标如下:

  1. 分辨率
      DAC 的分辨率是输入数字量的最低有效位(LSB)发生变化时,所对应的输出模拟量(电压或电流)的变化量。它反映了输出模拟量的最小变化值。分辨率与输入数字量的位数有确定的关系,可以表示成 FS /(2^n)FS 表示满量程输入值,n 为二进制位数。对于 5V 的满量程,采用位的 DAC 时,分辨率为 5V/256 =19.5mV;当采用 12 位的 DAC 时,分辨率则为 5V/4096=1.22mV。显然,位数越多分辨率就越高。

  2. 线性度
      线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。常以相对于满量程的百分数表示。如±1%是指实际输出值与理论值之差在满刻度的±1%以内。

  3. 绝对精度和相对精度
      绝对精度(简称精度)是指在整个刻度范围内,任一输入数码所对应的模拟量实际输出值与理论值之间的最大误差。绝对精度是由 DAC 的增益误差(当输入数码为全 1 时,实际输出值与理想输出值之差)、零点误差(数码输入为全0时,DAC 的非零输出值)、非线性误差和噪声等引起的。绝对精度(即最大误差)应小于 1 个 LSB。相对精度与绝对精度表示同一含义,用最大误差相对于满刻度的百分比表示。

  4. 建立时间
      建立时间是指输入的数字量发生满刻度变化时,输出模拟信号达到满刻度值的±1/2LSB 所需的时间。是描述 D/A 转换速率的一个动态指标。根据建立时间的长短,可以将 DAC 分成超高速(<1μS)、高速(10~1μS)、中速(100~10 μS)、低速(≥100μS)几档。

2.DAC 工作原理

  了解了 DAC 基本概念及特性后,再来看下其工作原理,下面以型电阻网络DAC 来介绍。其内部结构图如下所示:
在这里插入图片描述
  DAC 输出电压计算公式:
V 0 = V r e f ∗ z / 256 V0=Vref*z/256 V0=Vrefz/256
  公式中的 z 表示单片机给的数字量,vref 为参考电压,通常我们是接在系统电源上,即 5V,数值 256 表示 DAC 精度为 8 位。
  DAC 主要由数字寄存器、模拟电子开关、位权网络、求和运算放大器和基准电压源(或恒流源)组成。用存于数字寄存器的数字量的各位数码,分别控制对应位的模拟电子开关,使数码为 1 的位在位权网络上产生与其位权成正比的电流值,再由运算放大器对各电流值求和,并转换成电压值。
  上述的模拟电子开关都分别接着一个分压的器件,比如说电阻。模拟开关的个数取决于 DAC 的精度。那么 N 个电子开关就把基准电压分为 N 份(并不是平均分哦),而这些开关根据输入的二进制每一位数据对应开启或者关闭,把分压的器件上的电压引入输出电路中。

二、PWM介绍

  出于成本考虑&#x

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机数模转换程序 将da#include //52系列单片机头文件 #include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; //申明U1锁存器的锁存端 sbit wela=P2^7; //申明U2锁存器的锁存端 sbit adwr=P3^6; //定义AD的WR端口 sbit adrd=P3^7; //定义AD的RD端口 sbit led=P2^5; sbit DAC0832_CS = P3^2; sbit DAC0832_WR = P3^6; sbit AD_CS=P0^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar weima[] = {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void display(uchar bai,uchar shi,uchar ge) //显示子函数 { dula=1; P0=table[bai]|0x80; //送段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0x7e; //送位选数据 wela=0; delayms(1); //延时 dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0x7d; wela=0; delayms(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0x7b; wela=0; delayms(1); } /*void displays(uchar a ,uchar b,uchar c) //显示子函数 { dula=1; P0=table[a]; //送段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0x77; //送位选数据 wela=0; delayms(1); //延时 dula=1; P0=table[b]; dula=0; P0=0xff; wela=1; P0=0x6f; wela=0; delayms(1); dula=1; P0=table[c]; dula=0; P0=0xff; wela=1; P0=0x5f; wela=0; delayms(1); } */ void displays(uchar shuzi,uchar weizhi,bit dp) { dula=1; if(dp) P0 = table[shuzi]|0x80; else P0 = table[shuzi]; dula=0; wela=1; P0 = weima[weizhi]; wela=0; } void main() // 主程序 { uint ad; uchar A1,A2,A3,adval; AD_CS=1; //置CSAD为0,选通ADCS 以后不必再管ADCS DAC0832_CS = 0; DAC0832_WR = 0; while(1) { wela=1; P0=0x7f; wela=0; adwr=1; _nop_(); adwr=0; //启动AD转换 _nop_(); adwr=1; P1=0xff; //读取P1口之前先给其写全1 adrd=1; //选通ADCS _nop_(); adrd=0; //AD读使能 _nop_(); adval=P1; ad=adval*1.941; //AD数据读取赋给P1口 adrd=1; A1=ad/100; //分出百,十,和个位 A2=ad0/10; A3=ad; P1=(~adval); P0=adval; displays(adval/100,4,0); delayms(1); displays(adval0/10,5,0); delayms(1); displays(adval,6,0); delayms(1); display(A1,A2,A3); } } ad的数据相互转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值