51单片机学习笔记——DA转换

news/2025/2/21 2:44:14/

一、DA转换器的分类

权电阻网络D/A转换器

一个多位二进制数中每一位的1所代表的数值大小称为这一位的权。
权电阻网络D/A转换器原理图
对于N位的权电阻网络D/A转换器,当反馈电阻为Rf=R/2时,输出电压的计算公式为:
V 0 = − V R E F 2 n ( d n − 1 2 n − 1 + d n − 2 2 n − 2 + . . . + d 1 2 1 + d 0 2 0 ) = − − V R E F 2 n D n V_{0}=-\frac{V_{REF}}{2^n}(d_{n-1}2^{n-1}+d_{n-2}2^{n-2}+...+d_{1}2^{1}+d_{0}2^{0})=--\frac{V_{REF}}{2^n}D_{n} V0=2nVREF(dn12n1+dn22n2+...+d121+d020)=2nVREFDn
其中,V0为输出电压,VREF为参考电压,d为模拟量每位的值,2n为位权。
权电阻网络D/A转换器的优点:简单。
权电阻网络D/A转换器的缺点:电阻值相差大,难以保证精度,且不宜于集成在IC内部。

倒T形电阻网络D/A转换器

倒T形电阻网络D/A转换器原理图
倒T形电阻网络D/A转换器较为常用,ADC0832就是采用了倒T形电阻网络。
倒T形电阻网络D/A转换器的优点:有较高的转换速度。
倒T形电阻网络D/A转换器的缺点:转换误差较大,转换精度较低。

具有双极性输出的D/A转换器

双极性输出的D/A转换器原理图
通过偏移电流可以获得双极性输出的D/A转换器。

二、D/A转换器主要参数指标

1.分辨率

分辨率为D/A转换器模拟输出电压可能被分离的等级数。
n位的D/A转换器分辨率为:
分 辨 率 = 1 2 n − 1 分辨率=\frac{1}{2^{n}-1} =2n11

2.误差

与A/D转换器类似,分为非线性误差,绝对精度等。

3.建立时间

指输入数字量变化时,输出电压变化到相应稳定电压值所需要时间。

4.转换速率

大信号工作状态下模拟电压的变化率。

5.温度系数

输入不变时,输出模拟电压与温度的变化量。

三、DAC0832

概况

DAC0832是采用T型解码网络的8位D/A转换器,转换时间为1μs,工作电压为+5V~+15V,共有20个引脚。

1.引脚详情

DAC0832引脚

引脚名称解释
1 C S ‾ \overline{CS} CS片选信号输入端,低电平有效
2 W R 1 ‾ \overline{WR1} WR1输入寄存器的写选通输入端,负脉冲有效
3AGND模拟地
4-7DI3-DI0数据输入端
8VREF基准电压输入端
9Rfb反馈电阻端
10DGND数字地
11IOUT1电流输出端,,当输入全为1时Iout1最大
12IOUT2电流输出端,与IOUT1端电流和为常数
13-16DI7-DI14数据输入端
17 X F E R ‾ \overline{XFER} XFER数据传输控制信号输入端,低电平有效
18 W R 2 ‾ \overline{WR2} WR2DAC寄存器的写选通输入端,负脉冲有效
19ILE数据锁存允许信号输入端,高电平有效
20Vcc电源电压端口
2.时序图

DAC0832时序图

