Genauigkeit Drehzalsteuerung via PWM Kategorie: Programmierung (von Pet - 29.05.2007 14:02) | ||
| ||
Hallo allerseits, ich arbeite gerade an einer Motorsteuerung. Ich habe hier schon viel hielfreiches über Motorsteuerungen gelesen und in die Tat umgesetzt. Jetzt stellen sich mit trotzdem noch ein paar Fragen, die ich hoffentlich nicht im Forum überlesen habe... Der Motor hat ein 35:1 Getriebe und einen Imkrementalgeber mit 500 Schritten pro Umdrehung. Jetzt soll der Motor ziemlich konstant (ca. +- 1%) mit einer Umdrehung pro Sekunde drehen. Durch das Getriebe zähle ich 17500 (500*35) Impulse pro Umdrehung. Die soll mein Programm pro Sekunde zählen und den P1H.0 entsprechend nachregeln. Funktioniert auch alles wunderbar, nur die Genauigkeit haut nicht hin. Wenn ich die Impulse durch 17500 teile, verschluckt das Programm immer mal wieder eine Umdrehung, so dass die Abweichung mit der Zeit recht gro� wird. Beschaltet auf dem Applicationboard sind nur der P1H.0 fur das PWM-Signal und der P1H.3 für die Pause-Funktion (Die Sache mit den Pullup-Widerständen trifft doch nur auf die Station zu oder?). Evtl. könnt Ihr mir einen Tipp geben, wie ich eine höhere Genauigkeit erreichen kann? Hier mien Code: thread main { //Variablendeklaration string e1,e2,s,t; long zeit; long impulse1,impulse2; int d,i; //Variableninitialisierung d = 123; impulse1 = 0; impulse2 = 0; zeit = system.timer(); // Externes LCD initialisieren lcdext.init(); lcdext.clear(); //Grundeinstellung PWM Port 0 plm.settimebase(0,plm.BASE_400); plm.setmode(0,0); plm.setperiod(0,192); plm.out(0,0); loop { //�berlauf System-Timer abfangen if zeit < 0 zeit = system.timer() + (2147483647 - zeit); //Schleifenausführung exakt alle 1000 msek. if(system.timer()- zeit) == 1000 { //Zähle Impulse von Inkrementalgeber auf Kanal A impulse1 = ports.getcount(0); //Summiere die bisherigen Motorumdrehungen impulse2 = impulse2 +impulse1 / 17500; // Zeit neu setzen zeit = system.timer(); //Programm anhalten, wenn Schalter auf "EIN" if ports.get(11) == 0 { //Motorstop und Anzeige blinkt plm.out(0,0); lcdext.clear(); lcdext.goto(1,0); lcdext.print(" *** PAUSED ***"); sleep 500; lcdext.clear(); sleep 500; } else { //Regelung, wenn nicht 17500 Impulse pro Sekunde gezählt werden if (impulse1 < 17500) d = d + 1; else if (impulse1 > 17500) d = d - 1; plm.out(0,d); //Ausgabe der Werte auf externem LCD s = ""; e1 = " Imp./s"; t = ""; e2 = " Umdreh."; str.putlong(s,impulse1); lcdext.goto(1,1); s = s + e1; lcdext.print(s); str.putlong(t,impulse2); lcdext.goto(2,0); t = t + e2; lcdext.print(t); //Anzeige des Regelparameters d lcdext.goto(2,12); lcdext.zahl4(d); } } } } Vielen Dank schon mal im Voraus, Gru� Pet | ||
Antwort schreiben Antworten: Re: Genauigkeit Drehzalsteuerung via PWM (von nitraM - 29.05.2007 15:04) Re: Genauigkeit Drehzalsteuerung via PWM (von Pet - 29.05.2007 15:34) Re: Genauigkeit Drehzalsteuerung via PWM (von nitraM - 30.05.2007 7:33) Re: Genauigkeit Drehzalsteuerung via PWM (von Pet - 30.05.2007 11:44) Re: Genauigkeit Drehzalsteuerung via PWM (von nitraM - 30.05.2007 12:32) Re: Genauigkeit Drehzalsteuerung via PWM (von Pet - 31.05.2007 17:15) Re: Genauigkeit Drehzalsteuerung via PWM (von Pet - 1.06.2007 9:08) Re: Genauigkeit Drehzalsteuerung via PWM (von nitraM - 1.06.2007 9:07) Re: Genauigkeit Drehzalsteuerung via PWM (von Pet - 1.06.2007 11:26) Re: Genauigkeit Drehzalsteuerung via PWM (von nitraM - 1.06.2007 13:11) Re: Genauigkeit Drehzalsteuerung via PWM (von Pet - 1.06.2007 14:36) |