PWM from BeagleBone Blue to external motor controller.

I’m trying to build a differential drive robot using some 6v motors with encoders from Pololu. Their amperage exceeds the capabilities of the built in motor controllers on the BB Blue.

I’ve got a larger separate motor controller that will accept PWM signal for control.

Question 1: Which physical connector on the BeagleBone Blue do I connect to in order to access 2 channels of PWM? I’m not clear how PinMux works as described in the manual. I’m assuming it means that once I figure out which physical connector to attach to, that I can then change the functionality to PWM. (Seems like perhaps the GPS connector is the correct one??) Unfortunately the online manual doesn’t seem to give practical example code of this functionality.

Question 2: Is it possible to access the PWM signal of the built in motor controllers? This would be ideal as then the external motor controller would be functionally transparent to the roboticscape software that already exists. Again, I can’t figure out if this is possible or which connectors to tie into to access the PWM signal that drives Motor Channels 1 to 4

Thanks in advance for any help you can provide.

  • Phil

Hi Phil,

Q1) I would suggest looking at rc_pwm.c which is in the Robotics_Cape_Installer source code. A comment in the code says that there are 3 PWM subsystems; subsystem (ss) 1 and 2 are used by the built in motor drivers but ss 0 can be accessed from UART1; which leads one to believe is the the UART for GPS based on the comment from the PinMux online manual. But the online manual for RoboticsCape says that UART2 (not UART1) is for GPS so either the code comment is old/wrong or the documentation is wrong. Looks like a bit of experimenting is required to figure out which UART port is the correct one, but my guess would be that UART2 is the correct one. You can then look at rc_motors.c to see how the pwm functions are used to configure the pwm subsystem and set duty cycle and frequency. All this should be done after a call to the PinMux API to configure the pins for PWM.

Q2) What is your level of comfort with electronics modifications? Then motor PWM signals are not mapped directly to a connector but you could access them via a hardware hack. Remove the built in motor driver chips and solder in wires to the appropriate pads. You could also try soldering directly to the appropriate built in motor driver pins as well. In either case your soldered in wires should be hot glued or RTV’d in place to provide some strain relief. It’s a total hardware hack but it would allow you to used the robotics cape software as is. This is assuming your new motor driver also uses 2 extra pins to control direction and braking (CW, CCW, short-brake, and stop) same as the TB6612FNG chip. If it does not they you’ll have to use the GP0 or GP1 IO pins to provide that functionality as your new motor driver needs. Honestly this approach may be better suited for the BBBlack as all required I/O is mapped directly to and the header pins; but then you would loose all the other built in features of the BBBlue/Robotics cape.

If it were me I would go with the first approach and configure GPS UART2 for PWM output. Let me know if you have any question with this approach and I can look at the code a bit closer.