一. 硬件设计详解
1) D/A转换原理
数字量是用二进制代码按数位组合起来表示的,对于有权码,每位代码都有一定的权。为了将数字量转换
成模拟量,必须将每1位的代码按其权的大小转换成相应的模拟量,然后将这些模拟量相加,即可以得到与
数字量成正比的总模拟量,从而实现数模转换。
2) D/A转换器类型
D/A转换器包括权电阻网络D/A转换器,倒T形电阻网络D/A转换器,具有双极性输出的D/A转换器。
3) D/A转换器的参数指标
a. 分辨率
D/A转换器模拟输出电压可能被分离的等级数。n位D/A转换器的分辨率可表示为1/(2的n次方-1)
b. 转换误差
表示D/A转换器实际输出的模拟量与理论输出模拟量之间的差别。
c. 建立时间
输入数字量变化时,输出电压变化到相应稳定电压值所需时间。
d. 转换速率
大信号工作状态下模拟电压的变化率。
e. 温度系数
输入不变的情况下,输出模拟电压随温度变化产生的变化量。
一般用满刻度输出条件下温度每升高1度,输出电压变化的百分数作为温度系数。
4) DAC0832说明
a. 引脚图
/CS - 片选信号输入端,低电平有效
/WR1 - 输入寄存器的写选通输入端,负脉冲有效(脉冲宽度应大于500ns). 当CS为0,ILE为1,WR1有效时
DI0~DI7状态被锁存到输入寄存器。
DI0~DI7 - 数据输入端,TTL电平,有效时间应大于90ns.
Vref - 基准电压输入端,电压范围为-10V~+10V
Rrb - 反馈电阻端,芯片内部此端与Iout1接有一个15k欧姆的电阻。
Iout1 - 电流输出端,当输入全1时,其电流最大。
Iout2 - 电路输出端,其值与Iout1端电流之和为一常数。
/XFER - 数据传输控制信号输入端,低电平有效
/WR2 - DAC寄存器的写选通输入端,负脉冲有效(脉冲宽度应大于500ns).当XEFR为0且WR2有效时,
输入寄存器的状态被传到DAC寄存器中。
ILE - 数据锁存允许信号输入端,高电平有效。
Vcc - 电源电压端,电压范围+5V~+15V
GND - 模拟地和数字地,模拟地为模拟信号与基准电源参考地;数字地为工作电源地与数字逻辑地
(两地最好在基准电源处一点共地)
b. dac0832操作时序图
/cs为低电平后,数据总线上数据才开始保持有效,然后再将/WR置低,从Iout1线上可看出,在/WR置地ts后
D/A转换结束,Iout输出稳定。若只控制完成一次转换的话,接下来将/WR和/CS拉高即可,若连续转换则
只需要改变数字端输入数据。
二. 实例详解
实例1:用单片机控制DAC0832芯片输出电流,让发光二极管D12(D12与数据输出接口相连,
即DA转换的结果可以通过D12反应出来)由灭均匀变到最亮,再由最亮均匀熄灭,完成这个周期时间控制在5s左右,循环变化。
程序模块说明:
DA
程序源码:
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2 ^ 6;
sbit wela = P2 ^ 7;
sbit dawr = P3 ^ 6;
sbit dacs = P3 ^ 2;
void delayms(uint xms);
void main()
{
uchar val, flag;
dula = 0;
wela = 0;
dacs = 0;
dawr = 0;
P0 = 0;
while (1)
{
if (flag == 0)
{
val += 5;
P0 = val;
if (val == 255)
{
flag = 1;
}
delayms(50);
}
else
{
val -= 5;
P0 = val;
if (val == 0)
{
flag = 0;
}
delayms(50);
}
}
}
void delayms(uint xms)
{
uint i, j;
for (i = xms; i > 0; i--)
for (j = 110; j > 0; j--)
;
}
程序小结:
1)标志位flag判断单片机执行灯变亮程序还是变暗。
2) val += 5; val -= 5 实现数据的均匀变化。
3) 延时计数, 255共有51个5,每次延时50ms,共计50*51=2551ms,即半个周期为2.5s, 那么一个周期刚好约5s.
4) P0用于向DAC0832送入数据。
5) dula = 0; wela = 0关闭数码管段选,位选,防止P0送入的数据影响到数码管。