« Close

Datasheets and User Guides

App Notes

Software & Driver

 

LJTick-DAC Datasheet

Stock: In Stock
Price: $79.00
LabJack LJTick-DAC -10V to +10V Analog Output Accessory Compatible with LabJack USB, Ethernet, WiFi DAQ Devices

The LJTick-DAC works with the T7 and with any UD family device (U3/U6/UE9), except for the oldest U3 hardware revision 1.20 (U3A, pre 2007), as that U3 did not support I2C.  The LJTick-DAC does not work with the U12.

The LJTick-DAC connects to a digital I/O block (e.g. FIO4/FIO5), not to the DAC0/DAC1 terminals.

Figure 1: LJTick-DAC

Figure 2: LJTick-DAC With U3

The LJTick-DAC (LJTDAC) is an analog output expansion module. It provides a pair of 14-bit analog outputs with a range of ±10 volts. The 4-pin design plugs into any of the standard DIO/DIO/GND/VS screw terminal blocks on the LabJack, and thus up to 10 of these can be used per device to add 20 analog outputs.

The update rate of the LJTDAC is limited by the communication time between the host and the device. See Section 3.1 of the U3/U6/UE9 User’s Guide for detailed information, but it generally takes about 1 ms to do an update via USB “high-high” or Ethernet, while it takes about 4 ms via other USB connections. Only 1 DAC channel can be updated per low-level communication. That means, for instance, that if updates are done at the 1 ms rate to build a 100 Hz sine wave, there will only be about 5 updates per half-cycle of the waveform and it will appear to be a smooth sine. With a 10 Hz sine wave, however, there will be about 50 updates per half-cycle and the waveform will appear much smoother.

The pins shown on the right side of the LJTDAC (Figure 1) connect to the LabJack. The VS/GND pins power the LJTDAC, while the DIOA/DIOB pins are used for digital communication (I2C) between the LJTDAC and LabJack. DIOA is the serial clock (SCL) and DIOB is the serial data (SDA). Following are descriptions of the screw-terminal connections:

GND: Connected directly to LabJack ground (GND).

VS: This is the same 5 volt output as the VS terminals on the LabJack itself. This is an output terminal, not an input. It can be used to provide 5 volt (nominal) power as needed.

DACA/DACB: Output of each 14-bit digital-to-analog converter.

 

Low-Level I2C Communication

The LJTDAC has a non-volatile 128-byte EEPROM (Microchip 24C01C) on the I2C bus with a 7-bit address of 0x50 (d80), and thus an 8-bit address byte of 0xA0 (d160). Bytes 0-63 are available to the user, while bytes 64-127 are reserved.

EEPROM Address Description Nominal Value
0-63 User Area  
64-71 DACA Slope 3.1586E+03 bits/volt
72-79 DACA Offset 3.2624E+04 bits
80-87 DACB Slope 3.1586E+03 bits/volt
88-95 DACB Offset 3.2624E+04 bits
96-99 Serial Number  
100-127 Reserved  

The slopes and offsets are stored in 64-bit fixed point format (signed 32.32, little endian, 2’s complement). The serial number is simply an unsigned 32-bit value where byte 96 is the LSB and byte 99 is the MSB.

The DAC (digital-to-analog converter) chip on the LJTDAC is the LTC2617 (linear.com) with a 7-bit address of 0x12 (d18), and thus an 8-bit address byte of 0x24 (d36). The data is justified to 16 bits, so a binary value of 0 (actually 0-3) results in minimum output (~-10.3 volts) and a binary value of 65535 (actually 65532-65535) results in maximum output (~10.4 volts).

For more information about low-level communication with the LJTDAC, see the I2C example in the VC6_LJUD archive or see the Linux example.

 

UD Communication

The LJTick-DAC works with any UD family device (U3/U6/UE9), except for U3 hardware revision 1.20 (U3A), as that U3 did not support I2C. It also does not work with the U12 (which is not a UD family device).

The LabJack UD driver for Windows (V2.76+) has special support for the LJTDAC. First, the following special channel is used with the put config IOType to specify where the LJTDAC is connected to the LabJack:


