Close

Second run

A project log for Motor as Encoder

Inspired by the attempts of other people around the Interwebs, I use a motor as a rotary encoder, but with a different approach.

besenyeimbesenyeim 08/18/2018 at 17:560 Comments

I hope you see it. I surely don't.

#define PAH PB7   //phase A high side
#define PAL PB14  //phase A low side
#define PBH PB6   //phase B high side
#define PBL PB13  //phase B low side
#define PCH PB5   //phase C high side
#define PCL PB12  //phase C low side
#define PAF PA0   //phase A feedback
#define PBF PA1   //phase B feedback
#define PCF PA2   //phase C feedback

int fbbuf;

void scan(){
//AB
      digitalWrite(PAL, LOW);
      digitalWrite(PBH, HIGH);
      digitalWrite(PBL, HIGH);
      digitalWrite(PCH, HIGH);
      digitalWrite(PCL, LOW);
      digitalWrite(PAH, LOW); //put last to reduce adc delay 
      fbbuf = analogRead(PCF);  //read C
      digitalWrite(PAH, HIGH);  //switch off
      Serial.print(fbbuf);
      Serial.print(' ');
//AC
      digitalWrite(PAL, LOW);
      digitalWrite(PBH, HIGH);
      digitalWrite(PBL, LOW);
      digitalWrite(PCH, HIGH);
      digitalWrite(PCL, HIGH);
      digitalWrite(PAH, LOW); //put last to reduce adc delay 
      fbbuf = analogRead(PBF);  //read B
      digitalWrite(PAH, HIGH);  //switch off
      Serial.print(fbbuf+3000);
      Serial.print(' ');
//BC
      digitalWrite(PAH, HIGH);
      digitalWrite(PAL, LOW);
      digitalWrite(PBH, LOW);
      digitalWrite(PBL, LOW);
      digitalWrite(PCH, HIGH);
      digitalWrite(PCL, HIGH);
      fbbuf = analogRead(PAF);  //read A
      digitalWrite(PBH, HIGH);  //switch off
      Serial.print(fbbuf+6000);
      Serial.print(' ');
//BA
      digitalWrite(PAH, HIGH);
            delay(1); //measuremenet was noisy
      digitalWrite(PAL, HIGH);
      digitalWrite(PBH, LOW);
      digitalWrite(PBL, LOW);
      digitalWrite(PCH, HIGH);
      digitalWrite(PCL, LOW);
      fbbuf = analogRead(PCF);  //read C
      digitalWrite(PBH, HIGH);  //switch off
      Serial.print(fbbuf+9000);
      Serial.print(' ');
//CA
      digitalWrite(PAH, HIGH);
      digitalWrite(PAL, HIGH);
      digitalWrite(PBH, HIGH);
      digitalWrite(PBL, LOW);
      digitalWrite(PCH, LOW);
      digitalWrite(PCL, LOW);   
      fbbuf = analogRead(PBF);  //read B
      digitalWrite(PCH, HIGH);  //switch off
      Serial.print(fbbuf+12000);
      Serial.print(' ');
//CB
      digitalWrite(PAH, HIGH);
      digitalWrite(PAL, LOW);
      digitalWrite(PBH, HIGH);
      digitalWrite(PBL, HIGH);
      digitalWrite(PCH, LOW);
      digitalWrite(PCL, LOW);      
      fbbuf = analogRead(PAF);  //read A
      digitalWrite(PCH, HIGH);  //switch off
      Serial.print(fbbuf+15000);
      Serial.print(' ');

}
  
void setup() {
  pinMode(PAH, OUTPUT);
  pinMode(PAL, OUTPUT);
  pinMode(PBH, OUTPUT);
  pinMode(PBL, OUTPUT);
  pinMode(PCH, OUTPUT);
  pinMode(PCL, OUTPUT);
  pinMode(PAF, INPUT_ANALOG);
  pinMode(PBF, INPUT_ANALOG);
  pinMode(PCF, INPUT_ANALOG);
}


void loop() {
  delay(10);
  scan();
  Serial.print('\n');
}

Discussions