Forum: Analoge Elektronik und Schaltungstechnik Proxxon IBS/E PWM Drehzahlregelung


von Sebastian G. (borsti87)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte bei einem Proxxon Bohrschleifer IBS/E per PWM die drehzahl 
regeln.
Der Bohrschleifer soll allerdings auch ohne angeschlossenes PWM-Signal 
funktionieren. Dazu habe ich folgendes gefunden: 
http://bienonline.magix.net/public/mf70-drehzahl.html.

das PWM Signal erzeuge ich mit einem Arduino UNO (Mega382P) mit 
angeschlossenem Poti als Sollwertgeber, wie folgt:
1
// the setup routine runs once when you press reset:
2
void setup() {
3
  // initialize serial communication at 9600 bits per second:
4
  TCCR1B = TCCR1B & 0b11111000 | 0x03;
5
  Serial.begin(9600);
6
}
7
8
// the loop routine runs over and over again forever:
9
void loop() {
10
  // read the input on analog pin 0:
11
  int sensorValue = analogRead(A0);
12
  // print out the value you read:
13
  Serial.println(sensorValue);
14
  analogWrite(9,sensorValue / 4);
15
  delay(1);        // delay in between reads for stability
16
}

Leider ändert sich dabei die Drehzahl nicht.
Kann mir hier jemand auf die Sprünge helfen?

Gruß
Sebastian

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

pinMode(9, OUTPUT); ??

von Sebastian G. (borsti87)


Lesenswert?

MaWin schrieb:
> pinMode(9, OUTPUT); ??

hab ich ergänzt hatt aber nichts gebracht.
Zur Info, eine an den PWM Ausgang angeschlossene LED wird gedimmt, also 
scheint der PWM grundsätlich zu funktionieren.

Bereinigter Code:
1
int sensorPin = 0;
2
int pwmPin = 9;
3
int sensorValue = 0;
4
5
void setup() {
6
  pinMode(pwmPin, OUTPUT);
7
  // initialize serial communication at 9600 bits per second:
8
  TCCR1B = TCCR1B & 0b11111000 | 0x01;
9
  Serial.begin(9600);
10
}
11
12
// the loop routine runs over and over again forever:
13
void loop() {
14
  // read the input on analog pin 0:
15
  sensorValue = analogRead(sensorPin);
16
  // print out the value you read:
17
  Serial.println(sensorValue);
18
  analogWrite(pwmPin,sensorValue / 4);
19
  delay(1);        // delay in between reads for stability
20
}

: Bearbeitet durch User
von Sebastian G. (borsti87)


Lesenswert?

Hat den keiner eine idee wo das Problem liegen könnte?

von spess53 (Gast)


Lesenswert?

Hi

>Hat den keiner eine idee wo das Problem liegen könnte?

Wie sieht deine Stromversorgung aus? Der originale Thyristorregler 
funktioniert nur mit pusierendem Gleichstrom. Damit dürfte aber deine 
PWM Probleme haben.

MfG Spess

von Hubert G. (hubertg)


Lesenswert?

1
int ledPin = 9;      // LED an digitalem Pin 9 angeschlossen
2
int analogPin = 3;   // Potentiometer am analogen Pin 3 angeschlossen
3
int val = 0;         // Variable in die der gelesene Wert eingetragen wird
4
5
void setup()
6
{
7
  pinMode(ledPin, OUTPUT);   // setzt den Pin ledPin als Output
8
}
9
10
void loop()
11
{
12
  val = analogRead(analogPin);   // liest den Input Pin
13
  analogWrite(ledPin, val / 4);  // analogRead Werte reichen von 0 to 1023, analogWrite Werte von 0 to 255
14
}

Das funktioniert mit einer LED.

von Hubert G. (hubertg)


Lesenswert?

Ich hatte überlesen das die PWM funktioniert.
Hast du die Zusatzschaltung schon getestet?
Ist dort auch der richtige Transistor drinnen mit entsprechender 
Spannungsfestigkeit?
Hast du immer volle Drehzahl oder nur geringe?

von Sebastian G. (borsti87)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Hat den keiner eine idee wo das Problem liegen könnte?
>
> Wie sieht deine Stromversorgung aus? Der originale Thyristorregler
> funktioniert nur mit pusierendem Gleichstrom. Damit dürfte aber deine
> PWM Probleme haben.
>
> MfG Spess

