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 #3758778
Lesenswert?
• ▲
▼
Exponentiell finde ich eigentlich ideal.

Einfach den Analogwert skaliert als Timerwert nehmen fühlt sich recht 
brauchbar an. Am langsamen Ende hat man eine recht hohe Auflösung zum 
Positionieren und am schnellen Ende will man eh nur maximale 
Geschwindigkeit.
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.