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
Motors.h@1:e08a4f517989, 2013-08-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |