AN64275 PSoC 3 and PSoC 5LP Getting More Resolution from 8-Bit DAC.pdf

AN64275
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
Author: Mark Hastings
Associated Part Family: All PSoC 3 and PSoC 5LP parts
Associated Project: Yes
Software Version: PSoC ® Creator™ 3.2
Related Application Notes: None
To get the latest version of this application note, or the associated project file, please
visit http://www.cypress.com/go/AN64275.
AN64275 discusses several methods to increase the resolution of the DACs available in the PSoC ® 3 and PSoC 5LP
families. These methods can be used to extend the resolution up to 12 bits. An example application is supplied to
demonstrate most of these concepts. A library is also included that implements three of the methods as
PSoC Creator™ components.
Contents
1
2
3
4
5
6
Introduction ...............................................................1
What are INL and DNL? ...........................................2
Summary of Results .................................................3
Voltage or Current DAC............................................3
Parallel DACs Method (PIDAC) ................................4
Dithered Output DAC (DVDAC) ................................8
6.1
Dithered VDAC Limitations ............................ 10
7
Modulated IDAC (MIDAC) ...................................... 12
8
ADC Feedback DAC............................................... 15
9
Which DAC is Right for You?.................................. 16
9.1
Test Setup ..................................................... 17
1
9.2
PSoC Advantage ........................................... 17
10 Using these DACs in your Project .......................... 18
11 Summary ................................................................ 20
Document History............................................................ 21
Worldwide Sales and Design Support ............................. 22
Products .......................................................................... 22
PSoC® Solutions ............................................................. 22
Cypress Developer Community....................................... 22
Technical Support ........................................................... 22
Introduction
The PSoC 3 and PSoC 5LP families have up to four 8-bit voltage or current DACs (viDAC). These DACs have
overlapping ranges, two in the voltage mode and three in current mode. In voltage mode, the full-scale voltage
ranges are 1 and 4 volts. In current mode, the ranges are 32, 256, and 2048 µA. For many applications, eight bits
may be sufficient, but there may be times where more resolution can save a design. This application note discusses
four methods to extend the resolution up to 12 bits. The four methods presented in this application note use one or
two of the existing 8-bit DACs and other PSoC components to achieve the higher resolution. Following is the list of
DAC resolution enhancement techniques covered in this application note:




