Aller au contenu

Hugo_63

Nouveau Membre
  • Compteur de contenus

    1
  • Inscription

  • Dernière visite

Hugo_63's Achievements

  1. Bonjour, Je suis en train de concevoir une monture azimutale sur laquelle je vais placer une parabole afin de faire un radiotelescope DIY. J'ai fini la monture, mais il me reste sa motorisation qui est compliquée. J'ai actuellement une Fysetc S6 v2.1, avec deux drivers QHV5160 et deux moteurs NEMA 23, mon soucis est que j'ai voulu coder un programme en C++ pour gérer le contrôle de la monture mais je n'arrive pas à le faire marcher, je reçois via le moniteur de série d'Arduino, que les drivers sont connectés, puis j'envoie une commande, je n'ai pas d'erreur mais j'ai aucune rotation, malgré le fait que l'arbre soit un peu plus rigide et c'est plus dur de le faire tourner avec ses doigts donc je me dis que le courant doit aller jusqu'au moteur mais je ne comprends pas pourquoi le moteur ne tourne pas. Je joins mon programme à mon message, est-ce que quelqu'un aurait une idée ? #include <AccelStepper.h> #include <TMCStepper.h> #include <SPI.h> // PINOUT S6 V2.1 (connecteurs X-MOT / Y-MOT) #define AZ_STEP_PIN PE11 // X_STEP_PIN #define AZ_DIR_PIN PE10 // X_DIR_PIN #define AZ_CS_PIN PE7 // X_CS_PIN #define ALT_STEP_PIN PD8 // Y_STEP_PIN #define ALT_DIR_PIN PB12 // Y_DIR_PIN #define ALT_CS_PIN PE15 // Y_CS_PIN #define R_SENSE 0.075f #define AZ_RUN_CURRENT_MA 1500 #define ALT_RUN_CURRENT_MA 1500 #define SOFT_SPI_MOSI PE14 #define SOFT_SPI_MISO PE13 #define SOFT_SPI_SCK PE12 TMC5160Stepper az_driver(AZ_CS_PIN, R_SENSE, SOFT_SPI_MOSI, SOFT_SPI_MISO, SOFT_SPI_SCK); TMC5160Stepper alt_driver(ALT_CS_PIN, R_SENSE, SOFT_SPI_MOSI, SOFT_SPI_MISO, SOFT_SPI_SCK); AccelStepper az(AccelStepper::DRIVER, AZ_STEP_PIN, AZ_DIR_PIN); AccelStepper alt(AccelStepper::DRIVER, ALT_STEP_PIN, ALT_DIR_PIN); float azSpeed = 0; // steps/s, signé (direction = signe) float altSpeed = 0; const float MAX_SPEED = 4000.0; String inputBuffer = ""; #define MICROSTEPS 16 void setup() { Serial.begin(115200); az_driver.begin(); az_driver.rms_current(AZ_RUN_CURRENT_MA); az_driver.microsteps(MICROSTEPS); az_driver.toff(5); az_driver.en_pwm_mode(true); az_driver.pwm_autoscale(true); alt_driver.begin(); alt_driver.rms_current(ALT_RUN_CURRENT_MA); alt_driver.microsteps(MICROSTEPS); alt_driver.toff(5); alt_driver.en_pwm_mode(true); alt_driver.pwm_autoscale(true); // Test SPI Serial.print("AZ test_connection="); Serial.print(az_driver.test_connection()); Serial.print(" version=0x"); Serial.println(az_driver.version(), HEX); Serial.print("ALT test_connection="); Serial.print(alt_driver.test_connection()); Serial.print(" version=0x"); Serial.println(alt_driver.version(), HEX); az.setMaxSpeed(MAX_SPEED); alt.setMaxSpeed(MAX_SPEED); Serial.println("READY"); } void loop() { readSerial(); az.setSpeed(constrain(azSpeed, -MAX_SPEED, MAX_SPEED)); alt.setSpeed(constrain(altSpeed, -MAX_SPEED, MAX_SPEED)); az.runSpeed(); alt.runSpeed(); } void readSerial() { while (Serial.available()) { char c = (char)Serial.read(); if (c == '\n') { handleCommand(inputBuffer); inputBuffer = ""; } else if (c != '\r') { inputBuffer += c; } } } void handleCommand(String cmd) { cmd.trim(); if (cmd == "PING") { Serial.println("PONG"); } else if (cmd == "STOP") { azSpeed = 0; altSpeed = 0; Serial.println("OK"); } else if (cmd.startsWith("VEL,1,")) { azSpeed = cmd.substring(6).toFloat(); Serial.println("OK"); } else if (cmd.startsWith("VEL,2,")) { altSpeed = cmd.substring(6).toFloat(); Serial.println("OK"); } else if (cmd == "DIAG") { Serial.print("AZ test_connection="); Serial.print(az_driver.test_connection()); Serial.print(" version=0x"); Serial.println(az_driver.version(), HEX); Serial.print("ALT test_connection="); Serial.print(alt_driver.test_connection()); Serial.print(" version=0x"); Serial.println(alt_driver.version(), HEX); } else if (cmd.startsWith("RAWSTEP,")) { int axis = cmd.substring(8).toInt(); uint8_t stepPin = (axis == 1) ? AZ_STEP_PIN : ALT_STEP_PIN; uint8_t dirPin = (axis == 1) ? AZ_DIR_PIN : ALT_DIR_PIN; digitalWrite(dirPin, HIGH); for (int i = 0; i < 400; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(800); digitalWrite(stepPin, LOW); delayMicroseconds(800); } Serial.println("OK"); } else { Serial.println("ERR"); } } Merci d'avance, Hugo
      • 1
      • J'aime
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.