Rev 976 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 976 | Rev 977 | ||
---|---|---|---|
Line 87... | Line 87... | ||
87 | int GierGyroFehler = 0; |
87 | int GierGyroFehler = 0; |
88 | float GyroFaktor; |
88 | float GyroFaktor; |
89 | float IntegralFaktor; |
89 | float IntegralFaktor; |
90 | volatile int DiffNick,DiffRoll; |
90 | volatile int DiffNick,DiffRoll; |
91 | int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
91 | int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
- | 92 | #ifdef HEXAKOPTER |
|
- | 93 | volatile unsigned char Motor_VorneLinks,Motor_VorneRechts,Motor_HintenLinks,Motor_HintenRechts,Motor_Rechts,Motor_Links, Count; |
|
- | 94 | #else |
|
92 | volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
95 | volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
- | 96 | #endif |
|
93 | volatile unsigned char SenderOkay = 0; |
97 | volatile unsigned char SenderOkay = 0; |
94 | int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
98 | int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
95 | char MotorenEin = 0; |
99 | char MotorenEin = 0; |
96 | int HoehenWert = 0; |
100 | int HoehenWert = 0; |
97 | int SollHoehe = 0; |
101 | int SollHoehe = 0; |
Line 225... | Line 229... | ||
225 | MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier; |
229 | MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier; |
226 | MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
230 | MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
227 | MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
231 | MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
Line 228... | Line 232... | ||
228 | 232 | ||
229 | //DebugOut.Analog[26] = MesswertNick; |
233 | //DebugOut.Analog[26] = MesswertNick; |
Line 230... | Line 234... | ||
230 | DebugOut.Analog[28] = MesswertRoll; |
234 | //DebugOut.Analog[28] = MesswertRoll; |
231 | 235 | ||
232 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
236 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
233 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
237 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
Line 374... | Line 378... | ||
374 | void SendMotorData(void) |
378 | void SendMotorData(void) |
375 | //############################################################################ |
379 | //############################################################################ |
376 | { |
380 | { |
377 | if(!MotorenEin) |
381 | if(!MotorenEin) |
378 | { |
382 | { |
- | 383 | #ifdef HEXAKOPTER |
|
- | 384 | Motor_HintenLinks = 0; |
|
- | 385 | Motor_HintenRechts = 0; |
|
- | 386 | Motor_VorneLinks = 0; |
|
- | 387 | Motor_VorneRechts = 0; |
|
- | 388 | Motor_Rechts = 0; |
|
- | 389 | Motor_Links = 0; |
|
- | 390 | if(MotorTest[0]) Motor_VorneLinks = Motor_VorneRechts = MotorTest[0]; |
|
- | 391 | if(MotorTest[1]) Motor_HintenLinks = Motor_HintenRechts = MotorTest[1]; |
|
- | 392 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
|
- | 393 | if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
|
- | 394 | #else |
|
379 | Motor_Hinten = 0; |
395 | Motor_Hinten = 0; |
380 | Motor_Vorne = 0; |
396 | Motor_Vorne = 0; |
381 | Motor_Rechts = 0; |
397 | Motor_Rechts = 0; |
382 | Motor_Links = 0; |
398 | Motor_Links = 0; |
383 | if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
399 | if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
384 | if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
400 | if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
385 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
401 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
386 | if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
402 | if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
- | 403 | #endif |
|
387 | MikroKopterFlags &= ~(FLAG_MOTOR_RUN | FLAG_FLY); |
404 | MikroKopterFlags &= ~(FLAG_MOTOR_RUN | FLAG_FLY); |
388 | } else MikroKopterFlags |= FLAG_MOTOR_RUN; |
405 | } else MikroKopterFlags |= FLAG_MOTOR_RUN; |
Line -... | Line 406... | ||
- | 406 | ||
- | 407 | #ifdef HEXAKOPTER |
|
- | 408 | DebugOut.Analog[10] = Motor_VorneLinks; |
|
- | 409 | DebugOut.Analog[11] = Motor_VorneRechts; |
|
- | 410 | DebugOut.Analog[12] = Motor_HintenLinks; |
|
- | 411 | DebugOut.Analog[13] = Motor_HintenRechts; |
|
- | 412 | DebugOut.Analog[14] = Motor_Links; |
|
- | 413 | DebugOut.Analog[15] = Motor_Rechts; |
|
389 | 414 | #else |
|
390 | DebugOut.Analog[12] = Motor_Vorne; |
415 | DebugOut.Analog[12] = Motor_Vorne; |
391 | DebugOut.Analog[13] = Motor_Hinten; |
416 | DebugOut.Analog[13] = Motor_Hinten; |
392 | DebugOut.Analog[14] = Motor_Links; |
417 | DebugOut.Analog[14] = Motor_Links; |
393 | DebugOut.Analog[15] = Motor_Rechts; |
418 | DebugOut.Analog[15] = Motor_Rechts; |
394 | 419 | #endif |
|
395 | //Start I2C Interrupt Mode |
420 | //Start I2C Interrupt Mode |
396 | twi_state = 0; |
421 | twi_state = 0; |
397 | motor = 0; |
422 | motor = 0; |
398 | i2c_start(); |
423 | i2c_start(); |
Line 452... | Line 477... | ||
452 | void MotorRegler(void) |
477 | void MotorRegler(void) |
453 | //############################################################################ |
478 | //############################################################################ |
454 | { |
479 | { |
455 | int motorwert,pd_ergebnis,h,tmp_int; |
480 | int motorwert,pd_ergebnis,h,tmp_int; |
456 | int GierMischanteil,GasMischanteil; |
481 | int GierMischanteil,GasMischanteil; |
- | 482 | int NickMischanteil, RollMischanteil; |
|
457 | static long SummeNick=0,SummeRoll=0; |
483 | static long SummeNick=0,SummeRoll=0; |
458 | static long sollGier = 0,tmp_long,tmp_long2; |
484 | static long sollGier = 0,tmp_long,tmp_long2; |
459 | static long IntegralFehlerNick = 0; |
485 | static long IntegralFehlerNick = 0; |
460 | static long IntegralFehlerRoll = 0; |
486 | static long IntegralFehlerRoll = 0; |
461 | static unsigned int RcLostTimer; |
487 | static unsigned int RcLostTimer; |
Line 1084... | Line 1110... | ||
1084 | DebugOut.Analog[4] = MesswertGier; |
1110 | DebugOut.Analog[4] = MesswertGier; |
1085 | DebugOut.Analog[5] = HoehenWert; |
1111 | DebugOut.Analog[5] = HoehenWert; |
1086 | DebugOut.Analog[6] = (Mess_Integral_Hoch / 512); |
1112 | DebugOut.Analog[6] = (Mess_Integral_Hoch / 512); |
1087 | DebugOut.Analog[8] = KompassValue; |
1113 | DebugOut.Analog[8] = KompassValue; |
1088 | DebugOut.Analog[9] = UBat; |
1114 | DebugOut.Analog[9] = UBat; |
1089 | DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR; |
1115 | DebugOut.Analog[28] = ErsatzKompass / GIER_GRAD_FAKTOR; |
1090 | DebugOut.Analog[10] = SenderOkay; |
1116 | DebugOut.Analog[29] = SenderOkay; |
- | 1117 | ||
1091 | //DebugOut.Analog[16] = Mittelwert_AccHoch; |
1118 | //DebugOut.Analog[16] = Mittelwert_AccHoch; |
1092 | // DebugOut.Analog[17] = FromNaviCtrl_Value.Distance; |
1119 | // DebugOut.Analog[17] = FromNaviCtrl_Value.Distance; |
1093 | // DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar; |
1120 | // DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar; |
1094 | DebugOut.Analog[19] = WinkelOut.CalcState; |
1121 | DebugOut.Analog[19] = WinkelOut.CalcState; |
1095 | DebugOut.Analog[20] = ServoValue; |
1122 | DebugOut.Analog[20] = ServoValue; |
Line 1229... | Line 1256... | ||
1229 | if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - StickNick; // I-Anteil bei Winkelregelung |
1256 | if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - StickNick; // I-Anteil bei Winkelregelung |
1230 | else SummeNick += DiffNick; // I-Anteil bei HH |
1257 | else SummeNick += DiffNick; // I-Anteil bei HH |
1231 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1258 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1232 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1259 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1233 | pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick |
1260 | pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick |
1234 | // Motor Vorn |
- | |
- | 1261 | ||
1235 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1262 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1236 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1263 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1237 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
1264 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
Line 1238... | Line -... | ||
1238 | - | ||
1239 | motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
- | |
1240 | motorwert /= STICK_GAIN; |
- | |
1241 | if ((motorwert < 0)) motorwert = 0; |
- | |
1242 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1243 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1244 | Motor_Vorne = motorwert; |
- | |
1245 | // Motor Heck |
1265 | |
1246 | motorwert = GasMischanteil - pd_ergebnis + GierMischanteil; |
- | |
1247 | motorwert /= STICK_GAIN; |
- | |
1248 | if ((motorwert < 0)) motorwert = 0; |
- | |
1249 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1250 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
- | 1266 | NickMischanteil = (pd_ergebnis*4) / 7; |
|
1251 | Motor_Hinten = motorwert; |
1267 | |
1252 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1268 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1253 | // Roll-Achse |
1269 | // Roll-Achse |
1254 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1270 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1255 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
1271 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
Line 1258... | Line 1274... | ||
1258 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
1274 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
1259 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
1275 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
1260 | pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll |
1276 | pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll |
1261 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1277 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1262 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1278 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
1263 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
1279 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
- | 1280 | ||
- | 1281 | RollMischanteil = pd_ergebnis/3; |
|
- | 1282 | ||
- | 1283 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1284 | // Mischer für die Motorenanteile |
|
- | 1285 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1286 | ||
- | 1287 | ||
- | 1288 | #ifdef HEXAKOPTER |
|
- | 1289 | // Motor Vorn Links |
|
- | 1290 | motorwert = GasMischanteil + NickMischanteil + RollMischanteil/2 - GierMischanteil; // Mischer |
|
- | 1291 | motorwert /= STICK_GAIN; |
|
- | 1292 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1293 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1294 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1295 | Motor_VorneLinks = motorwert; |
|
- | 1296 | // Motor Vorn Rechts |
|
- | 1297 | motorwert = GasMischanteil + NickMischanteil - RollMischanteil/2 + GierMischanteil; |
|
- | 1298 | motorwert /= STICK_GAIN; |
|
- | 1299 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1300 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1301 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1302 | Motor_VorneRechts = motorwert; |
|
- | 1303 | // Motor Hinten Links |
|
- | 1304 | motorwert = GasMischanteil - NickMischanteil + RollMischanteil/2 - GierMischanteil; |
|
- | 1305 | motorwert /= STICK_GAIN; |
|
- | 1306 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1307 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1308 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1309 | Motor_HintenLinks = motorwert; |
|
- | 1310 | // Motor HintenRechts |
|
- | 1311 | motorwert = GasMischanteil - NickMischanteil - RollMischanteil/2 + GierMischanteil; |
|
- | 1312 | motorwert /= STICK_GAIN; |
|
- | 1313 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1314 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1315 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1316 | Motor_HintenRechts = motorwert; |
|
- | 1317 | // Motor Rechts |
|
- | 1318 | motorwert = GasMischanteil - RollMischanteil - GierMischanteil; |
|
- | 1319 | motorwert /= STICK_GAIN; |
|
- | 1320 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1321 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1322 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1323 | Motor_Rechts = motorwert; |
|
1264 | // Motor Links |
1324 | // Motor Links |
- | 1325 | motorwert = GasMischanteil + RollMischanteil + GierMischanteil; |
|
- | 1326 | motorwert /= STICK_GAIN; |
|
- | 1327 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1328 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1329 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1330 | Motor_Links = motorwert; |
|
- | 1331 | #else |
|
- | 1332 | // Motor Vorn |
|
- | 1333 | motorwert = GasMischanteil + NickMischanteil + GierMischanteil; // Mischer |
|
- | 1334 | motorwert /= STICK_GAIN; |
|
- | 1335 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1336 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1337 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1338 | Motor_Vorne = motorwert; |
|
- | 1339 | // Motor Heck |
|
- | 1340 | motorwert = GasMischanteil - NickMischanteil + GierMischanteil; |
|
- | 1341 | motorwert /= STICK_GAIN; |
|
- | 1342 | if ((motorwert < 0)) motorwert = 0; |
|
- | 1343 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
|
- | 1344 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
|
- | 1345 | Motor_Hinten = motorwert; |
|
- | 1346 | // Motor Links |
|
1265 | motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
1347 | motorwert = GasMischanteil + RollMischanteil - GierMischanteil; |
1266 | motorwert /= STICK_GAIN; |
1348 | motorwert /= STICK_GAIN; |
1267 | if ((motorwert < 0)) motorwert = 0; |
1349 | if ((motorwert < 0)) motorwert = 0; |
1268 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1350 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1269 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1351 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1270 | Motor_Links = motorwert; |
1352 | Motor_Links = motorwert; |
1271 | // Motor Rechts |
1353 | // Motor Rechts |
1272 | motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
1354 | motorwert = GasMischanteil - RollMischanteil - GierMischanteil; |
1273 | motorwert /= STICK_GAIN; |
1355 | motorwert /= STICK_GAIN; |
1274 | if ((motorwert < 0)) motorwert = 0; |
1356 | if ((motorwert < 0)) motorwert = 0; |
1275 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1357 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1276 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1358 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1277 | Motor_Rechts = motorwert; |
1359 | Motor_Rechts = motorwert; |
1278 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
- | 1360 | #endif |
|
1279 | } |
1361 | } |