struck his maiden century to match Voges, who scored a magnificent unbeaten 112.
The West Indian opener struck a boundary to bring up his 100 off 120 balls, including eight fours and a six.
But he fell next ball, caught by Ben Cutting at square leg playing a poor shot to Clint McKay. He had ridden his luck, surviving two dropped catches and two television reviews.
After that West Indian wickets fell regularly as the required run rate soared and they were forced to hit out.
Captain Darren Sammy had a late chance to guide the tourists to the target but he was caught behind by Brad Haddin off McKay for 23 off 18 balls.
West Indies still needed 18 runs off five balls and it proved too much.
Opener Kieran Powell had been the first to go, caught in the slips by Aaron Finch off paceman Mitchell Johnson for just two.
Darren Bravo managed 33 in a partnership of 106 with Charles before all-rounder James Faulkner held a fine low catch off Xavier Doherty's finger spin.
Brother Dwayne had made 13 when Johnson clean-bowled him with a late inswinger.
After Charles went, Narsingh Deonarine was out for four, caught Haddin bowled Cutting. Devon Thomas smashed 19 off 18 balls but was run out by Shaun Marsh.
Big-hitting Kieron Pollard, who made a century in Sydney on Friday, holed out for 45, caught by Finch at long on off Faulkner.
Voges, batting at number five, had earlier steadied the Australian innings after a disastrous start and went on to complete his ton off 98 balls.
The 33-year-old was only drafted into the side on Friday to replace the injured George Bailey, but he played the star role despite being a fringe player in the six years since he made his debut.
West Indies had the home side at 2 for 2 wickets as Tino Best cleaned up the openers, but they let Australia off the hook and went for 100 runs in the final 10 overs.
When Voges came to the wicket they were three for 63 and a high total looked unlikely with skipper Michael Clarke also on the injured list following more hamstring trouble. But only two more wickets fell.
Voges showed his domestic high-scoring feats were no fluke, cracking a six to bring up a 100 partnership with fellow veteran Brad Haddin.
Haddin skied a top edge off Kemar Roach to Kieran Powell in the deep when he had made 43 off 45 balls out of a partnership of 111 with Voges.
Faulkner accompanied Voges through the final overs, adding a quickfire 31 off 24 balls. The pair put on 81 runs from 51 balls.
West Indies had looked in control in the opening stages when Best bowled replacement captain Shane Watson first ball.
Finch then top-edged a Best bouncer to Narine at fine leg on the boundary in the third over for just one run.
Shaun Marsh, in for Clarke, found the first boundary in the fifth over.
Phillip Hughes patiently built a partnership of 61 with Marsh before Dwayne Bravo had him caught for 29 off 61 balls.
Pollard took the freak leaping catch at backward point, knocking the ball into the air with an outstretched left hand and holding it easily at second bite.
Keeper Devon Thomas snapped up Marsh, who had reached 40 off 58 balls and was looking set at the start of the 25th over. It was Dwayne Bravo's 150th ODI wicket, the third quickest West Indian to the milestone.
Australia take on the West Indies in a a T20 format, the final game of the tour, at the Gabba in Brisbane on Wednesday.