AZ antennenrotor-strategie wenn ein sat vorbeifliegt

OP #7066097
Mein AZ rotor dreht von der stateliten position 179 grad bis zur 
position 181 grad eine ganze 358 grad runde in die andere richtung. Weil 
181 grad zu -179 grad umgerechnet wird. Weil eben atan2 so funktioniert. 
Natürlich macht er es meist genau dann wenn der sat daten sendet. Diese 
verliert man dann.

Ich kann die ansteuerung so machen dass anstatt -180 bis +180 einfach 
-270 bis +270 verwendet wird. Dann brauch ich aber eine vernünftige 
strategie, weil das berechnungsmodul liefert nur -180 bis +180.

Wie machen?
Gast #7066191
Nur aus Interesse und zum Verständnis: Welcher Sat überstreicht 360° 
über dem Horizont?

Das schafft ja selbst die Sonne nur für ein paar Tage im Jahr an wenigen 
Orten.

Leg den 360°-Punkt nach Norden.
Gast #7066203
Sebastion B. schrieb:
> Wie machen?

Ist doch nicht schwer:

 - Merke Dir die alte Rotor-Ist-Position.
 - Berechne die neue Soll-Position.
 - Berechne für die neue Position einmal +360° und -360°
 - Nun hast Du drei neue Kandidaten:
   Original, Original plus 360, Original minus 360
 - Lösche von den Kandidaten alle, die der Rotor nicht anfahren
   kann oder darf.
 - Wähle die Position aus der verbliebenen Liste mit dem
   kürzestem Weg. [ Weg = Absolutwert(Soll - Ist) ]
 - Fahr den Rotor dort hin.

Das kann man natürlich kompakter Umsetzen; aber das ist das Prinzip.
OP #7066539
1
void writeServo(float azangle) 
2
{
3
  if (azangle >  180.0) azangle -= 360.0; //make -180 to 180
4
  if (azangle < -180.0) azangle += 360.0; //make -180 to 180
5
      
6
  float azplus  = azangle + 360.0;
7
  float azminus = azangle - 360.0;
8
  
9
  float diff      = azangle - oldazangle;
10
  float diffplus  = azplus  - oldazangle;
11
  float diffminus = azminus - oldazangle;
12

13
  float smallest = abs(diff);
14
  float newaz = azangle;
15
  if (abs(azplus) < maxangle)
16
    if (abs(diffplus)  < smallest) 
17
    {
18
      smallest = diffplus;
19
      newaz = azplus;
20
    }
21
  if (abs(azminus) < maxangle)
22
    if (abs(diffminus) < smallest) 
23
    {
24
      smallest = diffminus;
25
      newaz = azminus;
26
    }
27
  
28
  Log::console(PSTR("az: %.0f, az+: %.0f, az-: %.0f, oaz %.0f, diff %.0f, smallest %.0f, newaz %.0f"), azangle, azplus, azminus, oldazangle, diff, smallest, newaz);  
29

30
  oldazangle = newaz;
31
  
32
  // 1.8deg/step, 200 steps/rev
33
  sollpos = newaz*0.5555;
34
}
Gast #7066588
HAM schrieb:
> Nur aus Interesse und zum Verständnis: Welcher Sat überstreicht 360°
> über dem Horizont?

Nee, das denkst du falsch. Bei LEO Satelliten hat man es immer, daß sie 
irgendwo am Horizont auftauchen, die Elevation immer größer wird bis sie 
einem mehr oder weniger über den Kopf fliegen, um dann am 
entgegengesetzten Azimut mit immer kleinerer Elevation weiter zu 
fliegen, bis sie wieder unter den Horizont tauchen. Im Prinzip hat man 
es immer mit einer Drehung im Azimut von 180° zu tun, die aber nicht 
gleichmäßig verläuft, sondern z.B. bei direktem Überflug mitten im 
Kulminationspunkt von Azimut zu -Azimut wechselt. So schnell dreht kein 
Antennenrotor die Antenne herum.

Es ist dabei bloß so, daß so eine Antenne auch Kabel hat zwischen der 
eigentlichen Antenne und den unbeweglichen Teilen. Und diese Kabel 
verhindern, daß man die Antenne beliebig herumdrehen kann.

Rein theoretisch wäre das zu lösen, wenn die Drehmechanik neben dem 
Azimut die Elevation größer als 90° machen könnte und obendrein noch ein 
Rollwinkel quer zur Elevation eingestellt werden könnte. Dann könnte man 
allein mit Elevation und Rollwinkel die Satellitenbahn abfahren. Aber so 
eine Mechanik hab ich noch nicht gesehen.

Ganz generell: es kommt auf die mechanische Konstruktion an, ob das 
Problem lösbar ist. Ansonsten wäre ggf. eine zweite Antenne billiger, 
die während des Drehens den Empfang übernimmt.

W.S.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 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.