You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Here is the code.
I have tried both pullup and pulldown but it doesnt help.
Cant figure it out.
#include <Arduino.h>
#include <ESP32Encoder.h>
// Define pin numbers for encoder A and B channels
const int encoderPinA = 14;
const int encoderPinB = 12;
// Create an encoder object
ESP32Encoder encoder;
// Variables for RPM calculation
volatile long pulseCount = 0;
unsigned long lastTime = 0;
unsigned long lastCount = 0;
unsigned long rpm = 0;
unsigned int ppr = 1000;
uint32_t next, myInt = 0;
void calculateRPM();
void setup()
{
Serial.begin(115200);
// Set encoder pins as input
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
//ESP32Encoder::useInternalWeakPullResistors = puType::DOWN;
// Enable the weak pull up resistors
//ESP32Encoder::useInternalWeakPullResistors = puType::UP;
// Attach the encoder pins to the ESP32Encoder object
encoder.attachFullQuad(encoderPinA, encoderPinB);
// Set initial position (optional)
encoder.setCount(0);
}
void loop()
{
calculateRPM();
// Your main loop code goes here
}
void calculateRPM()
{
// Calculate RPM every second
unsigned long currentTime = millis();
if (currentTime - lastTime >= 1000)
{
// Read encoder position
long currentPosition = encoder.getCount();
// Calculate change in position considering rollover
long positionChange = currentPosition - lastCount;
// Determine the direction of rotation
int direction = (positionChange >= 0) ? 1 : -1;
// Update pulse count based on direction
pulseCount += direction * positionChange;
// Calculate RPM based on direction
if (direction == 1)
{
rpm = ((positionChange * 60) / ppr) ;
}
else
{
rpm = ((-positionChange * 60) / ppr) ;
}
// Update variables for the next calculation
lastCount = currentPosition;
lastTime = currentTime;
}
}
The text was updated successfully, but these errors were encountered:
it looks like you are running faster than the runt signal filter is expecting and the pulses are filtered out. Try lowering the value in setFilter() from the default 250us to something lower. You can go all the way down to 1.
Hi, thanks.
I tried setFilter down to 1 but it didnt work either.
I think i have to change the encoder. i have the 1000ppr on a 40 tooth pulley and 120 tooth on the lathe spindle.
Have ordered a 200ppr encoder instead.
Hi, Having trouble when my rpm goes over 500 RPM then the calculations just dies and show zero.
Im using this encoder.
https://www.ebay.co.uk/itm/155166834587?hash=item2420a9ff9b:g:S78AAOSwoi9jJXEm
Here is the code.
I have tried both pullup and pulldown but it doesnt help.
Cant figure it out.
#include <Arduino.h>
#include <ESP32Encoder.h>
// Define pin numbers for encoder A and B channels
const int encoderPinA = 14;
const int encoderPinB = 12;
// Create an encoder object
ESP32Encoder encoder;
// Variables for RPM calculation
volatile long pulseCount = 0;
unsigned long lastTime = 0;
unsigned long lastCount = 0;
unsigned long rpm = 0;
unsigned int ppr = 1000;
uint32_t next, myInt = 0;
void calculateRPM();
void setup()
{
Serial.begin(115200);
// Set encoder pins as input
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
//ESP32Encoder::useInternalWeakPullResistors = puType::DOWN;
// Enable the weak pull up resistors
//ESP32Encoder::useInternalWeakPullResistors = puType::UP;
// Attach the encoder pins to the ESP32Encoder object
encoder.attachFullQuad(encoderPinA, encoderPinB);
// Set initial position (optional)
encoder.setCount(0);
}
void loop()
{
calculateRPM();
// Your main loop code goes here
}
void calculateRPM()
{
// Calculate RPM every second
unsigned long currentTime = millis();
if (currentTime - lastTime >= 1000)
{
// Read encoder position
long currentPosition = encoder.getCount();
}
}
The text was updated successfully, but these errors were encountered: