Forum: Analoge Elektronik und Schaltungstechnik Quadrokopter µC programmieren


von Daniel  . (droggelbecher)


Lesenswert?

Hallo,
ich habe eine nun die Hardware soweit stehen, dass ich beim 
Programmieren bin. Habe bereits einige Zeilen geschrieben jedoch 
erfolglos. Der erste versuch ist es nur Zwei Motoren anzusprechen die 
sich auspendeln. Das gelingt bedingt bis sich ein starkes schaukeln 
ergibt. Lösung ist eigentlich auch ganz simpel nicht zu stark 
beschleunigen etc. aber die Umsetzung ist das Problem.
ich habe einen Winkelwert von -5000 bis +5000. Mal eine Seite gekippt 
dann die andere und die Motoren brauchen einen wert zwischen 70min. und 
120 max.
1
 
2
  escA.write(ValA);
3
  escB.write(ValB);
4
  int delaywhile = 6;
5
// ValA=val;
6
 //ValB=val;
7
8
  if(Xk1<0&&Xk1>-500){
9
     ValA=val;
10
    ValB=val;
11
 }
12
  if(Xk1>0&&Xk1<500){
13
    ValA=val;
14
    ValB=val;
15
   
16
 } 
17
 if(ValA-val>6||ValB-val>6){
18
   if(ValA-val>6){
19
    ValA=ValA;
20
   }
21
   else{
22
    ValB=ValB;
23
   }
24
 }
25
 else{
26
 
27
   if(Xk1<-500&&Xk1>-2000){
28
     if(Xk1<-500&&ValA-val<4){
29
    ValA=ValA+0.1;
30
    ValB=ValB+0.2;}
31
     else{
32
       ValA=val;
33
   ValB=ValB+0.2;}
34
    //delay(delaywhile); 
35
 }
36
  if(Xk1>500&&Xk1<2000){
37
    if(Xk1>500&&ValB-val<4){
38
    ValB=ValB+0.1;
39
    ValA=ValA+0.2;}
40
     else{
41
        ValB=val;
42
   ValA=ValA+0.2;}
43
 } 
44
 
45
   if(Xk1<-2000&&Xk1>-5000){
46
     if(Xk1<-1700&&ValA-val<4){
47
   ValA=ValA+0.1;
48
    ValB=ValB+0.4;}
49
     else{
50
       ValA=val;
51
   ValB=ValB+0.4;}
52
    //delay(delaywhile); 
53
 }
54
  if(Xk1>2000&&Xk1<5000){ 
55
    if(Xk1>170&&ValB-val<4){
56
         ValB=ValB+0.1;
57
    ValA=ValA+0.4;}
58
    else{
59
       ValB=val;
60
   ValA=ValA+0.4;}
61
 }
62
 
63
 }
nach links gekippt positive werte rechts halt negative in der Mitte 
+-300

ValA für den linken Motor  (linke Seite)
ValB Rechter Motor (rechte Seite)
val= Standard Geschwindigkeit in diesem fall 73

Er versucht die Beschleunigung zu begrenzen, indem er mit dem anderen 
Motor Bremst. vielleicht habe ich auch den völlig falschen Ansatz.

-Danke für die Hilfe :)

von Klaus W. (mfgkw)


Lesenswert?

Der klassische Ansatz wäre ein PID-Regler mit entsprechend angepassten 
Werten für P, I und D (letzterer evtl. 0).

Wikipedia und google wissen Näheres...

PS: die Meßwerte, die man ausregeln will, sollten auch geeignet 
geglättet werden.
Alleine das ist ein größeres Thema, bei Bedarf gibt es auch hier im 
Forum schon einiges dazu.

von Nils P. (ert)


Lesenswert?

Nabend,

Prinzipel: Suchfunktion benutzen. ;)

Findest z.B. Beitrag "Quadrocopter - Selber bauen"

Das Thema ist leider nicht so einfach... Schließe mich meinem 
Vorschreiber an. Schau dir erstmal die PID-Regelung an. Sei Vorsichtig 
mit dem D anteil.

Wenn du aber was lernen willst ist das kein so schlechtes Vorgehen.
Mach es erstmal mit Zwei Motoren. Und teste ein bisl rum.

Und wenn es wirklich in die Luft gehen soll, 'muss' man versichert sein. 
Wie beim Auto fahren...Und Testflüge bitte nur weit wech von bewohnten 
Gebiet fliegen.

Und pass auf deine Finger auf. Carbon kann weh tun. Spreche da aus 
Erfahrung :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.