LJ_chTDAC_SCL_PIN_NUM  //Used with LJ_ioPUT_CONFIG 

Then there is one IOType used for all further communication with the LJTDAC. The value of the Channel parameter used with this IOType is always one of the following 7 special channels:


LJ_ioTDAC_COMMUNICATION  //Main IOType. 
 
LJ_chTDAC_SERIAL_NUMBER  //Read-only. 
LJ_chTDAC_READ_USER_MEM  //x1 is array of 64 bytes. 
LJ_chTDAC_WRITE_USER_MEM //x1 is array of 64 bytes. 
LJ_chTDAC_READ_CAL_CONSTANTS //x1 is array of 4 doubles. 
LJ_chTDAC_WRITE_CAL_CONSTANTS //x1 is array of 4 doubles. 
LJ_chTDAC_UPDATE_DACA  //Pass DAC voltage in Value parameter. 
LJ_chTDAC_UPDATE_DACB  //Pass DAC voltage in Value parameter. 

Typical operation consists of simply setting the pin number for SCL and then updating DAC channel A and/or B:


//Tell the driver that SCL is on FIO0.  The driver then assumes that SDA is on FIO1. 
//This is just setting a parameter in the driver, and not actually talking 
//to the hardware, and thus executes very fast. 
ePut(lngHandle, LJ_ioPUT_CONFIG, LJ_chTDAC_SCL_PIN_NUM,0,0); 
 
//Set DACA to 1.2 volts.  If the driver has not previously talked to an LJTDAC 
//on FIO0/FIO1, it will first retrieve and store the calibration constants.  The 
//low-level I2C command can only update 1 DAC channel at a time, so there 
//is no advantage to doing two updates within a single add-go-get block. 
ePut(lngHandle, LJ_ioTDAC_COMMUNICATION, LJ_chTDAC_UPDATE_DACA, 1.2, 0); 
 
//Set DACB to 2.3 volts. 
ePut(lngHandle, LJ_ioTDAC_COMMUNICATION, LJ_chTDAC_UPDATE_DACB, 2.3, 0); 

For more information about UD communication with the LJTDAC, see the LJTDAC example in the VC6_LJUD archive.

 

T7 & LJM Communication

The T7 has special registers available that make controlling the LJTick-DAC very easy. Go to the Modbus Map and set Tags = TDAC to see the registers.

LJTick-DAC Analog Output Registers
Name Start Address Type Access
TDAC#(0:22) 30000 FLOAT32 W
TDAC_SERIAL_NUMBER 55200 UINT32 R
TDAC_SPEED_THROTTLE 55202 UINT32 R/W
TDAC#(0:22)
- Starting Address: 30000
Update a voltage output on a connected LJTick-DAC accessory. Even TDAC# = DACA, Odd TDAC# = DACB. For instance, if LJTick-DAC accessory is connected to FIO2/FIO3 block on main device, TDAC2 corresponds with DACA, and TDAC3 corresponds with DACB.
  • Data type: FLOAT32  (type index = 3)
  • Write-only
  • Default value: 0
Expanded Names Addresses
TDAC0, TDAC1, TDAC2, TDAC3, TDAC4, TDAC5, TDAC6, TDAC7, TDAC8, TDAC9, TDAC10, TDAC11, TDAC12, TDAC13, TDAC14, TDAC15, TDAC16, TDAC17, TDAC18, TDAC19, TDAC20, TDAC21, TDAC22 Show All 30000, 30002, 30004, 30006, 30008, 30010, 30012, 30014, 30016, 30018, 30020, 30022, 30024, 30026, 30028, 30030, 30032, 30034, 30036, 30038, 30040, 30042, 30044 Show All
TDAC_SERIAL_NUMBER
- Address: 55200
Returns the serial number of an LJTick-DAC, and forces a re-read of the calibration constants. Which LJTDAC is determined by the last write to TDAC# ... whether it was successful or not.
  • Data type: UINT32  (type index = 1)
  • Read-only
  • Default value: 0