Hallo zusammen,

das PWM Signal wird mit einem Arduino mit seperater spannungsversorgung 
erzeugt. Restliche schaltung sie Schaltplan.

Hubert G. schrieb:
> Ich hatte überlesen das die PWM funktioniert.
> Hast du die Zusatzschaltung schon getestet?
> Ist dort auch der richtige Transistor drinnen mit entsprechender
> Spannungsfestigkeit?
Transistor habe ich einen MPSA44 eingesetz wie in der Anleitung oben 
beschrieben.
> Hast du immer volle Drehzahl oder nur geringe?
Ja läuft immer auf voller Drehzahl des Potis

Gruß
Sebastian

von Hubert G. (hubertg)


Lesenswert?

Das sieht dann aber so aus als würde deine Zusatzschaltung nicht 
funktionieren, bzw. der Transistor ist immer durchgeschaltet.
Ist es sicher das beim OK auf Pin2 GND liegt?

von Sebastian G. (borsti87)


Lesenswert?

Hubert G. schrieb:
> Das sieht dann aber so aus als würde deine Zusatzschaltung nicht
> funktionieren, bzw. der Transistor ist immer durchgeschaltet.
> Ist es sicher das beim OK auf Pin2 GND liegt?

Laut Datenblatt ist Pin 2 die Kathode, dort lege ich GND an.
Ich messe zwischen Pin 1 (+) und Pin 2 (-) ca. 5V DC bei voller 
Ansteuerung analogWrite Value = 255.

von Hubert G. (hubertg)


Lesenswert?

Wenn du wirklich 5V an Pin1 und 2 des OK misst, dann ist dieser defekt. 
Dort darfst du nicht mehr als etwa 1,2V, die Durchflussspannung der Led 
im OK, messen.
Den 1k Vorwiderstand hast du doch nicht vergessen?

von Sebastian G. (borsti87)


Lesenswert?

Hubert G. schrieb:
> Wenn du wirklich 5V an Pin1 und 2 des OK misst, dann ist dieser defekt.
> Dort darfst du nicht mehr als etwa 1,2V, die Durchflussspannung der Led
> im OK, messen.
> Den 1k Vorwiderstand hast du doch nicht vergessen?

Hast recht Messe die Spannung natürlich schon am Eingang der Platine.

von Hubert G. (hubertg)


Lesenswert?

Lässt sich die Drehzahl mit dem original Poti noch ändern?
Wenn du sonst keinen Schaltungsfehler gemacht hast, kann nur der OK oder 
der Transistor defekt sein.

von Sebastian G. (borsti87)


Lesenswert?

Hubert G. schrieb:
> Lässt sich die Drehzahl mit dem original Poti noch ändern?
Ja das geht noch.
> Wenn du sonst keinen Schaltungsfehler gemacht hast, kann nur der OK oder
> der Transistor defekt sein.
Ja muss ich dann die Tage mal prüfen.

von Sebastian G. (borsti87)


Lesenswert?

Sebastian G. schrieb:
> Hubert G. schrieb:
>> Wenn du wirklich 5V an Pin1 und 2 des OK misst, dann ist dieser defekt.
>> Dort darfst du nicht mehr als etwa 1,2V, die Durchflussspannung der Led
>> im OK, messen.
>> Den 1k Vorwiderstand hast du doch nicht vergessen?
>
> Hast recht Messe die Spannung natürlich schon am Eingang der Platine.

So habe nochmal gemessen, Eingangsspannung am OK ~1,084V

: Bearbeitet durch User
von Hubert G. (hubertg)


Lesenswert?

Du kannst mal Pin 4 und 5 des OK kurzschließen, dann sollte sich die 
Geschwindigkeit verringern.

von Sebastian G. (borsti87)


Lesenswert?

Hubert G. schrieb:
> Du kannst mal Pin 4 und 5 des OK kurzschließen, dann sollte sich die
> Geschwindigkeit verringern.

Drehzahl gleich Null, der Motor ruckt nunmehr einmal kurz.

von Hubert G. (hubertg)


Lesenswert?

Das sieht dann so aus als wäre der OK defekt.

von Sebastian G. (borsti87)


Lesenswert?

Hubert G. schrieb:
> Das sieht dann so aus als wäre der OK defekt.

Ja der OK war defekt.
Danke für die Unterstützung.

von Sebastian G. (borsti87)


Angehängte Dateien:

