Ansteuern von Servomotoren mit dem 8051

OP #1954288
Lesenswert?

Hallo Zusammen,

Vorab mein Vorhaben: Also ich habe ein Model eines Tauchroboters 
angefertigt, um diesen Roboter abtauchen zu lassen und unter Wasser zu 
steuern habe ich 4 Servomotoren verbaut. Jetzt möchte ich diese Servos 
mit hilfe des 8051er Board ansteuern, das Programm würde ich gerne in C 
schreiben, habe allerdings noch keine großen Erfahrungen was das 
Programmieren in C angeht. Kann mir da jemand weiterhelfen was das 
Programm alles enthalten muss!? Oder hat jemand vielleicht einen 
Quellcode an dem ich mich orientieren könnte?? Es wäre super wenn mir da 
jemand helfen könnte. Schon im Vorfeld vielen Dank für eure 
Unterstützung!!

Freundliche Grüße aus Mannheim
#1954303
Lesenswert?

Ben Ehrle schrieb:
> habe allerdings noch keine großen Erfahrungen was das
> Programmieren in C angeht.

Dann solltest Du erstmal die Grundlagen lernen, sonst verstehst Du 
andere Programme nicht.


Ben Ehrle schrieb:
> Oder hat jemand vielleicht einen
> Quellcode an dem ich mich orientieren könnte??

Ja, Google.

Z.B.:
http://mcu-programming.blogspot.com/2006/09/servo-motor-control.html


Peter
OP #1954327
Lesenswert?

Danke für deine Antwort. Ich habe ja schon mal etwas zusammen 
geschrieben (siehe unten). Macht das so sinn?? Und Wie komme ich auf die 
Pausen und Pulszeiten?? Bitte geht mit mir nicht so hart in die 
Kritik...



#include <c51rx2.h>

sbit Motor1 = P2_0 ;
sbit Motor2 = P2_1 ;
sbit Motor3 = P2_2 ;
// sfr at P2_3 LED1;
// sfr at P2_3 LED2;

#define Puls_10ms 10000

//sbit at P3_2 Taster;      // Taster für Motoren Aufwärts ////  Auf was 
muss geachtet werden?
//sbit at P3... Taster;      // Taster für Motor Rechts
//sbit at P3... Taster;      // Taster für Motor Links
//sbit at P3... Taster;      // Taster für LED1
//sbit at P3... Taster;      // Taster für LED2


void init_timer(){
  TMOD = 0b00010000;
  TR1  = 1;
  TF1  = 0;
  TH1  = ( 65536 - 1000 ) / 256;
  TL1  = ( 65536 - 1000 ) % 256;
}

void main(void) {
  int Puls1, Pause1;
  int Puls2, Pause2;
  int Puls3, Pause3;
  int Puls4, Pause4;

  unsigned char Zeitpunkt =1;

  init_timer();
  TR1 = 1;       //Timer 1 einschalten
  while (1){
   if (TF1 == 1) {

  if (Zeitpunkt == 1) {
         TH1  = ( 65536 - Puls1 ) / 256;
         TL1  = ( 65536 - Puls1 ) % 256;
         Zeitpunkt ++;
         P2_0 = 1; //Puls1 ausgeben
     }

  else if (Zeitpunkt == 2) {
         TH1  = ( 65536 - Pause1 ) / 256;    // Pause1 zum beenden des 
schritts notwendig
         TL1  = ( 65536 - Pause1 ) % 256;
         Zeitpunkt ++;
         P2_0 = 0; //Puls1 nullen
     }

  else if (Zeitpunkt == 3) {
       TH1  = ( 65536 - Puls2 ) / 256;
         TL1  = ( 65536 - Puls2 ) % 256;
         Zeitpunkt ++;
         P2_1 = 1; //Puls2 ausgeben
     }

  else if (Zeitpunkt == 4) {
         TH1  = ( 65536 - Pause2 ) / 256;    // Pause2 zum beenden des 
schritts notwendig
         TL1  = ( 65536 - Pause2 ) % 256;
         Zeitpunkt ++;
         P2_1 = 0; //Puls2 nullen
     }

   else if (Zeitpunkt == 5) {
     TH1  = ( 65536 - Puls3 ) / 256;
         TL1  = ( 65536 - Puls3 ) % 256;
         Zeitpunkt ++;
         P2_2 = 1; //Puls3 ausgeben
     }

  else if (Zeitpunkt == 6) {
         TH1  = ( 65536 - Pause2 ) / 256;    // Pause3 zum beenden des 
schritts notwendig
         TL1  = ( 65536 - Pause2 ) % 256;
         Zeitpunkt ++;
         P2_2 = 0; //Puls3 nullen
     }






     }
     else  {                //
         TH1  = ( 65536 - Puls_10ms ) / 256;  // Restzeit für 20ms
         TL1  = ( 65536 - Puls_10ms ) % 256;
       Rechne_Pulse_und_pausen();

   }
     TF1 = 0;

   }
 }
#1955230
Lesenswert?

Also jetzt muss ich mich auch mal einschalten.
Mein Name ist Markus Langlotz und der Ben und ich arbeiten gerade an dem 
o.g. Projekt.
Die Beschreibung des Projektes stimmt so nicht ganz. Wir haben keine 
Servomotoren verbaut sondern Motorregler, die Brushlessmotoren 
ansteuern.
Diese Regler werden normalerweise über einen Modellbau-Empfänger 
angesteuert.
Jetzt haben wir vor die Regler anstatt über einen Empfänger, über nen 
µController vom Typ 8051 zu steuern, da unser Modell über einen PC / 
Laptop gesteuert werden soll.

So der oben stehende Quellcode soll eine PWM erzeugen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren