PoStep25-32

buonasera a tutti! qualcuno sa come interfacciare questa scheda ad arduino??? http://www.poscope.com/PoStep25-32

tatan->http://www.poscope.com/index.php?route=product/product/download&download_id=66&product_id=71

Grazie ratto93

sul datasheet non avevo trovato indicazioni su che tipo di segnale inviare sul pin “step”, se gnd o cosa,
comunque ho risolto (lo stepper gira) ,
ho semplicemente provato col codice blink, per provare… delay 1, pin13-step
in questo modo il motore gira abbastanza fluido,
MA provando questo codice
nel quale ho impostato l’attivazione del pin 13
quando il valore di conteggio dell’encoder è compreso tra 256 e 512,
succede che il motore gira come se avessi impostato un delay 10…
perchè?

int encoderPin1 = 2;
int encoderPin2 = 3;
int ledPin2     = 13; 
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
int value  = 0;

void setup() {
  Serial.begin (9600);
  pinMode(encoderPin1, INPUT);
  pinMode(encoderPin2, INPUT);
  pinMode(ledPin2, OUTPUT);
  attachInterrupt(0, updateEncoder, CHANGE);
  attachInterrupt(1, updateEncoder, CHANGE);
}
 
void loop(){
  
  Serial.print( " - " );
  Serial.println(encoderValue);
  
 if ( encoderValue > 256 && encoderValue < 512)  
digitalWrite(ledPin2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(0);               // wait for a second
  digitalWrite(ledPin2, LOW);    // turn the LED off by making the voltage LOW
  delay(1);   // turn the LED off by making the voltage   
}
 
void updateEncoder(){
  int MSB = digitalRead(encoderPin1); //MSB = most significant bit
  int LSB = digitalRead(encoderPin2); //LSB = least significant bit
 
  int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
  int sum  = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
 
  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;
 
  lastEncoded = encoded; //store this value for next time
}

eliminando //Serial.print( " - " ); //Serial.println(encoderValue); ho risolto

int encoderPin1 = 2;
int encoderPin2 = 3;
int ledPin2     = 13; 
int enable      = 7;

volatile int lastEncoded = 0;
volatile long encoderValue = 0;
long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
int value  = 0;

void setup() {
  //Serial.begin (128000);
  pinMode(encoderPin1, INPUT);
  pinMode(encoderPin2, INPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(reverse, OUTPUT);
   pinMode(enable, OUTPUT);
  attachInterrupt(0, updateEncoder, CHANGE);
 attachInterrupt(1, updateEncoder, CHANGE);
}
 
void loop(){    
 if ( encoderValue > 201 && encoderValue < 10000)  
digitalWrite(ledPin2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delayMicroseconds(580);               // wait for a second
  digitalWrite(ledPin2, LOW);    // turn the LED off by making the voltage LOW
  delayMicroseconds(580);   // turn the LED off by making the voltage  
 
  // gestione enable
 if ( encoderValue < 200 )  
digitalWrite(enable, HIGH);   // turn the LED on (HIGH is the voltage level)
  if ( encoderValue > 200 && encoderValue < 10000)  
digitalWrite(enable, LOW);   // turn the LED on (HIGH is the voltage level) 
  if ( encoderValue > 10000 )  
digitalWrite(enable, HIGH);   // turn the LED on (HIGH is the voltage level)  
}
 
void updateEncoder(){
  int MSB = digitalRead(encoderPin1); //MSB = most significant bit
  int LSB = digitalRead(encoderPin2); //LSB = least significant bit
 
  int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
  int sum  = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
 
  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;
 
  lastEncoded = encoded; //store this value for next time
}

ho ripulito un po il codice e impoostato 3 intervalli ,
1- conteggio inferiore a 200 disabilita il drive
2-conteggio da 200 a 10000 abilita drive e invia step
3-conteggio supriore a 10000 disabilita drive

però tra 200 e 10000 ruotando l’encoder
è come se mi rallentasse il ciclo di scansione del programma, la velocità del motore cala
è normale?

prego usare i CODE TAG per gli sketch. Grazie Uwe

lupastro81: buonasera a tutti!

Benvenuto, vicino di casa. :) Ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0

UweFederer
prego usare i CODE TAG per gli sketch.

ops… ok! grazie per la correzione!

nid69ita ti invitiamo a presentarti qui

pensavo di averlo fatto… provvedo!
per la prima volta in vita mia ho “letto il regolamento” (occhio che sta per venire un metro di neve!!), regolamento che effettivamente è molto utile, per esempio “additional option” non l’avrei mai usato…!

lupastro81: pensavo di averlo fatto... provvedo! per la prima volta in vita mia ho "letto il regolamento" (occhio che sta per venire un metro di neve!!), regolamento che effettivamente è molto utile, per esempio "additional option" non l'avrei mai usato...!

grazie mille nid69ita , link mooolto utili! XD XD XD

Salve a tutti mi presento sono Demis, avrei bisogno di controllare la velocità di un motore bipolare 57STH56 NEMA-23 con PoStep 25-32 e arduino, qualcuno mi sa aiutare? Ringrazio..