This is a suggestion.
Instead of calculating an average you could use a simple control loop like
changeValue = currentDACValue-newDACValue
if ( abs(changeValue) > maxAllowedDelta) {adjust newDACValue by +/-max delta}
currentDACValue = newtDACValue
To make sure that the values don't change too radically. This is simpler and more linear than the average method.