The 27-year-old played in 65 games with Calgary last season after coming over in a trade from Carolina along with Tom Kostopoulos.
Babchuk totalled 11 goals and 24 assists and was a team high plus-14 with the Flames. He added eight points (3-5) in 17 games with Carolina.
The deal will pay Babchuk $2.5 million a year.
"Anton Babchuk is a sound positional player on the back line and perhaps one of our most adept defenceman at pinching down the wall to keep the play alive in the offensive zone," Flames general manager Jay Feaster said in a release.
"Anton makes a good first pass, his shot is a big weapon for us on the power play, and he contributes to our offence without sacrificing his defensive responsibilities."
A first-round pick by Chicago in 2002, Babchuk has played 250 career NHL regular season games, registering 34 goals and 62 assists.