12V Low noise DC Motor 146RPM w/Encoder wiki-DFRobot

Introduction

This is DFRobot customized high quality DC motor. The best part of this motor is that it is a quiet and high torque output motor with optical encoder buildin. The optical encoder gives 663 pluse per rotation which is able to sensor 0.54 degree rotation from the shaft. The resolution can meet a general PID speed control requirements.

This motor is widely used in mobile robot area.

Specification

Sound testing

Our tests on a common environmental sound emissions shows that the motors have differences. While we thought of averaging the sound emission values, this would not be accurate. Thus we kept the highest value gathered from the tests. The lowest sound emissions reached an average of 57dBA on 40dB indoors environmental sound. These tests where not done in a Acoustic chamber. No load was applied.

For all sound sensitive projects, a sound proof case is recommended for all mechanical parts.

Encoder Diagram

Diagram for using encoder with Encoder Adapter Diagram for using encoder without Encoder Adapter

Encoder Sample Code

/*
Pay attention to the interrupt pin,please check which microcontroller you use.
http://arduino.cc/en/Reference/AttachInterrupt
*/

//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--;
}

More Documents