Lesenswert?

Hallo,

nun möchte ich mit einem Hallsensor die Drehzahl erfassen und damit des 
PWM signal Regeln.
Das Erfassen der Drezahl funktioniert soweit ganz gut. Hier mein 
Testcode:
1
volatile short rpmcount;
2
volatile int status;
3
4
unsigned int rpm;
5
6
unsigned long timeold;
7
void rpm_fun(){
8
  rpmcount++;    
9
  if (status == LOW) {
10
    status = HIGH;
11
  }else{
12
     status = LOW;
13
  }
14
   //digitalWrite(statusPin, status);
15
 }
16
17
void setup(){
18
  Serial.begin(9600);
19
  //Interrupt 0 is digital pin 2, so that is where the IR detector is connected
20
  //Triggers on FALLING (change from HIGH to LOW)
21
  attachInterrupt(0, rpm_fun, RISING);
22
  
23
  rpmcount = 0;
24
  rpm = 0;
25
  timeold = 0;
26
  status = LOW;
27
 }
28
 void loop() {
29
   //Update RPM every second
30
   delay(1000);
31
   detachInterrupt(0);
32
   rpm = 30*1000/(millis() - timeold)*rpmcount;
33
   timeold = millis();
34
   rpmcount = 0;
35
36
   Serial.print(rpm,DEC);
37
   Serial.print(" =U/min\n");
38
39
   attachInterrupt(0, rpm_fun, RISING);
40
  }

nun bin ich mir nur noch nicht ganz im Klaren wie ich den PID Regler 
(http://playground.arduino.cc/Code/PIDLibrary) mit den Drehzahl-Werten 
füttere, um dann damit das PWM Signal zu beeinflussen.
Der Drehzahl Sollwert soll für den ersten Test fix auf 5000 U/min 
eingestellt werden.

Mein erster Versuch war folgendes:
1
#include <PID_v1.h>
2
3
// pins
4
int pwmPin = 9; // PWM Output Pin
5
int rpmINT = 0; // RPM Input Interupt (INT 0 pin 2)
6
7
//rpm variablen
8
volatile short rpmcount;
9
volatile int status;
10
double Setpoint, Rpm, Output;
11
unsigned long timeold;
12
13
//Specify the links and initial tuning parameters
14
PID myPID(&Rpm, &Output, &Setpoint,2,5,1, DIRECT);
15
16
void rpm_fun(){
17
  rpmcount++;    
18
  if (status == LOW) {
19
    status = HIGH;
20
  }else{
21
     status = LOW;
22
  }
23
   //digitalWrite(statusPin, status);
24
 }
25
26
void setup(){
27
  //Triggers on FALLING (change from HIGH to LOW)
28
  attachInterrupt(rpmINT, rpm_fun, FALLING);
29
  
30
  rpmcount = 0;
31
  Rpm = 0;
32
  timeold = 0;
33
  status = LOW;
34
  
35
  Setpoint = 5000;
36
  
37
  //turn the PID on
38
  myPID.SetMode(AUTOMATIC);
39
  
40
  pinMode(pwmPin, OUTPUT);
41
  // set PWM frequncy for bin 9 to 31.250 kHz
42
  TCCR1B = (TCCR1B & 0b11111000) | 0x02;
43
}
44
void loop() {
45
   detachInterrupt(rpmINT);
46
   Rpm = 30*1000/(millis() - timeold)*rpmcount;
47
   timeold = millis();
48
   rpmcount = 0;
49
   
50
   myPID.Compute();
51
   
52
   analogWrite(pwmPin,255-Output);
53
   
54
   attachInterrupt(rpmINT, rpm_fun, FALLING);
55
  }

Nur ist der Versuch mit wenig Erfolg gekrönt, da nun nur sporadisch PWM 
Signale erzeugt werd, die den Proxxon einmal kurz komplett auf 0 regeln.
Vielleicht kann mir hier ja jemand auf die Sprünge helfen.
Ich habe noch keine großen Erfahrungen mit Reglern gemacht, bzw. 
vieleicht gehts ja auch noch einfacher?!

Gruß
Sebastian

von Sebastian G. (borsti87)


Angehängte Dateien:

Lesenswert?

Hier noch zur Veranschaulichung eine Zeichnung des Testaufbaus.
Die LED diehnt zur Kontrolle, ob ein PWM-Signal erzeugt wird.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.