Stappen motoren

Hallo
Eerst even voorstellen mijn naam is Jan.
Ik ben sinds kort bezig met een Arduino uno dus alles is nieuw en onbekend voor mij.
Ik ben bezig met een uno om een stappen motor te laten draaien en dat lukt prima ( hi hi)
Nu is mijn vraag of er iemand is die mij wil en kan helpen.
De bedoeling is om 2 motoren te laten draaien met behulp van de uno en een 2 tal motordrivers,
is het mogelijk om de bijgevoegde sketch uit te breiden zodat ik 2 motoren kan laten draaien
en zo mogelijk een 3 tal motoren ?
Alvast bedankt voor de hulp.
Met vriendelijke groet

/* Include the library */
#include “HCMotor.h”

/* Pins used to drive the motors */
#define DIR_PIN 8 //Connect to drive modules ‘direction’ input.
#define CLK_PIN 9 //Connect to drive modules ‘step’ or ‘CLK’ input.

/* Set the analogue pin the potentiometer will be connected to. */
#define POT_PIN A0

/* Set a dead area at the centre of the pot where it crosses from forward to reverse */
#define DEADZONE 20

/* The analogue pin will return values between 0 and 1024 so divide this up between
forward and reverse */
#define POT_REV_MIN 0
#define POT_REV_MAX (512 - DEADZONE)
#define POT_FWD_MIN (512 + DEADZONE)
#define POT_FWD_MAX 1024

/* Create an instance of the library */
HCMotor HCMotor;

void setup()
{
//Serial.begin(9600);
/* Initialise the library */
HCMotor.Init();

/* Attach motor 0 to digital pins 8 & 9. The first parameter specifies the
motor number, the second is the motor type, and the third and forth are the
digital pins that will control the motor */
HCMotor.attach(0, STEPPER, CLK_PIN, DIR_PIN);

/* Set the number of steps to continuous so the the motor is always turning whilst
not int he dead zone*/
HCMotor.Steps(0,CONTINUOUS);
}

