单片机交流
登录
直播中
楼斌
8年用户
839经验值
私信
关注
[问答]
T型电阻网络D/A转换器实现原理是什么?
开启该帖子的消息推送
T型电阻网络D/A转换器实现原理是什么?
回帖
(1)
刘佳
2021-10-21 16:27:01
DAC
T型电阻网络D/A转换器实现原理
由上图可以知道,每过一个R,电压减少一半,电流减少一半
比如D7~D0 == 11000000,流过的电流为(1/2 + 1/4)I
具体看下图
我板子上的是DAC0832
832内部结构及引脚
关于引脚的说明
总共三种工作方式
1.单缓冲工作方式
此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。
2.双缓冲工作方式
多路D/A转换输出,如果要求同步进行,就应该采用双缓冲器同步方式 。
3.直通工作方式(主要以这种为例)
当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接+5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。
就是只要价格csda和wr位置0,就可以将P0口的信号转换成模拟信号
具体代码
//使P0从0到0xff循环达到灯的渐亮渐灭
#include
***it csda=P3^2;
***it wr=P3^6;
***it wela=P2^7;
int a = 0,flag = 0;
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init(){
csda=0; //关键点1
wr=0; //关键点2
a = 0;
wela = 1; //注意关掉位选,不然数码管出现许多数字
P0 = 0xff;
wela = 0;
}
void main(){
init();
while(1){
if(flag == 0){
P0 = a ++;
delay(20);
if(a == 0x100){
flag = 1;
a --;
}
}else{
P0 = a --;
delay(20);
if(a == -1){
flag = 0;
a ++;
}
}
}
}
ADC
逐次逼近式ADC的转换原理图
个人理解的原理:
1.VIN与10000000转换成相应的模拟电压比较,如果大,就在寄存器置1
2.如果上面成立,寄存器为10000000,接下来第二位置1 VIN比较11000000转换成模拟电压,成立就在寄存器置1,一直比较到最后一位
详细可以参考:
ADC0804中文资料
板子上的图:
这里我们只需要控制RD WR和CSAD就可以了,输出的结果账号对应LED的亮灭。
CSAD我的板子中对于P0,只要是P0为全0就好了,WR初始化:由高变低,转换器被清除,低到高则是转换正式开始,RD为0则会在LED灯上显示。至于为什么可以看芯片的时序图,或者郭老师的视频。
具体代码
//通过改变电压通过ADC使得LED灯表现出不同
#include
#define uchar unsigned char
#define uint unsigned int
***it wr=P3^6;
***it rd=P3^7;
void delay(uint z)
{
uint t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void init();
void start();
void main()
{
init();
while(1)
{
start();
delay(100); //这里要延迟长点,因为转换时间的原因
rd=0; //控制rd使得LED闪烁,置0输出
delay(50);
rd=1;
}
}
void init(){ //CSAD置0
P0=0;
}
void start(){ //按照说明初始化wr
wr=1;
wr=0;
wr=1;
}
DAC
T型电阻网络D/A转换器实现原理
由上图可以知道,每过一个R,电压减少一半,电流减少一半
比如D7~D0 == 11000000,流过的电流为(1/2 + 1/4)I
具体看下图
我板子上的是DAC0832
832内部结构及引脚
关于引脚的说明
总共三种工作方式
1.单缓冲工作方式
此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。
2.双缓冲工作方式
多路D/A转换输出,如果要求同步进行,就应该采用双缓冲器同步方式 。
3.直通工作方式(主要以这种为例)
当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接+5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。
就是只要价格csda和wr位置0,就可以将P0口的信号转换成模拟信号
具体代码
//使P0从0到0xff循环达到灯的渐亮渐灭
#include
***it csda=P3^2;
***it wr=P3^6;
***it wela=P2^7;
int a = 0,flag = 0;
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init(){
csda=0; //关键点1
wr=0; //关键点2
a = 0;
wela = 1; //注意关掉位选,不然数码管出现许多数字
P0 = 0xff;
wela = 0;
}
void main(){
init();
while(1){
if(flag == 0){
P0 = a ++;
delay(20);
if(a == 0x100){
flag = 1;
a --;
}
}else{
P0 = a --;
delay(20);
if(a == -1){
flag = 0;
a ++;
}
}
}
}
ADC
逐次逼近式ADC的转换原理图
个人理解的原理:
1.VIN与10000000转换成相应的模拟电压比较,如果大,就在寄存器置1
2.如果上面成立,寄存器为10000000,接下来第二位置1 VIN比较11000000转换成模拟电压,成立就在寄存器置1,一直比较到最后一位
详细可以参考:
ADC0804中文资料
板子上的图:
这里我们只需要控制RD WR和CSAD就可以了,输出的结果账号对应LED的亮灭。
CSAD我的板子中对于P0,只要是P0为全0就好了,WR初始化:由高变低,转换器被清除,低到高则是转换正式开始,RD为0则会在LED灯上显示。至于为什么可以看芯片的时序图,或者郭老师的视频。
具体代码
//通过改变电压通过ADC使得LED灯表现出不同
#include
#define uchar unsigned char
#define uint unsigned int
***it wr=P3^6;
***it rd=P3^7;
void delay(uint z)
{
uint t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void init();
void start();
void main()
{
init();
while(1)
{
start();
delay(100); //这里要延迟长点,因为转换时间的原因
rd=0; //控制rd使得LED闪烁,置0输出
delay(50);
rd=1;
}
}
void init(){ //CSAD置0
P0=0;
}
void start(){ //按照说明初始化wr
wr=1;
wr=0;
wr=1;
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
T
型
电阻
网络
D
/
A
转换器
有哪几种工作模式?
2021-07-14
1805
A
/
D
转换器
的工作原理是什么?
2019-10-22
3281
A
/
D
转换器
是什么工作原理?有哪些分类?
2021-04-06
1654
基于DAC0832电路的
D
/
A
转换器
2019-07-19
1481
A
/
D
转换器
的主要技术指标有哪些?选用
A
/
D
转换器
需要考虑什么因素?
2021-04-20
1886
在4位逐次逼近
型
转换器
中,
D
/
A
转换器
的基准电压为10v,输入的模拟电压为6.92v,求
转换
结果
2023-05-09
12781
电流
转换器
工作原理是怎么?
2019-09-12
3114
A
/
D
转换器
的速率和性能怎么样?在软件无线电中有什么应用?
2021-04-07
1184
如何使高分辨率
A
/
D
转换器
获得更高性能?
2021-04-22
1382
在选择高速
A
/
D
转换器
时,设计师必须考虑的因素是什么?
2021-04-14
1129
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分