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