Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> 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: > > <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); > } > } > } > } > > </code> > > Vielen Dank schon mal im Voraus, > > Gruß Pet
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB