Schrittmotorsteuerung mit Arduino, Regelung der Drehzahl leider Exponentiell

Gast #3758756
Lesenswert?

Hallo zusammen,

ich hoffe ihr könnt mir helfen.

Leider bin ich schon ein paar Jahre aus dem Thema raus.... ich komme 
einfach nicht mehr weiter...

Folgende Situation.

- Ich habe eine Fräse ähnlich Bild 1.
- An den Jeweiligen Achsen habe ich Servomotoren mit 9 NM montiert, die 
über eine Step/Dir Steuerung ähnlich Schrittmotoren angesteuert werden..
- Jetzt habe ich vor mit dem Arduino eine Steuerung zu programmieren wo 
ich von Hand jede Achse einzeln steuern und die geschwindigkeit über ein 
Porti regeln kann.
- Bild 2. und Bild 3. so schaut es momentan aus. Ich habe momentan nur 
eine Achse eingebunden. Und das Handrad ist auch noch ohne Funktion.

Problemstellung:

Ein Problem ist jetzt das ich durch den Internen Zähler die Pulse 
generiert werden. Das hat zur Folge das die Regelung an dem Poti total 
exponentiell regelbar ist.

um diesen Code abschnitt geht es:

//////////////////////////////////////////////////////////////////////// 
////////////////
  Motor_PotiGeschwindigkeitHilfe = 
sqrt(float(analogRead(Pin_Potipos)))*128+100;
  Motor_PotiEigelesen = int(Motor_PotiGeschwindigkeitHilfe);
  Serial.println(analogRead(Pin_Potipos));


  // (alt) Serial.println(Motor_IstGeschwindigkeit);
  // Werte Berechnen
  // Drehzal berechnen

  // Aus Datenblatt f_PIN = 16MHz / ( 2  N  ( 1 + Wert )      N = 8
  // Kürzen ergibt  f_PIN = 10MHz / ( 1 + Wert)                 Wert = 
100 - 4196

  Berechnung_Frequenz = 1000000 / ( 1 + Motor_PotiEigelesen);
  Berechnung_Drehzahl = (float) Berechnung_Frequenz * 60 / 1000;
  Berechnung_Weg = ( 2.5 * Berechnung_Frequenz / 1000);
//////////////////////////////////////////////////////////////////////// 
////////////////

ich hoffe ihr könnt verstehen was ich meine.

viele grüße und vielen Dank schon mal.

Sebastian
Gast #3758877
Lesenswert?

Ich würd's so machen:

- Sollwert ist z.B. 0..255
- zu festen Zeitpunkten wird auf einen Byte-Zähler der Sollwert 
aufaddiert
- bei einem Überlauf wird ein Puls ausgegeben.

Die mittlere Ausgabefrequenz ist dann proportional zum Sollwert, 
natürlich jittert das Signal etwas, das macht aber weder Schrittmotoren 
noch Servos was aus.
Gast #3758893
Lesenswert?

"Problemstellung:

Ein Problem ist jetzt das ich durch den Internen Zähler die Pulse
generiert werden. Das hat zur Folge das die Regelung an dem Poti total
exponentiell regelbar ist."

Das macht dein Problem leider nicht klar.
Was ist denn dein Ziel. Soll die Regelung linear sein?

Der Kommentar
  // Kürzen ergibt  f_PIN = 10MHz / ( 1 + Wert)                 Wert =
100 - 4196

ist übrigens falsch. Kürzen ergibt 1MHz, im Code darunter hast du ja 
auch 1000000 stehen.

Wenn du jetzt eine linear regelbare Frequenz zwischen 1KHz und 1MHz 
brauchst, und der Potiwert offenbar von 0..1023 läuft rechne doch 
einfach
1
Berechnung_Frequenz = 1000 + analogRead(Pin_Potipos) * 977;
2
if (Berechnung_Frequenz > 1000000) 
3
  Berechnung_Frequenz = 1000000;
Gast #3758910
Lesenswert?

Achso, ne in deiner Formel kommen ja Frequenzen zwischen 240 und 9900 Hz 
raus.

Also
1
Berechnung_Frequenz = 240 + analogRead(Pin_Potipos) * 10;
2
if (Berechnung_Frequenz > 9900) 
3
  Berechnung_Frequenz = 9900;

und wenn das Poti umgedreht regeln soll, dann
1
Berechnung_Frequenz = 240 + (1023-analogRead(Pin_Potipos)) * 10;
2
if (Berechnung_Frequenz > 9900) 
3
  Berechnung_Frequenz = 9900;

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