Isn't the 9V of the Romi batteries too high for the 4.5V gearmotors?

As I can see that my Romi operates fine, it’s clear that the voltage provided by the 6 AA batteries in the chassis is fine for the gearmotors. But I’d like to know why?

6 alkaline AA batteries provide a nominal voltage of 9V (7.2V for rechargeables, my 2100mAh NiMH batteries provide around 8.3V when fully charged).

So isn’t this substantially more than the intended operational voltage of 4.5V listed on the product page for the gearmotors that are provided with the Romi chassis kit? It’s higher even than the listed “comfortable” range of 3 to 6V.

As things clearly work out I’m just looking for a brief insight into why this is so. Thanks :slightly_smiling_face:


The Romi library normally limits the max duty cycle those motors are running at which is what prevents those motors from being damaged. For example running those motors at a 75% duty cycle at 8V would be comparable to just running them at 6V. Our library allows you turn on turbo mode using the allowTurbo function, which let’s you run your motors at a higher duty cycle but we caution against it as it can decrease the lifetime of those motors. You can read more about the different functions for controlling the motors by looking at the Romi32U4Motors class reference here.


Thanks Tony :slightly_smiling_face:

I feel a little stupid now. I should have read up more before asking the question. I’m working on my first robot project and come from the Arduino hobbyist world of mainly electronic, rather than electromechanical, devices where wiring something up to the wrong voltage generally involves the immediate release of its magic smoke.

I’ve now read up a little on duty-cycle and looked at questions like this on the Electronics StackExchange, where someone asks if running a motor at 5V with 100% duty cycle is the same as running it at 10V with 50% duty cycle (short answer is “no”).

From all this, I’ve moved from worrying that you would damage a motor, with an intended operational voltage of 4.5V, if you ran it with a higher voltage source to thinking that it’s actually better to run it with a higher voltage source and use a lower duty cycle (on the basis that you’ll get better torque). Obviously, there’s an upper limit to how far one can take this.

I’ve looked at the code for Romi32U4Motors::init2() and if I understand it correctly 400 is set as an upper bound such that it’s equivalent to a duty cycle of 100%. And 300 is then the highest allowed value, i.e. the 75% you mention, unless you call the allowTurbo(bool) function.

Is there a particular reason to choose 400 as an upper limit? As far as I can see one can choose any unsigned 16-bit value - so one could have chosen e.g. 10,000 or the upper limit of 65,535.

Also now I’m wondering about the lower voltage limit given for the gearmotors - on their product page it says they “should run comfortably in the 3 V to 6 V range.” Does this mean you shouldn’t try to run them at a duty cycle equivalent to less than 3V?

I.e. the motor will be at top speed at 6V and be at the lowest speed, that it’s “comfortable” with, at 3V and that below this one should turn the motor off? I.e. you shouldn’t use speed values other than 0 (off) or 150 to 300 (3V to 6V).

Sorry for such basic questions - and thanks as always for the amazing support I get here whenever I ask a question :slightly_smiling_face:


400 was chosen as the upper limit in order to have the frequency of the PWM signal be 20 kHz. 20 kHz was chosen as the frequency since it is a round number that is higher than humans can hear. If we made it too high we would have less resolution when setting the duty cycle and there would be more energy lost while the motor driver MOSFETs are switching.

You should not have to worry about lower voltages causing damage to those motors. In general for brushed DC motors there is a voltage that would be too low to get the motor to spin, but I do not expect being on that edge would damage your motor.


1 Like