Minnesota opened a home stand after playing 14 consecutive games on the road, with nine losses on the trip, including the last three.
The Twins kept pace with the division-leading Chicago White Sox, remaining 1 ½ games out of first place in the AL Central.
Morneau's homer, his 22nd of the year, allowed the Twins to overcome a one-run deficit and they went on to score four more times in the seventh to turn the game into a rout.
Brian Buscher finished off the seventh with a two-run single. Both of Detroit's runs came on homers by Marcus Thames, running his total for the season to 24.
Francisco Liriano (5-3) lasted seven innings to get the win. He allowed both runs on five hits and struck out nine.
Armando Galarraga (12-5) gave up only three hits in six innings, but he walked six and coughed up six runs to take the loss.