firmware-base/vendor/qitech/Winder/experiments/AccelStepper/AccelStepper.cpp
2026-01-28 16:42:43 +01:00

66 lines
2.1 KiB
C++

#include <AccelStepper.h>
#include <TMCStepper.h>
using TMC2130_n::DRV_STATUS_t;
#define EN_PIN 12 // Enable
#define DIR_PIN 16 // Direction
#define STEP_PIN 26 // Step
#define CS_PIN 5 // Chip select
#define SW_MOSI 23 // Software Master Out Slave In (MOSI)
#define SW_MISO 19 // Software Master In Slave Out (MISO)
#define SW_SCK 18 // Software Slave Clock (SCK)
#define R_SENSE \
0.11f // Match to your driver \
// SilentStepStick series use 0.11 \
// UltiMachine Einsy and Archim2 boards use 0.2 \
// Panucatt BSD2660 uses 0.1 \
// Watterott TMC5160 uses 0.075
// Select your stepper driver type
TMC2130Stepper driver = TMC2130Stepper(CS_PIN, R_SENSE); // Hardware SPI
constexpr uint32_t steps_per_mm = 80;
AccelStepper stepper = AccelStepper(stepper.DRIVER, STEP_PIN, DIR_PIN);
void setup() {
SPI.begin();
Serial.begin(115200);
while (!Serial)
;
Serial.println("Start...");
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
driver.begin(); // Initiate pins and registeries
driver.rms_current(600); // Set stepper current to 600mA. The command is the same as command TMC2130.setCurrent(600, 0.11, 0.5);
driver.en_pwm_mode(1); // Enable extremely quiet stepping
driver.pwm_autoscale(1);
driver.microsteps(16);
stepper.setMaxSpeed(500 * steps_per_mm); // 100mm/s @ 80 steps/mm
stepper.setAcceleration(1000 * steps_per_mm); // 2000mm/s^2
stepper.setEnablePin(EN_PIN);
stepper.setPinsInverted(false, false, true);
stepper.enableOutputs();
}
void loop() {
if (stepper.distanceToGo() == 0) {
stepper.disableOutputs();
delay(100);
stepper.move(100 * steps_per_mm); // Move 100mm
stepper.enableOutputs();
}
DRV_STATUS_t drv_status{0};
drv_status.sr = driver.DRV_STATUS();
Serial.print("0 ");
Serial.print(drv_status.sg_result, DEC);
Serial.print(" ");
Serial.println(driver.cs2rms(drv_status.cs_actual), DEC); // mA currently consumed
stepper.run();
}