Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

Alles über Antriebstechnik, Elektroarbeiten, Probleme beim Anschluss eines Motors.
Nachricht
Autor
toto
Neu im Forum
Neu im Forum
Beiträge: 24
Registriert: Donnerstag 20. Juli 2023, 10:00

Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#1 Beitrag von toto »

Moin,

ich möchte auch gern, wie hier diskutiert https://www.naehmaschinentechnik-forum. ... hp?t=11286 ,einen Schrittmotor als Antrieb verwenden. Ich möchte den genannten Thread aber nicht mit meinen Fragen zumüllen.
Ich denke, dass ich das beschriebe Vorgehen soweit erst mal verstanden habe, jedoch ist es für mich das erste Mal, das ich mich mit derlei Dingen beschäftige und meine Elektronikkentnisse sind auch eher rudimentär. Daher tauchen schon so einige Fragen auf, die für andere wohl eher banal sind. Bitte seht mir auch eventuell falsch verwendetes Vokabular nach.
Gekauft habe ich dieses Kit bestehend aus einem Nema 23 und einem DM556 Controller https://www.omc-stepperonline.com/de/1- ... 56t-23hs45. Das wäre jetzt wohl nicht Achims Wahl, ich hoffe es ist trotzdem ausreichend. Als Microcontroller möchte ich einen Arduino Uno verwenden der bei mir noch rumliegt.

Achim verwendet für die Stromversorgung des Microcontrollers einen Spannungwandler. Ist das zwingend, weil z.B.alle Stromkreise an der selben Masse liegen müssen, oder könnte man auch z.B. ein USB-Netzteil verwenden?

Der Motor ist mit einem Nennstrom von 3,5A pro Phase angegeben. Das entspricht dann dem am Controller einzustellenden Strom unter der RMS-Angabe (und nicht dem Peak-Wert) oder?

Bei der Suche nach PWM im Netz waren in den meisten Grafiken die Längen für High und Low gleich groß. Und das wird, wenn ich es richtig verstanden habe, auch in der Bedienungsanleitung des Motor-Controllers empfohlen. Hat es Nachteile, wenn das nicht so gemacht wird?
Ich frage deshalb, weil der von mir angedachte Weg das nicht garantieren kann. Mein Plan wäre zu Beginn des Loops aus dem Signal des noch zu besorgenden Pedals die aktuell gültige Dauer der Phase zu berechnen und dann zu prüfen wieviel Zeit seit der letzten Signaländerung verstrichen ist. Wenn der zuvor berechnete Wert überschritten ist ändere ich das Signal entsprechend. In jedem Loop wird also nur entweder High oder Low gesetzt (oder gar nichts). Im nächsten Loop könnte die errechnet Phasendauer eine andere sein.

In Beitrag 47 des oben genannten Thread wird erwähnt, dass das analoge Eingangssignal 1024 Schritte beträgt (per analogRead() am Pedal, oder?) das Ausgabesignal dann mit 256 Schritten aufgelöst wird. Das sind dann doch die Schritte aus denen ich die Phasenlänge errechne, oder nicht? Die Umrechnung von1024 auf 256 bedeutet ja aber einen extra Rechenschritt, warum nutzt man für die Berechnung nicht direkt die 1024er Schrittauflösung?
Mal abgesehen davon, dass bei niedrigerer Auflösung die Wahrscheinlichkeit etwas steigt, dass die Zeiten für High und Low gleich sind (vorige Frage).

Ist es nötig für den Motor Beschleunigungs- oder Abbremswerte zu berechnen? Im Grunde geht die Beschleunigung bzw. das Abbremsen doch durch das Pedal aus. Zumindest, wenn man nicht schon vor Programmbeginn auf dem Pedal steht. Oder kommt die Motorsteuerung nicht schnell genug dem Pedalweg hinterher?

