Rev 1155 | Rev 1167 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1155 | Rev 1166 | ||
---|---|---|---|
Line 56... | Line 56... | ||
56 | #include "eeprom.c" |
56 | #include "eeprom.c" |
Line 57... | Line 57... | ||
57 | 57 | ||
58 | unsigned char h,m,s; |
58 | unsigned char h,m,s; |
59 | volatile unsigned int I2CTimeout = 100; |
59 | volatile unsigned int I2CTimeout = 100; |
- | 60 | int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll; |
|
60 | int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll; |
61 | int TrimNick, TrimRoll; |
61 | int AdNeutralGierBias; |
62 | int AdNeutralGierBias; |
62 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
63 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
63 | int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
64 | int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
64 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
65 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
Line 87... | Line 88... | ||
87 | int GierGyroFehler = 0; |
88 | int GierGyroFehler = 0; |
88 | char GyroFaktor; |
89 | char GyroFaktor; |
89 | char IntegralFaktor; |
90 | char IntegralFaktor; |
90 | int DiffNick,DiffRoll; |
91 | int DiffNick,DiffRoll; |
91 | int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
92 | int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
92 | volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
93 | volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links; |
93 | volatile unsigned char Motor1, Motor2,Motor3,Motor4,Motor5,Motor6,Motor7,Motor8; |
94 | volatile unsigned char Motor1, Motor2,Motor3,Motor4,Motor5,Motor6,Motor7,Motor8; |
94 | volatile unsigned char SenderOkay = 0; |
95 | volatile unsigned char SenderOkay = 0; |
95 | int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
96 | int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
96 | char MotorenEin = 0; |
97 | char MotorenEin = 0; |
97 | int HoehenWert = 0; |
98 | int HoehenWert = 0; |
Line 148... | Line 149... | ||
148 | unsigned char MikroKopterFlags = 0; |
149 | unsigned char MikroKopterFlags = 0; |
149 | long GIER_GRAD_FAKTOR = 1291; |
150 | long GIER_GRAD_FAKTOR = 1291; |
150 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
151 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
Line -... | Line 152... | ||
- | 152 | ||
- | 153 | ||
- | 154 | int MotorSmoothing(int neu, int alt) |
|
- | 155 | { |
|
- | 156 | int motor; |
|
- | 157 | if(neu > alt) motor = (1*(int)alt + neu) / 2; |
|
- | 158 | else motor = neu - (alt - neu)*1; |
|
- | 159 | //if(Poti2 < 20) return(neu); |
|
- | 160 | return(motor); |
|
- | 161 | } |
|
151 | 162 | ||
152 | 163 | ||
153 | void Piep(unsigned char Anzahl) |
164 | void Piep(unsigned char Anzahl) |
154 | { |
165 | { |
155 | while(Anzahl--) |
166 | while(Anzahl--) |
Line 182... | Line 193... | ||
182 | CalibrierMittelwert(); |
193 | CalibrierMittelwert(); |
183 | if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
194 | if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
184 | { |
195 | { |
185 | if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
196 | if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
186 | } |
197 | } |
- | 198 | #define NEUTRAL_FILTER 32 |
|
187 | for(i=0; i<32; i++) |
199 | for(i=0; i<NEUTRAL_FILTER; i++) |
188 | { |
200 | { |
189 | Delay_ms_Mess(10); |
201 | Delay_ms_Mess(10); |
190 | gier_neutral += AdWertGier; |
202 | gier_neutral += AdWertGier; |
191 | nick_neutral += MesswertNick; |
203 | nick_neutral += AdWertNick; |
192 | roll_neutral += MesswertRoll; |
204 | roll_neutral += AdWertRoll; |
193 | } |
205 | } |
194 | AdNeutralNick= nick_neutral / 32; |
206 | AdNeutralNick= nick_neutral / NEUTRAL_FILTER; |
195 | AdNeutralRoll= roll_neutral / 32; |
207 | AdNeutralRoll= roll_neutral / NEUTRAL_FILTER; |
196 | AdNeutralGier= gier_neutral / 32; |
208 | AdNeutralGier= gier_neutral / NEUTRAL_FILTER; |
197 | AdNeutralGierBias = AdNeutralGier; |
209 | AdNeutralGierBias = AdNeutralGier; |
198 | StartNeutralRoll = AdNeutralRoll; |
210 | StartNeutralRoll = AdNeutralRoll; |
199 | StartNeutralNick = AdNeutralNick; |
211 | StartNeutralNick = AdNeutralNick; |
200 | if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
212 | if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
201 | { |
213 | { |
202 | NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
214 | NeutralAccY = abs(Mittelwert_AccRoll) / (4*ACC_AMPLIFY); |
203 | NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
215 | NeutralAccX = abs(Mittelwert_AccNick) / (4*ACC_AMPLIFY); |
204 | NeutralAccZ = Aktuell_az; |
216 | NeutralAccZ = Aktuell_az; |
205 | } |
217 | } |
206 | else |
218 | else |
207 | { |
219 | { |
208 | NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]); |
220 | NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]); |
Line 247... | Line 259... | ||
247 | static signed int oldNick, oldRoll, d2Roll, d2Nick; |
259 | static signed int oldNick, oldRoll, d2Roll, d2Nick; |
248 | signed int tmp_int; |
260 | signed int tmp_int; |
249 | signed long winkel_nick, winkel_roll; |
261 | signed long winkel_nick, winkel_roll; |
250 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
262 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
251 | // MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier; |
263 | // MesswertGierBias = (signed int) AdNeutralGierBias - AdWertGier; |
252 | MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
264 | MesswertNick = (signed int) AdWertNickFilter / 20; |
253 | MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
265 | MesswertRoll = (signed int) AdWertRollFilter / 20; |
254 | RohMesswertNick = MesswertNick; |
266 | RohMesswertNick = MesswertNick; |
255 | RohMesswertRoll = MesswertRoll; |
267 | RohMesswertRoll = MesswertRoll; |
256 | //DebugOut.Analog[21] = MesswertNick; |
268 | //DebugOut.Analog[21] = MesswertNick; |
257 | //DebugOut.Analog[22] = MesswertRoll; |
269 | //DebugOut.Analog[22] = MesswertRoll; |
258 | //DebugOut.Analog[22] = Mess_Integral_Gier; |
270 | //DebugOut.Analog[22] = Mess_Integral_Gier; |
Line -... | Line 271... | ||
- | 271 | ||
- | 272 | //DebugOut.Analog[21] = MesswertNick; |
|
- | 273 | //DebugOut.Analog[22] = MesswertRoll; |
|
259 | 274 | ||
260 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
275 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
261 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
276 | Mittelwert_AccNick = ((long)Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 4L; |
262 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
277 | Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 4L; |
263 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
278 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 3 + ((long)AdWertAccHoch)) / 4L; |
264 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
279 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
265 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
280 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
266 | NaviAccNick += AdWertAccNick; |
281 | NaviAccNick += AdWertAccNick; |
267 | NaviAccRoll += AdWertAccRoll; |
282 | NaviAccRoll += AdWertAccRoll; |
268 | NaviCntAcc++; |
283 | NaviCntAcc++; |
Line 269... | Line -... | ||
269 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
- | |
270 | - | ||
271 | if(abs(Mittelwert_AccRoll > 50)) { DebugOut.Analog[16]++; DebugOut.Analog[17] = Mittelwert_AccRoll;}; |
284 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
272 | 285 | ||
273 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
286 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
274 | // ADC einschalten |
287 | // ADC einschalten |
275 | AdReady = 0; |
288 | AdReady = 0; |
Line 299... | Line 312... | ||
299 | tmpl4 /= 4096L; |
312 | tmpl4 /= 4096L; |
300 | KopplungsteilNickRoll = tmpl3; |
313 | KopplungsteilNickRoll = tmpl3; |
301 | KopplungsteilRollNick = tmpl4; |
314 | KopplungsteilRollNick = tmpl4; |
302 | tmpl4 -= tmpl3; |
315 | tmpl4 -= tmpl3; |
303 | ErsatzKompass += tmpl4; |
316 | ErsatzKompass += tmpl4; |
- | 317 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
|
Line 304... | Line 318... | ||
304 | 318 | ||
305 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
319 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
306 | tmpl *= Parameter_AchsKopplung1; // 90 |
320 | tmpl *= Parameter_AchsKopplung1; // 90 |
307 | tmpl /= 4096L; |
321 | tmpl /= 4096L; |
308 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
322 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
309 | tmpl2 *= Parameter_AchsKopplung1; |
323 | tmpl2 *= Parameter_AchsKopplung1; |
310 | tmpl2 /= 4096L; |
324 | tmpl2 /= 4096L; |
311 | if(labs(tmpl) > 128 || labs(tmpl2) > 128 /* || abs(KopplungsteilNickRoll) > 128 || abs(KopplungsteilRollNick) > 128)*/) TrichterFlug = 1; |
325 | if(labs(tmpl) > 128 || labs(tmpl2) > 128 /* || abs(KopplungsteilNickRoll) > 128 || abs(KopplungsteilRollNick) > 128)*/) TrichterFlug = 1; |
312 | //MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256; |
- | |
313 | DebugOut.Analog[21] = KopplungsteilNickRoll; |
- | |
314 | DebugOut.Analog[22] = KopplungsteilRollNick; |
326 | //MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256; |
- | 327 | } |
|
- | 328 | else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0; |
|
315 | } |
329 | |
- | 330 | TrimRoll = tmpl - tmpl2 / 100L; |
|
Line 316... | Line 331... | ||
316 | else tmpl = tmpl2 = 0; |
331 | TrimNick = -tmpl2 + tmpl / 100L; |
317 | 332 | ||
318 | // Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++ |
333 | // Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++ |
319 | if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag |
334 | if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag |
320 | if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR; |
335 | if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR; |
321 | // Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
336 | // Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
322 | MesswertRoll += tmpl; |
337 | // MesswertRoll += tmpl; |
323 | MesswertRoll += tmpl2 / 100L; // War: *5/512 |
338 | // MesswertRoll += tmpl2 / 100L; // War: *5/512 |
324 | // MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109 |
339 | // MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109 |
Line 325... | Line 340... | ||
325 | Mess_IntegralRoll2 += MesswertRoll; |
340 | Mess_IntegralRoll2 += MesswertRoll + TrimRoll; |
326 | Mess_IntegralRoll += MesswertRoll - LageKorrekturRoll; |
341 | Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll; |
327 | 342 | ||
328 | if(Mess_IntegralRoll > Umschlag180Roll) |
343 | if(Mess_IntegralRoll > Umschlag180Roll) |
Line 346... | Line 361... | ||
346 | { |
361 | { |
347 | if(AdWertRoll > 2000) MesswertRoll = +1000; |
362 | if(AdWertRoll > 2000) MesswertRoll = +1000; |
348 | if(AdWertRoll > 2015) MesswertRoll = +2000; |
363 | if(AdWertRoll > 2015) MesswertRoll = +2000; |
349 | } |
364 | } |
350 | // Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
365 | // Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
351 | MesswertNick -= tmpl2; |
366 | // MesswertNick -= tmpl2; |
352 | // MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L; |
367 | // MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L; |
353 | MesswertNick -= tmpl / 100L; //109 |
368 | // MesswertNick -= tmpl / 100L; //109 |
354 | Mess_IntegralNick2 += MesswertNick; |
369 | Mess_IntegralNick2 += MesswertNick + TrimNick; |
355 | Mess_IntegralNick += MesswertNick - LageKorrekturNick; |
370 | Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick; |
Line 356... | Line 371... | ||
356 | 371 | ||
357 | if(Mess_IntegralNick > Umschlag180Nick) |
372 | if(Mess_IntegralNick > Umschlag180Nick) |
358 | { |
373 | { |
359 | Mess_IntegralNick = -(Umschlag180Nick - 25000L); |
374 | Mess_IntegralNick = -(Umschlag180Nick - 25000L); |
Line 380... | Line 395... | ||
380 | Integral_Gier = Mess_Integral_Gier; |
395 | Integral_Gier = Mess_Integral_Gier; |
381 | IntegralNick = Mess_IntegralNick; |
396 | IntegralNick = Mess_IntegralNick; |
382 | IntegralRoll = Mess_IntegralRoll; |
397 | IntegralRoll = Mess_IntegralRoll; |
383 | IntegralNick2 = Mess_IntegralNick2; |
398 | IntegralNick2 = Mess_IntegralNick2; |
384 | IntegralRoll2 = Mess_IntegralRoll2; |
399 | IntegralRoll2 = Mess_IntegralRoll2; |
385 | MesswertNick = (RohMesswertNick + 2 * MesswertNick) / 3; |
400 | // MesswertNick = (RohMesswertNick + 2 * MesswertNick) / 3; |
386 | MesswertRoll = (RohMesswertRoll + 2 * MesswertRoll) / 3; |
401 | // MesswertRoll = (RohMesswertRoll + 2 * MesswertRoll) / 3; |
- | 402 | ||
- | 403 | #define D_LIMIT 128 |
|
- | 404 | ||
- | 405 | MesswertNick = HiResNick / 20; |
|
- | 406 | MesswertRoll = HiResRoll / 20; |
|
Line 387... | Line -... | ||
387 | - | ||
388 | #define D_LIMIT 8 |
407 | |
389 | if(Parameter_Gyro_D) |
408 | if(Parameter_Gyro_D) |
390 | { |
409 | { |
391 | d2Nick = (((MesswertNick - oldNick))); |
410 | d2Nick = HiResNick - oldNick; |
392 | oldNick = MesswertNick; |
411 | oldNick = (oldNick + HiResNick)/2; |
393 | if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
412 | if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
394 | else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
413 | else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
395 | MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D); |
- | |
396 | 414 | MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
|
397 | d2Roll = (((MesswertRoll - oldRoll))); |
415 | d2Roll = HiResRoll - oldRoll; |
398 | oldRoll = MesswertRoll; |
416 | oldRoll = (oldRoll + HiResRoll)/2; |
399 | if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
417 | if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
400 | else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
418 | else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
- | 419 | MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
|
- | 420 | HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
|
401 | MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
421 | HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
Line 402... | Line 422... | ||
402 | } |
422 | } |
403 | 423 | ||
404 | if(RohMesswertRoll > 0) MesswertRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
424 | if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
405 | else MesswertRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
425 | else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
Line 406... | Line 426... | ||
406 | if(RohMesswertNick > 0) MesswertNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
426 | if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
407 | else MesswertNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
427 | else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
408 | 428 | ||
409 | if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
429 | if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
Line 458... | Line 478... | ||
458 | void SendMotorData(void) |
478 | void SendMotorData(void) |
459 | //############################################################################ |
479 | //############################################################################ |
460 | { |
480 | { |
461 | if(!MotorenEin) |
481 | if(!MotorenEin) |
462 | { |
482 | { |
463 | #ifdef OCTO |
483 | #ifndef QUADRO |
464 | Motor1 = 0;Motor2 = 0;Motor3 = 0;Motor4 = 0;Motor5 = 0;Motor6 = 0;Motor7 = 0;Motor8 = 0; |
484 | Motor1 = 0;Motor2 = 0;Motor3 = 0;Motor4 = 0;Motor5 = 0;Motor6 = 0;Motor7 = 0;Motor8 = 0; |
465 | if(MotorTest[0]) {Motor1 = MotorTest[0]; Motor2 = MotorTest[0];} |
485 | if(MotorTest[0]) {Motor1 = MotorTest[0]; Motor2 = MotorTest[0];} |
466 | if(MotorTest[3]) {Motor3 = MotorTest[3]; Motor4 = MotorTest[3];} |
486 | if(MotorTest[3]) {Motor3 = MotorTest[3]; Motor4 = MotorTest[3];} |
467 | if(MotorTest[1]) {Motor5 = MotorTest[1]; Motor6 = MotorTest[1];} |
487 | if(MotorTest[1]) {Motor5 = MotorTest[1]; Motor6 = MotorTest[1];} |
468 | if(MotorTest[2]) {Motor7 = MotorTest[2]; Motor8 = MotorTest[2];} |
488 | if(MotorTest[2]) {Motor7 = MotorTest[2]; Motor8 = MotorTest[2];} |
Line 558... | Line 578... | ||
558 | static long IntegralFehlerRoll = 0; |
578 | static long IntegralFehlerRoll = 0; |
559 | static unsigned int RcLostTimer; |
579 | static unsigned int RcLostTimer; |
560 | static unsigned char delay_neutral = 0; |
580 | static unsigned char delay_neutral = 0; |
561 | static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
581 | static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
562 | static int hoehenregler = 0; |
582 | static int hoehenregler = 0; |
- | 583 | static int motorwert1,motorwert2,motorwert3,motorwert4,motorwert5,motorwert6,motorwert7,motorwert8; |
|
563 | static char TimerWerteausgabe = 0; |
584 | static char TimerWerteausgabe = 0; |
564 | static char NeueKompassRichtungMerken = 0; |
585 | static char NeueKompassRichtungMerken = 0; |
565 | static long ausgleichNick, ausgleichRoll; |
586 | static long ausgleichNick, ausgleichRoll; |
566 | int IntegralNickMalFaktor,IntegralRollMalFaktor; |
587 | int IntegralNickMalFaktor,IntegralRollMalFaktor; |
567 | Mittelwert(); |
588 | Mittelwert(); |
Line 929... | Line 950... | ||
929 | { |
950 | { |
930 | tmp_long /= 3; |
951 | tmp_long /= 3; |
931 | tmp_long2 /= 3; |
952 | tmp_long2 /= 3; |
932 | } |
953 | } |
Line -... | Line 954... | ||
- | 954 | ||
933 | 955 | ||
934 | #define AUSGLEICH 32 |
956 | #define AUSGLEICH 32 |
935 | if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
957 | if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
936 | if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
958 | if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
937 | if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
959 | if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
938 | if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
960 | if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
- | 961 | } |
|
- | 962 | ||
939 | } |
963 | //if(Poti2 > 20) { tmp_long = 0; tmp_long2 = 0;} |
940 | Mess_IntegralNick -= tmp_long; |
964 | Mess_IntegralNick -= tmp_long; |
941 | Mess_IntegralRoll -= tmp_long2; |
965 | Mess_IntegralRoll -= tmp_long2; |
942 | } |
966 | } |
943 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
967 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1206... | Line 1230... | ||
1206 | DebugOut.Analog[20] = ServoValue; |
1230 | DebugOut.Analog[20] = ServoValue; |
1207 | DebugOut.Analog[24] = MesswertNick/2; |
1231 | DebugOut.Analog[24] = MesswertNick/2; |
1208 | DebugOut.Analog[25] = MesswertRoll/2; |
1232 | DebugOut.Analog[25] = MesswertRoll/2; |
1209 | DebugOut.Analog[27] = (int)FromNaviCtrl_Value.Kalman_MaxDrift; |
1233 | DebugOut.Analog[27] = (int)FromNaviCtrl_Value.Kalman_MaxDrift; |
1210 | DebugOut.Analog[29] = (int)FromNaviCtrl_Value.Kalman_K; |
1234 | DebugOut.Analog[29] = (int)FromNaviCtrl_Value.Kalman_K; |
1211 | DebugOut.Analog[30] = GPS_Nick; |
1235 | DebugOut.Analog[30] = GPS_Nick; |
1212 | DebugOut.Analog[31] = GPS_Roll; |
1236 | DebugOut.Analog[31] = GPS_Roll; |
Line 1213... | Line 1237... | ||
1213 | 1237 | ||
1214 | 1238 | ||
Line 1245... | Line 1269... | ||
1245 | if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;}; |
1269 | if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;}; |
Line 1246... | Line 1270... | ||
1246 | 1270 | ||
1247 | if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0; |
1271 | if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0; |
Line -... | Line 1272... | ||
- | 1272 | if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0; |
|
1248 | if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0; |
1273 | |
1249 | 1274 | #define TRIM_MAX (Poti1 * 2) |
|
Line -... | Line 1275... | ||
- | 1275 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
|
- | 1276 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1277 | ||
- | 1278 | { |
|
- | 1279 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
|
1250 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN); |
1280 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1251 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN); |
1281 | } |
1252 | 1282 | ||
1253 | #ifdef OCTO |
1283 | #ifndef QUADRO |
1254 | MesswertGier = (long)(MesswertGier * 4 * (long)GyroFaktor) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktor) / (4 * (44000 / STICK_GAIN)); |
1284 | MesswertGier = (long)(MesswertGier * 4 * (long)GyroFaktor) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktor) / (4 * (44000 / STICK_GAIN)); |
Line 1393... | Line 1423... | ||
1393 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
1423 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
1394 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1424 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1395 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1425 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1396 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
1426 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
Line 1397... | Line 1427... | ||
1397 | 1427 | ||
1398 | #ifndef OCTO |
1428 | #ifdef QUADRO |
1399 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1429 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1400 | // Quadro-Mischer |
1430 | // Quadro-Mischer |
1401 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1431 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1432 | motorwert = GasMischanteil + pd_ergebnis_nick + GierMischanteil; // Mischer |
|
1402 | motorwert = GasMischanteil + pd_ergebnis_nick + GierMischanteil; // Mischer |
1433 | motorwert1 = MotorSmoothing(motorwert,motorwert1); |
1403 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1434 | motorwert = motorwert1 / STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
Line 1404... | Line 1435... | ||
1404 | Motor_Vorne = motorwert; |
1435 | Motor_Vorne = motorwert; |
- | 1436 | ||
1405 | 1437 | motorwert = GasMischanteil - pd_ergebnis_nick + GierMischanteil; |
|
1406 | motorwert = GasMischanteil - pd_ergebnis_nick + GierMischanteil; |
1438 | motorwert2 = MotorSmoothing(motorwert,motorwert2); |
Line 1407... | Line 1439... | ||
1407 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1439 | motorwert = motorwert2 / STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
- | 1440 | Motor_Hinten = motorwert; |
|
1408 | Motor_Hinten = motorwert; |
1441 | |
1409 | 1442 | motorwert = GasMischanteil + pd_ergebnis_roll - GierMischanteil; |
|
Line 1410... | Line 1443... | ||
1410 | motorwert = GasMischanteil + pd_ergebnis_roll - GierMischanteil; |
1443 | motorwert3 = MotorSmoothing(motorwert,motorwert3); |
- | 1444 | motorwert = motorwert3 / STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
1411 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1445 | Motor_Links = motorwert; |
1412 | Motor_Links = motorwert; |
1446 | |
1413 | 1447 | motorwert = GasMischanteil - pd_ergebnis_roll - GierMischanteil; |
|
1414 | motorwert = GasMischanteil - pd_ergebnis_roll - GierMischanteil; |
1448 | motorwert4 = MotorSmoothing(motorwert,motorwert4); |
1415 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1449 | motorwert = motorwert4 / STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1416 | Motor_Rechts = motorwert; |
1450 | Motor_Rechts = motorwert; |
1417 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1451 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1418 | 1452 | #endif |
|
1419 | #else |
1453 | #ifdef OCTO |
1420 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1454 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1451... | Line 1485... | ||
1451 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
1485 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
1452 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1486 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1453 | Motor8 = motorwert; |
1487 | Motor8 = motorwert; |
1454 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1488 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1455 | #endif |
1489 | #endif |
- | 1490 | #ifdef OCTO2 |
|
- | 1491 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1492 | // Octo-Mischer |
|
- | 1493 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1494 | motorwert = GasMischanteil + pd_ergebnis_nick + GierMischanteil; |
|
- | 1495 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1496 | Motor1 = motorwert; |
|
1456 | /* |
1497 | |
- | 1498 | motorwert = GasMischanteil + pd_ergebnis_nick - pd_ergebnis_roll - GierMischanteil; |
|
- | 1499 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1500 | Motor2 = motorwert; |
|
- | 1501 | ||
- | 1502 | motorwert = GasMischanteil + - pd_ergebnis_roll + GierMischanteil; |
|
- | 1503 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1504 | Motor3 = motorwert; |
|
- | 1505 | ||
- | 1506 | motorwert = GasMischanteil - pd_ergebnis_nick - pd_ergebnis_roll - GierMischanteil; |
|
- | 1507 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1508 | Motor4 = motorwert; |
|
- | 1509 | ||
- | 1510 | motorwert = GasMischanteil - pd_ergebnis_roll + GierMischanteil; |
|
- | 1511 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1512 | Motor5 = motorwert; |
|
- | 1513 | ||
- | 1514 | motorwert = GasMischanteil - pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
|
- | 1515 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1516 | Motor6 = motorwert; |
|
- | 1517 | ||
- | 1518 | motorwert = GasMischanteil + pd_ergebnis_roll + GierMischanteil; |
|
- | 1519 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1520 | Motor7 = motorwert; |
|
- | 1521 | ||
- | 1522 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
|
- | 1523 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1524 | Motor8 = motorwert; |
|
- | 1525 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1526 | #endif |
|
- | 1527 | ||
1457 | if(Poti1 > 20) Motor1 = 0; |
1528 | if(Poti1 > 20) Motor1 = 0; |
1458 | if(Poti1 > 90) Motor6 = 0; |
1529 | if(Poti1 > 90) Motor6 = 0; |
1459 | if(Poti1 > 140) Motor2 = 0; |
1530 | if(Poti1 > 140) Motor2 = 0; |
1460 | if(Poti1 > 200) Motor7 = 0; |
1531 | if(Poti1 > 200) Motor7 = 0; |
1461 | */ |
1532 | |
1462 | } |
1533 | } |