Re: ... zur Ansteuerung von Motoren Kategorie: Programmierung (von André H. - 8.01.2006 15:36) | ||
Als Antwort auf ... zur Ansteuerung von Motoren von Markus - 31.12.2005 12:43 | ||
| ||
Hallo Markus, > ich baue einen Fensterputzroboter für meine Facharbeit und muss zu dessen Betrieb 3 Motoren und 2 > Elektromagnetventile, sowie eine Miniwasserpumpe steuern. Leider hab ich mir das mit der > Programmierung zu leicht vorgestellt und steh jetzt vor dem Problem, dass ich nicht wei� wie ich > a) ein Programmmodul schreib um einen Motor über eine Relaisplatine und einen Analogausgang > ansteuer. Bedeutet: Wie ich für eine bestimmte Zeit t an einem Ausgangsport Spannung anleg. > b) verschiedene Programmmodule zeitlich hintereinander reihe > c) einzelne Programmmodule vorzeitig beende, wenn an einem Eingangsport plötzlich während dem > Ablauf des Programms Strom flie�t, da ein Kontakt geschlo�en wird (bei ansto�en an die Wand) > d) einen neuen Programmablauf starte, wenn ein Kontakt geschlo�en wurde > > Wär echt super, wenn mir jemand helfen könnte, denn mein Physik-Leistungskurslehrer hat von > Programmieren und Informatik im Allgemeinen keine Ahnung und ist mir deswegen keine Hilfe. Wir müssen erstmal klären, was Du bereits alles erstellt hast. Die die Elektronik bereits fertig ? Erfolgt die Ansteuerung über zwei Relais + MOS-Fet? Wenn ja, mu�t Du drei Dinge berücksichtigen. ich mache es aber erstmal einfach und lasse die Drehzahlregleung au�en vor. Nehmen wir an, Du hättest nur zwei Relais(à 1xUM), um die Funktionen Vor, Zurück und Stop zu ralisieren. Soetwas zu programmieren ist nicht schwer. In Deinem Fall würde beispielsweise dies weiterhelfen: // Port P1H.0 =Vorwärts (=Port 8) // Port P1H.1 =Rückwärts (=Port 9) function motor(int richtung, long zeit) // richtung: 0=Vorwärts, ungleich 0=Rückwärts // zeit: Dauer in ms { richtung= richtung!=0 and 1; // True/False in 0/1 "wandeln" ports.set(8+richtung,1); // Relais einschalten sleep zeit; ports.set(8+richtung,0); // Relais ausschalten } Hier wird aber noch nicht der Endschalter brücksichtigt. Dies kann mit mit einer einfachen Schleife realisieren: // zusätzlich an P1H.2: Endschalter gegen GND. (=Port 10) function motor(int richtung, long zeit) // richtung: 0=Vorwärts, ungleich 0=Rückwärts // zeit: Dauer in ms {long timer; richtung= richtung!=0 and 1; // True/False in 0/1 "wandeln" timer=system.timer(); ports.set(8+richtung,1); // Relais einschalten wait system.timer()-timer<=zeit or ports.get(10)==0; ports.set(8+richtung,0); // Relais ausschalten } Somit wäre dies für einen Motor bereits fast das, was Du benötigst. Zum Ansteuern eines PWM-Ports mu�t Du zusätzlich die entsprechende Funktion ausführen: // zusätzlich an PLM.0: MOS-Fet für Geschwindigkeit function motor(int richtung, long zeit, int speed) // richtung: 0=Vorwärts, ungleich 0=Rückwärts // zeit: Dauer in ms {long timer; richtung= richtung!=0 and 1; // True/False in 0/1 "wandeln" timer=system.timer(); ports.set(8+richtung,1); // Relais einschalten plm.out(0,speed); wait system.timer()-timer<=zeit or ports.get(10)==0; plm.out(0,0); ports.set(8+richtung,0); // Relais ausschalten } Den PWM-Port mu�t Du am Programm anfang natürlich erst konfigurieren, d.h. die Zeitbasis und die Periodendauer festlegen. Das ergibt wieder die Frequenz. Mit einer Zeitbasis von 400ns und 1000 Ticks Periodenlänge erhälst Du eine Frequenz von 2,5kHz. Das sollte für den Anfang reichen. Ansonsten kann ich nur, wie von Klaus empfohlen, dasselbe sagen, da� Du am besten die passende Lektüre besorgs, wenn Programmierung für Dich Neuland ist. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: |