Zelf software schrijven voor KK-board?

Ik vroeg me af of het mogelijk was om zelf firmware/software te maken voor de KK-board? Ik zie namelijk wel het 1 en ander aan firmware voorbij komen op rcgroups.

Ik wil namelijk deze board gebruiken voor vliegtuigen, echter zijn de meeste vliegtuigen die ik bouw rijk aan mixers:rolleyes:... Met gewone V-tailmixers en gyro's zijn de mogelijkheden beperkt. Weten jullie meer over de programmeertaal en hoe ik moet beginnen hier aan?
Ik heb maar een klein beetje ervaring met programmeren ((Visual) Basic, Pascal en mijn grafische rekenmachine kan ik wat dingetjes mee. Java heb ik ook gehad op school, maar daar snap ik niks meer van:rolleyes:). Ik zat te denken om in iedergeval firmware te schrijven voor vliegende vleugels, 2 tot 4 servo's. Ik wil in eerste instantie de bestaande aircraft firmware aanpassen, zo dat ik een beetje door krijg hoe het werkt.
Het lijkt me leuk om mijn eigen programmeer werk de lucht in te sturen, weer eens wat anders dan depron zelfbouw:).
Misschien zijn er betere alternatieven, beperkt budget in acht houdend:|.
 
MultiWii heeft ook zo zijn voordelen. Echter ga ik eerst proberen met KK-board, lekker goedkoop, en veel mensen gebruik dit. Daarnaast vlieg ik mn tricopter er mee en heb ik me daar meer in verdiept dan MultiWii. Alleen 3 gyro's moeten genoeg zijn voor een vliegtuig.

Bedankt voor de links :), ik kon het niet zo snel vinden op Google. Ik heb toevallig eerder vandaag de neXtcopter software(NeXtcopter open-source release for KK boards - RC Groups in de bijlage van eerste post) bekeken, ziet er te begrijpen uit. Ik denk dat dit een mooie basis is?

Hier een stukje uit FC_main.c, gewoon geopend met notepad:). Ik moet er inderdaad nog maar even voor gaan zitten:rolleyes:.
I_term_Pitch = I_term_Pitch >> 3; // Divide by 8, so max effective gain is 16
currentGyroError[PITCH] = gyroADC[PITCH]; // D-term. No multiplier for now. Experimental
DifferentialGyro = currentGyroError[PITCH] - lastGyroError[PITCH];
lastGyroError[PITCH] = currentGyroError[PITCH];

Pitch = Pitch + I_term_Pitch + DifferentialGyro; // P + I + D
Pitch = Pitch >> 7; // Divide by 128 to rescale values back to normal
//--- (Add)Adjust pitch gyro output to motors
#ifdef QUAD_COPTER
MotorOut1 += Pitch;
MotorOut4 -= Pitch;
#elif defined(QUAD_X_COPTER)
Pitch = (Pitch >> 1);
MotorOut1 += Pitch;
MotorOut2 += Pitch;
MotorOut3 -= Pitch;
MotorOut4 -= Pitch;
#else
#error No Copter configuration defined !!!!
#endif
//***********************************************************************
// --- Calculate yaw gyro output ---
// NB: IF YOU CHANGE THIS CODE, YOU MUST REMOVE PROPS BEFORE TESTING !!!
//***********************************************************************
if ((RxInYaw < DEAD_BAND) && (RxInYaw > -DEAD_BAND)) RxInYaw = 0; // Reduce RxIn noise into the I-term
RxInYaw = RxInYaw >> YawStickScale; // Reduce RxInYaw rate per flying mode
YawGyro = gyroADC[YAW];
Yaw = RxInYaw + YawGyro;
IntegralYaw += Yaw; // I-term (32-bit)
if (IntegralYaw > ITERM_LIMIT) IntegralYaw = ITERM_LIMIT;
else if (IntegralYaw < -ITERM_LIMIT) IntegralYaw = -ITERM_LIMIT;// Anti wind-up (Experiment with value)
Yaw *= GainIn[YAW]; // Multiply P-term (Max gain of 128 x 3)
Yaw *= 3;
I_term_Yaw = IntegralYaw * YAW_ITERM; // Multiply IntegralPitch by fixed amount
I_term_Yaw = I_term_Yaw >> 3; // Divide by 128, so max effective gain is 1
currentGyroError[YAW] = gyroADC[YAW]; // D-term. No multiplier for now. Experimental
DifferentialGyro = currentGyroError[YAW] - lastGyroError[YAW];
lastGyroError[YAW] = currentGyroError[YAW];

Yaw = Yaw + I_term_Yaw + DifferentialGyro;// P + I + D
Yaw = Yaw >> 7; // Divide by 128 to rescale values back to normal
// P=2.7, I=0.0047, D=0.0078
if (Yaw > YAW_LIMIT) Yaw = YAW_LIMIT;
else if (Yaw < -YAW_LIMIT) Yaw = -YAW_LIMIT; // Apply YAW limit to PID calculation
//--- (Add)Adjust yaw gyro output to motors
#ifdef QUAD_COPTER
MotorOut1 -= Yaw;
MotorOut2 += Yaw;
MotorOut3 += Yaw;
MotorOut4 -= Yaw;
#elif defined(QUAD_X_COPTER)
MotorOut1 -= Yaw;
MotorOut2 += Yaw;
MotorOut3 -= Yaw;
MotorOut4 += Yaw;
#else
#error No Copter configuration defined !!!!
#endif
//--- Limit the lowest value to avoid stopping of motor if motor value is under-saturated ---
if ( MotorOut1 < MOTOR_IDLE ) MotorOut1 = MOTOR_IDLE;
if ( MotorOut2 < MOTOR_IDLE ) MotorOut2 = MOTOR_IDLE;
if ( MotorOut3 < MOTOR_IDLE ) MotorOut3 = MOTOR_IDLE;
if ( MotorOut4 < MOTOR_IDLE ) MotorOut4 = MOTOR_IDLE;

//--- Output to motor ESC's ---
if (RxInCollective < 1 || !Armed || !GyroCalibrated) // Turn off motors if collective below 1%
{ // or if gyros not calibrated
MotorOut1 = 0;
MotorOut2 = 0;
MotorOut3 = 0;
MotorOut4 = 0;
}
if (Armed) output_motor_ppm(); // Output ESC signal
}
}
 
Zo te lezen gebruiken ze geen bootloader, als je een programmer wilt hebben dan heb ik er nog wel een liggen die je tegen porto kosten kunt hebben.
 
Ik weet niet precies wat bootloader in deze context betekend? Het in ieder geval ghet laatste stukje van een heel lang bestand, en er zijn meerdere bestanden.

Dat is heel mooi, maar ik heb al een programmer via ebay. Al is het geen slechte deal:).

Ik ga binnenkort een boardje bestellen bij Hobbyking, met de Atmega 168PA natuurlijk. Dan kan ik gewoon blijven vliegen met mijn tri-copter:)
 
Back
Top