Ragazzi:
- l'alimentazione è apposto visto che uso un alimentatore 12V a 20 A
- la vref l'ho appena regolata
- ho controllatato anche il circuito
Invece è il software che ha problemi visto che nel mio script uso la libreria: GitHub - laurb9/StepperDriver: Arduino library for A4988, DRV8825, DRV8834, DRV8880 and generic two-pin (DIR/STEP) stepper motor drivers e non va mentre se uso uno script che non fa uso di libreria invece va. Qui sotto il codice al confronto:
Mio codice completo di gestione dei finecorsa:
#include <Arduino.h>
// POTENTIOMETER
// Pin +5V -> Pin laterale del potenziometro
// Pin GND -> Pin GND modulo e pin laterale potenz.
#define POT A7
//BUTTON SWITCH
#define BUTTONPIN 2
// ENDSTOP PIN
#define ENDSTOP_0 5 // Pin 5 connected to ENDSTOP_0 switch out
#define ENDSTOP_1 6 // Pin 6 connected to ENDSTOP_1 switch out
// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200
#define RPM 50
#define DIR 8
#define STEP 9
#define ENABLE 13 // optional (just delete ENABLE from everywhere if not used)
// SERIAL COMUNICATION PARAMETERS
#define SERIAL_PORT 0
#define BAUDRATE 9600 //57600
int incomingByte = 0; // for incoming serial data
// INITIAL STEPPER SPEED
int motorSpeed = RPM; // velocità del motore
int stepCount = 0 ; // numero di passi del motore
int carriagedir = 1 ; // direzione del carrello
#include "DRV8825.h"
#define MODE0 12
#define MODE1 11
#define MODE2 10
DRV8825 stepper(MOTOR_STEPS, DIR, STEP, ENABLE, MODE0, MODE1, MODE2);
void setup() {
Serial.begin(BAUDRATE); // Start serial comunication
pinMode(BUTTONPIN, INPUT);
pinMode(ENDSTOP_0, INPUT);
pinMode(ENDSTOP_1, INPUT);
delay(1); // Wait for Driver wake up
delay(500);
}
void loop() {
int PotValue = analogRead(POT);// Legge il valore della tensione fornito dal potenziometro:
motorSpeed = map(PotValue, 0, 1023, 20, 100); // mappa il valore nel range da 0 a 100
if (motorSpeed > 0) {
stepper.enable();
stepper.begin(motorSpeed);
if (!digitalRead(ENDSTOP_0) && !digitalRead(ENDSTOP_1)) {
// Move carriage
switch (carriagedir) {
case 0: // move carriage on dir 0
stepper.rotate(5); // forward revolution
stepCount--;
break;
case 1: // move carriage on dir 1
stepper.rotate(-5); // reverse revolution
stepCount++;
break;
}
//delay(1); // delay in between reads for stability
}
else if (digitalRead(ENDSTOP_0))
{
// Change direction and move carriage of 5 step
carriagedir = 1;
stepper.move(-5); // forward revolution
stepCount = 0;
//delay(10);
}
else if (digitalRead(ENDSTOP_1))
{
// Change direction and move carriage of 5 step
carriagedir = 0;
stepper.move(5); // reverse revolution
stepCount = 0;
//delay(10);
}
else
{
Serial.println("Houston there is a problem!");
}
}
else if (motorSpeed < 1) {
stepper.disable(); // disable motor
}
}
Codice trovato su internet (funziona ma non riesco a modificare la velocità):
int M1dirpin = 8; //Motor X direction pin
int M1steppin = 9; //Motor X step pin
int M1en=13; //Motor X enable pin
void setup()
{
pinMode(M1dirpin,OUTPUT);
pinMode(M1steppin,OUTPUT);
pinMode(M1en,OUTPUT);
digitalWrite(M1en,LOW);// Low Level Enable
}
void loop()
{
int j;
delayMicroseconds(2);
digitalWrite(M1dirpin,LOW);
for(j=0;j<=500;j++){
digitalWrite(M1steppin,LOW);
delayMicroseconds(2);
digitalWrite(M1steppin,HIGH); //Rising step
delay(1);
}
}
Variando anche di poco il delayMicroseconds() oppure il delay() il motore comincia a ronzare e va a scatti.
Purtoppo vedo che usando anche altro codice trovato qua e la su internet non funziona.
Mi piacerebbe capire: cosa c'è che non va nel codice?