Proxxon IBS/E PWM Drehzahlregelung

OP #3727977
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
Angehängte Dateien:
OP #3728235
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
}
Gast #3733812
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
#3733820
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.
OP #3733970
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
OP #3742158
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
OP #3749814
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren