The way I would approach this is not to modify the ESCs at all. That way leads to frustration.
You'll have much more luck by making an I2C -> PWM module. This is easier than is sounds. Firstly, a little about RC servo PWM
An RC servo expects to see a pulse about every 20 milliseconds (50 times per second). The length of this pulse tells it what angle to rotate to. A pulse of 0.9ms means +90º, while a pulse of 2.4ms means -90º.
The ESC input will expect the same type of input, but will interpret the pulses to mean something about motor power, rather than angle. Many ESCs allow you to calibrate them I.E. Explain to them which length pulses correspond to what motor power. Often you hold down a button to switch them into calibration mode, then move the joystick through a sequence of, pressing the button again after each movement.
All you need to find is a chip which can produce such a PWM signal, at the behest of I2C commands.
Well fancy that, such a chip exists: PCA9685. What's more, it actually has 16 output channels, so you can drive 16 of those ESCs! It can produce frequencies from 40Hz to 1000Hz, with a 12-bit resolution. That means you'll get at more than 8-bit resolution on the 0.9ms - 2.4ms range. With this chip, you'll be able to plug in servos, ESC, whatever into you 16 ports.
If you need help to get this working, just ask specific answerable questions on this forum, and we'll be happy to help.
Kevin mentioned that you could also do this with a microcontroller. Probably the easiest way to do this is with a PSoC3 from Cypress Semicondctor. The reason to choose these over most other microcontrollers out there are:
- You can easily have 4 PWM outputs. There aren't many MCUs with that many. In fact, I think you can have more than 50 PWM outputs if you want.
- Configuring it is insanely easy. Considerably easier than a PIC for example.
- The actual code would also be pretty simple.
Unlike most MCUs, you can basically choose whatever and however many peripherals you want from a huge list. You drag them into a schematic page, and wire them up however you want. In this case, the wiring is pretty simple:
Here I have created 8 PWM outputs. Configuring them is a breeze:
Here I am configuring one of them as follows:
- 16 bit resolution (this will give you more than 12-bits res for your application)
- Time period of 20ms
- An initial pulse width of 1.65ms
This setup means that as soon as the PSoC is powered on and the PWM modules are started, they will immediately produce the 0º signal.