void loop()
{
int Speed, Pot;

/* Read the analogue pin to determine the position of the pot. */
Pot = analogRead(POT_PIN);

/* Is the pot in the reverse position ? */
if (Pot >= POT_REV_MIN && Pot <= POT_REV_MAX)
{
HCMotor.Direction(0, REVERSE);
Speed = map(Pot, POT_REV_MIN, POT_REV_MAX, 10, 1024);

/* Is the pot in the forward position ? */
}else if (Pot >= POT_FWD_MIN && Pot <= POT_FWD_MAX)
{
HCMotor.Direction(0, FORWARD);
Speed = map(Pot, POT_FWD_MIN, POT_FWD_MAX, 1024, 10);

/* Is the pot in the dead zone ? */
}else
{
Speed = 0;
}

/* Include the library */
#include “HCMotor.h”

/* Pins used to drive the motors */
#define DIR_PIN 8 //Connect to drive modules ‘direction’ input.
#define CLK_PIN 9 //Connect to drive modules ‘step’ or ‘CLK’ input.

/* Set the analogue pin the potentiometer will be connected to. */
#define POT_PIN A0

/* Set a dead area at the centre of the pot where it crosses from forward to reverse */
#define DEADZONE 20

/* The analogue pin will return values between 0 and 1024 so divide this up between
forward and reverse */
#define POT_REV_MIN 0
#define POT_REV_MAX (512 - DEADZONE)
#define POT_FWD_MIN (512 + DEADZONE)
#define POT_FWD_MAX 1024

/* Create an instance of the library */
HCMotor HCMotor;

void setup()
{
//Serial.begin(9600);
/* Initialise the library */
HCMotor.Init();

/* Attach motor 0 to digital pins 8 & 9. The first parameter specifies the
motor number, the second is the motor type, and the third and forth are the
digital pins that will control the motor */
HCMotor.attach(0, STEPPER, CLK_PIN, DIR_PIN);

/* Set the number of steps to continuous so the the motor is always turning whilst
not int he dead zone*/
HCMotor.Steps(0,CONTINUOUS);
}

void loop()
{
int Speed, Pot;

/* Read the analogue pin to determine the position of the pot. */
Pot = analogRead(POT_PIN);

/* Is the pot in the reverse position ? */
if (Pot >= POT_REV_MIN && Pot <= POT_REV_MAX)
{
HCMotor.Direction(0, REVERSE);
Speed = map(Pot, POT_REV_MIN, POT_REV_MAX, 10, 1024);

/* Is the pot in the forward position ? */
}else if (Pot >= POT_FWD_MIN && Pot <= POT_FWD_MAX)
{
HCMotor.Direction(0, FORWARD);
Speed = map(Pot, POT_FWD_MIN, POT_FWD_MAX, 1024, 10);

/* Is the pot in the dead zone ? */
}else
{
Speed = 0;
}

/* Set the duty cycle of the clock signal in 100uS increments */
HCMotor.DutyCycle(0, Speed);

technisch kan het. Tenslotte stuurt zo ongeveer elke 3D printer 5 stappen motoren of meer aan via drivers. En die draaien ook voornamelijk op een Atmel chip.
In dit stukje :

/* Create an instance of the library */
HCMotor HCMotor;

maak je een zgn. motor object. Je kan er dus meerdere definieren bijv:

/* Create an instance of the library */
HCMotor HCMotor_1;

Je moet wel voor elke motor de stappen doen zoals in de setup(0 etc en aansturen in de loop().
Het addertje is of de library in staat is om meerdere objecten van hetzelfde type aan te sturen.

Hallo Nico

Bedankt alvast voor je reactie.
Ik ga eens kijken of ik hier wat meer over kan ontdekken , fijne zondag

Groet Jan

Hoi pa4j (Jan), welkom.

Ik zie al, weer een zendamateur erbij hier (ben ik zelf niet).
Heb je de introductie thread (klik !) al eens ingekeken ?

Je hebt het over motordrivers, en niet over shields.
Een shield kun je zo op je Arduino prikken, en vaak kun je meerdere op elkaar prikken.
Als het dezelfde shields zijn, dan krijg je mogelijk conflicten en moet je dingen gaan aanpassen.
Als het andere modules zijn, heb je dat probleem niet.

De drivers waar je sketch over gaat, gebruiken maar 2 pinnen per motor.
Dus je zult niet snel tegen een tekort aan pinnen aanlopen.

Nog een algemene tip:
Graag wanneer je codes plaatst, deze tussen [code] [/code] tags te zetten.
Met de code die je hierboven geplaatst hebt viel het wel mee, maar er kunnen hele vreemde dingen met je code gebeuren als je die hier als plain text plaatst.
Bovendien kan de code dan heel eenvoudig geselecteerd en gekopieerd worden door degene die die code eens goed willen bestuderen in een IDE.

Hallo MAS3

Bedankt voor de reactie ik ga er naar kijken

Groet Jan

Hoi Jan,

Hier nog een newbie. Mijn naam is Geert, en ik wil ook iets met stappenmotoren. Ik lees dus even mee.
Mijn doel is een "platenspeler"model aan te sturen. Dus met een draaischijf en een arm waaraan een schrijfstift zit.

Ik heb een Mega2560 met een Protoneer v3 shield + 2x TI8825 drivers gekocht. Kost allemaal haast niks en je hoeft niet te solderen.
Ik heb inmiddels mijn eerste Arduino sketch ("blink a led") aan de praat: goedkoop is dus tot op heden nog geen duurkoop. :wink:
Overigens lijken me deze drivers (256 microstappen) nog mooier:

De gedachte is om het aan te sturen met GRBL g-code.
Ik denk dat er aan GRBL wat gesleuteld moet worden om van rechthoekcoördinaten naar poolcoördinaten te gaan. Ben wel benieuwd of iemand daar meer over kan vertellen.

geert begin aub een nieuwe thread.
kijk eens op multistepper, dan heb je een mooi voorbeeld.
en volg nico dus overal (behalve de eerste even _01 toevoegen.
dan die regels kopieren en _02 noemen etc.
ze zitten natuurlijk wel op verschillende pinnen dus die moet je even opgeven bij de definitie.