What are your cues for the canter? Make sure that you are asking for a different gait, not a faster one. Ask for the canter from a very slow trot. Try shortening your reins, sitting deep, and squeezing by the girth with your inside leg, while sliding your outside leg back a bit. If he starts to go faster, bring him back and correct him as quickly as possible and then ask again. If he starts to gallop off, do everything you can to bring him back to the trot. Also, have you considered that he might not be fully sound? He might actually be in pain when he canters, and that is why he chooses a different gait instead. I would definitely get him checked out by a vet as soon as possible.