Die minimale Zeit zwischen zwei Signalen beträgt laut Bedienungsanleitung des Motorcontrollers 2,5 Mikrosekunden. Was passiert, wenn die doch mal unterschritten wird? Kann das zu einem Schaden führen? Die einzige Situation die mir allerdings bislang einfällt und die zu solch kurzer Zeit führen könnte, wäre der Moment in dem der von micros() gelieferte Wert überläuft. Dann ist im nächsten loop die Zeit auf jeden Fall abgelaufen und das Signal wird geändert. Ob allerdings die Berechnungen zu loop-Beginn nicht sowiso schon mehr als 2,5 Mikrosekunden dauern weiß ich nicht.

Das sind nun doch ein paar (hoffentlich nicht komplett dämliche) Fragen mehr geworden (ein paar hätte ich schon noch smile ), ich hoffe das ist trotzdem OK.

Liebe Grüße

Thorsten

Benutzeravatar
js_hsm
Edelschrauber
Edelschrauber
Beiträge: 5414
Registriert: Montag 27. September 2021, 23:40
Wohnort: Erkrath
Kontaktdaten:

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#2 Beitrag von js_hsm »

Erstmal Danke das Du diesen Weg wähst

Beachte dass Schrittmotoren nur eine Untergruppe der BLDCs sind und von mir nur für langsam laufende Maschinen genommen wird.
Wenn Du es perfekt machst kommst Du auf, grob geschätzt, 3-400 SPM
toto hat geschrieben: Mittwoch 31. Januar 2024, 14:19 Achim verwendet für die Stromversorgung des Microcontrollers einen Spannungwandler. Ist das zwingend, weil z.B.alle Stromkreise an der selben Masse liegen müssen, oder könnte man auch z.B. ein USB-Netzteil verwenden?
Egal, Hauptsache 5V
Manche BLDC Endstufen stellen auch 5V bereit (aber nicht die Stepper-Endstufen
toto hat geschrieben: Mittwoch 31. Januar 2024, 14:19 Der Motor ist mit einem Nennstrom von 3,5A pro Phase angegeben. Das entspricht dann dem am Controller einzustellenden Strom unter der RMS-Angabe (und nicht dem Peak-Wert) oder?
Stell ihn auf 2A ein, das sollte reichen
toto hat geschrieben: Mittwoch 31. Januar 2024, 14:19 Bei der Suche nach PWM im Netz waren in den meisten Grafiken die Längen für High und Low gleich groß. Und das wird, wenn ich es richtig verstanden habe, auch in der Bedienungsanleitung des Motor-Controllers empfohlen. Hat es Nachteile, wenn das nicht so gemacht wird?
Ich frage deshalb, weil der von mir angedachte Weg das nicht garantieren kann. Mein Plan wäre zu Beginn des Loops aus dem Signal des noch zu besorgenden Pedals die aktuell gültige Dauer der Phase zu berechnen und dann zu prüfen wieviel Zeit seit der letzten Signaländerung verstrichen ist. Wenn der zuvor berechnete Wert überschritten ist ändere ich das Signal entsprechend. In jedem Loop wird also nur entweder High oder Low gesetzt (oder gar nichts). Im nächsten Loop könnte die errechnet Phasendauer eine andere sein.
Wenn Du mit PWM die Pulslänge für das Taktsignal meinst, das muss nur ein kurzer Peak sein 1ms o.ä.
toto hat geschrieben: Mittwoch 31. Januar 2024, 14:19 In Beitrag 47 des oben genannten Thread wird erwähnt, dass das analoge Eingangssignal 1024 Schritte beträgt (per analogRead() am Pedal, oder?) das Ausgabesignal dann mit 256 Schritten aufgelöst wird. Das sind dann doch die Schritte aus denen ich die Phasenlänge errechne, oder nicht? Die Umrechnung von1024 auf 256 bedeutet ja aber einen extra Rechenschritt, warum nutzt man für die Berechnung nicht direkt die 1024er Schrittauflösung?
Mal abgesehen davon, dass bei niedrigerer Auflösung die Wahrscheinlichkeit etwas steigt, dass die Zeiten für High und Low gleich sind (vorige Frage).
Das mache ich weil die BLDC Endtstufen ein PWM Signal als Drehzahlvorgabe erwarten und ich das mit 8Bit Auflösung rausgebe
toto hat geschrieben: Mittwoch 31. Januar 2024, 14:19 Ist es nötig für den Motor Beschleunigungs- oder Abbremswerte zu berechnen? Im Grunde geht die Beschleunigung bzw. das Abbremsen doch durch das Pedal aus. Zumindest, wenn man nicht schon vor Programmbeginn auf dem Pedal steht. Oder kommt die Motorsteuerung nicht schnell genug dem Pedalweg hinterher?
Ja, absolut. Deswegen wird Dein Weg auch nicht sauber funktionieren wenn man das Pedal schlagartig von 0 auf max durchtritt.
toto hat geschrieben: Mittwoch 31. Januar 2024, 14:19 Die minimale Zeit zwischen zwei Signalen beträgt laut Bedienungsanleitung des Motorcontrollers 2,5 Mikrosekunden. Was passiert, wenn die doch mal unterschritten wird? Kann das zu einem Schaden führen? Die einzige Situation die mir allerdings bislang einfällt und die zu solch kurzer Zeit führen könnte, wäre der Moment in dem der von micros() gelieferte Wert überläuft. Dann ist im nächsten loop die Zeit auf jeden Fall abgelaufen und das Signal wird geändert. Ob allerdings die Berechnungen zu loop-Beginn nicht sowiso schon mehr als 2,5 Mikrosekunden dauern weiß ich nicht.
Rechne mal die benötigte Frequenz bei der gewählten Stepauflösung und der gewünschten max. Drehzahl aus.

Gruß, Achim
Der Maschinen(um)bauer
Adler 30,48,67,69 Pfaff 130,141,142,145,335,1222, Typical GC20606-18, Sailrite 9" Clone und.....
https://youtube.com/@Special_Solutions
BLDC-Servos https://www.naehmaschinentechnik-forum. ... 33#p119733

Benutzeravatar
js_hsm
Edelschrauber
Edelschrauber
Beiträge: 5414
Registriert: Montag 27. September 2021, 23:40
Wohnort: Erkrath
Kontaktdaten:

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#3 Beitrag von js_hsm »

Hochwertige BLDC Motoren haben Hallsensoren auf der Motorwelle und geben so dem Motorcontroller eine Lageinformation so dass dieser ggf. nachregeln kann.

Schrittmotoren habe diese nicht.
Sie haben deutlich mehr Wicklungen/Schritte pro Umdrehung.
Schlagartige Drehfeldänderungen/Frequenzerhöhung können dazu führen das der Motor nur noch brummt und sich nicht mehr dreht.
Dann muss die Frequenz erst gegen Null runtergeregelt werden um von vorne zu beginnen.
Bei CNC Maschinen mit definierten Fahrwegen fährt man deswegen sogenannte Beschleunigungs- und Bremsrampen.
D.h. die Taktfrequenz wird kontinuierlich gesteigert bis die Bahngeschwindigkeit erreicht ist und vor dem Erreichen der Sollposition wird die Frequenz wieder verringert.


Da die Nähmaschine möglichst gut auf die Pedalstellung reagieren soll fällt natürlich zuerst die Überlegung auf einen Frequenzgenator der von 0 bist zur gewünschten Maximalfrequenz angesteuert werden kann.
Dabei erwarten einen aber das oben erwähnte Problem.
Man näht langsam los und gibt dann "Vollgas". Den Effekt habe ich oben beschrieben.

Deshalb verwende ich einen Mikrocontroller der die Stellung des Fußpedals als Frequenz-Sollwert bereitstellt und einen autarken Thread der die Frequenzausgabe rampenmäßig und permanent an den Sollwert anpasst aber in Schritten die der Motor verkraftet.
Der Maschinen(um)bauer
Adler 30,48,67,69 Pfaff 130,141,142,145,335,1222, Typical GC20606-18, Sailrite 9" Clone und.....
https://youtube.com/@Special_Solutions
BLDC-Servos https://www.naehmaschinentechnik-forum. ... 33#p119733

toto
Neu im Forum
Neu im Forum
Beiträge: 24
Registriert: Donnerstag 20. Juli 2023, 10:00

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#4 Beitrag von toto »

Moin Achim,

vielen Dank für Deine Antwort. Ich habe gestern nachdem ich sie las versucht nochmal ein wenig nachzulesen.
Ich hatte natürlich ein stückweit gehofft, dass meine Lösung die Rampen unnötig macht sad
In irgendeinem Thread hattest Du schon mal die die schlagartige Vollgasproblematik erwähnt. Das hatte ich aber in erster Linie auf Beispielcode im Thread verstanden, da dort mit delay() gearbeitet wurde. Dort wurde auch die Lib AccelStepper erwähnt, die u.a. das Abbremsen / Beschleunigen enthält. Diese Lib ist aber nur für irgendwelche Arduino Shield gedacht, oder? Zumindest erwartet der Constructor die Arduino-Pins des Motors. In der Doku der Lib wird auch auf ein Paper verwiesen welches zu Rampenberechnung herangezogen wurde. Nach einem kurzen Blick darauf wäre mir einfacherer Weg aber etwas lieber sad
js_hsm hat geschrieben: Mittwoch 31. Januar 2024, 17:24 Deshalb verwende ich einen Mikrocontroller der die Stellung des Fußpedals als Frequenz-Sollwert bereitstellt und einen autarken Thread der die Frequenzausgabe rampenmäßig und permanent an den Sollwert anpasst aber in Schritten die der Motor verkraftet.
Da fängt das Problem für mich gleich an. Woher weiß ich welche Schritte der Motor verkraftet? Kann ich das irgendwelchen Motorkenndaten entnehmen, oder find ich das nur durch Versuch raus? Wäre so ein Wert über alle Drehzahlbereiche gültig? Also z.B. nur X Prozent schneller / langsamer als beim letzten Step?

Das Abbremsen am Ende der Beschleunigung fällt hier doch weg, oder? Ich will ja keine Position anfahren und dann sachte abgebremst dort verharren, oder habe ich das missverstanden?

Die Berechnung der Soll-Werte anhand der Pedalstellung geschieht (bislang nur theoretisch mangels Pedal) bei mir derzeit zu Beginn eines jeden Loops. Ich überlege jedoch ob es sinnvoll sein könnte das über einen Interrupt zu machen. Meine Erfahrung mit dem Arduino sind jedoch noch nicht sehr umfangreich.
Daher frage ich mich auch, was genau Du mit autarkem Thread meinst? Mein Verständnis von Threads ist, dass bei Verwendung mehrerer Threads alle gleichzeitig laufen können, bzw. je nach Prozessorzahl zumindest fast gleichzeitig. Kann das der Arduino auch?

Zumindest die Interrupts werden durch die Nutzung von delays, wie ich gestern las, nicht ausgebremst. Wäre es daher evtl. sinnvoll meine Lösung mit der Abfrage der verstrichenen Zeit zum Setzen eines Signals wieder über Bord zu schmeißen und per delays in jedem Loop nacheinander beide Taktsignale zu setzen?

Liebe Grüße

Thorsten

Fietsenfahrer
Handraddreher
Handraddreher
Beiträge: 73
Registriert: Mittwoch 8. September 2021, 19:06
Wohnort: Nordhorn

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#5 Beitrag von Fietsenfahrer »

toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 In irgendeinem Thread hattest Du schon mal die die schlagartige Vollgasproblematik erwähnt. Das hatte ich aber in erster Linie auf Beispielcode im Thread verstanden, da dort mit delay() gearbeitet wurde. Dort wurde auch die Lib AccelStepper erwähnt, die u.a. das Abbremsen / Beschleunigen enthält. Diese Lib ist aber nur für irgendwelche Arduino Shield gedacht, oder?
Das war mein Thread. Viel weiter bin ich aus Zeitgründen (und zu vielen offenen Projekten) noch nicht gekommen. Allerdings werde ich AccelStepper nicht verwenden, da die Bibliothek darauf ausgelegt ist, bestimmte Positionen anzufahren und nicht darauf ausgelegt ist, dauerhaft den Motor drehen zu lassen.
Allerdings bin ich auf eine anderen vielversprechende Lib gestoßen: https://github.com/bblanchon/ArduinoContinuousStepper
Die beinhaltet auch die Beschleunigung, bzw. das Abbremsen. Ich habe ein bisschen damit rum gespielt und meiner Meinung nach sieht das vielversprechend aus.

Ich teile gern meinen Code, mit dem Hinweis, dass das bisher nur reines Rumspielen mit der Lib ist und weit von etwas "fertigem" ist. Aber vielleicht gibt es Dir einen Anstoß in die richtige Richtung.
Die Funktionsweise ist simpel. In einem Timerinterrupt wird die Stellung des Fußpedals ausgewertet und die Zielgeschwindigkeit ermittelt. Aktuell mit 2 Hz, da ist auszuprobieren, wie oft das sinnvoll ist. Vermutlich sind 2 Hz zu wenig. In der Hauptschleife wird lediglich die Zielgeschwindigkeit gesetzt (sofern sie sich verändert hat) und der Motor gedreht.
Aber nochmal der Hinweis, reines Experimentalstadium.

Code: Alles auswählen

#include <Arduino.h>
#include <ContinuousStepper.h>
#include <ContinuousStepper/Tickers/Tone.hpp>

const int PIN_PUL = 12;
const int PIN_DIR = 6;
const int PIN_POT = A1;
const int steps_per_revolution = 400;

const int HAL_SENSOR_STOP_VALUE = 520;
const int HAL_SENSOR_FULL_THROTTLE_VALUE = 870;

const int max_speed = 4000;
const int acceleration = 2000;
int target_speed = 0;
int last_target_speed = 0;

ContinuousStepper<StepperDriver, ToneTicker> stepper;

void setupTimer1();
void setupStepper();

void setup() {
  Serial.begin(9600);

  cli(); // disable interrupts during setup 
  setupTimer1();
  setupStepper();
  sei(); // re-enable interrupts

}

void loop() {
  
  if (last_target_speed != target_speed) {
    last_target_speed = target_speed;
    stepper.spin(target_speed);    
  }

  stepper.loop();
  
}

void setupTimer1() {
  noInterrupts();
  // Clear registers
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;

  // 2 Hz (16000000/((31249+1)*256))
  OCR1A = 31249;
  // CTC
  TCCR1B |= (1 << WGM12);
  // Prescaler 256
  TCCR1B |= (1 << CS12);
  // Output Compare Match A Interrupt Enable
  TIMSK1 |= (1 << OCIE1A);
  interrupts();
}

void setupStepper() {
  stepper.begin(PIN_PUL, PIN_DIR);
  stepper.setAcceleration(acceleration);  
}

// Timer 1 interrupt service routine (ISR)
// Wertet die Positon des Fußpedals aus
ISR(TIMER1_COMPA_vect)
{
  int val = analogRead(PIN_POT);

  if (val < HAL_SENSOR_STOP_VALUE) {
    target_speed = 0;
  } else if (val > HAL_SENSOR_FULL_THROTTLE_VALUE) {
    target_speed = max_speed;
  } else {
    target_speed = map(val, HAL_SENSOR_FULL_THROTTLE_VALUE, HAL_SENSOR_STOP_VALUE, max_speed, 0);
  }
      
  Serial.println(val);
  Serial.println(target_speed);
  
}
viele Grüße, Jens

Benutzeravatar
js_hsm
Edelschrauber
Edelschrauber
Beiträge: 5414
Registriert: Montag 27. September 2021, 23:40
Wohnort: Erkrath
Kontaktdaten:

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#6 Beitrag von js_hsm »

Die Tone Funktion ist der richtige Weg aber eine Lib brauchst Du dafür nicht wink

Gruß, Achim
Der Maschinen(um)bauer
Adler 30,48,67,69 Pfaff 130,141,142,145,335,1222, Typical GC20606-18, Sailrite 9" Clone und.....
https://youtube.com/@Special_Solutions
BLDC-Servos https://www.naehmaschinentechnik-forum. ... 33#p119733

Benutzeravatar
js_hsm
Edelschrauber
Edelschrauber
Beiträge: 5414
Registriert: Montag 27. September 2021, 23:40
Wohnort: Erkrath
Kontaktdaten:

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#7 Beitrag von js_hsm »

toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 Da fängt das Problem für mich gleich an. Woher weiß ich welche Schritte der Motor verkraftet?
Kann ich das irgendwelchen Motorkenndaten entnehmen, oder find ich das nur durch Versuch raus?
Wäre so ein Wert über alle Drehzahlbereiche gültig? Also z.B. nur X Prozent schneller / langsamer als beim letzten Step?
Testen, hängt u.a. ab vom Motor, Strom,Belastung etc.
toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 Das Abbremsen am Ende der Beschleunigung fällt hier doch weg, oder?
Ich will ja keine Position anfahren und dann sachte abgebremst dort verharren, oder habe ich das missverstanden?
Ja, da kannst Du draf verzichten
toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 Die Berechnung der Soll-Werte anhand der Pedalstellung geschieht (bislang nur theoretisch mangels Pedal) bei mir derzeit zu
Beginn eines jeden Loops. Ich überlege jedoch ob es sinnvoll sein könnte das über einen Interrupt zu machen.
Im Loop reicht allemal
toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 Meine Erfahrung mit dem Arduino sind jedoch noch nicht sehr umfangreich.
Daher frage ich mich auch, was genau Du mit autarkem Thread meinst? Mein Verständnis von Threads ist, dass bei Verwendung mehrerer Threads alle gleichzeitig laufen können, bzw. je nach Prozessorzahl zumindest fast gleichzeitig. Kann das der Arduino auch?
Ich nutze eine Timer (Timer1) als Task zur Anpassung der Frequen
toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 Zumindest die Interrupts werden durch die Nutzung von delays, wie ich gestern las, nicht ausgebremst. Wäre es daher evtl. sinnvoll meine Lösung mit der Abfrage der verstrichenen Zeit zum Setzen eines Signals wieder über Bord zu schmeißen und per delays in jedem Loop nacheinander beide Taktsignale zu setzen?
Wo immer möglich Finger weg von Delay !

Gruß, Achim
Der Maschinen(um)bauer
Adler 30,48,67,69 Pfaff 130,141,142,145,335,1222, Typical GC20606-18, Sailrite 9" Clone und.....
https://youtube.com/@Special_Solutions
BLDC-Servos https://www.naehmaschinentechnik-forum. ... 33#p119733

Benutzeravatar
js_hsm
Edelschrauber
Edelschrauber
Beiträge: 5414
Registriert: Montag 27. September 2021, 23:40
Wohnort: Erkrath
Kontaktdaten:

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#8 Beitrag von js_hsm »

toto hat geschrieben: Donnerstag 1. Februar 2024, 14:27 Das Abbremsen am Ende der Beschleunigung fällt hier doch weg, oder? Ich will ja keine Position anfahren und dann sachte abgebremst dort verharren, oder habe ich das missverstanden?
P.S. ich mache es aber trotzdem nur dekrementiere ich die Ausgangsfrequenz deutlich schneller und in größeren Schritten als ich sie beim Beschleunigen inkrementiere wink

Gruß, Achim
Der Maschinen(um)bauer
Adler 30,48,67,69 Pfaff 130,141,142,145,335,1222, Typical GC20606-18, Sailrite 9" Clone und.....
https://youtube.com/@Special_Solutions
BLDC-Servos https://www.naehmaschinentechnik-forum. ... 33#p119733

toto
Neu im Forum
Neu im Forum
Beiträge: 24
Registriert: Donnerstag 20. Juli 2023, 10:00

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#9 Beitrag von toto »

Moin,

vielen Dank Achim und Jens für Eure Antworten und entschuldigt bitte, dass ich obwohl schon gestern gelesen erst heute antworte. Ich habe versucht mich in die neuen Infos erst noch etwas einzulesen, liege aber derzeit leider obendrein etwas außer Gefecht gesetzt im Bett.

Da gilt es wohl noch einige Hausaufgaben zu machen. Die Timer kannte ich noch gar nicht, einzig die attachInterrupt() Methode, die ich zum Auslesen des Pedals in die Erwägung gezogen hatte.
Ich habe mir ein paar Seiten zu den Timern angesehen und war erst mal ein stückweit erschlagen von all den Registern die da konfigurierten werden können. Beim Timer1 ja gleich noch ein paar mehr. Der Lern- / Lesestoff geht mir da sicher nicht aus. Ich hoffe es ist OK dennoch gleich wieder Fragen zu stellen, die mir sofort in den Sinn kamen.

Jens, erst mal Danke für das Teilen des Codes. Die Registergeschichten muss man auch bei ArduinoContinuousStepper selbst erledigen so wie Du es auch in Deinem Code machst, oder? Auf die Schnelle habe ich im Sourcecode der Lib auch nichts Vorkonfiguriertes finden können. Da ArduinoContinuousStepper so zudem einiges an optionalen / alternativen Features bietet, werde ich wohl erstmal versuchen wie von Achim geschrieben das Ganze über Timer1 und tone() zu versuchen.

Die tone() Funktion selbst nutzt einen Timer und läßt den Motor unabhängig von jedwedem Programmcode bis auf Widerruf (noTone()) seine Runden in der angegeben Frequenz drehen. Diese Frequenz kann simpel durch einen weiteren Aufruf von tone() mit der gewünschten und über Timer1 ermittelten neuen Frequenz geändert werden. Das ist soweit richtig verstanden, oder?
Wenn ich es weiter richtig verstanden habe, wird die Timerdauer, egal welches Timers, zu Beginn des Programms festgelegt und bleibt über die gesamte Laufzeit fix (dann wohl angepasst auf die maximale Geschwindigkeit des Motors), oder kann sie jeweils zur momentanen Motorgeschwindigkeit geändert werden, z.B. durch anderen Startwert im TCNT-Register? Die Wahl von Timer1 u.a. wegen der flexibleren Timerlaufzeit?
Die Timergeschwindigkeit wird analog zu anderen Abtastszenarien auch mindesten doppelt so schnell wie die Motorfrequenz sein,oder?

Ist beim Aktualisieren von tone() gewährleistet, dass der letzte "Ton" vor der Aktualisierung noch zu Ende gespielt werden kann? Oder gewährt dies z.B. ein vorangehender Aufruf von noTone()? Ansonsten könnte doch hier wieder das Problem auftreten können, dass die Beschleunigung unerwünscht hoch ausfallen könnte, oder nicht? Das würde nach meinem derzeitigen Verständnis dann doch speziell bei langsamer Momentangeschwindigkeit und fixer an die Maximalgeschwindigkeit angepasster Timer1 Laufzeit problematisch werden können, da tone() dann öfter als tatsächlich nötig aufgerufen wird.

Gestern Abend wurde übrigens auch das Pedal geliefert, eigentlich könnte es nun direkt losgehen. Aber es geht mir auch ein stückweit wie Jens, irgendwie poppen ständig irgendwelche Baustellen mit höherer Priorität auf. Die Nähmaschine ist inzwischen schon wieder angestaubt und auch immer noch nicht justiert. Ich bleibe aber zuversichtlich smile

Liebe Grüße

Thorsten

Benutzeravatar
js_hsm
Edelschrauber
Edelschrauber
Beiträge: 5414
Registriert: Montag 27. September 2021, 23:40
Wohnort: Erkrath
Kontaktdaten:

Re: Fragen mit Bezug auf Thread Ansteuerung von BLDC Motoren für Nähmaschinen

#10 Beitrag von js_hsm »

Erstmal suche die Library TimerOne.

Du kannst Ausgangsfrequenz der tone() Funktion während der Frequenzausgabe jederzeit ändern.

z.B.
tone(50)
...warte n ms
tone(100)
...warte n ms
tone(200)
...warte n ms
tone(400)
:
:


Gruß, Achim
Der Maschinen(um)bauer
Adler 30,48,67,69 Pfaff 130,141,142,145,335,1222, Typical GC20606-18, Sailrite 9" Clone und.....
https://youtube.com/@Special_Solutions
BLDC-Servos https://www.naehmaschinentechnik-forum. ... 33#p119733

Antworten