www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuern von Servomotoren mit dem 8051


Autor: Ben Ehrle (wickedvibes)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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-...


Peter

Autor: Ben Ehrle (wickedvibes)
Datum:

Bewertung
0 lesenswert
nicht 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;

   }
 }

Autor: Markus Langlotz (lalomarkus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: R. B. (rabis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

es gibt da den AT89C51AC3 (und auch ein fertiges Board) der kann mittels 
seiner PCA-Einheit 4 Servos ziemlich einfach ansteuern...

Gruß RABIS

Autor: R. B. (rabis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsch es sind 5 Servos möglich.

RABIS

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.