Proof of concept encoder analysis. Still to not have a solid gear ratio but it's clear the encoder is very likely 11 PPR. Rotations take ~650 pulses, maybe 660 but it's hard to tell because the gearing makes stopping inconsistent.
This commit is contained in:
parent
45f76500f9
commit
6eb06ca724
|
@ -4,7 +4,8 @@
|
||||||
* SKU - JGY-370
|
* SKU - JGY-370
|
||||||
* DC12V100RPM - SKU-GS00127-05
|
* DC12V100RPM - SKU-GS00127-05
|
||||||
*
|
*
|
||||||
* Gear ratio: 40:1
|
* Gear ratio: 40:1(?) 60:1(?)
|
||||||
|
* 11 PPR Encoder - (!)
|
||||||
*
|
*
|
||||||
* Red——Motor power + (exchange can control rotating and reversing)
|
* Red——Motor power + (exchange can control rotating and reversing)
|
||||||
* Black——Coding power- negative (3.3-5V) polarity cannot be wrong
|
* Black——Coding power- negative (3.3-5V) polarity cannot be wrong
|
||||||
|
@ -25,24 +26,64 @@
|
||||||
#define MOTORB 11
|
#define MOTORB 11
|
||||||
|
|
||||||
volatile int posi = 0; // specify posi as volatile
|
volatile int posi = 0; // specify posi as volatile
|
||||||
|
const long maxTime = 10000;
|
||||||
|
const int maxPulses = 660;
|
||||||
|
const int speed = 40;
|
||||||
|
volatile long start = 0;
|
||||||
|
volatile bool done = false;
|
||||||
|
volatile bool stop = false;
|
||||||
|
volatile int incoming;
|
||||||
|
volatile float rpm;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(57600);
|
||||||
|
Serial.flush();
|
||||||
pinMode(ENCA, INPUT);
|
pinMode(ENCA, INPUT);
|
||||||
pinMode(ENCB, INPUT);
|
pinMode(ENCB, INPUT);
|
||||||
|
pinMode(MOTORA, OUTPUT);
|
||||||
|
pinMode(MOTORB, OUTPUT);
|
||||||
|
|
||||||
attachInterrupt(digitalPinToInterrupt(ENCA), readEncoder,RISING);
|
attachInterrupt(digitalPinToInterrupt(ENCA), readEncoder,RISING);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
int pos;
|
||||||
|
if (Serial.available() > 0) {
|
||||||
|
incoming = Serial.read();
|
||||||
|
start = -1;
|
||||||
|
posi = 0;
|
||||||
|
done = false;
|
||||||
|
stop = false;
|
||||||
|
}
|
||||||
// Read the position in an atomic block to avoid a potential
|
// Read the position in an atomic block to avoid a potential
|
||||||
// misread if the interrupt coincides with this code running
|
// misread if the interrupt coincides with this code running
|
||||||
// see: https://www.arduino.cc/reference/en/language/variables/variable-scope-qualifiers/volatile/
|
// see: https://www.arduino.cc/reference/en/language/variables/variable-scope-qualifiers/volatile/
|
||||||
int pos = 0;
|
|
||||||
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
|
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
|
||||||
pos = posi;
|
pos = posi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (abs(pos) == maxPulses) {
|
||||||
|
stop = true;
|
||||||
|
}
|
||||||
|
if (start == -1) {
|
||||||
|
delay(1000);
|
||||||
|
analogWrite(MOTORA, speed);
|
||||||
|
digitalWrite(MOTORB, LOW);
|
||||||
|
start = millis();
|
||||||
|
} else if ((stop || millis() - start >= maxTime) && !done) {
|
||||||
|
digitalWrite(MOTORA, LOW);
|
||||||
|
digitalWrite(MOTORB, LOW);
|
||||||
|
Serial.print("Final: ");
|
||||||
Serial.println(pos);
|
Serial.println(pos);
|
||||||
|
Serial.print("Time: ");
|
||||||
|
Serial.println(millis() - start);
|
||||||
|
rpm = (float) 60000 / (float) (millis() - start);
|
||||||
|
Serial.print("RPM: ");
|
||||||
|
Serial.println(rpm);
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void readEncoder(){
|
void readEncoder(){
|
||||||
|
|
Loading…
Reference in New Issue