Cammalleri set up Kris Russell's goal just 1:04 into the contest, giving the Flames the lead for good, and added his first tally of the game later in the period for a 3-1 Calgary advantage.
After the Capitals had narrowed the deficit to 3-2 on Aaron Volpatti's goal in the second, Cammalleri struck again midway through the final period to turn back the rally.
Karri Romo made 27 saves.
Jason Chimera scored for the Caps, whose three-game winning streak was ended.
Braden Holtby started in net but was pulled in the first period after yielding three goals on 14 shots. Michael Neuvirth stopped 17-of-19 shots the rest of the way.