Calgary held a 2-1 lead heading into the second period, but the Flames were blanked the rest of the way by Jimmy Howard.
Nicklas Lidstrom tied it 3:51 into the second with a power-play goal, his first of the season, and Franzen gave the Red Wings the lead 7:55 into the third. Franzen's shot hit the side of Miikka Kiprusoff's mask before sliding down the back of the goaltender and into the net.
Todd Bertuzzi supplied an insurance goal with 3:17 to play in regulation. Detroit, which began a four-game homestand, won its second straight.
Howard made 34 saves and prevented a third straight Calgary victory. Kiprusoff allowed the four goals on 30 shots.
Calgary had won its previous three trips to Detroit.