Parallel IDACs (component included)
Dithered Output DAC (component included)
Modulated IDAC (component included)
Parallel DACs with ADC feedback
www.cypress.com
Document No. 001-64275 Rev. *F
1
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
2
What are INL and DNL?
Before we jump into designing a higher resolution DAC, it is best to understand two important DAC specifications,
Differential nonlinearity (DNL) and integral nonlinearity (INL). DNL is probably the most important specification for a
DAC. It is the difference between the ideal step size and the actual step size between two successive output codes.
For example, if you have a 10-bit voltage DAC that has a full scale of 1.023 volts, the ideal step size would be 1 mV.
If one or more steps are measured to be 1.5 mV, the DNL error would be 1.5 – 1.0, or 0.5 LSb. Ideally you want the
DNL error to be zero, but a DNL less than 1.0 is usually acceptable. A 10-bit DAC with a DNL between 1 and less
than 2 would be considered a 9-bit DAC. See Figure 1 for an example of DNL.
Figure 1. DNL and INL Error
16
DAC Output (mV)
14
12
10
DNL Err = 1.3
8
6
INL Err = 2.7
4
2
Real
Ideal
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16
DAC Input (Code)
INL is the deviation from the DAC’s actual transfer function. Ideally, you would like the INL to be one or less, but
many applications will not suffer with an INL of several counts. One example where a 16-bit DAC with an INL of 10 or
12 may be acceptable is the audio. Also, applications where waveform shape is important, but absolute accuracy is
not required are applications where a higher INL may be acceptable. Applications that require absolute output
accuracy may require a much lower INL, such as 1 or 2 counts. Examples of applications that require a low INL are
voltage references, power supplies, or any application that requires an accurate reference without an ADC to close
the loop. Figure 1 shows an example of a DAC that has an INL greater than 1.
The 8-bit current and voltage DACs in PSoC 3 and PSoC 5LP have an INL of about 2 and a DNL less than 1.
Because of this, we are able to easily achieve useful higher resolution DACs. With each of the methods mentioned
above, the goal is to increase the resolution until the DNL becomes 1 or greater. In most cases the INL increases as
the resolution increases, but as stated before, a larger INL may be acceptable for many applications.
www.cypress.com
Document No. 001-64275 Rev.*F
2
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
3
Summary of Results
If you do not care about all the testing or how the DACs work and want to get right to the results, take a look at
Table 1. It shows each of the methods discussed in the application note, the achievable resolution, INL, DNL, and
DAC speed. Use this table to find the DAC that fits your needs. You can then choose to jump right to the section of
interest for more information.
Table 1. DAC Resolution, INL, DNL, and Speed Summary
DAC Type
PIDAC
INL
DNL
Speed
9
1
0.25
4 Msps
10
1.5
0.5
4 Msps
11
3
1.1
4 Msps
9
1.2
0.2
1.13 Msps
DVDAC
10
3
0.25
190 ksps
(1 V Range)
11
5.5
0.4
36 ksps
12
11
0.8
7 ksps
9
0.6
0.35
4 Msps
10
1.0
0.6
2.3 Msps
11
2
1.0
430 ksps
12+
1
1
~100 sps
MIDAC
ADC
Feedback
4
Resolution
Voltage or Current DAC
Designers too often ignore current DACs in favor of voltage DACs when needing a variable voltage source. Since
most voltage DACs have fixed ranges, you must adjust your design to make the best use of the DAC’s native range.
A current DAC on the other hand can be very flexible in providing just the right voltage range required for a given
application. By adding a single external resistor, you can optimize the voltage range to your application instead of the
other way around. For example, the internal voltage DACs in PSoC devices has a full-scale output range of either 1
or 4 volts. What if you need a full-scale range of 2.3 volts? You can use the 4 volt range and route the output to a
voltage divider (2 resistors), or you could use a single current DAC and one resistor. For example, to achieve the 2.3
volts full scale, you could select the 256-µA range and a 9.09 K load resistor. The equation to calculate the resistor is
just ohms law. (Resistor_Value = Full_Scale_Volts * Full_Scale_Current). To let you in on a little secret, many voltage
DACs are actually current DACs with an internal resistor, including the ones inside PSoC 3 and PSoC 5LP. So next
time you see a current DAC do not think of it as an inferior device, it may be just what you need.
One complaint with voltage DACs is that the output impedance is not low enough and unable to drive much of a load.
With most microcontrollers that include a DAC, you need to add an external amplifier to buffer the output. PSoC 3
and PSoC 5LP devices have up to four opamps internally that can be used to buffer a voltage DAC output. These
opamps are capable of sinking or sourcing 25 mA, enough for most applications. These internal amplifiers in
combination with the DACs provide a wide range of solutions for almost any application.
www.cypress.com
Document No. 001-64275 Rev.*F
3
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
5
Parallel DACs Method (PIDAC)
The parallel DAC method requires two current DACs (iDAC) placed in parallel and set to two different overlapping
current ranges. When two iDACs are put in parallel, the total current is the sum of both DACs. Notice in Table 2 how
the three current ranges overlap. The left column indicates the weighting for each bit in the iDAC data register. For
example, in the 256 µA range, the most significant bit (7) adds 128 µA when set. The least significant bit (0) adds 1
µA when set. Each two adjacent ranges overlap by 5 bits. Theoretically, you can construct a 14-bit iDAC by setting
one DAC to the 2048 µA range and the second to the 32 µA range. Unfortunately, 8-bit DACs are seldom linear
enough to achieve an INL or DNL that is low enough to for 14-bits.
Table 2. PSoC 3 and PSoC 5LP iDAC Overlapping Current Ranges
Ranges
µA
2048 µA
1024
7
512
6
256
5
256 µA
128
4
7
64
3
6
32
2
5
32 µA
16
1
4
7
8
0
3
6
4
2
5
2
1
4
1
0
3
0.5
2
0.25
1
0.125
0
Figure 2. Parallel Current DACs
In Figure 2, two iDACs are placed in parallel, configured in source mode and connected to the same load resistor. If
the goal is to output a fixed voltage, a resistor can be used for the load and the desired voltage is across this resistor.
The maximum voltage from the current source is the analog supply voltage (VDDA) minus the compliance voltage of
the current source, typically less than a volt. The routing resistance of the PCB and the internal PSoC signal path
may also reduce the maximum voltage across the given load. This is usually only a concern for the 2048 µA range.
www.cypress.com
Document No. 001-64275 Rev.*F
4
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
The load resistor is selected to provide a specific full-scale voltage level. R is determined by using Ohm’s law.
R
Full _ Scale _ Voltage
Equation 1
Maximum _ Current
For example, if the full-scale current is 2.048 mA and the desired full-scale voltage is 1.5 volts, the optimal resistor
would be (1.5 V) / (0.002048 A) = 732 Ω.
In this example, the most significant DAC, ‘IDAC1_MSD’ is configured to source current and set to the 2048 µA
range. The second iDAC, ‘IDAC2_LSD’ is also configured as a current source but set to the 256 µA range.
Since the two ranges (2048 µA and 256 µA) overlap by five bits as shown in Figure 3, there are six viable ways to
configure the DACs to achieve a 10-bit iDAC. Figure 3 shows one possible alignment. The second iDAC could also
have been configured in the 32 µA range and use bits 4 and 5 in the iDAC data register.
Figure 3. 10-bit DAC Data Register Bit Alignment
10-Bit DAC Word
9 8 7 6 5 4 3 2 1 0
Most Significant DAC (MSD)
8-Bit Data Register (2048uA)
2u
A
1u
A
8u
A
64
uA
32
uA
16
uA
8u
A
4u
A
7 6 5 4 3 2 1 0
12
10
24
u
51 A
2u
A
25
6u
A
12
8u
A
64
uA
32
uA
16
uA
8u
A
7 6 5 4 3 2 1 0
Least Significant DAC (LSD)
8-Bit Data Register (256uA)
An 11-bit DAC would be a simple modification to the 10-bit DAC. The 8 most significant bits of the input word would
be written to the higher current DAC and the 3 least significant bits would be written to bits 2, 1, and 0 in the lower
current DAC. Figure 4 illustrates how the 11-bit control word is spread across the two DACs.
Figure 4. 11-bit DAC Data Register Bit Alignment
11-Bit DAC Word
10 9 8 7 6 5 4 3 2 1 0
Most Significant DAC (MSD)
8-Bit Data Register (2048uA)
www.cypress.com
A
4u
A
2u
A
1u
A
8u
uA
uA
16
uA
32
64
8u
A
7 6 5 4 3 2 1 0
12
10
24
u
51 A
2u
A
25
6u
A
12
8u
A
64
uA
32
uA
16
uA
8u
A
7 6 5 4 3 2 1 0
Least Significant DAC (LSD)
8-Bit Data Register (256uA)
Document No. 001-64275 Rev.*F
5
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
The code to configure the DACs and to write the value is rather straight forward. The following code fragment starts
the two DACs, puts them both into source mode and puts the two DACs into two adjacent ranges.
Example code to configure DACs:
/* Start both DACs */
IDAC1_MSD_Start();
IDAC2_LSD_Start();
/* Sets both IDACs to source current */
IDAC1_MSD_SetPolarity(IDAC1_MSD_SOURCE);
IDAC1_MSD_SetPolarity(IDAC2_LSD_SOURCE);
/* Sets proper ranges */
IDAC1_MSD_SetRange(IDAC1_MSD_RANGE_2mA );
IDAC2_LSD_SetRange(IDAC2_LSD_RANGE_255uA);
The following example code shows how to split the data word into an MSB and LSB word to be written into the
parallel DACs. The most significant DAC should be written first to minimize any glitch from one value to another since
both DACs cannot be written at the exact same time. This glitch can be eliminated by setting the ‘Strobe_Mode’
parameter to ‘External’ in the customizer of each DAC. Then connect both strobe inputs to the same clock source.
The code for implementing both a 10- and 11-bit iDAC is as follows.
/* 10-Bit SetValue function */
void iDAC10_SetValue(uint16 dacValue)
{
uint8 msb, lsb;
/* Split data into 2 bytes */
msb = (uint8)(dacValue >> 2);
lsb = (uint8)((dacValue << 1) & 0x06);
/* Write values */
IDAC1_MSD_SetValue(msb);
IDAC2_LSD_SetValue(lsb);
}
/* 11-Bit SetValue function. */
void iDAC11_SetValue(uint16 dacValue)
{
uint8 msb, lsb;
/* Split data into 2 bytes */
msb = (uint8)(dacValue >> 3);
lsb = (uint8)((dacValue << 0) & 0x07);
/* Write values */
IDAC1_MSD_SetValue(msb);
IDAC2_LSD_SetValue(lsb);
}
A PSoC Creator component using this method has been created and is part of the library accompanying this
application note. The name of this component is the Parallel IDAC or PIDAC. The resolution for the PIDAC is
selectable for 9, 10, or 11 bits. See PIDAC datasheet included with the component for more information.
www.cypress.com
Document No. 001-64275 Rev.*F
6
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
The next step is to test this concept for increasing resolutions until the DNL exceeds 1. Following are the INL and
DNL plots for 9, 10, and 11 bits.
Figure 5. 9-bit PIDAC DNL
Figure 6. 9-bit PIDAC INL
As can be seen from the PIDAC INL and DNL plots we have very acceptable 9-bit performance.
www.cypress.com
Figure 7. 10-bit PIDAC DNL
Figure 9. 11-bit PIDAC DNL
Figure 8. 10-bit PIDAC INL
Figure 10. 11-bit PIDAC INL
Document No. 001-64275 Rev.*F
7
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
The 10-bit performance is still very respectable, but the DAC’s 11-bit performance is becoming marginal. The INL is
about 3 counts, but the DNL at some points is just above 1.
6
Dithered Output DAC (DVDAC)
The dithered output DAC uses a single current or voltage DAC, DMA channel, a clock, and a small array of RAM. The
simple theory behind this method is that if you quickly write two or more different values to the DAC and filter the
output, then the output is the average of the values written to the DAC. This assumes that values written to the DAC
are periodic.
Figure 11. Dithered Outputs DAC
For example, to get 10-bits of resolution from an 8-bit DAC, you require a resolution of ¼ of the LSb. Suppose you
are using a standard 8-bit VDAC with a full-scale voltage of 1.024 volts, the minimum resolution, or LSb is 4 mV. For
10 bits, the LSb is 1 mV. This means that you need two more bits of resolution or an LSb of ¼, you must average at
least four values to achieve 10 bits of resolution with an 8-bit VDAC.
The trick is to output the data quickly and very periodically. With most average microcontrollers, you can use a timer
to generate an interrupt every ‘n’ microseconds. The interrupt service routine would write the array of four values
sequentially to the VDAC. The faster you write to the DAC, the simpler the filter will be and the faster the output will
settle. The problem is that interrupting a processor every microsecond can consume a large share of your
microcontroller’s CPU performance. Since the PSoC 3 and PSoC 5LP are not ordinary microcontrollers, DMA can be
used to repeatedly write an array to the VDAC. A clock is used to trigger both the DMA and the VDAC to strobe the
data output. The beauty of using the DMA is that after it is setup, there is ZERO CPU overhead. Except for a couple
extra bytes of RAM and a small external capacitor, there is little cost to get 9 to 12 bits of resolution from an 8-bit
VDAC in the PSoC 3 and PSoC 5LP parts.
Natively, the 8-bit VDAC in the 1-volt range provides a resolution of 4 mV (1.024 V / 256 = 0.004 mV). If you want an
output of 500 mV you can simply write 125 to the DAC. (125 * 0.004 mV = 500 mV). But, if you require 501 mV, you
have to settle for 500 or 504 mV. By dithering the output at a relatively high speed, the 501 mV output can be
generated by averaging multiple output values. In this case a succession of four values can be periodically written to
the VDAC. In the 1-volt range, a value of 125 written to the VDAC produces 500 mV. A value of 126 produces an
output voltage of 504 mV. If you average the numbers 500, 500, 500, and 504, you get 501. The following table
shows an example of how the output is dithered. The same pattern may be used between any two 8-bit steps to
increase the resolution.
Table 3. Example Output of 10-bit VDAC
Sample
Array1
Array2
Array3
Array4
1
125
125
125
125
2
125
125
125
126
3
125
125
126
126
4
125
126
126
126
AVG
125.00
125.25
125.50
125.75
Average Volt (mV)
500
501
502
503
www.cypress.com
Document No. 001-64275 Rev.*F
8
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
This dithering concept can be expanded beyond 10 bits, but there are some limitations to where the INL and DNL
may become excessive. Usually the limit is where the DAC becomes non-monotonic or the DNL error exceeds one
LSb.
A PSoC Creator component using this method has been created and is part of the library accompanying this
application note. This DAC is called the DVDAC (Dithered Voltage DAC) and has a selectable resolution of 9 to
12 bits. See DVDAC datasheet included with the component for more information. The following plots show the DNL
and INL for a 10-bit dithered VDAC.
Figure 12. DNL for 10-bit Dithered VDAC
Figure 13. INL for 10-bit Dithered VDAC
The dithered VDAC concept can easily be extended beyond 10-bit version from the looks of the INL and DNL.
Further testing showed that the DNL error remained under 1 up to 12 bits or resolution. At 13 bits the DNL error
exceeded 1.0 so currently the limit for the dithered VDAC will be 12 bits. Below are the INL and DNL plots for the
12-bit version.
Figure 14. DNL for the 12-bit Dithered VDAC
Figure 15. INL for the 12-bit Dithered VDAC
Notice that the shape of the INL for the 12-bit version is identical to that of the 10-bit version. This is really not a
surprise since you expect it to have the same shape as the native 8-bit VDAC. The INL error is multiplied by the
difference in resolution to the power of 2. Using this equation we would expect the INL error for 12 bits to be (12 bits –
10 bits)2 * 2.5 INL = 10 counts. If we note the INL plot in Figure 15, we see that indeed the INL for 12 bits is about 10.
The DNL also tends to double each time the resolution is increased by one bit.
www.cypress.com
Document No. 001-64275 Rev.*F
9
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
6.1
Dithered VDAC Limitations
The dithered DAC cannot generate a true 2bits unique output. The last N codes, where N = 2 (bits – 8) -1, all generate the
same output voltage. This is due to the fact that the dithering requires two adjacent 8-bit DAC values to generate an
average output signal. Once the internal 8-bit DAC’s output is 255 (0xFF), there is no adjacent higher value. When
the voltage DAC is configured for the 1 volt range and the highest output value is written to the VDAC, the output is
1.024 * (255 / 256) = 1.020 volts. This is the highest voltage the 8-bit VDAC can generate. Using the same equation
for a 10-bit VDAC, we get a slightly higher output, 1.024 * (1023 / 1024) = 1.023 volts. But, as we are using a single
8-bit VDAC to simulate 10 or more bits, the maximum voltage is still that of the 8-bit VDAC. This means that any
VDAC value higher than that of 8-bit VDAC is invalid. In the case of a 10-bit VDAC, the highest valid code is 1020,
(1.024 * (1020 / 1024) = 1.020 volts. The following table specifies the code limit for each resolution.
Table 4. Valid Range of Dithered VDAC
Resolution
(bits)
Valid
Range
Invalid
Codes
Flat Code
Range
9
0–510
1
511
10
0–1020
3
1021–1023
11
0–2040
7
2041–2047
12
0–4080
15
4081–4095
Another more obvious limitation is the noise generated by the process of dithering. Since the output is the average of
two adjacent values, the noise generated by dithering is small. In this case the noise is 4 mV (1.024 / 256) for the 1volt range and 16 (4.096 / 256) mV for the 4-volt range. The actual dither frequency varies with the resolution of the
DAC. If a 1 MHz dither clock is used for the PWM and the period is set to 4 (10-bits) the actual dither frequency is
about 250 KHz (1 MHz/4).
A filter can be added to reduce the dither noise to an acceptable level. You are free to implement any type of active or
passive filter required to reduce the dithered output noise. To keep external parts count low, a first order passive filter
may be sufficient. A first order filter is simply a resistor and capacitor. Since the output resistance of the DAC is
known, 4 kΩ for the 1-volt range and 16 kΩ for the 4-volt range, we get the resistor for free. This means that all we
need to do is add a capacitor on the output. To calculate the capacitor value we first need to know just how much
attenuation is required, and then determine the filter cutoff frequency. For each bit over
8-bits of resolution, the output needs to be attenuated by about 6 dB to attenuate the noise caused by the dither
frequency. If we are making a 10-bit DAC, the dithered output would need to be attenuated by 12 dB,
(6 db * (10 bits – 8 bits)). For an 11-bit DAC the attenuation will need to be 18 dB and so on. The filter’s cutoff
frequency is relative to the dither frequency. The VDAC8 specification states that the maximum clock rate is 1 MHz
for the 1-volt range and 256 kHz for the 4 volt range, but this output is divided by 2 B-8 where “B” is bits of resolution.
For example if we want 10 bits of resolution in the 1 volt range, we divide the 1 MHz sample clock by 4 (2(10-8)) or 1
MHz/4 = 250 kHz. The following table shows the attenuation required and dither frequency for each resolution and
voltage range.
Table 5. Attenuation and Dither Frequency
Resolution
9
10
11
12
Bits
Attenuation
6
12
18
24
dB
1-volt dither frequency
500
250
125
62.5
kHz
4-volt dither frequency
125
62.5
31.3
15.6
kHz
Using the following equation, we can find the filter cutoff frequency.
F

Atten  20 * log dith 
 Fc 
Equation 2
Where;
Atten is the amount of attenuation required for a given resolution. F dith is the dither frequency and Fc is the filter cutoff
frequency.
www.cypress.com
Document No. 001-64275 Rev.*F
10
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
Solving for Fc;
Fc 
Fdith
Atten
10 20
Equation 3
Now that we know the cutoff frequency, we can calculate the filter capacitor value.
Fc 
1
Equation 4
2RC
Solving for C;
C
1
Equation 5
2RFc
For example, if we build a 10 bit DAC using the voltage dithering method and want to calculate the value of C for the
1 volt range. The filter’s cutoff frequency would be;
Fc 
250kHz
 62.8kHz
12
10 20
Remember the internal resistance is about 4 kΩ for the 1 volt range and the filter cutoff frequency is 62.8 kHz from
above we can solve for the filter capacitor value.
C
1
2 *  * 4k * 62.8kHz
 634 pF
Using these equations we can solve for the required capacitor values for both ranges at each resolution. See the
following table.
Table 6. Low-Pass Filter Capacitor Values
Resolution
9
10
11
12
C (1 volt Range)
160 pF
630 pF
2.5 nF
0.01 uF
Filter Cutoff
250 kHz
63 kHz
16 kHz
4 kHz
C (4 volt Range)
630 pF
2.5 nF
0.01 uF
0.04 uF
Filter Cutoff
16 kHz
4 kHz
1 kHz
250 Hz
The last thing to be concerned about is what the settling time of the DAC is at the given resolution.
t
VS  Vine RC
Equation 6
Where Vs is the settled voltage and Vin is the smallest step size of the 8-bit VDAC. If we make Vin one unit, then Vs is
the faction of the smallest step that we need to settle to for the output to be accurate. Ideally, we want the output to
be within one half the smallest step of the VDAC.
The step size of the DAC in terms of the initial VDAC can be expressed as follows.
1
Vs  0.5 *
B8
2
Equation 7
Where B is the bits of resolution required. The “0.5” multiplier is because we want the error to be one half the step
size.
www.cypress.com
Document No. 001-64275 Rev.*F
11
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
If we combine these two equations, we get;
t
1
RC
0.5 *
 Vine
B8
2
Equation 8
Solving for time (settling time);
t   ln(
2
0.5
)* R *C
B8
Equation 9
If we use the example of the 10-bit, 1 volt full-scale VDAC, our settling time would be;
t   ln(
0.5
) * 4 K * 630 pF  5.3uSec
2
2
These are rough calculations to get you quickly into the ballpark. The filter could easily be improved with a higher
order passive or active filter.
A dithered current DAC could easily be constructed using the DVDAC as a template. All that would be needed is to
change the output connection of the viDAC8 in the DAC’s schematic, change the customizer to reflect the current
range options, and a few lines of code in the API files. Since the current DAC can run at a higher sampling frequency,
8 MHz, the dither frequency is higher which makes the settling time much faster.
7
Modulated IDAC (MIDAC)
This method combines a standard 8-bit current DAC (IDAC8) and a PWM DAC. PWM DACs have been used for
years as an inexpensive way to generate a linear voltage from digital hardware. The concept is simple. The PWM
generates a waveform with an adjustable duty cycle. This is fed into a low-pass filter (LPF) and the DC output is a
function of the PWM’s peak-to-peak output times the duty cycle. If the LPF is a simple single pole RC filter, the
modulation frequency needs to be close to three orders of magnitude higher than the filters cutoff frequency just for
an 8-bit DAC. A higher order filter would probably be a better option.
Figure 16. PWM Block Diagram
LPF
PWM
DC
Out
Figure 17. Example PWM Waveforms
0%
00
25%
01
50%
10
Data[1:0]
75%
11
Period
www.cypress.com
Period
Document No. 001-64275 Rev.*F
12
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
With the modulated IDAC, the current is summed between the PWM DAC and the 8-bit current source (See
Figure 18). The PWM’s modulation amplitude is half the amplitude of the least significant bit of the 8-bit current DAC,
because of the combination of R2 and R1. So the noise introduced by the PWM is more than 50 dB less than a
typical PWM DAC and much easier to filter with a simple filter. The IDAC adjusts the most significant 8 bits of the
current and the PWM adjusts the remaining few bits, depending on the resolution. In the case of a 10 bit DAC the
PWM would add the additional 2 bits of resolution.
Figure 18. Modulated IDAC
This method requires a current DAC, two resistors, and a PWM. The output of the current DAC is connected to two
resistors. One of the resistors is connected directly to V SSA and the other is connected to the PWM output as shown in
Figure 18. With just one resistor connected to the DAC’s output and V SS, the current DAC operates as a voltage DAC.
The second resistor connected to the PWM must be much larger than the resistor connected to ground. The pin
connected to the PWM should be set to “Strong Drive” so that it can drive the filter’s capacitor. This DAC works much
similar to the dithered voltage DAC except it uses a PWM to modulate the least significant bits instead of the DAC
itself. One of the advantages is that the PWM can be modulated faster than that of the DAC itself. Unlike a typical
PWM DAC where the output of the PWM that swings from V SS to VDD, the effective voltage swing of this PWM is
much smaller and generates much less noise and therefore requires less filtering The PWM’s output period should be
sufficiently fast so that the modulated signal can be easily filtered.
To calculate the size of R1, simply divide the maximum output voltage required by the current range that is being
used.
R1 
V max
Equation 10
I
Then use the value calculated for R1 to calculate R2.
R 2  R1 *
Vdd  (V max/ 256)
Equation 11
(V max/ 256)
Example:
If you require a DAC output voltage between 0 and 1.024 volts, using the 256 µA current range, and has a
VDD = 3.3 V solve for R1 and R2. (Using Equations 10 and 11 given earlier.)
R1 
1.024V
 4 K
Equation 12
256uA
R2  4K *
3.3  (1.024 / 256)
= 3.3 MΩ
Equation 13
(1.024 / 256)
www.cypress.com
Document No. 001-64275 Rev.*F
13
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
The modulated IDAC has good performance up to 11 bits. The INL is better than that of the PIDAC or DVDAC at 2
counts for 11 bits. In 10 bit mode the maximum DNL was less than 0.6 counts and the INL was just under 1 count, not
bad when derived from an 8-bit DAC.
A PSoC Creator component using this method has been constructed and is part of the library accompanying this
application note. This DAC is called the MIDAC (Modulated Current DAC). Its parameters allow you to select both the
range and the resolution between 9 and 11 bits. See MIDAC datasheet included with the component for more
information. Following are the test result plots for INL and DNL for 9 to 11 bits.
Figure 19. DNL for 9-Bit MIDAC
Figure 22. INL for 10-Bit MIDAC
Figure 20. INL for 9-Bit MIDAC
Figure 23. DNL for 11-Bit MIDAC
Figure 21. DNL for 10-Bit MIDAC
Figure 24. INL for 11-Bit MIDAC
www.cypress.com
Document No. 001-64275 Rev.*F
14
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
As with the dithered voltage DAC, the PWM modulator generates noise on top of the signal. Although the DAC does
use a PWM, the noise generated is less than one LSb in magnitude that is much less than a typical PWM DAC,
where the output swings from VSS to the maximum output voltage. To filter out this noise a capacitor may be added to
the output of the DAC in parallel with the resistors, See Figure 18. The same method used to calculate the capacitor
value for the dithered voltage DAC can be used here as well. As long as R2 is much larger than R1, you can ignore
R2 and use R1 and C1 (Figure 18) for R and C respectively in Equations 3 and 5 given earlier. The following table
shows examples of some capacitor values for a load of 4 K and a PWM clock of 12 MHz.
Table 7. Capacitor Value for R1 = 4 K
9
10
11
Modulation Frequency
Resolution
6 MHz
3 MHz
1.5 MHz
Attenuation
6 dB
12 dB
18 dB
Cap Value
13 pF
53 pF
210 pF
The settling time can also be calculated in the same fashion as we used with the dithered voltage DAC with
Equation 9.
8
ADC Feedback DAC
This method uses the same DAC configuration used in the parallel IDAC method but is configured to provide at least
2 bits more resolution than required for the accuracy. For example, if 12 bits of accuracy is required, the IDAC
resolution should be 14 bits. To achieve this, one IDAC should be configured to the 2 mA range and the other IDAC
to the 32 µA range. These overlapping ranges provide a maximum resolution of 14 bits. The higher resolution parallel
IDAC by itself may have excessive INL and DNL errors for 14 bit operation. The ADC used for this method should
have an INL and DNL about half of the desired result for this method. The ADC is essentially continually calibrating
the DAC and therefore needs to be more accurate than the DAC. The 20-bit Delta-Sigma ADC found in PSoC 3 and
PSoC 5LP, has an INL and DNL of less than 1 at 16 bits. This is more than sufficient to trim a nonlinear 14-bit DAC to
12 bits.
In most cases, an external resistor is used as a linear load that converts the current output to a voltage. The ADC
needs to be connected at the point where the voltage is used or buffered by the system to eliminate any IR (current *
resistance) drop in the internal or external current path.
Firmware is required to complete a feedback loop between the IDAC output and the ADC. Each time the output is
updated, an approximated value is applied. The output is allowed to settle and then measured with the ADC. If the
output is not within 12 bits of accuracy, the IDAC output is trimmed to get closer to the desired value. This is an
iterative process and may require 2 to 4 cycles to get within 12 bits of accuracy. The following figure is an example of
a feedback IDAC using standard PSoC Creator components.
Figure 25. IDAC with Feedback
www.cypress.com
Document No. 001-64275 Rev.*F
15
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
9
Which DAC is Right for You?
Four methods to create a higher resolution DAC have been presented in this application note. There are several
factors that need to be considered when selecting which DAC is right for your application. Resolution, current versus
voltage, speed, resources required, and need for external components all need to be considered in order to make a
good decision. The current DACs are the most flexible as they can all be converted to a voltage DAC with the
addition of an external resistor. The selection of the external resistor also allows you to optimize the full-scale voltage
output as well.
For applications that require the fastest settling times, PIDAC and MIDAC are your best choices. The PIDAC provides
4 Msps for all ranges and does not require external components. The only downside is that the PIDAC uses two
viDAC block resources. This may or may not be a concern depending on your overall application resource
requirements. The MIDAC will be your next best selection for fast settling times and it uses only one viDAC block. Its
speed does diminish as the resolution increases, but may be sufficient for many applications.
The DVDAC also provides relatively high update rates at low resolutions (9 and 10 bits), but slows down to 7 ksps at
12 bits. It has good DNL performance up to 12 bits and requires only one viDAC block and one DMA channel per
DAC. This is a good option for many applications since it offers a good tradeoff between resolution and speed while
using few analog resources.
Applications that require high accuracy (low INL), the ADC feedback method is the best approach, but its update rate
is substantially slower than the other options, well under 1 ksps. It is possible to achieve 12 or maybe 13 bits with an
INL of 1, but it will require the use of the DelSig ADC to close the feedback loop. In applications where a reference
needs only be adjusted periodically and you can share the ADC, it could prove to be a very cost effective solution.
The following figure shows a comparison of INL between three of the methods discussed with a resolution of 10 bits.
Table 8 shows a summary of resources required to implement the DAC.
Figure 26. INL Comparison for 10-bit DACs
Table 8. Resources Required for DACs
DAC Type
Resources
Pins
External
Components
Required
PIDAC
viDAC8(2)
1
NA
DVDAC
viDAC8,
DMA, Clock
1
Capacitor(1)
MIDAC
viDAC8,
UDB(PWM)
2
Resistor(2)
Capacitor(1)
ADC
Feedback
viDAC8(2),
16-bit ADC
1 or 2
Resistor(1)
www.cypress.com
Document No. 001-64275 Rev.*F
16
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
9.1
Test Setup
The test setup used for evaluation of these DACs consisted of a Cypress CY8CKIT-001 PSoC Development Board
(DVK), a couple external components (Rs and Cs), a USB-to-Serial adapter, and a PC. The internal Delta-Sigma
ADC, a UART, and the LCD were used for data collection. When testing current DACs, external resistors were used
to convert the current to voltage so that the ADC could measure the output. Excel was used to convert the collected
data into the INL and DNL plots in the document.
Figure 27. Test Setup
Other than a couple resisters and capacitors no special external hardware or development board is required to
implement these methods. Any of the PSoC 3 or PSoC 5LP development systems (DVK, FTK) can be used to
evaluate or test these concepts.
9.2
PSoC Advantage
Almost any microcontroller can do the old trick using a PWM and LPF to create a DAC, so can PSoC, times 50 or
more (24 PWMs with dual outputs and 4 fixed function PWMs). Voltage DACs are very common to many controllers,
but current DACs are not. Current DACs can prove to be very flexible in optimizing a voltage range to fit your
application, not the other way around. DMA is becoming more and more common in high end microcontrollers, but
with up to 24 channels, you will always have sufficient channels to implement something such as the DVDAC.
Internal opamps to buffer a voltage DAC is not as common, but very useful. If you combine all these common and
uncommon features, the PSoC 3 and PSoC 5LP devices have unmatched flexibility compared to any single part
solution on the market today.
www.cypress.com
Document No. 001-64275 Rev.*F
17
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
10
Using these DACs in your Project
To add any of these DAC components to your project, you must add the HighResDacs library containing these
components, as a dependency. To do this, right-click on your project’s name in the Workspace Explorer on the left
half of the PSoC Creator window. Select the Dependencies option in the pop-up menu as shown in Figure 28.
Figure 28. Select Project Dependency Option
When the Dependencies dialog box opens, press the folder icon for User Dependencies as shown in Figure 29.
Figure 29. Adding a User Dependency
www.cypress.com
Document No. 001-64275 Rev.*F
18
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
Click the folder icon and then navigate to the folder containing the library in which the high resolution DAC
components are located. In this case, it is located in the folder HighResDacs.cylib. Select the file as shown in
Figure 30. This will add the library to this project.
Figure 30. Select the DAC library
The Dependencies dialog box should now look similar to Figure 31, with the DAC library “HighResDacs” added to
your project.
Figure 31. DAC Library Added to Project
www.cypress.com
Document No. 001-64275 Rev.*F
19
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
After you add the library to your project, the Concept tab appears in the Component Catalog on the right side of
PSoC Creator. You must be in the schematic entry mode to see the component library. Under that tab, you will see
three entries under the Analog/DAC/ component path, as shown in Figure 32.
Figure 32. New DAC Components in Component Catalog
You can now add any of these DAC components to you project just as you add any standard components.
11
Summary
There are many ways to implement DACs or to increase the resolution of an existing DAC. The methods discussed in
this application note focused on methods that may be unique to PSoC with its flexible analog and digital structure.
The supplied reference components should give you a good head start in experimenting with the different methods
and finding out what works best for a given application. These concepts and example components can be used as
provided, or modified to fit your application even better. Three example projects are also included with this application
note, one for each of the three components (DVDAC, PIDAC, and MIDAC). These projects are identical except for
which DAC is used in the project.
As of version 3.0 of PSoC Creator, the DVDAC or “Dithered VDAC” is part of the standard library and no longer
requires downloading the library associated with this application note to use it in your project.
About the Author
Name:
Mark Hastings.
Title:
Applications Engrg MTS
Background:
Mark Hastings graduated from Washington State University in 1984. For most of the last
twenty five years he has been involved in embedded and mixed signal designs.
www.cypress.com
Document No. 001-64275 Rev.*F
20
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
Document History
Document Title: AN64275 - PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
Document Number: 001-64275
Revision
ECN
Orig. of
Change
Submission
Date
Description of Change
**
3095295
MEH
12/03/2010
New application note.
*A
3450302
MEH
11/30/2011
Updated Document Title.
Updated Abstract.
Updated to new template.
*B
3621214
MEH
05/18/2012
Added Using these DACs in your Project.
Updated to new template.
*C
3702848
MEH
08/03/2012
Updated What are INL and DNL? (Updated Figure 1).
Several minor changes.
*D
3811902
MEH
11/15/2012
Updated Associated Part Family as “All PSoC 3 and PSoC 5LP parts”.
Updated Software Version as “PSoC® Creator™ 2.0 SP1 or later”.
Updated Using these DACs in your Project (Updated Figure 28, Figure 29,
Figure 30, Figure 31, Figure 32).
Replaced PSoC 5 with PSoC 5LP in all instances across the document.
*E
4573105
MEH
11/18/2014
Fixed Contents.
Fixed several headers.
Updated Summary (To mention new DVDAC in PSoC Creator 3.0).
*F
5044672
MEH
12/10/2015
Updated Software Version as “PSoC® Creator™ 3.2” in page 1.
Fixed low resolution graphics.
Updated attached associated project.
Updated to new template.
Completing Sunset Review.
www.cypress.com
Document No. 001-64275 Rev.*F
21
PSoC® 3 and PSoC 5LP: Getting More Resolution from 8-Bit DACs
Worldwide Sales and Design Support
Cypress maintains a worldwide network of offices, solution centers, manufacturer’s representatives, and distributors. To find
the office closest to you, visit us at Cypress Locations.
PSoC® Solutions
Products
Automotive
cypress.com/go/automotive
psoc.cypress.com/solutions
Clocks & Buffers
cypress.com/go/clocks
PSoC 1 | PSoC 3 | PSoC 4 | PSoC 5LP
Interface
cypress.com/go/interface
Cypress Developer Community
Lighting & Power Control
cypress.com/go/powerpsoc
Memory
cypress.com/go/memory
PSoC
cypress.com/go/psoc
Touch Sensing
cypress.com/go/touch
USB Controllers
cypress.com/go/usb
Wireless/RF
cypress.com/go/wireless
Community | Forums | Blogs | Video | Training
Technical Support
cypress.com/go/support
PSoC is a registered trademark of Cypress Semiconductor Corporation. PSoC Designer and PSoC Creator are trademarks of Cypress Semiconductor
Corporation. All other trademarks or registered trademarks referenced herein are the property of their respective owners.
Cypress Semiconductor
198 Champion Court
San Jose, CA 95134-1709
Phone
Fax
Website
: 408-943-2600
: 408-943-4730
: www.cypress.com
© Cypress Semiconductor Corporation, 2010-2015. The information contained herein is subject to change without notice. Cypress Semiconductor
Corporation assumes no responsibility for the use of any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any
license under patent or other rights. Cypress products are not warranted nor intended to be used for medical, life support, life saving, critical control or
safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its products for use as
critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The
inclusion of Cypress products in life-support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies
Cypress against all charges.
This Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide
patent protection (United States and foreign), United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a
personal, non-exclusive, non-transferable license to copy, use, modify, create derivative works of, and compile the Cypress Source Code and derivative
works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in conjunction with a Cypress
integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source
Code except as specified above is prohibited without the express written permission of Cypress.
Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the
right to make changes without further notice to the materials described herein. Cypress does not assume any liability arising out of the application or
use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in life-support systems where a
malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress’ product in a life-support systems
application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
Use may be limited by and subject to the applicable Cypress software license agreement.
www.cypress.com
Document No. 001-64275 Rev.*F
22