TDAC_SPEED_THROTTLE
- Address: 55202
Sets the I2C clock speed that will be used when communicating with the TDAC. Default value is 65516. See I2C_SPEED_THROTTLE for more detail.
  • Data type: UINT32  (type index = 1)
  • Readable and writable
  • Default value: 0
  • Minimum firmware version: 1.0208

 

Updating an output through the LJM library is easy.  For example, the following line of code:

err = LJM_eWriteName(handle, "TDAC11", 7.5)

... sets the voltage on the DAC channel associated with DIO11 (aka EIO3).  That means DACB on the LJTick-DAC connected to DIO10/11 (aka EIO2/3).

 

Specifications: (25 deg C, VS = 5 volts)

Parameter Conditions Min Typical Max Units
General
Supply Voltage 4.5 5 5.5 V
Supply Current Vout = 0, No load 5 mA
Both Outputs @ 3mA 29 mA
Operating Temperature 0 70 °C
DIO
Pull-up Resistors To VS 5100 Ω
Low Level Input Voltage 0.3*VS V
High Level Input Voltage 0.7*VS V
Low Level Output Voltage Sink Current = 3mA 0 0.4 V
Clock Frequency (DIOA) 400 kHz
DAC Outputs
Typical Output Range -10.3 10.4 V
Power-up Output Voltage 0.05 V
Resolution 14 bits
1.22 mV
Accuracy 0.05 0.5 % FS
Differential Linearity Error ±1 counts
Integral Linearity Error ±5 ±16 counts
Temperature Drift 20 ppm/°C
Update Time (1) 1 ms
Update Rate (1) 1000 Hz
Slew Rate 0.1 V/μs
Output Impedance 0.1 Ω
Output Current (2) Total for both channels 10 mA

(1) The update time is similar to the numbers found in Section 3.1 of the U3/UE9 User's Guide. The time is typically about 1 ms over Ethernet or USB "high-high", and typically about 4 ms over USB "other".
(2) This is the current limit for both channels combined.  The first thing you notice as you get close to the current limit is that the minimum output voltage increases, and this effect will be worse if your VS supply voltage is low.  For example, at 10 mA, the minimum output is typically about -9.5 volts.

Dimensions:

LJTickDAC Testing Utility

For your convenience, the LJTickDAC testing utility for UD family devices is available for download.

Declaration of Conformity

Manufacturers Name: LabJack Corporation
Manufacturers Address: 3232 S Vance St STE 200, Lakewood, CO 80227 USA
Declares that the product
Product Name: LabJack Tick DAC
Model Number: LJTick-DAC
conforms to the following Product Specifications:
EMC Directive: 89/336/EEC
EN 55011 Class A
EN 61326-1: General Requirements

25 comments

My Delphi code for setting Tick Dac does not compile: 

there is no  LJ_ioTDAC_COMMUNICATION variable defined  in LJJDelphi.pas wrapper.

On a lark I tried ..ioI2C.. compiled but no DACA or DACB voltages.

The TickDac utility works, thus TICKDAC is operational.

 

  //Version number of the LJUDDelphi wrapper
  LJUDDELPHI_VERSION = 0.2;

  //UD Driver version this was last tested with
  DRIVER_VERSION = 2.67;

Thanks,

Dave

 

Get the latest Delphi wrapper which I just updated today.  It has been updated to LJUDDELPHI_VERSION 0.3 and DRIVER_VERSION 3.25, and will have the missing LJ_ioTDAC_COMMUNICATION constant.  Hopefully the new wrapper should help fix your problem.

I just ordered one of these yesterday sine I have filled up the DAC0 and DAC1 on my U6 pro. I was using the eDAC lab view code to send out a voltage to my motor controller and a solenoid. I need to send a voltage to a proportional valve now. If I use this with the FIO inputs, which code example should I use in LabView? 

Thanks

You need to make calls as shown above in the "UD Communication" section.  I suggest you look at "UE9 LJTDAC Example.vi", or any of the other LJTDAC examples available for the U3 and UE9.

Is there an example code for the U6? or can I use the U9 code with the U6?

Thanks

