waspinator / AccelStepper

Fork of AccelStepper
http://www.airspayce.com/mikem/arduino/AccelStepper/
Other
146 stars 86 forks source link

Can I use this with the Arduino Portenta Machine Control? #35

Open wallahi06 opened 7 months ago

imatrisciano commented 5 months ago

I spent most of today trying to figure this question out and want to share my results

Technically it can be used, but the only 8 digital outputs of the Portenta Machine Control go through a current limiting chip and the signal edges are really slow. This means that we need to setup a huge step width, leading to a ton of CPU time wasted doing spin locks. Also for some reason the digitalWrite function used to set the output pins does not correctly detect the pin, so we call PinNameToIndex when telling AccelStepper the pin names

#include <Arduino.h>
#include <Arduino_PortentaMachineControl.h>
#include <pinDefinitions.h>
#include <AccelStepper.h>

AccelStepper stepper(AccelStepper::MotorInterfaceType::DRIVER, PinNameToIndex(MC_DO_DO0_PIN), PinNameToIndex(MC_DO_DO1_PIN)); // Step on DO0, Dir on DO1

void setup()
{
    MachineControl_DigitalOutputs.begin();
    stepper.enableOutputs();
    stepper.setMinPulseWidth(130); // this is necessary. Maybe you can get it to work with something closer to 100us, but 130us seems like a safe value
    stepper.setAcceleration(1000); // choose any value you want
    stepper.setMaxSpeed(1000); // I wouldn't go above 1000, but values up to 1500 might work
    stepper.setSpeed(100); // choose any value up to MaxSpeed
}

void loop()
{
    stepper.runSpeed();
}