I've been having a lot of fun with my new ArduCopter. My initial flight was interesting - due to me switching flight modes with the throttle up it jumped off the floor and flew straight at me. I now have a nice scar on my shoulder as a memento of that first flight :-)
Since then I've been taking things a bit more carefully. The above photo shows the copter tied down to a 20 litre tin of paint, so it can only rise about 10cm off the tin. It will be released from its string prison once I've got some of the glitches out.
The particular glitch that has me puzzled at the moment is ESC callibration. During some testing I suspected that the motors were not all running at the same speed, so I wrote this little tester and hacked it into the ArduCopterMega trunk:
static void run_testmode(void)
{
Serial.println("Running motor test");
for (uint16_t thr=1100; thr<=2000; thr += 100) {
for (unsigned char i=0; i<4; i++) {
Serial.printf_P(PSTR("motor test %u thr=%u\n"),
(unsigned)i, (unsigned)thr);
APM_RC.OutputCh(i, thr);
delay(1000);
APM_RC.OutputCh(i, 1000);
delay(1000);
if (Serial.read() != -1) {
Serial.println("terminating motor test");
for (unsigned char j=0; j<4; j++) {
APM_RC.OutputCh(j, 1000);
}
return;
}
}
}
Serial.println("Finished motor test");
}
The code runs each of the motors in turn, starting at a PWM value of 1100 and rising to 2000. As I suspected, it showed that one of the ESCs (the one driving the front motor) is calibrated quite differently from the other 3. The front
ESC runs at 1100, when the other 3 don't run at all, and doesn't run at all at 1900 or 2000, while the other 3 do run up to and incuding at 2000.
I have been through ESC calibration, using this bit of code, which is based on some code from the ArduPirates tree:
static void calibrate_ESCs(void)
{
Serial.println("Disconnect battery then hit enter");
while (Serial.read() == -1) ;
Serial.println("Now connect your battery. After beep beep, hit enter");
while(1) {
APM_RC.OutputCh(0, 2000);
APM_RC.OutputCh(1, 2000);
APM_RC.OutputCh(2, 2000);
APM_RC.OutputCh(3, 2000);
APM_RC.Force_Out0_Out1();
APM_RC.Force_Out2_Out3();
delay(20);
if (Serial.read() != -1) break;
}
Serial.println("wait for beep then hit enter again");
while(1) {
APM_RC.OutputCh(0, 900);
APM_RC.OutputCh(1, 900);
APM_RC.OutputCh(2, 900);
APM_RC.OutputCh(3, 900);
APM_RC.Force_Out0_Out1();
APM_RC.Force_Out2_Out3();
delay(20);
if (Serial.read() != -1) break;
}
Serial.println("disconnect your battery and then hit enter again");
while (Serial.read() == -1) ;
}
If I understand correctly, that should have calibrated all 4 ESCs to the same value, but it didn't seem to work.
Does anyone have any suggestions? Is it just a matter of replacing the ESC that is out of kilter with the others?
UPDATE: I've solved it! The problem was I had misunderstood the importance of the timing in the ESC calibration instructions. I read the ESC manual, and noticed that the procedure for entering programming mode is actually the same as the initial steps for doing throttle callibration. The only difference is how long you wait after connecting the battery the first time. I was beiing "conservative" and waiting several seconds, and the ESCs were entering programming mode instead of doing throttle calibration.
I now have my 4 ESCs calibrated correctly, and it hovers quite nicely in its string prison. I will be able to try a real flight now, and see if it lasts a bit longer than the first one!
Comments
No problems, our pleasure.
On ACM code ESC calibration goes in the way that you naturally take propellers off. Go to setup mode and calibrate first your Radio then you can start 'motors' test function.
While motors test is running, disconnect your battery, put full throttle from your radio, connect battery, wait normal ESC reboot tilutilulei sounds and that after that there will be double Beep Beep sound. Now move your throttle to minimum and ESC's should say Beeeep.
Calibration is done. After that you can start playing with motor finder feature and test that all motors are spinning equal speed. This calibration procedure works with official ArduCopter ESC's, it might work with some others too but not with all.
If you move your right stick to up (pitch down) front motor starts, stick to left (ail left) and left motor starts and so on. This stick order is naturally for Mode 2 radios so you need to test it on your radio.
You might want to try Mode 2 due it's easier for Heli's. But if you are confident on flying with Mode 1, use it.
I hope you have many happy flights with your ArduCopter.
Thanks Jani, I'll put the dome center the right way up. Unfortunately using the ublox means it doesn't fit snugly like the mtek would. I initially ordered a mtek, then in my eagerness to open my nice box from jdrones I must have thrown it out with the packing peanuts! The mtek was then out of stock, so I went for a ublox, and now open jdrones boxes more carefully :-)
On the props, I did do initial testing without props, and I thought it was all behaving as described in the manual, but obviously my ESC calibration was all wrong. For someone like me who hasn't flown RC gear before I guess my ear just isn't used to telling motor speeds apart.
Anyway, the copter now hovers quite nicely while tied down to the paint tin with string, and it does reasonable pitch, yaw and roll within the constraints of the string, so I think it is time to let it out of its prison and fly properly. First I'll hack the ArduCopterQuad code to support throttle on the right of the transmitter for arming though - on the advice of the local model club, my transmitter is setup for planes in Australia which use mode1.
btw, thanks for all your efforts in putting this kit together. Best birthday present I've had in a long time :-)
Andrew, your dome center is upside down.. You cannot mount your GPS under that ring.. just as a hint. And yes you should never mount propellers while testing your quad, something can always go wrong.. Trust me, I know :)
yep, same ESC, but different motor, and I use 12x45 props.
Interesting idea to put a scope on the ESC output! I can use a scope from the local hacker space on Saturday to try this.
For the RPM measurement, I am hoping to do this with props removed, assuming the sticker on the motor gives enough contrast for the tachometer to get a fix. I'm not sure how good the cheap ebay tachometers are :-)
GroundLoop,
I'm running the ArduCopter "heavy lift" kit, which means 880kv motors. I think they use the same ESCs as the 'normal' kit though. They are AC20-1.0 ESCs.
In case it is just a faulty ESC I've ordered another one today.
Cheers, Tridge
PS: yes, I did the original rsync, although I'm not the maintainer these days.
Thanks for all the comments everyone! \
Some responses:
- I confirmed it is the ESC and not another component in 2 ways. I switched which motor the ESCs connect to, and I separately switched which APM output went to each ESC. The 'bad' ESC remained the same in each case.
- Ryan, I'm curious what you saw with the bad solder joint. Can a bad joint cause an ESC to run faster than it should? I would expect it to run slower if it doesn't get the current it needs. The odd-man-out ESC in my case runs faster than the other 3, so either I consistently botched the soldering on 3 of the power board joints, or the odd-man-out really is odd.
- Sebastian, I chose 900 as that is what the ArduPirates code used. (see CALIB_Esc() in CLI.pde). I was a little surprised by the 900 value, but went with it assuming the pirates know what they are doing (they seem to get everything else right!).
- Silverfox, I have tried calibrating the errant ESC separately, but not with a RC trasmitter. I just disconnected the other 3 ESCs, and went through the same calibration I showed above. It did beep in a manner that suggested that it was working. The calibration I'm using should be sending precise PWM values, which I couldn't get via a RC receiver.
I've also ordered a laser tachometer from ebay which I hope to use to measure the actual speed of each motor, so I can see the real RPM curve. That may give me some hints.
btw, does anyone know of a video of the calibration of the actual ESCs used in the ArduCopter kits? Matching the beep descriptions in the ESC manual to the actual sounds you hear is a bit hit and miss. If I could listen to someone elses ESC (with the same model) going through calibration I could confirm that its the same set of beeps I'm getting.
I had the exact same issue. I did calibrate one by one as desceibed but found the culpret to be cold solder joints on the bayonett connectors (I actually managed to pull it out!!). Re-flowed with a hot (800) iron and added enough solder to fill in the connector. The one ESC that was giving me greif is all good now (I did all of them).
I would highly recommend the a la carte calibration as it's real world.
I would actually hope that the throttel curve comming out of my RX to the APM is whats going to the ESC's, I'm fairly certain that it should be the same.
Cheers
Should have read first then posted later :)...
I agree that the calibration above should be about the same outcome as in the video, but instead of using your transmitters throttle, its being set by APM code. you could try calibrating them by bypassing APM, using a 4-way Y cable on throttle signal from RX to the 4 motor esc's. and see if they all run at the same rpm through your transmitters directly. it would certianly eliminate alot of possibilities and narrow your issue down to a few components.
Have you tried to calibrate each ESC seperatley? That is recommended in the Arducopter manual. Here is the link to that page:
http://code.google.com/p/arducopter/wiki/Quad_ESC
In multiple esc environments, Its been suggested to sync the throttle range on the esc's. I dont know about the ones your using, but this may be the issue. here is a short video I recall watching they did on syncing two speed controllers on a multi motor edf jet
Throttle Calibration Video for the Su-34 Fullback.
-
1
-
2
of 2 Next