2015-12-07 09:33 AM
I have the DAC output of my STM32F44 feeding into a non-inverting op amp. Everything is working, but not real great. The problem is at the lower end, and gets worse the closer you get to zero.
For instance, my AVREF is 3.00V. If I write 4095 to the DAC, I get 3.00V out. If I write zero to the DAC, I'm seeing about 80mV. The problem seems to be linear - writing 2048 gives about 1.69V (about .04 above the expected 50% level). I disconnected the op amp portion because I thought it might be interfering. With the DAC pin floating, I see the same issue. I tied it to ground through a 10K, and same issue. I can account for the non-linearity in code, but not being able to drive to zero is a problem. I can't find anything in the data sheet or reference manual about it being non-linear. The CubeMX DAC code is:/* DAC init function */
void MX_DAC_Init(void)
{
DAC_ChannelConfTypeDef sConfig;
/**DAC Initialization
*/
hdac.Instance = DAC;
HAL_DAC_Init(&hdac);
/**DAC channel OUT1 config
*/
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1);
/**DAC channel OUT2 config
*/
HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2);
}
Then I'm calling it using:
MX_DAC_Init();
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 0x0);
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
2015-12-07 11:12 AM
> The problem seems to be linear
>[...]
> I can't find anything in the data sheet or reference manual about it being non-linear. But it is not non-linear, according to your finding, is it. > I can account for the non-linearity in code, but not being able to drive to zero is a problem. Did you read the datasheet? What does it say for maximum output excursion with buffer ON? Try to switch the buffer OFF. JW2015-12-07 11:49 AM
I don't know why I put 3.00V...my reference voltage is 3.30V, and when the DAC is 4095, I get 3.30V out.
I disabled the buffer, and that appears to have helped a little. Writing the DAC to 0x00 now gives me 45-50mV. The datasheet says with the buffer off, lower DAC-out voltage is .5mV typical.2015-12-07 01:15 PM
And what voltage do you measure on your ground pins?
JW2017-05-23 05:40 AM
> I can't find anything in the data sheet
Read the datasheet again. Remember that all electronic has problems when output voltage comes to the rails. Either you use the DAC unbuffered, then Vout can get near zero, or you use it buffered, then vout min is several tens of mV. But unbuffered means that the load must be high impedance. Look for values in the datasheet.
2017-05-23 06:03 AM
Didn't check for your particular MCU, but ST's DAC implementation used to be like this:
With unbuffered output, you have a voltage swing nearly between the rails, and an output impedance of 1 Mega-Ohm.
With buffered output, you have 15k output impedance, but reduced swing of up to 200mV at both rails (+200mV .. VRef-200mV).
Check the datasheet carefully. What is the input impedance of your opamp driver ?
2017-05-23 08:11 AM
Re-checked it, and is still about the same, look at page 149 of the datasheet.