There is not a U6-specific example.  Just make a copy of one of the others and change the open call.  For example, use "U3 LJTDAC Example.vi" and change "LJ_dtU3" to LJ_dtU6".

Hi,

I'm controlling LabJack U3HV with two LJTickDAC using matlab. The voltage supplied from the LJTickDAC determines the position of a mechanical stage.

When disconnecting the U3HV from matlab, the output voltage doesn't change which is good for my needs. However, when reconnecting matlab to the LabJack, I don't know what voltage the LJTickDAC supplies, so I don't know the position of the mechanical stage.

I am looking of a way to READ the set voltage of the LJTickDAC, without changing it, so my stage won't move.

Thanks!

The DAC chip used in the LJTick-DAC does not support any reads, only writes.  Your only option then is to store the last written values somewhere else.  You could store them in the user memory on the LJTDAC, the user memory on the U3, or the easiest place is to store the values on your PC.

The one thing this will not account for is if the LJTDAC is power-cycled, in which case it will go to mid-scale (~0 volts).  You could measure the voltages with analog inputs to try to detect this situation.

I need for the output DACA on the LJTick-DAC to go to +5V when the labjack (U6-PRO) is powered up.  The LJTickDAC is connected to FI01 and FI00.  Is there a way to do this?

 

For more information about UD communication with the LJTDAC, see the LJTDAC example in the VC6_LJUD archive.

So far I haven't been able to find the VC6_LJUD archive. Can you turn that reference into a link?

If I have multiple LJTDACs, do I call 

ePut(lngHandle, LJ_ioPUT_CONFIG, LJ_chTDAC_SCL_PIN_NUM,pinNum,0)

before every call to

ePut(lngHandle, LJ_ioTDAC_COMMUNICATION, LJ_chTDAC_UPDATE_DACA, 1.2, 0)

 

I am interested in using the LJTick-DAQ to control a servomotor drive which requires a +/- 10 V analog control signal at an input impedance of 13.3 kOhms.

Is the LJTick-DAQ suitable for this purpose?  I'm not sure about the impedance requirement...

Do you mean the drive control input has an input impedance of 13.3k?  That would mean that if you set DACA to 10.0 volts, it would have to source 10/13300 = 0.75mA to the drive input, which is no problem.  See "Output Current" spec above.

Thanks, that's exactly what I meant.

Is there a recommended way to convert the single-ended analog outputs to differential?  I have three motor drivers, each of which requires differential +/- 10V inputs.  I also need to keep the update frequency high (min 200 Hz), which I think rules out using pairs of single-ended outputs on three LJTick-DAC modules.  At 1 ms to update each channel, and 6 channels to update, the update frequency would be 1000 ms / 6 ms = 166.7 Hz < 200 Hz.

Differential +/-10V signals would be unusual.  See our Differential App Note.  Perhaps you can just connect GND to the -signal on the drive?

On the T7 you can send multiple TDAC updates in a single packet, so that is going to be your best bet to make them happen fast enough.

