A quadcopter control Software (Still in development). achieved single axis stability!!!!! released for others benefit. if you'd like to help co-develop this code, then please let me know

Dependencies:   MovingAverageFilter MyI2C PID RC mbed-rtos mbed

Currently on hold, due to the fact that i don't own a RX/TX system

Committer:
KarimAzzouz
Date:
Tue Aug 27 09:38:49 2013 +0000
Revision:
1:e08a4f517989
Parent:
0:54b67cd15a5b
initial commit, achieved single axis stability

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KarimAzzouz 1:e08a4f517989 1 #define RefreshRate 2500 // in us :400Hz
KarimAzzouz 1:e08a4f517989 2
KarimAzzouz 1:e08a4f517989 3 static uint16 Constrain(uint16 a , uint16 b, uint16 c){
KarimAzzouz 0:54b67cd15a5b 4 if(a<b) return b;
KarimAzzouz 0:54b67cd15a5b 5 else if(a>c)return c;
KarimAzzouz 0:54b67cd15a5b 6 else return a;
KarimAzzouz 0:54b67cd15a5b 7 }
KarimAzzouz 1:e08a4f517989 8
KarimAzzouz 1:e08a4f517989 9 void CalibrateESC(void){
KarimAzzouz 1:e08a4f517989 10
KarimAzzouz 1:e08a4f517989 11 FrontMotor.period_us(RefreshRate); // setting one will by default set all other pins to the same period
KarimAzzouz 1:e08a4f517989 12
KarimAzzouz 1:e08a4f517989 13 /*FrontMotor.pulsewidth_us(2000);
KarimAzzouz 1:e08a4f517989 14 RearMotor.pulsewidth_us(2000);
KarimAzzouz 1:e08a4f517989 15 LeftMotor.pulsewidth_us(2000);
KarimAzzouz 1:e08a4f517989 16 RightMotor.pulsewidth_us(2000);
KarimAzzouz 1:e08a4f517989 17
KarimAzzouz 1:e08a4f517989 18 wait(2); still in testing phase */
KarimAzzouz 1:e08a4f517989 19
KarimAzzouz 0:54b67cd15a5b 20 FrontMotor.pulsewidth_us(1000);
KarimAzzouz 0:54b67cd15a5b 21 RearMotor.pulsewidth_us(1000);
KarimAzzouz 0:54b67cd15a5b 22 LeftMotor.pulsewidth_us(1000);
KarimAzzouz 0:54b67cd15a5b 23 RightMotor.pulsewidth_us(1000);
KarimAzzouz 0:54b67cd15a5b 24
KarimAzzouz 1:e08a4f517989 25 wait(2);
KarimAzzouz 1:e08a4f517989 26 }
KarimAzzouz 1:e08a4f517989 27
KarimAzzouz 1:e08a4f517989 28 void updateMotors(int16 PitchCommand,int16 RollCommand){
KarimAzzouz 0:54b67cd15a5b 29
KarimAzzouz 1:e08a4f517989 30 if(Throttle>=1200){
KarimAzzouz 1:e08a4f517989 31
KarimAzzouz 1:e08a4f517989 32 Mspeed[0] = Constrain((Throttle+PitchCommand),1200,2000);
KarimAzzouz 1:e08a4f517989 33 Mspeed[1] = Constrain((Throttle-PitchCommand),1200,2000);
KarimAzzouz 1:e08a4f517989 34 Mspeed[2] = Constrain((Throttle+RollCommand),1200,2000);
KarimAzzouz 1:e08a4f517989 35 Mspeed[3] = Constrain((Throttle-RollCommand),1200,2000);
KarimAzzouz 1:e08a4f517989 36 }
KarimAzzouz 0:54b67cd15a5b 37
KarimAzzouz 1:e08a4f517989 38 else{
KarimAzzouz 1:e08a4f517989 39 Mspeed[0] = 1000;
KarimAzzouz 1:e08a4f517989 40 Mspeed[1] = 1000;
KarimAzzouz 1:e08a4f517989 41 Mspeed[2] = 1000;
KarimAzzouz 1:e08a4f517989 42 Mspeed[3] = 1000;
KarimAzzouz 1:e08a4f517989 43 }
KarimAzzouz 0:54b67cd15a5b 44
KarimAzzouz 1:e08a4f517989 45 FrontMotor.pulsewidth_us(Mspeed[0]);
KarimAzzouz 1:e08a4f517989 46 RearMotor.pulsewidth_us(Mspeed[1]);
KarimAzzouz 1:e08a4f517989 47 LeftMotor.pulsewidth_us(Mspeed[2]);
KarimAzzouz 1:e08a4f517989 48 RightMotor.pulsewidth_us(Mspeed[3]);
KarimAzzouz 0:54b67cd15a5b 49 }