电流输出型DA转换器AD5545的原理应用及编程Word格式.docx
《电流输出型DA转换器AD5545的原理应用及编程Word格式.docx》由会员分享,可在线阅读,更多相关《电流输出型DA转换器AD5545的原理应用及编程Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
,
其中REQ为Vref引脚到Iout引脚间的等效电阻,其值与数字量D有关;
RFB为RFB引脚到Iout引脚间的电阻值。
有
(n:
DAC的位数;
N:
输入的二进制数;
Rin:
输入阻抗)
假设,芯片本身的增益误差为0,即Rin=Rfb,
记
,即有
,即放大倍数为
将DA转换器用作双极性输出:
电路如图4所示,其在本质上的等效电路如图5所示。
图4双极性输出
图5等效电路
图5中REQ为Vref引脚到Iout引脚间的等效电阻,其值与数字量D有关;
根据运放原理,有
(根据
)
对于AD5545(或者DAC8812),则有
有Vout=(-Vref~+Vref)
对AD5545的操作:
图6AD5545操作时序
AD5545操作采用SPI方式的3线接口,数据SDI、时钟CLK、片选CS。
A1、A0用来选择通道,如图7所示。
数据位16为精度数据,MSB在前。
图7通道地址编码
软件实现:
MCU用MSP430F149,DA转换器用上述提及的AD5545,SPI时序用软件模拟的方式实现。
电路设计中SPI接口的CS由P1.0控制、CLK由P3.3控制、SDI由P3.1控制。
自己认为,在软件设计中,难的是对数据的处理,尤其是2位地址+16位数据构成的18位格式的数据。
不过好在,在AD5545的datasheet上下面一段话:
IftheappliedmicrocontrolleroutputsserialdataindifferentlengthsthanAD5545,suchas8-bitbytes,threerightjustifieddatabytescanbewrittentotheAD5545。
TheAD5545ignoresthesixMSBandrecognizesthe18LSBasvaliddata。
Afterloadingtheserialregister,therisingedgeofCStransferstheserialregisterdatatotheDACregisterandupdatestheoutput;
即碰到MCU的位数和AD5545位数不匹配的情况,比如8位的MCU。
传送的18位数据通常通过传送3个8位数据来实现。
AD5545(自动)忽略前6个MSB,只接受后18个LSB数据,当所有数据都送入串行移位寄存器后,在CS的上升沿将数据送入DAC寄存器,同时更新输出(模拟值A)。
对于AD5545这款DAC的操作,自己认为,归根结底还是如何把数据从MCU送给它,尤其是碰到像上述提及的位数不匹配的情况,因此编写了两个程序段,分别用于发送8位数据和用于转换18位格式数据。
(每个程序段中,中间有所省略,相信读者可以自行补全)
voidAD5545SendByte(ucharSByte)
{
……
for(i=0;
i<
8;
i++)
{
P3OUT&
=~(AD5545_CLK);
//时钟CLK低电平
if(SByte&
BIT7)//判断高位是否为1
P3OUT|=AD5545_SDI;
//为1,发送1
else
=~(AD5545_SDI);
//否则,发送0
delayus(5);
//延时一点时间
P3OUT|=AD5545_CLK;
//时钟CLK高电平(上升沿)
SByte<
<
=1;
//数据左移1位
}
}
/******************************************************
描述:
DA转换器AD5545BRUZ转换函数
AD5545自动忽略前6位MSB,只接受18位LSB
******************************************************/
voidAD5545_Convert(longintDA_Value,ucharDA_CS_num,ucharAD5545_chnum)
if(AD5545_chnum==0)
DA_Value=0x010000|DA_Value;
//AD5545_chnum=0,useChA
elseif(AD5545_chnum==1)
DA_Value=0x020000|DA_Value;
//AD5545_chnum=1,useChB
else
DA_Value=0x030000|DA_Value;
//AD5545_chnum=2,useChAandChBsimultaneity
lo_byte=(uchar)(DA_Value&
0xff);
//取出低字节,即16位数据的低8位
mi_byte=(uchar)(DA_Value>
>
8);
//取出中间字节,即16位数据的高8位
hi_byte=(uchar)(DA_Value>
16);
//取出高字节,即24位数据格式中的最高8位
AD5545_enable(DA_CS_num);
//选通通道的DA
AD5545SendByte(hi_byte);
……
AD5545SendByte(mi_byte);
AD5545SendByte(lo_byte);
AD5545_disenable(DA_CS_num);
//禁止通道的DA
对双极性输出电路结果的测量,
参考电压
输入数字量N
计算公式
理论结果(V)
实测结果(V)
2.492
0x0000
-2.492
-2.490
2.492
0xAAAA
0.831
0.838
0xFFFF
2.501
注:
本文ADI技术论坛原创首发,转载请注明。
谢谢!