Saludos, este es mi primer post.
Espero ser muy especifico en mi pregunta para lograr obtener de la colaboración de la comunidad
Quiero controlar la velocidad de giro de un motorreductor haciendo uso de PWM, la señal de entrada la doy por medio de un potenciómetro que se lee a través de uno de los pines análogos de la tarjeta.
En el LCD muestro el set point seleccionado con el potenciometro y la velocidad " medida " en el eje del motor al cual tengo acoplado un engranaje de 15 dientes con un módulo encoder hc020k.
la cuestión es que para poder controlar la velocidad debería primero poder realizar una medición adecuada de la velocidad, para esto hice uso de de un contador que se incrementa en una interrupción, el valor del contador lo reviso periódicamente con millis().
Sin embargo he tenido muchos problemas con el " rebote" del encoder y adicionalmente observé que cuando el motor se encuentra girando el valor del contador fluctúa entiendo que deben presentarse fluctuaciones, pero etsas pueden llegar a ser de +- 30%, si la medida en pulsos por segundo es de 100 el valor reportado varia ente 70 y 130 lo cual impide tener una medida fiable.
Así que hice la prueba de desconectar la alimetación del encoder y observé que el valor del contador continuaba fluctuando como si nada pasara.
Hice la prueba con los pines D2(int0) Y D3(int1) y aun con en encoder completamente desconectado, el contador se incrementa, también use resistencias externas d e pull_down y las retiré e hice uso de las resistencias internas de de pullup
en esta pagina recomiendan poner un condensador 104 entre el la salida y gnd del modulo para mitigar el rebote.
Pero tras poner el condensador el contador se incrementa y o fluctúa con o sin el encoder. conectado.
¿ Es normal que el contador se incremente aún cuando no cuenta con una señal que active la interrupción?
¿ Puede deberse a corrientes generadas por el motor?
pensé que era un problema de la placa por lo cual hice la prueba usando otra placa y el resultado es el mismo.
Agradezco a todos por su valiosa colaboración.
Esta es la rutina que uso para revisar el contador.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
const int Pinterrupcion=2;
unsigned long T1=0;
volatile int Contador=0;
int intervalo=1000;
void setup()
{
pinMode(Pinterrupcion, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Pinterrupcion),Cambio,FALLING);
lcd.begin (16,2); // Inicializar el display con 16 caraceres 2 lineas
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.clear();
lcd.setCursor(0,0);
T1=millis();
}
void loop()
{
if((millis()-T1)>=intervalo)
{
T1=millis();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(Contador);
//Contador=0;
}
}
void Cambio()
{
Contador++;
}
hardware:
Motor DC 300 rpm 12V , 8kg Cm2.
modulo L298.
arduino nano.
Lcd 16x2 con I2C
potenciometro 10K
encoder hc 020K