I am trying to control two stepper motors using arduino uno and 2 x-nucleo-ihm03a1, driver stacked on bottom motor working fine but top driver not responding
R3 and R6 closed, R4,R5,R7,R8 open for first board,
for second board R4 and R8 closed , R3,R5,R6,R7 open for second board( TOP BOARD)
#include <Ponoor_PowerSTEP01Library.h>
#include <SPI.h>
// Pin definitions for the X-NUCLEO-IHM03A1 connected to an Uno-compatible board
#define nCS_PIN 10
#define nCS_PIN2 9
#define nSTBY_nRESET_PIN 8
#define nBUSY_PIN 6
#define nSTBY_nRESET_PIN2 7
#define nBUSY_PIN2 5
powerSTEP driver(1, nCS_PIN, nSTBY_nRESET_PIN);
powerSTEP driver2(0, nCS_PIN2, nSTBY_nRESET_PIN2);
void setup()
{
// Start serial
Serial.begin(9600);
Serial.println("powerSTEP01 Arduino control initialising...");
// Prepare pins
pinMode(nSTBY_nRESET_PIN, OUTPUT);
pinMode(nSTBY_nRESET_PIN2, OUTPUT);
pinMode(nBUSY_PIN, OUTPUT);
pinMode(nBUSY_PIN2, OUTPUT);
pinMode(nCS_PIN, OUTPUT);
pinMode(nCS_PIN2, OUTPUT);
pinMode(MOSI, OUTPUT);
pinMode(MISO, OUTPUT);
pinMode(SCK, OUTPUT);
// Reset powerSTEP and set CS
digitalWrite(nSTBY_nRESET_PIN, HIGH);
delay(1);
digitalWrite(nSTBY_nRESET_PIN, LOW);
delay(1);
digitalWrite(nSTBY_nRESET_PIN, HIGH);
digitalWrite(nSTBY_nRESET_PIN2, HIGH);
delay(1);
digitalWrite(nSTBY_nRESET_PIN2, LOW);
delay(1);
digitalWrite(nSTBY_nRESET_PIN2, HIGH);
digitalWrite(nCS_PIN, HIGH);
digitalWrite(nCS_PIN2, HIGH);
SPI.begin();
SPI.setDataMode(SPI_MODE3);
// Configure powerSTEP for driver 1
selectDriver1();
driver.SPIPortConnect(&SPI);
driver.configSyncPin(nBUSY_PIN, 0);
driver.configStepMode(STEP_FS_8);
driver.setMaxSpeed(1000);
driver.setFullSpeed(2000);
driver.setAcc(2000);
driver.setDec(2000);
driver.setSlewRate(SR_520V_us);
driver.setOCThreshold(2);
driver.setOCShutdown(OC_SD_ENABLE);
driver.setPWMFreq(PWM_DIV_4, PWM_MUL_0_75);
driver.setVoltageComp(VS_COMP_DISABLE);
driver.setSwitchMode(SW_USER);
driver.setOscMode(INT_16MHZ);
driver.setRunKVAL(64);
driver.setAccKVAL(64);
driver.setDecKVAL(64);
driver.setHoldKVAL(8);
driver.setParam(ALARM_EN, 0x8F);
driver.getStatus();
deselectDriver1();
// Configure powerSTEP for driver 2
selectDriver2();
driver2.SPIPortConnect(&SPI);
driver2.configSyncPin(nBUSY_PIN2, 1);
driver2.configStepMode(STEP_FS_8);
driver2.setMaxSpeed(500);
driver2.setFullSpeed(1000);
driver2.setAcc(1000);
driver2.setDec(1000);
driver2.setSlewRate(SR_114V_us);
driver2.setOCThreshold(8);
driver2.setOCShutdown(OC_SD_ENABLE);
driver2.setPWMFreq(PWM_DIV_4, PWM_MUL_0_75);
driver2.setVoltageComp(VS_COMP_DISABLE);
driver2.setSwitchMode(SW_USER);
driver2.setOscMode(INT_16MHZ);
driver2.setRunKVAL(20);
driver2.setAccKVAL(20);
driver2.setDecKVAL(20);
driver2.setHoldKVAL(4);
driver2.setParam(ALARM_EN, 0x8F);
driver2.getStatus();
deselectDriver2();
Serial.println(F("Initialisation complete"));
}
void selectDriver1() {
digitalWrite(nCS_PIN, LOW);
digitalWrite(nCS_PIN2, HIGH);
}
void deselectDriver1() {
digitalWrite(nCS_PIN, HIGH);
}
void selectDriver2() {
digitalWrite(nCS_PIN, HIGH);
digitalWrite(nCS_PIN2, LOW);
}
void deselectDriver2() {
digitalWrite(nCS_PIN2, HIGH);
}
void loop() {
if (Serial.available() > 0) {
char command = Serial.read();
if (command == 'F') {
Serial.println("Forward");
selectDriver1();
driver.run(FWD, 1200);
deselectDriver1();
selectDriver2();
driver2.run(FWD, 2000);
deselectDriver2();
} else if (command == 'B') {
Serial.println("Backward");
selectDriver1();
driver.run(REV, 600);
deselectDriver1();
selectDriver2();
driver2.run(REV, 600);
deselectDriver2();
} else if (command == 'S') {
Serial.println("Stop");
selectDriver1();
driver.softStop();
deselectDriver1();
selectDriver2();
driver2.softStop();
deselectDriver2();
}
// Additional debugging
selectDriver1();
Serial.print("Driver1 Status: ");
Serial.println(driver.getStatus(), HEX);
deselectDriver1();
selectDriver2();
Serial.print("Driver2 Status: ");
Serial.println(driver2.getStatus(), HEX);
deselectDriver2();
}
}
- I tried each board with 1 motor and it worked fine
- I tried to change resistors R3-R8 combination
- I checked all connections using AVO
New contributor
ESSA SAEED is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.