Corso Arduino Metal DC Geared Motor 12V 146rpm con Encoder

Premessa: questo è un motore DC di alta qualità. La parte migliore di questo motore è che si tratta di un motore di uscita a coppia elevata e silenzioso con encoder ottico incorporato. L’encoder ottico fornisce 663 pulse per rotazione in grado di rilevare una rotazione di 0,54 gradi dall’albero. La risoluzione può soddisfare i requisiti generali di controllo della velocità PID.

CARATTERISTICHE TECNICHE

  • Model: 28PA51G
  • Working voltage: 12V
  • No load RPM (before gearbox): 8000 rpm
  • Gear ratio: 51:1
  • No load RPM (after gearbox): 146rpm@12V
  • No load current: @ 12V: 0.23A
  • Stall current: 3.6A
  • Rated torque @ 12V: 10kg.cm (139oz.in)
  • Encoder Resolution: 13 PPR (663 PPR for gearbox shaft)
  • Two phase hall encoder
  • Size: 123x36x36mm
  • Weight: 270g

LISTA MATERIALI

TEST DEL SUONO

I nostri test su emissioni sonore ambientali comuni mostrano che i motori presentano differenze. Mentre pensavamo di calcolare la media dei valori delle emissioni sonore, ciò non sarebbe accurato, pertanto abbiamo mantenuto il valore più alto raccolto dai test. Le emissioni sonore più basse hanno raggiunto una media di 57 dB su un suono ambientale interno di 40 dB. Questi test non sono stati eseguiti in una camera acustica. Per tutti i progetti sensibili al suono, si consiglia una custodia insonorizzata per tutte le parti meccaniche.

SCHEMA DI COLLEGAMENTO

CODICE DI ESEMPIO

//The sample code for driving one way motor encoder
const byte encoder0pinA = 2;//A pin -> the interrupt pin 2
const byte encoder0pinB = 4;//B pin -> the digital pin 4
byte encoder0PinALast;
int duration;//the number of the pulses
boolean Direction;//the rotation direction


void setup()
{
  Serial.begin(57600);//Initialize the serial port
  EncoderInit();//Initialize the module
}

void loop()
{
  Serial.print("Pulse:");
  Serial.println(duration);
  duration = 0;
  delay(100);
}

void EncoderInit()
{
  Direction = true;//default -> Forward
  pinMode(encoder0pinB,INPUT);
  attachInterrupt(0, wheelSpeed, CHANGE);//int.0
}

void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;

  if(!Direction)  duration  ;
  else  duration--;
}

Buon Progetto.