Particle Core PWM and I2C questions

So Ive chosen to use a spark core as the heart of a project i am currently creating but have stumbled across some problems:

  1. I have 4 DC brushless motors where the ESC’s wires have been modified so only the signal wire is coming into the spark core and the motors are powered by a 4 cell LIPO. The ESCs are from

however as the spark core runs at 3.3v im wondering if im going to have problems, ive looked at the spark shield shield for the 5v conversion but as i need to run 3 additional sensors all on I2C the D0 and D1 pins i believe must be reserved for them.

Ive tried running a for loop incrementing the value written to the signal line and got nothing back, however if all 4 motors were attached all motors save the one i was trying to interface ran but i think this was some sort of variable overflow as i was writing 0-1800 to the signal line and i believe pwm values are 0-255.

Any advice on whether im going mad or my core is likely to catch fire is appreciated:)

Thanks for the help


1 Like

On my RC aircraft, which also uses ESCs though controlled conventionally using a transmitter, I have to set zero throttle when the ESCs are powered up so they will ‘arm’ themselves, as opposed to them immediately starting if I’ve accidentally left the throttle off zero. Do your ESCs need something equivalent perhaps?

You should use voltage level translators on those lines. I’ve a feeling that you may want something smaller, so in that case you can use something like this:


I’ve completely controlled my RC model (4 channels) from a 3.3V MCU in the past. I used a 20cent buffer/line driver from TI, I think it was the 74HCT244 or some such DIP. They will switch with 3.3V input, and provide 5.0V output. Of course this is unidirectional, unlike the products @mohit recomends.

But @timx is right about the ESC waiting for a “zero” from the Servo control line before starting any motors moving. The idea there is say your remote is sitting on the ground with the throttle all the way up, and you pick up your quad copter and plug in the battery. You don’t immediately want the blades to start running full speed.

So, are you using the “Servo” library? When you say you are writing 0-1800, do you mean Servo.write() or Servo.writeMicroseconds?

  • Rich
1 Like