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
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
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; } }
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.
Hi, es gibt da den AT89C51AC3 (und auch ein fertiges Board) der kann mittels seiner PCA-Einheit 4 Servos ziemlich einfach ansteuern... Gruß RABIS
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.