Ik heb een probleem met het aansturen van mijn stappenmotor.
De opstelling:
Arduino -> DM856 steppermotor driver -> Joy-It Nema34-01 stappenmotor.
Het geheel voed ik met een Meanwell SPV-300-24 power supply.
Zoals in het filmpje te zien is, wil de stappenmotor niet rond draaien. Maar in plaats daarvan trilt deze en gaat heel ongelijk stapjes naar voor en terug.
Eerste instantie dacht ik dat ik een fout had gemaakt in de bedrading (spoelen verkeerd aangesloten). Maar bij naderinzien, bleek dit toch te kloppen.
In mijn programma heb ik ook een analoge ingang toegewezen om zo het toerental te wijzigen.
In het filmpje is te zien dat deze daar wel op reageert maar dit alleen te merken in het geluid wat de motor maakt.
https://youtu.be/uZBSho5WngY
Het is me eerder op de avond wel gelukt om in een bepaalde stand van de trimmer, de motor te laten draaien. Maar dit was ook enkel mogelijk in deze specifieke stand. Een tikkie links of rechtsom op de trimmer resulteerde weer in het gedrag wat te zien is in het filmpje.
Tijdens het opnemen, was het helemaal niet meer mogelijk om de motor rond te laten draaien.
Betreft de stappenmotor controller, heb ik alle dipswitches op 'on' gezet.
Want ik wil simpel beginnen met 200 stappen per omwenteling. En als ik het goed begrijp moet ik SW5 t/m SW8 daarom hoog maken.
Verder wil ik het totale vermogen uit de controller halen. Hierdoor SW1 t/m SW3 hoog. En S4 heb ik hoog gemaakt vanwege het volle vermogen.
Wat zie ik over het hoofd, of wat doe ik fout?
Hieronder mijn gebruikte code:
c code:
/*
Stepper Motor Test
stepper-test01.ino
Uses ACT DM856 or simular Stepper Driver Units
Has speed control & reverse switch
*/
// Defin pins
int reverseSwitch = 2; // Endswitch for reverse
int driverPUL = 7; // PUL- pin
int driverDIR = 6; // DIR- pin
int spd = A0; //Potentiometer
// Variables
int pd=500; //Pulse Delay period
boolean setdir = LOW; // Set Direction
// Interrupt Handler
void revmotor (){
setdir = !setdir;
}
void setup() {
pinMode (driverPUL, OUTPUT);
pinMode (driverDIR, OUTPUT);
attachInterrupt(digitalPinToInterrupt(reverseSwitch), revmotor, FALLING);
}
void loop() {
pd = map((analogRead(spd)),0,1023,2000,50);
digitalWrite(driverDIR,setdir);
digitalWrite(driverPUL,HIGH);
delayMicroseconds(pd);
digitalWrite(driverPUL,LOW);
delayMicroseconds(pd);
}