360° Community Antennentracker mit Schleifring - Wer macht mit?

Status
Nicht offen für weitere Antworten.
Ich moechte hier noch mal die Ghettostation und hierbei den GhettoProxy in den Raum werfen.
https://github.com/KipK/Ghettostation
Mir geht es an der Stelle eher ums Konzept dieses System. Intern arbeitet es mit einem eigenen Protokoll, lighttelemetry oder so. Der Clou ist aber dieser Proxy. Eigentlich nur ein kleiner Mikrocontroller der auf der einen Seite lighttelemetry annimmt und auf der anderen Seite MavLink, NMEA, Uavtalk und was weiss ich nicht noch alles kann ;)
Im Prinzip ist das doch der Uebersetzer ueber dem am Anfang dieses Topic gesprochen wurde.

Der von mir gepostete Schleifring sagt im Datenblatt das man sowohl Strom als auch Signale uebertragen kann. Da er fuer Roboter/CCTV Anwendungen gedacht ist, sollte das fuer unseren Zweck locker ausreichen :) Ich denke es wird problematisch wenn man ihn ueberlastet, also mehr als 5 Umdrehungen die Sekunde macht ;)
 
Zuletzt bearbeitet:
hier noch mal ein paar Anregungen



Link zum Thread
http://www.rcgroups.com/forums/showthread.php?t=2024405

Und nun mein absoluter Favorit, ihr werdet gleich sehen warum ;)



Der hat sogar ein Zahnrad gefunden wo das Lager fast saugend reinpasst

Link zum Thread
http://www.peely.com/my-antenna-tracker/

Leider schreibt er das eine 180grad Drehung wohl 3s dauert, etwas langsam :( Also ein groesseres Zahnrad auf den Servo ;)
wobei ich habe gerade mal geguckt und der von ihm verwendete Servo braucht 1.38s/60°. Da sollte sich doch mit Sicherheit ein anderer Servo finden mit einer schnelleren Stellzeit den man dann auf 360° umbaut.
Hat da jemand eine Idee, am besten auch gleich mit einer Umbauanleitung fuer Noobs wie mich (am liebsten ohne Spezial Werkzeug, maximal eine Feile ;))?
Da koennte man ja mal so langsam darueber nachdenken, ein 'Tracker Rezept' zu erstellen.
 
Zuletzt bearbeitet:

leo2e

Erfahrener Benutzer
Hallo,
das sieht doch schon mal klasse aus: Daumen hoch ;-)
 

Rangarid

Erfahrener Benutzer
Wir brauchen einfach ein Kleineres Zahnrad um den Tracker zu drehen. So viel schneller sind andere Servos auch nicht und dauerhafte Belastung am Limit ist nicht gut. Wartet mal ab, bis wir mit unserem Design fertig sind. Das könnt ihr dann ziehmlich leicht nachbauen.

Aber immerhin scheinen andere den Schleifring auch zu nutzen...

Witzig, auf englisch heißt das Kugellager "lazy susan bearing"...
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
Hat doch Metzelmännchen schon gepostet 3 Posts weiter oben.

Die Mechanik ist interessant, der rest eher nicht so. Die Leute die sowas bisher bauen nutzen vorhandene Controller, z.B. das EZ Osd. Das schwenkt bei Servoende einfach zurück. Frage mich daher wofür die einen Schleifring brauchen, da verdreht sich ja nichts. Ist aber eine nette Spielerei...

Bei unserm Projekt ist ja grad die Endlosdrehung das interessante, dann gibt es auch keine Probleme wie bei dem Tracker aus dem Link, dass der Servo 3s braucht um zurückzudrehen wenn man am Nullpunkt vorbeifliegt.

Ich hab netterweise von Kayle ein MWii mit Kompass bekommen um an der Firmware zu arbeiten. Habe mal angefangen. Da ja doch eigentlich alle MultiWiis den HMC5883 nehmen lege ich diesen einfach mal vorerst als Standard fest. Kann man später immernoch erweitern.

Der Code für den Kompass ist fertig. Er beinhaltet ebenso die magnetische Deklination um den Kurs möglichst genau zu haben (bei mir z.B. macht das 3,2° aus...).

Der Kompasscode ist fix, die einzige Einstellung die man vornehmen kann ist die Deklination. Wie man diese herausfindet steht in der config.h

Später wird es die Möglichkeit geben, den Tracker manuell noch nachzujustieren, sollte er in eine Richtung nachhängen. Das lasse ich aber erstmal weg.

Code kommt wie er gerade ist ins SVN von google code.
 
Ich möchte noch ein paar Anmerkungen zu den gängigen Schleifring-Angeboten machen. Meist sind diese zwar mit 1-2A Belastbarkeit angegeben, aber das sind sicher "chinesische" Ampere. Das Innenleben sieht jedenfalls nicht nach 2A pro Kontakt aus, auch die Anschlußlitzen nicht. Man sollte also wenn möglich für die Stromversorgung mehrere Kontakte parallel schalten. Besonders bei GND ist das wichtig, auch um Bildstörungen zu minimieren. Denn da geht nicht nur der Versorgungsstrom der Servos drüber, sondern das ist auch Bezugspotential für Video.

Gruß Jörg
 

Rangarid

Erfahrener Benutzer
Danke für die Info, die Idee mindestens 2 für V+ und 2 für GND zu nutzen hatte ich auch. Was empfiehlst du wieviele man mindestens nehmen sollte?

