Prog Shield Step Motor

Fra Holstebro HTX Wiki
Skift til: navigering, søgning
Step-Motor med 2038 step pr. omgang - motoren er gearet til så mange step.

Stepmotoren er en motortype, hvor man ved hjælp af et program kan rykke motorens position et hak ad gangen.

Software

Biblioteket der anvendes stammer fra Arduinos hjemmeside [1]. Biblioteket ligger installeret som en del af IDE'et, så det er ikke nødvendigt at installere yderligere. Der ligger en række eksempler, der lige kræver lidt tilpasning for at kunne anvendes til Programmerings-Shieldet.

I det anvendte eksempel er tilpasningerne lavet ud fra stepper_speedControl, og er gemt i denne ZIP-fil.

Eksemplet kan køre en stepmotor som vist her med forskellige hastigheder ved at dreje på R1.

Anvendelsen af softwaren

Som alle andre biblioteker skal der sættes de grundlæggende ting op for at kontakte biblioteket og definere objektet myStepper.

#include <Stepper.h>

const int stepsPerRevolution = 2038;  // change this to fit the number of steps per revolution for your motor

// initialize the stepper library on pins 10 and 11:
Stepper myStepper(stepsPerRevolution, 10, 11);

int stepCount = 0;  // number of steps the motor has taken

Inde i setup() skal der ikke ske noget.

void setup() {
}

I loop() læses den analoge værdi fra R1 (sidder på A0), og værdien omsættes til en værdi fra 0-20, derefter steppes motoren med det ønskede antal steps til at give den korrekte hastighed.

void loop() {
  // read the sensor value:
  int sensorReading = analogRead(A0);
  // map it to a range from 0 to 100:
  int motorSpeed = map(sensorReading, 0, 1023, 0, 20);
  // set the motor speed:
  if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
    myStepper.step(stepsPerRevolution / 100);
  }
}

Yderligere muligheder i softwaren

Der ligger yderligere muligheder i klassen man kan anvende, hvis man ønsker andre måder at anvende stepmotoren på, men det dækker hovedsageligt over andre motor-typer:

    Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2);
    Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2,
                                 int motor_pin_3, int motor_pin_4);
    Stepper(int number_of_steps, int motor_pin_1, int motor_pin_2,
                                 int motor_pin_3, int motor_pin_4,
                                 int motor_pin_5);

    // speed setter method:
    void setSpeed(long whatSpeed);

    // mover method:
    void step(int number_of_steps);

    int version(void);

Andre biblioteker til stepmotoren

Standard biblioteket til stepmotoren har det problem, at softwaren blokerer programafvikling, mens man stepper - dette kan være ret uheldigt i forbindelse med betjening og kommunikation, eller generelt det at få flere ting til at ske "samtidigt"[2] i softwaren.

Der er udviklet et bibliotek på github[3] - Unistep2.

Her på wikien er der forklaret et andet bibliotek til steppermotoren, som både understøtter samtidighed og accelleration.

Hardware

Princippet i en stepmotor er at den drives af 4 spoler, der tilføres signaler med 90 graders faseforskydning. Signalerne laves ud fra 2 signaler, der inverteres, så alle 4 signaler til motoren opstår. For at spolerne kan få tilstrækkeligt strøm, så skal signalerne forstærkes i en ULN2803.

Signalerne til motoren ser således ud, når motoren kører rundt med konstant hastigehed:
Stepmotor-Maaling.png
Signalerne til Stepmotoren

Rettelse til stepmotoren

På printet har der indsneget sig en fejl, der har den uheldige effekt at stepmotoren kun kan køre den ene vej rundt. Det betyder at der er 2 signaler der skal byttes. Det gøres lettest mens man opbygger shieldet, da der skal kappes to baner, hvilket er lettest at gøre inden man monterer komponenter på shieldet, der skal også monteres to stykker ledning, men det er lettest at gøre efter komponenterne er loddet på.

Rettelsen kan også laves efter at printet er monteret op, man skal bare være lidt mere forsigtig når man kapper de to baner.

De to baner der skal afbrydes er illustreret herunder:

Bane der skal afbrydes på loddesiden

Bane der skal afbrydes på loddesiden

Bane der skal afbrydes på komponentsiden

Bane der skal afbrydes på komponentsiden

Når man har fået loddet komponenterne på printet, så skal de to forbindelse etableres korrekt. Det gøres lettest med to stykker isoleret stiv monteringsledning.

Rettelsen laves som følger:

Ledninger der skal tilføjes på loddesiden
Ledninger der skal tilføjes på loddesiden

Gearing i stepmotoren

Umiddelbart vil man de fleste steder læse at der er 2048 step pr. omgang, hvilket passer med en 1/64 gearing.

Det der sidder inde i gearet er dog lidt anderledes, som ses herunder - det giver ca. 2038 step pr. omgang.

Gear in stepper motor

Layout

Step-motorens placering på programmerings-shieldet kan ses her:
Layout-Step-Motor.png
Placering af Tilslutning til Step-Motor

Referencer