@ToyKeeper posted a graph somewhere illustrating it, maybe she can post it again ?
But basically the DAC outputs the VREF chosen, for example on T1616, : 2.5V, down to 2.5V/255 at level 1/255, but if you use 0.55VREF, you can go lower down to 0.55V/255.
So you generate a ramp table that uses 0.55V first, and then switch to 2.5V for the top end.
// 4 ramp segments:
// - low 0.55V
// - low 2.5V
// - high 0.55V
// - high 2.5V
// PWM1: DAC Data
#define PWM1_LEVELS \
2, 3, 4, 5, 7, 9, 11, 13, 16, 19, 23, 28, 33, 39, 45, 53, 61, 71, 81, 93,106,121,137,155,175,196,220,246, \
60, 67, 74, 82, 91,100,110,121,133,146,159,174,190,207,224,244, \
8, 9, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 26, 27, 29, 31, 33, 35, 37, 40, 42, 45, 47, 50, 53, 56, 59, 62, 66, 69, 73, 77, 81, 85, 90, 94, 99,104,109,114,120,126,132,138,144,151,158,165,173,180,188,196,205,214,223,232,242,252, \
57, 60, 62, 65, 67, 70, 73, 76, 78, 82, 85, 88, 91, 95, 98,102,105,109,113,117,121,126,130,135,139,144,149,154,159,164,170,175,181,187,193,199,206,212,219,225,232,240,247,255
// PWM2: VREF selector
#define PWM2_LEVELS \
V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05, \
V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25, \
V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05,V05, \
V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25,V25
That’s one of my T1616 driver, additionallly there are 2 sense resistors (”low” and ”high”), so there are 4 segments in total.
First it goes up to 246/255 at 0.55Vref, then continues at 60/255 at 2.5Vref.
Then it chages sense resistor and do that again.
The resulting ramp is a smooth curve.