hi I am using AD5791 with control word "000000000000000000000100" . I Get 2 mV at LSB. Is that correct ? Is my control word setting is correct?
Kindly refer to the SERIAL INTERFACE section of the data sheet. Table 7 & Table 8 describes how the frame is structured. For example if you want to write to the DAC register, DB23:DB20 should be 0001. If you want to write on the LSB, DB19:DB0 should be 00000000000000000001.
The frame should be :
0x100001 in hex
0b000100000000000000000001 in binary
thank you very much for your reply.
I referred the data sheet.
with control register word as "000000000000000000000100" and
DAC register word as "0001 0000 0000 0000 0000 0001"
I get 2mV at the output.
I LSB should give about 9.5 uV right?
instead I am getting 2mV.hence my doubt.
is the control register word "000000000000000000000100" correct?
reference voltage I used is +/- 10 V.
Thanks and regards
If you are writing to the control register, the first 4 bits should be "0010".
"000000000000000000000100" will be a No operation command.
If DAC register word is "0001 0000 0000 0000 0000 0001", the output should be around -10V and not at 2mV.
Can you please share your schematic and scope shots of the digital signal that you are sending?
The schematic I used is the following:
I am doing the interfacing with VHDL .
--part of port declaration
data_A :in std_logic_vector(17 downto 0) --- 17 bits controlled through sliding switches in the fpga board
--part of signal declaration
signal data_B : std_logic_vector(19 downto 18) :="00" ;---HIGHER 2 MSB 's tied to '0'; --not using higher voltages.
signal data_cntrl :std_logic_vector(3 downto 0) :="0001";
signal CNTRL_DATA :std_logic_vector ( 23 downto 0):="001000000000000000000010";
signal data:std_logic_vector(19 downto 0);
begindata <= data_B & data_A; --data_B is fixed for 00 as we have only 18 sliding switches. data_A is from sliding ----
if you need full code I can send.
with the present set up I get the following readings
measured up to 2.5V ( for 18-bit) using FLUKE 87V (0.1mV min)
thanks and regards
What is your supply on VDD and VSS?
On the control register write, BIN/2sC bit (DB4, see table 11 & 12) is in its default state which is twos complement coding. please conform to this for the 20-bit data. Or you could set DB4 to use offset binary coding.
VDD and VSS are +/- 15 V.
yes. as you see, below declaration
BIN/2sC bit is in its default state (0).
when I set this bit to offset binary coding , it gives much higher voltage.
can it be because of the AD5791 chip itself?
what is minimum precision value we get for 20-bit with 0th bit set to '1'?
I don't see enough information yet why this is an issue with the chip itself. You should see the output to be close to -10V if BIN/2sC is set to "1".
How accurate are your references? Kindly measure it using a higher resolution multimeter and see if it is exactly +/-10V at the pins of AD5791? if these are not exact, these would cause additional offset and gain errors at the output.
reference voltage is precisely +/-10 V measured with Fluke with 0.1mV resolution.
I get up to 10 V with all 20-data bits set to high.
but at the LSB, I get minimum 2 mV only.
Is it the characteristic of AD5791?
what is the minimum voltage expected with 20 -bit data as "00000000000000000001"?
i do not know whether my understanding is correct.
I expect a minimum of 10/2**20 = 9.5uV per step
and get incremented as we increment the bits.
Am I correct ?
Also, is my control word below set right ?
The step (1 LSB) is actually ~19uV for +/-10V reference. 20/(2^20).
Zero scale error and Full scale error is +/-7LSB which roughly about 133uV.
If I were to calculate the worst case accuracy of the AD5791.
VOUT= (D/(2^n))* (VREF/VFSE) + VZSE + INL
D = decimal code loaded to DAC ranges 0 ≤ D ≤ 2N–1 =
N = number of bits.
VREF = applied reference voltage.
VFSE = full-scale error in volts (or gain error)
VZSE = zero-scale error in volts (or offset error)
INL = integral nonlinearity in volts. INL is 0 at full scale or zero scale.
VOUT= 1/(2^20) * (20V/ 133uV) + 133uV + 19uV
This is assuming that you have a perfect reference. Any errors in the reference will directly affect the output. There is nothing wrong with your control register data. But you need to check your reference as it would be the main contributor to the DC errors at the output. May I know what equipment or component are you using for the reference?
thanks for the reply.
I am using LT1002 precision +/- 10 V reference circuit.
I measured with millivolt accuracy.
Do you suspect this ?
Pls suggest a better alternative.
thanks and regards
Ph:2278 2039 / 2278 2683 / 2278 2077
LT1002 is an operational amplifier. Can you please clarify how you used this as the reference? what is your input to the amplifier? could send the connections you've made?
You could refer to the AD5791 board user guide for different reference devices used with the AD5791. These include LTZ1000, LTC6655 & ADR445.
please find the attached LT1002 precision +/- 10 v reference circuit.
do you find any problem with this ?
it gives exactly 10.00 on Fluke 87V
i wll go through the one's you have suggested.
There is no issue with the reference circuit as long as you have followed the recommended tolerance of the resistors.
You mentioned that you can measure 10.00V using your fluke multimeter. This is only accurate up to 10mV range. The error you are encountering is less than 10mV, 2mV as you have mentioned. I suggest using a multimeter with a higher precision and make sure that reference is accurate up to the 10uV range. You should measure +/-10.0000 at the input pins of the AD5791.
Thanks for this suggestion.
I have not done that kind of measurement
though I followed the design specs for the reference.
I will do that and inform you.
The reference voltage is not precise to micro volt.
if I adjust +10V to 10.0000, -10V changes in millivolts.
here I found the TWO 10 K resistors in the path of -10V
needs to be 0.1% which was not taken care.
I used am smd resistor.
So I will procure 10K of 0.1% and test it again.
it will take a week or so to get the component.
I will update you on this after that modification.
I am really thankful to you for your valuable time on this.
Retrieving data ...