According to the manual, the inputs are indeed differential (refer to p. 65 of the PDF here: http://www.artisantg.com/info/P_djIzk.pdf).

So, if I were to send all six channel updates in a single packet, the overall update time would still be approx. 1 ms?

Yes, I see in Figure 6.19 that it is indeed differential, but with 20k across the inputs right off the bat they are strongly referred to each other.  Not sure what exactly that circuit is doing, but pretty sure you can just connect T7-GND to COMMAND-.

For that matter, if you were going to connect DACB from the TDAC to COMMAND-, what would you set it to?  Probably just 0 to minimize common-mode voltage, so might as well just connect GND and not add extra DAC channels.

As for timing, I did a test on my machine using LabVIEW with a T7 over USB and Ethernet.  Average time to update just DAC0 was 1.25 ms.  Just TDAC0 was 1.35 ms.  TDAC0 & TDAC1 was also 1.35 ms.  TDAC0, TDAC1, TDAC2, and TDAC3 was about 1.45 ms.  So it appears to add about 0.1 ms of time for each TDAC, whether you update 1 or both channels.

What happens to the analog outputs from the TickDAC if the Ethernet connection is lost (i.e. if the cable were accidentally unplugged)?  Do the outputs hold their last-commanded value?

Is it possible to set fail-safe behaviour (e.g. using Lua) to set the outputs to zero if network connectivity is lost?  Thanks.

The LJTDAC outputs power-up at mid-scale, which is near 0 volts.  Besides that they stay wherever last commanded.  So if Ethernet is lost but power is still good they will stay put.

One solution would be to use the Watchdog to reboot the T7 if no communication occurs for some amount of time.  Then you could have Lua script that runs at startup to set the LJTDAC to the desired values.

Another solution might be to have Lua script query some Ethernet register, and if it reads something you don't like the script could set the LJTDAC to the desired values.  For example, I tested with the unit on my desk reading over USB and ETHERNET_IP goes to 0.0.0.0 when I unplug the Ethernet cable (with DHCP enabled).

I want to control a device , using LJTick-DAC with the range 0 to +10 volt (not negative voltages). I am worried that excessive negative voltage will damage my device, so I am planning to put a 1N4148 diode across GND and the DAC0 output. Will the LJTick-DAC be able to hande the short-circuit, should the user accidentely put out -10 volt? How much current will be drawn?

I did a test setting DACA to the minimum (-10.3 on my LJTDAC) and shorting DACA to GND.  I got about 29mA of short-circuit current.  The only chip that got noticeably warm was the output amp, which went up about 20 deg C.  With both outputs set to minimum and shorted to GND the chip had a rise of about 30 deg C.  So not a definitive spec, but it should be able to handle that indefinitely.

If your load does not need much current, you could add a series resistor on the TDAC output to further limit short-circuit current, but whatever load current you have will cause some drop across that resistor.

vleo's picture

Hi,
i've got an U3HV + LJTDAC several years ago, seems to had been working fine then, but recently I've used it in a new project and noticed that while channel A works perfectly fine, channel B behaves in a very strange way - first, it is off by around 1V, but then it settles, drifts very slowly - here is the example with transition from settled 0V output to -10V, the table shows output value (sent to both channel A and B), then data read by AIN0 and 1 respectively (in HV mode), same values when checked by multimeter, load on channel B is 3.3K resistor (other then AIN1 input):

ch=0 slope= 3161.4 offset=32684.1

ch=1 slope= 3164.1 offset=32673.0

-10.0 -10.001 -6.979

-10.0 -9.991 -9.568

ch=0 slope= 3161.4 offset=32684.1

ch=1 slope= 3164.1 offset=32673.0

-10.0 -10.001 -6.979

-10.0 -9.991 -9.568

-10.0 -10.001 -9.711

-10.0 -10.001 -9.731

-10.0 -10.001 -9.741

-10.0 -10.001 -9.761

-10.0 -10.001 -9.782

-10.0 -10.001 -9.792

-10.0 -10.001 -9.782

-10.0 -10.001 -9.761

-10.0 -10.001 -9.741

-10.0 -10.001 -9.741

-10.0 -10.001 -9.741

-10.0 -10.011 -9.731

-10.0 -10.011 -9.711

-10.0 -10.001 -9.711

-10.0 -10.001 -9.700

-10.0 -10.001 -9.680

-10.0 -10.001 -9.680

-10.0 -10.001 -9.690

-10.0 -10.001 -9.690

-10.0 -10.001 -9.700

-10.0 -10.011 -9.700

-10.0 -10.001 -9.690

-10.0 -10.001 -9.670

-10.0 -10.001 -9.670

-10.0 -10.011 -9.650

-10.0 -10.001 -9.640

-10.0 -10.001 -9.629

-10.0 -10.011 -9.640

-9.0 -9.007 -9.508

-9.0 -9.007 -8.969

-9.0 -9.007 -8.797

-9.0 -9.007 -8.705

-9.0 -9.007 -8.654

-9.0 -9.007 -8.624

-9.0 -9.007 -8.614

-9.0 -9.007 -8.583

-9.0 -9.007 -8.573

-9.0 -8.997 -8.573

-9.0 -8.997 -8.573

-9.0 -9.007 -8.563

-9.0 -9.007 -8.553

-9.0 -8.997 -8.553

-9.0 -9.007 -8.543

-9.0 -9.007 -8.543

-9.0 -9.007 -8.533

-9.0 -9.007 -8.543

-9.0 -9.007 -8.553

-9.0 -9.007 -8.573

-9.0 -9.007 -8.583

-9.0 -9.007 -8.594

-9.0 -9.007 -8.594

-9.0 -9.007 -8.594

-9.0 -9.007 -8.583

-9.0 -9.007 -8.573

-9.0 -9.007 -8.543

-9.0 -9.007 -8.512

-9.0 -9.007 -8.512

-9.0 -9.007 -8.502

-8.0 -8.003 -8.380

-10.0 -10.001 -9.711

-10.0 -10.001 -9.731

-10.0 -10.001 -9.741

-10.0 -10.001 -9.761

-10.0 -10.001 -9.782

-10.0 -10.001 -9.792

-10.0 -10.001 -9.782

-10.0 -10.001 -9.761

-10.0 -10.001 -9.741

-10.0 -10.001 -9.741

-10.0 -10.001 -9.741

-10.0 -10.011 -9.731

-10.0 -10.011 -9.711

-10.0 -10.001 -9.711

-10.0 -10.001 -9.700

-10.0 -10.001 -9.680

-10.0 -10.001 -9.680

-10.0 -10.001 -9.690

-10.0 -10.001 -9.690

-10.0 -10.001 -9.700

-10.0 -10.011 -9.700

-10.0 -10.001 -9.690

-10.0 -10.001 -9.670

-10.0 -10.001 -9.670

-10.0 -10.011 -9.650

-10.0 -10.001 -9.640

-10.0 -10.001 -9.629

-10.0 -10.011 -9.640

-9.0 -9.007 -9.508

-9.0 -9.007 -8.969

-9.0 -9.007 -8.797

-9.0 -9.007 -8.705

-9.0 -9.007 -8.654

-9.0 -9.007 -8.624

-9.0 -9.007 -8.614

-9.0 -9.007 -8.583

-9.0 -9.007 -8.573

-9.0 -8.997 -8.573

-9.0 -8.997 -8.573

-9.0 -9.007 -8.563

-9.0 -9.007 -8.553

-9.0 -8.997 -8.553

-9.0 -9.007 -8.543

-9.0 -9.007 -8.543

-9.0 -9.007 -8.533

-9.0 -9.007 -8.543

-9.0 -9.007 -8.553

-9.0 -9.007 -8.573

-9.0 -9.007 -8.583

-9.0 -9.007 -8.594

-9.0 -9.007 -8.594

-9.0 -9.007 -8.594

-9.0 -9.007 -8.583

-9.0 -9.007 -8.573

-9.0 -9.007 -8.543

-9.0 -9.007 -8.512

-9.0 -9.007 -8.512

-9.0 -9.007 -8.502

-8.0 -8.003 -8.380

So, is this a hardware failure? If it is, then what is the failed part? Seems can't the the OA or amplifier transistors, since the time dalay is very slow. Please adivise.

LabJack Support's picture

How does it behave with less load?  Say 100k rather than your 3.3k.

U4 is an OP2177 op-amp that shifts the 0-2.5V input signal (from the DAC chip) to a +/-10V output signal.  The DACB input signal is on pin 3 of that op-amp, so if you can you could see if that input signal is behaving correctly.  If the input is correct but the output is not, first thing I would do is remove D6 which is a protection diode.  If still bad I would suspect the op-amp.

spcatherine's picture

Hi,

I have followed the instructions for T7 and when I try to read the serial number I get this error. Do you know what I could possible have missed.

labjack.ljm.ljm.LJMError: LJM library error code 2760 TDAC_SDA_SCL_INVALID

Thanks

LabJack Support's picture

The Key detail is that "Which LJTDAC is determined by the last write to TDAC#." So if we have not yet written to the TDAC# register then the serial number register does not know where to look for the TDAC.