Skip to content

04. Wheel & Cutter Motors

Patrik Hermansson edited this page Aug 21, 2018 · 7 revisions

The Wheel motors

You can use several different types of wheel motors. The most common ones are geared DC motors which has a shaft speed of approx 20 rpm and a maximum torque of 180 Ncm.

You are free to select anyone which achieves or surpasses these values. In the BOM, we have listed the most trusted which is supplied by Conrad. Unfortunately, this one is quite expensive and there is a low cost option as well further down.

In order to achieve the required torque, the low cost version runs with a higher ratio and therefore 15 rpm. Low Cost Motor

Planetary versions

Some of the experienced builders recommend motors with planetary gearboxes. They tend to emit lower noise from the gearbox. The base motor is still a brushed DC motor.

Separate shaft suspensions

Normally, the wheel shaft should be suspended independently in the mower body and a coupling should be used to the motor. However we have found that for the most part, the mowers have such a low weight that the wheels can be attached directly to the motor shaft without problems.

Motor driver

An arduino cannot directly drive the wheel motors because the currents are too high for the controller to handle. Therefore we use a L298 motor shield which is snapped on top of the arduino. It is important that this shield includes current measurement because this is how we can sense that the mower has hit an obstacle.

More about the wheel motor current sensors

Lets take a look at the wheel motor current sensor. This is used to detect when the mower is blocked and has to back/turn. This information can be used when you're using another driver card and/or current sensor.

The code for detecting overload looks like this:

Definition.h: #define WHEELMOTOR_OVERLOAD 130

Wheelmotor.h: #define MOTOR_LOAD_READINGS 10

Controller.cpp: if (wheelsAreOverloaded()) return ERROR_OVERLOAD; // Overloaded

Wheelmotor.cpp: int WHEELMOTOR::getLoad() { int load = 0;

for (int i = 0; i < MOTOR_LOAD_READINGS; i++) { load += analogRead(loadpin); delay(1); }

return load/MOTOR_LOAD_READINGS;

The code reads analog values from the motor drivers current sensor ten times and divides the combined readings by ten. This can be changed in Wheelmotor.h:

#define MOTOR_LOAD_READINGS 10

The R3 Motor Driver uses a 0.15 ohm resistor as current sensor. This means that 1 ampere to the motor gives 0.15 volt over the resistor, which is what the Arduinos analog input reads. To calculate the voltage from the A/D-value we use this formula (assuming Vdd for the Arduino is exactly 5.0 volt):

voltage= sensorValue * (5.0 / 1023.0)

The limit is set to 130 ("#define WHEELMOTOR_OVERLOAD 130") which we then can see gives a reading of

130*(5/1023) = 130 * 0.0048875 = 0.64V.

I=U/R, so 0.64V over the resistor means a current of 4.3 ampere. You can now calculate backwards to see the correlation between the overload limit in the code and the current drawned by the motor.

Cutter Motor

Brushless Motor

You can use several different types of cutter motors. The most popular is a brushless DC motor (NIDEC) which includes the driver control inside the motor. This greatly simplifies the installation. NIDEC Motor

The top shield is not by default prepared for this motor, so the cable wiring needs to be adjusted slightly. or about that in a later chapter.

Brushed Motor

A straightforward motor to use is a simple brushed motor. Look for motors with around 5000 rpm speed and a diameter of 37mm. The motor included in the screw driver cannot be used due to the very high current drain from this type.