Go Down

Topic: Encoder incremental 400 pulsos (Read 757 times) previous topic - next topic

Nick0o

Oct 25, 2018, 06:42 pm Last Edit: Oct 25, 2018, 06:45 pm by Nick0o
Hola muy buenas a todos,  mi consulta principalmente es que me ayuden con mi programa de encoder, que no logro hacer que me lea 1 pulso/rev. sino que me lee como 800 pulsos. lo quiero mas que nada para medir RPM de motores.
les muestro el codigo que estoy ocupando.

Code: [Select]

volatile unsigned int temp, contador = 0; //Esta variable aumentará o disminuirá dependiendo de la rotación del encoder.
   
void setup() {
  Serial.begin (9600);

  pinMode(2, INPUT_PULLUP); // pin 2 como entrada, se activa el pullup interno 
 
  pinMode(3, INPUT_PULLUP); // pin 3 como entrada, se activa el pullup interno
 
//Configuracion de interruptor
  //Un pulso ascendente del encoder activa ai0(). AttachInterrupt 0 esta en el pin digital 2 de nuestro Arduino.
  attachInterrupt(0, ai0, RISING);
   
  //Un pulso descendente del encoder activa ai1(). AttachInterrupt 1 esta en el pin digital 3 de nuestro Arduino.
  attachInterrupt(1, ai1, RISING);
  }
   
  void loop() {
  // Enviar el valor del contador
  if( contador != temp ){
  Serial.println (contador);
  temp = contador;
  }
  }
 
  void ai0() {
  // ai0 esta activado si el pin digital 2 va desde LOW a HIGH
  // Comprueba el pin 3 para determinar la direccion
  if(digitalRead(3)==LOW) {
  contador++;
  }else{
  contador--;
  }
  }
   
  void ai1() {
// ai0 esta activado si el pin digital 3 va desde LOW a HIGH
  // Comprueba el pin 2 para determinar la direccion
  if(digitalRead(2)==LOW) {
  contador--;
  }else{
  contador++;
  }
  }


cualquier ayuda es bienvenida, de antemano gracias  :)

surbyte

Cual es el problema tienes una resolución mejor.
Si tu motor girara a 100 RPM tu leerías 100 x 800 de modo que a tu lectura que sería 80000 solo lo divides x 800 y tienes tu valor.

Usa unsigned long para la variable que cuente porque un entero te va a quedar corto rápidamente.

volatile unsigned long temp, contador = 0

jg68

#2
Aug 27, 2020, 05:46 pm Last Edit: Aug 28, 2020, 05:18 pm by surbyte Reason: No repitas lo que se lee arriba.
Hola, he estado hablando contigo en mi post de Medición Lineal que publique el día de ayer 26 de Agosto, buscando en el foro encontré esta publicación, utilice el mismo código que este chico para checar lo que mi encoder me arroja y me da valores muy grandes en el monitor serial:

4294099643
4294099489
Entre otros (Pero de la misma magnitud)

Eso quiere decir que mi resolucion es mayor ?

Go Up