Switch input mode on the fly. AM R/C compatibility

Our application uses a differential drive mobile robot base with 2 24volt wheelchair motors that must:
usually be controlled by R/C,
sometimes by an analog joystick mounted on it,
sometimes by an onboard microcontroller(Arduino),
sometimes via a computer or network.
Ideally, control can be quickly initiated through any mode without requiring the operator to use a different mode to make the switch.
We need help choosing an appropriate motor controller and figuring out how to do the mode switching.
We are currently using a Dimension Engineering Sabertooth 2x25, but it has BAD issues with our AM R/C receiver.
Our replacement choice was going to be the RoboClaw 2x30 https://www.pololu.com/catalog/product/1497 because it is so similar. For either of these, I think we can accomplish the mode switching on the fly by connecting the dip switch pads to microcontroller pins.

Then we found the Pololu Simple High-Power Motor Controller 24v23 https://www.pololu.com/catalog/product/1383
which is nearly ideal because it can pass the R/C and Analog inputs to the serial and USB ports even when R/C and Analog are not the currently selected modes. However, it appears from documentation that it is only possible to change input modes via USB. Is this true? Or is there a workaround that will let us use serial or something other than USB to select the input mode. The computer will not always be present or booted up to facilitate the switch.

Can anyone confirm that these motor controllers will function correctly with an older AM R/C receiver? Any idea why the Sabertooth doesn’t work with AM?

Reason mode switching is required:
The first time the robot is used at a new location, it will be driven via R/C from a fixed ‘garage crate’, to the fixed location where it will be used. The movements will be recorded, and subsequently copied to autonomously move the bot into position via Arduino. Fine adjustments to the position will be performed manually at the robot with an onboard joystick. The joystick will also serve to move the heavy bot back to the garage in case of a R/C, computer or Arduino failure.
On occasion, no one will be on site, but the robot will still need to be moved into position and operated, or its status will need to be monitored. In that case, an onboard laptop will be booted via LAN. The laptop must remain powered down as much as possible due to the lack of AC and limited battery power available at these remote locations.

Hello.

I think you called us earlier today and I answered these questions on the phone.

Yes, the input mode of the Simple Motor Controller can only be changed over USB. The workaround I suggested to you on the phone was to make your Arduino read the RC channels (or analog channels) from the SMC over serial, convert them to a motor speed, and then send a command to set the speed of the motor. Unfortunately this will take up CPU time on the Arduino and also make the Arduino a critical component of your system that can not fail. I recommend using the “Command Timeout” feature of the Simple Motor Controller so that the motors will stop if the Arduino does fail.

We have not tested these controllers with an AM R/C receiver so we can not say for sure if it will work, and the answer will likely depend on lots of details of your system, including the motors. The problem you were having earlier was probably caused by electromagnetic interference from the motor or the controller.

–David

Thank you.
That was not me on the phone, but it was the person I am working with. He must have been calling while I was typing.
As you mentioned, using the Arduino as go between is processor intensive and there are better things it could be doing, especially since the SMC already has all the code I would have to duplicate. I do have other MCUs which I could use as USB host to the SMC. I’ve only discovered the SMC today, but a cursory look at the SDK seems to suggest it may be practical to write a ‘packet pass through’ USB driver for it which handles input switching. Has anyone done any work in that direction? Seems like a lot of work for an already implemented feature. Might I suggest that future firmware revisions include a method for switching input via TTL serial. Or perhaps 2 digital pins could select any of the 4 input modes.
Thanks
Dustin Maki

I don’t think anyone has done any work in that direction. By the way, you would not need to write your own USB driver or worry about packets; just use the driver and SDK we provide.

–David