for (unsigned char a = 0; a < MowerSpeed; a++) {
analogWrite(Mower, a);
Where did you get the idea that analogWrite() takes an unsigned char as the second argument? It takes an int. Yes, I know that is not reasonable, given the valid range of values that it accepts, but, it is what it is. At least, use byte for the loop index, not unsigned char.
By the way, pin 12 is not a PWM pin.