小知识点补充15:
DA转换器两种输出形式:
1,电压型输出
2,电流型输出(实际需要模拟电压输出时需在输出端加运放)
小知识点补充16:
DA转换器主要技术指标有:
1,分辨率:指单片机输入给DA转换器的单位数字量的变化所引起的模拟量输出的变化。定义:输出满刻度值与2^n之比(n为DA的二进制位数)
2,建立时间:用于表明转换时间或转换速度。其值为从输入数字量到输出达到终值误差正负(1/2)LSB(最低有效位)时所需时间。
3,转换精度:位数越多,精度越高
(1)绝对转换精度
(2)相对转换精度
DAC0832芯片介绍:
(DAC0832实物图)
1,DAC0832是8位的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器(寄存器)、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
2,主要参数
** 分辨率为8位
** 电流稳定时间1us,即电流输出,建立时间为1us
** 可单缓冲、双缓冲或直接数字输入
** 只需在满量程下调整其线性度
** 单一电源供电(+5V~+15V)
** 低功耗,20mW
3,引脚介绍
DAC0832引脚图:
DAC0832内部结构图:
* DI0~DI7: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值之和为一常数,即IOUT1+IOUT2=常数
* RFB: 反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
* Vcc: 电源输入端,Vcc的范围为+5V~+15V;
* VREF: 基准电压输入线,VREF的范围为-10V~+10V;
* AGND: 模拟信号地;
* DGND: 数字信号地。
4,工作方式
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。
(1)单缓冲方式:单缓冲方式是控制输入寄存器和DAC寄存器同时接收数据,或者只用输入寄存器而把DAC寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。
(2)双缓冲方式:双缓冲方式是先使输入寄存器接数据,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入数据。此方式适用于多个D/A转换同步输出的情节。
(3)直通方式: 直通方式是数据不经两级锁存器锁存,即 CS*,XFER* ,WR1* ,WR2* 均接地,ILE接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。
参考图如下:
(此图摘自百度)
题48
1,利用DAC0832产生锯齿波
2,利用DAC0832产生三角波
连接原理图如下图:
程序源码:
1,锯齿波汇编程序:
ORG 0000H
LJMP START
ORG 0030H
START:
MOV DPTR,#7FFFH
L1:
CLR A
MOV R7,#0FFH
LOOP:
MOVX @DPTR,A
INC A
DJNZ R7,LOOP
AJMP L1
SJMP $
END
1,锯齿波C程序:
#include "reg51.h"
#include "absacc.h";此文件里的内容前文提过
#define DAC0832ADDR XBYTE[0X7FFF]
#define uchar unsigned char
#define uint unsigned int
uint count=0;
int main()
{
while(1)
{
for(count=0;count<256;count++)
DAC0832ADDR=count;
}
return 0;
}
仿真图:
备注:锯齿波实际上每一个斜边分成256个台阶,只是简单的测试,若需使用DAC0832做实际东西请见此文:“基于51单片机的波形发生器(初版)”
2,三角波汇编程序:
ORG 0000H
LJMP START
ORG 0030H
START:
MOV DPTR,#7FFFH
CLR A
L1:
MOVX @DPTR,A
INC A
CJNE A,#255,L1
L2:
MOVX @DPTR,A
DEC A
CJNE A,#00H,L2
AJMP L1
END
2,三角波C程序:
#include "reg51.h"
#include "absacc.h"
#define DAC0832ADDR XBYTE[0X7FFF]
#define uchar unsigned char
#define uint unsigned int
uint count=0;
int main()
{
while(1)
{
for(count=0;count<256;count++)
DAC0832ADDR=count;
for(count=255;count>=0;count--)
DAC0832ADDR=count;
}
return 0;
}
仿真图:(简单测试)
备注:产生方波只需给高低电平然后延时,产生正弦波利用查表指令。
上述程序均是单缓冲方式
扩展:直通方式产生三角波:
电路图:
程序源码:
ORG 0000H
LJMP START
ORG 0030H
START:
CLR A
L1:
MOV P0,A
NOP
NOP
NOP
INC A
CJNE A,#255,L1
L2:
MOV P0,A
NOP
NOP
NOP
DEC A
CJNE A,#00H,L2
AJMP L1
END
注:程序基本没变,主要变化是在硬件电路连接上
仿真图:
对比可发现:缓冲方式和直通方式产生的波形是有一定差别的,直通方式更接近我们想要的波形(在仿真软件上),但在做实物时,根据实际情况选择工作方式。可参考:
基于单片机的波形发生器(初版)