Schrittmotor über RC Fernsteuerung steuern

Moin,
ich hab hier ein Projekt in dem ich echt nicht weiterkomme und würde mich freuen wenn Ihr mir weiterhelfen könntet. Ich möchte einen Schrittmotor über eine RC-Fernsteuerung steuern, also über den PWM Ausgang eines RC_Empfängers. Bei Knüppelmittelstellung ist die Drehgeschwindigkeit =0. Je nach Knüppelausschlag dreht der Motor links oder Rechts rum und dreht auch entsprechend schnell. Im Prinzip funktioniert es schon, Der Motor wechselt die Drehrichtung und ändert auch seine Geschwindigkeit entsprechend dem Knüppelausschlag. Leider dreht sich der Motor nur sehr langsam und Brummt. Ich vermute das sich AccelStepper und PulseIn irgendwie in die Quere kommen...aber wie gesagt ist nur eine Vermutung....davon verstehe ich nicht wirklich etwas. Hier mein Code:

#include <AccelStepper.h>

int PWM_PIN1 = 3; //Define Digital PIN


// Definiere die Pins für den Schrittmotor
#define STEP_PIN 5
#define DIR_PIN 4

// Erstelle ein AccelStepper-Objekt
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

void setup() {
// Setze die maximale Geschwindigkeit und Beschleunigung
stepper.setMaxSpeed(5000); // Maximalgeschwindigkeit
stepper.setAcceleration(100); // Beschleunigung

  pinMode(PWM_PIN1, INPUT);
  Serial.begin(115200);
}

void loop() {

   int pwm1 = pulseIn(PWM_PIN1, HIGH); //Read PWM Pulse
 
  Serial.print("PWM CH1: ");
  Serial.println(pwm1);


// Map den PWM-Wert auf die Geschwindigkeit (0-1000)
int speed = map(pwm1, 1000, 2000, -5000, 5000);

// Setze die Geschwindigkeit des Schrittmotors
stepper.setSpeed(speed);

// Bewege den Motor
stepper.runSpeed();
}

tippe oder füge den Code hier ein

genau, wenn du willst 5000 Schritte machen, dann muss es 5000 mal auch pulseIn() durchgemacht werden und es dauert bis 1 Sekunde jedes Mal.

As I've got it AccelStepper don't manage more then 4000 steps per second.
Try this concept: Only call pulseIn once per second to read the speed and let loop run full speed between those readings. It will give a second latenzy in responce to joystick changes. You can try 1/2 second intercalls, 1/10 of a second and see.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

pulseIn() ist eine blockierende Funktion und kann recht lange dauern. runSpeed() erzeugt maximal einen Impuls, so das pulsIn() die Impulserzeugung stark beeinflusst. So wie es derzeit ist, bekommst Du nur einen Step-Puls pro loop-Durchlauf.
Welchen Prozessor verwendest Du? Wenn er unterstützt wird, könntest Du es mit MobaTools versuchen. Die MoToStepper-Klasse erzeugt die Impulse per Timerinterrupt, also auch während pulsIn() misst. Inwieweit das dann das Messergebnis beeinflusst, musst Du ausprobieren.
MoToStepper kann auf einem AVR 'Out of the box' nur maximal 2500 Steps/Sek. Bei nur einem Stepper könnte man das aber mit einem #define in MobaTools.h 'tunen', dann gehen bis zu 5000 Steps/Sek.