Quadrokopter µC programmieren

OP #3442168
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 :)
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.
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 :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.