Bei dem Gedanken hatte ich noch die Frage, ob dadurch nich eventuell aus welchen Gründen auch immer Groundloops entstehen könnten. Aber ich denke das kann man verwerfen oder?
 
Das hängt von der verfügbaren Polzahl ab. Ich hatte bei meinem 6poligen 3x GND, 2x plus und 1x Video. Beim 12Poler kann man dann vielleicht zwei Pole für Video nehmen, um sicherer zu sein. 12polige sind aber nicht generell besser als 6polige, denn manchmal sind die Schleifkontakte dann wegen dem geringeren Platz einfach noch kleiner.

Groundloops würde ich bei dem kompakten Aufbau vernachlässigen. Wichtiger ist eine kurze und zentrale Masseführung, also ein dicker Massepunkt und dicke Masseleitungen.

Gruß Jörg
 

Rangarid

Erfahrener Benutzer
So, eine Interrupt gesteuerte Servoansteuerung ist jetzt auch drin.

Für Tilt Servo wird es wohl reichen, wenn wir den aktuellen Winkel für Tilt in ein Servosignal umrechnen und das direkt ans Servo geben:
tilt_us = TILT_0 + (getTiltAngle() * (TILT_90 - TILT_0) / 90)

TILT_0 = Servosignal wenn Antenne den Winkel 0° -> muss vorher eingestellt werden
TILT_90 = Servosignal wenn die Antenne 90° hat -> muss vorher eingestellt werden

Damit kommen Werte von TILT_0 (z.B. 1300us Antenne 0°) bis TILT_90 (z.B. 1700us Antenne 90° nach oben) raus.

Für den Pan-Servo müsste man sich allerdings was halbwegs intelligentes überlegen, da er ja mal schneller und mal langsamer arbeiten muss, je nachdem wie weit die Entfernung zum gewünschten Winkel ist. Außerdem wär langsames Anfahren und langsames Abbremsen von vorteil um das Servo zu schonen. Außerdem soll der Servo nicht über den gewünschten Winkel hinaus weiterdrehen sondern genau dort zum Stehen kommen.

Jemand ne Idee?

Hab gerade das hier gesehen:
https://www.youtube.com/watch?v=SZsWy_fxUWs
Ab 1:10

Code:
void steeringCalc() {
  // Convert yaw to degrees and determine remaining angle to turn
  angle_current = ToDeg(yaw);
  angle_delta = angle_target - angle_current;
  
  // Make sure that turn angle is 180 degrees or less, since AHRS code uses -180 < angle < 180
  if ( angle_delta > 180.0f ) {
    angle_delta -= 360.0f;
  } else if ( angle_delta < -180.0f ) {
    angle_delta += 360.0f;
  }
  
  // Determine if turn is CW or CCW and if we should turn.
  // To handle noise, stops when angle difference is < 0.5 degree.
  clockwise = (angle_delta >= 0.0f);  
  if ( abs(angle_delta) < 0.5f ) {
    turning = false;
  } else {
    turning = true;
  }
}
Code:
void steeringControl() {

  // Motor direction and speed are selected based on turning and clockwise flags.
  if ( turning && enabled) {
    if (clockwise) {
      leftMotor.write(93);
      rightMotor.write(93); //make same since opposite sign
    } else {
      leftMotor.write(86);
      rightMotor.write(86); //make same since opposite sign
    }
  } else {
    leftMotor.write(90);
    rightMotor.write(90);
  }
   
}
Da wird allerdings nich wirklich viel reguliert...Wenn der Servo also noch etwas nachdreht durch das Gewicht des Trackers wird er immer wieder hin und herschwenken und sich eventuell aufschaukeln. Eventuell könnte man noch zusätzlich zur Richtungsangabe die Geschwindigkeit abhängig vom Winkel einstellen, z.B. <2° langsam, <5° mittel, > schnell

Sonst irgendwelche Ideen?
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
Drehgeschwindigkeit einfach mit Winkeldifferenz multiplizieren.
Also guck ich einfach dass ich für 1° nen Fixwert von z.B. 100us links order rechts nehme und für jedes weitere Grad 100us addiere bzw. für jedes grad was runtergeht abziehe?

Als Beispiel:
Abweichung 10° -> pan_us = Mittelwert + 10*100
Abweichung 5° -> pan_us = Mitelwert + 5*100

Umso näher ich rankomme umso langsamer wird es, bis es schließlich bei 1° nurnoch 100us hat?

Wie kann ich dabei verhindern, dass das Servo übers Ziel hinausschießt?
 

Rangarid

Erfahrener Benutzer
Ja das ist mir bewusst. Ich meinte so wie beim Motor wenn die Motorbremse nicht an ist, der dreht ja auch weiter weil kein Widerstand.

Muss mal schauen wie sich der Servo verhält, ob er einfach stehen bleibt bei 1500us oder ob er noch nachdreht...

Code:
uint16_t calcPanSpeed(float current_course, float target_course){
  int16_t delta = target_course - current_course;
  
  if (delta > 180.0f){
     delta -= 360.0f; 
  } else if (delta < -180.0f){
    delta += 360.0f;
  }
  
  uint16_t speed = 0;
  if (abs(delta) > 0.5f){
    speed = 1500 + (delta * 100);
  }
  
  if (speed > 2500){
    speed = 2500;
  }else if (speed < 500){
     speed = 500; 
  }
  return speed;
}
So siehts grad aus...irgendwelche Verbesserungsvorschläge? Pulselänge bei Roboterservos ist 500...2500 daher die Überrpüfung unten.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten