Servers by jDrones

Any way to use the DC motor ports on the BeagleBone Blue as extra ESC drivers?

Hi everyone! I’m new to both ArduPilot and the BeagleBone Blue, so I’ll apologize in advance for my noob questions and rather lengthy post.

Backstory:

I’m putting together a rather unorthodox plane as my second foray into RC flying, and my first foray into ArduPilot.
(Here’s a quick picture I drew up, just so y’all know what I’m talking about:)


Basically I just repurposed spare parts from my first airplane to make this one, as well as buying quite a bit of new hardware for all the extra features.

My three requirements for the plane are simple, yet complicated at the same time. I need good, stable flight down to quite slow speeds (hence the double-main-wing design for extra lift), I need VTOL/hover capability (hence the quadcopter rotors embedded in the wings), and I need it to be a true airplane, not a quadcopter. Hopefully these three things will make it a very easy plane to learn RC flying on, as I can just go slow/stop outright to give myself more time to react.

Here’s my issue though. I can’t use Y-harnesses (reducing the number of servos I have to control) on either main wing without losing the ability to run the wing control surfaces in “elevon mode”, which is an ability that I want to keep. So, I’ve got 5 brushless motors (and therefore ESCs) and 5 servos to control. That’s a total of 10 devices, and the BeagleBone only has 8 servo outputs… And here we have my problem. Since all problems are best fixed in software :wink:, we arrive at my question.

Question:

Can the 2-pin DC motor output ports (located on the short edge of the board, away from the USB port) be repurposed as additional servo control ports? My understanding is that both types of ports are simply using different flavors of PWM, so I thought repurposing them might be possible. If it is possible to repurpose the ports, could someone point me in the direction of instructions on how to do it?

Thank you all in advance for your help!

Hello,

There are eight channel and 16 channel receivers, like the X8R from FrSky when coupled, that can handle many different brushless motors along w/ the required ESCs. I know your system will need dc, servo, and bldc b/c of the lack of using your Servo Header on the BBBlue for all motors.

I think you can do it with i2c or with another technology. Maybe making a small i2c kit may prove valuable. Anyway, let me know what you think about what I have typed here and we can review other ideas further.

The PRU onboard the BBBlue is handled by the Receiver and those four DC motor connectors can have a DC motor per connector connection. So, four DC motors and four DC motor connectors. There are plenty of Servos that be added to the Servo Header.

There are the quadrature encoders too. B/c of the PRU being used up with SBus on, like w/ the X8R receiver, a single pin, maybe three quad. encoders can still be used w/ another form of source outside of ardupilot/arduplane/arducopter or whatever you are using to make it work.

For instance, there are a couple of libraries out there for the BBBlue and bbb.io boards in general.

Seth

P.S. Oh and about that repurposing DC motor connections into Servo motor connections, maybe. Just maybe. I think there are H-Bridge drivers onboard the BBBlue for making DC motors move…Servo Drivers are a bit different. AOZ1284 is the servo chip and the H-Bridges for the DC motors are TB6612FNG. I am sure there is a way but I cannot tell just yet. One reason I cannot tell is b/c I do not fully understand both schematics of the chips, the datasheets, and how to incorporate a middle driver to make things work there and back. But, I found onboard the BBBlue many GPIO pins (GP0 and GP1) and an i2c pin (I2C1). Complicated…yes. Doable…maybe. Receiving knowledge on how to go about it…priceless. Let me know.

Hello,

I am sure there are chips that handle exactly what you are describing. I am unaware of them off hand but I can review the idea in time and keep replying. Give updates and I will return service when I find out more.

Seth

P.S. I found some nice info. here: https://www.nxp.com/docs/en/application-note/AN4776.pdf. Further down in the article, there is a section called 4.1. Try that idea out, i.e. read it and get back to me. I am sure you already know this info. but it is a good recapture of ideas. Hall Sensors!

Hello and Sorry For all of the Replies,

Okay so, I figured out what to do but I do not think that the two H-Bridge drivers on the BBBlue can handle more than two or maybe just one BLDC: https://www.pololu.com/file/0J86/TB6612FNG.pdf.

https://www.ti.com/motor-drivers/brushless-dc-bldc-drivers/overview.html. At 6:35 in the video if you scroll down, you will see what needs to happen that is not happening already on the BBBlue for the BLDC motors to work. Complicated…yes. Worth making it work…yes. Gaining knowledge…priceless.

Seth

Sorry for the long wait, I’m a first-semester college student, so my schedule is rather busy right now.

I took a look at the resources you linked to, and I see what you’re getting at. I’ll probably just use an I2C servo controller to run the extra outputs.

Do you have any recommendations on how to make Ardupilot use the I2C port on the BeagleBone to run some servo outputs? I don’t know how to make it use the non-standard port. I have a servo controller to test it with.

Hello @limmers2015,

No sir. But…I am sure you could set up your own i2c “gateway” for the BBBlue w/ “ease” for i2c1 onboard the BBBlue.

Have you reviewed the source for the i2c stuff from ArduPilot? I am currently not familiar with it but I can dig in it a bit for use for you and on my side of things.

I usually use smbus2 for i2c related items for promoting i2c communication. Oh and no big woof, do not worry about time limits. I have time every so often to reply and learn more too.

So, I2C:

and…

So, w/ the balloon photo, you can see where the i2c connector is located. Then, w/ the lower photo, the schematic, it shows exactly which pins are handled in the i2c connector.

I will go off and review some i2c source for the ArduPilot program. In the meantime, I would guess, if you have time, look into what you were describing to me and get one or two just in case. I have a Seeed Studio i2c adapter board and I found some JST-SH connectors to Grove adapters w/ wiring. This handy for attaching specific Grove modules directly to the BBBlue w/out having to rewire everything.

Anyway, off to look up the I2C sections on the ArduPilot source.

Seth

P.S. Since you can alter the source of ArduPilot to handle more than just one i2c peripheral, I am sure if it is not already implemented, just compiling the i2c source may be available. Who knows? This is sort of new to me. So, reading will ensue!

Also…look here: https://github.com/ArduPilot/ardupilot/blob/master/libraries/AP_HAL_Linux/I2CDevice.cpp . I think the ArduPilot people are working to make it available for use outside of the HAL object source. Anyway, I cannot do it along but if you have some time to work on making i2c source available in userspace, we may be able to figure it out. I know changing some lines will prove useful for the i2c1 address, “/dev/i2c-1”, on the BBBlue for when utilizing it in source for use.

Servers by jDrones