For anyone else looking at this, most of our problems seemed to result from not having the pulse range quite right. We eventually hooked our ESCs up to a standard RC controller and used an oscilloscope to figure out the exact pulse range they would respond to.
I'm working on an Arduino-controlled quadcopter using Tower Pro W18A (which are actually labelled Toward Pro). I'm using the Arduino Servo library to control the ESCs ( Electronic Speed Control).
The problem is that the ESCs don't start responding immediatley. There is some sequence of throttle commands that has to be sent before they will turn on and begin responding to commands.
At first, I created a program to let us set the value being sent to the speed controllers manually from a slider. Using this, I've discovered that starting at 0, sliding up to around 70-90, and then sliding back down to zero activates the ESCs. After that, they respond normally.
For some reason, I haven't been able to replicate this in code, though. This is what my code looks like at the moment.
Serial.println("Setting all to 0...");
setAllESCs(0);
delay(2000);
for(int i=0;i<70;i++){
setAllESCs(i);
delay(20);
}
for(int i=70;i>0;i--){
setAllESCs(i);
delay(20);
}
delay(2000);
Serial.println("Ok, trying at 50...");
setAllESCs(50);
delay(500);
Serial.println("Going in 1 sec...");
setAllESCs(0);
delay(1000);
I've tried several variants. 0 to 90 to 0. 0 to 180 (max) to 0. 0 sliding up to 90 and back to 0. No luck yet.
Does anyone have experience with getting this activation of the speed controller to work?
There are numerous mentions online of the (limited) documentation that comes with the ESC being wrong, but nothing providing more detail about this.
Best Answer
I have worked on building a homemade quarocopter for my final year project, I remember having trouble with this too :)
I have used Turnigy Plush 30amp Speed Controllers.
Frist of all, FYI:
The normal sequence when staring an ESC (again, the one I worked with) is:
This is a safety feature - normally, this means that the throttle stick is at minimum. However, a great majority of Electronic Speed Controllers are programmable in terms that you have to program this minimum (and maximum) throttle I said earlier about. In other words maybe that programmed minimum throttle is around 0.7ms (if you programmed it from RC transmitter with trim set to minimum) and when you power on your ESC input is around 10ms pulse, it's a safety feature it won't start, since in this case throttle is not minimum.
In order to program the new maximum and minimum input values (calibration):
I strongly recommend you use this kind of initialization every time so that all ESCs will be synchronized regarding minimum and maximum value of throttle. Also I strongly recommend you don't have any propellers mounted when experimenting with this approach :)
Now, regarding your code,
When calibrating or starting the ESC be sure to hold minimum value and/or maximum value as long as it is required. Something like:
Normal starup(as you described your ESC):
Normal starup(the ESC I used):
Calibration:
Another thing, good to know, entering programming mode for ESCs allows you to set a lot of parameters such as the cutoff threshold, brake. Before attempting flight, you must be sure that all these parameters are set the same for all ESC you use. Again, for the ESC I used, see the manual, page 2.
I'm pretty sure you've already figured this out, but I wanted to post it maybe it will help others :)