3.例程:D/A转换制作呼吸灯
#include <reg52.h>
typedef unsigned int u16;	  
typedef unsigned char u8;sbit dula=P2^6;	//申明U1锁存器的锁存端
sbit wela=P2^7;	//申明U2锁存器的锁存端
sbit dawr=P3^6;	//定义DA的WR端口
sbit dacs=P3^2;	//定义DA的CS端口
sbit beep=P2^3;	//定义蜂鸣器端口u8 val = 0,flag = 0;//val为模拟信号值,flag控制灯的呼吸void DA_Init();	//DA初始化函数
void DA_led();	//DA实现呼吸灯
void delay(u16);//延时函数void main()
{DA_Init();while(1){DA_led();}	
}
void DA_Init() //DA初始化函数
{dula=0;	wela=0;		//打开两个锁存器dacs=0;		//打开片选CSdawr=0;		//低电平写信号P0=0x00;	//初始化使模拟信号值最低/*由于是连续读写,所以不需要把CS和WR信号拉高,只需改变数字位*/}
void DA_led() 	//DA实现呼吸灯
{if(flag==0)		//flag为0,小灯变亮{val+=5;		//模拟电压每次加5/255P0=val;		//通过P0口给DA数据口赋值if(val==255)//如果模拟电压达到最大值{flag=1;	//由最亮转向最暗beep=0;	delay(100);beep=1;	//蜂鸣器响一次}delay(50);	//小灯在最亮时亮50ms}else			//flag为1,小灯变灭{val-=5;		//模拟电压每次减小5/255P0=val;		//通过P0口给DA数据口赋值if(val==0)	//如果模拟电压达到最小值{flag=0; //flag改变,小灯重复beep=0;	delay(100);beep=1; //蜂鸣器响一次}delay(50);		//小灯在最暗时灭50ms}
}
void delay(u16 ms)	//延时函数
{u16 i,j;for(i=ms;i>0;--)for(j=110;j>0;j--);
}

三、PWM

含义
  • PWM一种以数字方式控制模拟电路的方式。
  • 占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。

转自知乎,图解PWM

例程:定时器制作呼吸灯
#include "reg52.h"		
typedef unsigned int u16;	 
typedef unsigned char u8;sbit PWM=P2^1;		// P2^1口连接单片机的SCL,也就是时钟线 
bit DIR = 1000;		//bit是位变量,类似bool,不过比bool省内存 此处DIR用来控制LED呼吸 //--定义一个全局变量--// 
u16 value,time,count;	//value 有效值 time时间 count 用来计时使有效值变化  void Timer1_Init();	//定时器1初始化函数
void breatheLED();	//该函数输出呼吸信号, 参数是每次呼吸的时间的一半 void main()
{	Timer1_Init();  //定时器1初始化while(1){breatheLED();		}		
}void Timer1_Init()	//定时器1初始化函数 
{TMOD|=0X10;		//选择为定时器1模式,工作方式1,仅用TR1打开启动TH1 = 0xff; TL1 = 0xff; 	//计时1us	ET1=1;			//打开定时器1中断EA=1;			//打开总中断TR1=1;			//打开定时器			
}void breatheLED() 	//该函数输出呼吸信号 
{if(count>100)	//每100us使得value变化一次						{  count=0;	//100us结束,count归零 if(DIR==1)	//如果现在是变亮					   {value++;	//占空比/有效值增加,灯变亮 }			if(DIR==0)	//如果现在是变暗 {value--;	//占空比/有效值变小 }	}if(value==1000)	//如果有效值/占空比等于一个呼吸周期了 也就是现在亮度最大 {DIR=0;		//DIR置0,改为变暗}if(value==0)	//如果有效值/占空比等于0了 {DIR=1;		//DIR置1,改为变亮 }	if(time < value)//PWM,如果在一个1000us周期里,有value的时间,灯亮着的 {PWM=1;}else if(time > 1000) //如果 time大于1000us,进行下一周期 {time = 0;		//time归零,下一个周期开始 }else				//在1000us里,除了value的时间,灯是灭的 {PWM=0;}}void Time1(void) interrupt 3    //3 为定时器1的中断号
{TH1 = 0xff; 	//重装计时器 TL1 = 0xff;   	//1ustime++; 		//1us,时间增长 count++; 
}

http://www.ppmy.cn/news/483417.html

相关文章

Davinci数据看板使用记录

项目中 用到Davinci 对比A B 两个表&#xff0c;特来记录一下使用过程。避免以后踩坑。 部署Davinci &#xff08;使用docker 容器部署 启动&#xff09; 实践证明下面这个方法无效&#xff1a;改了配置文件 sql, 我的也开不起来&#xff0c;一直报错数据库sql指向不对。 果…

关于AD/DA转换

AD/DA转换&#xff1a; 1&#xff1a;分辨率 ​ ADC的分辨率是指使输出数字量变化一个相邻数码所需要输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位。或者说&#xff0c;分辨率为满刻度 FS 的 1/2的12次方&#xff0c;一个10V满刻度的12位ADC能分…

【FPGA】高速DA的学习和使用(1)

#来自学渣的问候 这个是一个学完之后的总结 DAC——数模转换器&#xff0c;将数字信号转换成模拟信号&#xff08;电压、电流&#xff09;。 模拟信号&#xff1a;信号的频率、幅值、相位随时间连续变化。在一定时间内&#xff0c;任意取值都能得到一个瞬间的数量。 数字信号&…

ZYNQ FPGA实验——AD/DA测试

文章目录 前言一、ADDA模块介绍二、添加PLL IP核三、添加ILA IP核四、DDS IP核和VIO IP核五、编写测试程序六、管脚分配七、连接开发板测试八、Matlab中分析输出波形总结 前言 本实验是ADDA测试&#xff0c;具体的要求、注意事项以及开发流程如下。 ADDA测试实验流程&#xff…

STM32-DA发送正弦波

开发平台 STM32F0 Cubemx MDK V5 Cubemx配置&#xff08;DA DMA Timer&#xff09; DA的工作原理是使用定时器在固定时间内将产生正弦波的数据通过DMA的方式传送到DA控制器&#xff0c;从而产生固定频率的正弦波。 DA配置 DA的DMA配置 DMA的配置 Timer的配置 Timer的主…

常用AD/DA简介

目前生产AD/DA的主要厂家有ADI、TI、BB、PHILIP、MOTOROLA等&#xff0c;武汉力源公司拥有多年从事电子产品的经验和雄厚的技术力量支持&#xff0c;已取得排名世界前列的模拟IC生产厂家ADI、TI公司代理权&#xff0c;经营全系列适用各种领域/场合的AD/DA器件。 1. AD公司AD/DA…

davinci-0.3.0安装部署

davinci-0.3.0-beta.5 release安装部署 下载地址&#xff1a; https://github.com/edp963/davinci/releases/download/v0.3.0-beta.5/davinci-assembly_3.0.1-0.3.1-SNAPSHOT-dist-beta.5.zip 上传davinci zip包到系统某个目录下&#xff0c;如/export/servers&#xff0c;将其…

DA转换原理及实现

这一篇介绍D/A转换原理以及在TX-1C上的接线方式&#xff08;实现方法&#xff09;&#xff0c;再用一个例子来加深理解 D/A转换原理及参数指标 1.基本原理 数字量是二进制代码数位组合而来的&#xff0c;每位都有一定的权重&#xff0c;在D/A转换中&#xff0c;怎么样把这些…