Dancing mini-MOBOT using Microchip’s PIC16LF73 and two tiny motors (powered by a CR2032 Lithium cell).
Schematic:
Wednesday, September 16, 2009
Subscribe to:
Post Comments (Atom)
Prototype Projects - experiments on theoretical electronics/electrical designs and actual prototype circuits.
Very Good!!!!!!!!!!
ReplyDeletethanks
ReplyDeleteplease share source code
thanks
Please give me source code to k130572@yandex.ru?
ReplyDelete// Pins connected to the motor driver. The PWM pins control the speed, and the
ReplyDelete// other pins are used to select the current operation of the left/right
// channels of the driver- forward, reverse, stopped, or brake.
#define LEFT_PWM 3
#define LEFT_1 2
#define LEFT_2 4
#define RIGHT_PWM 6
#define RIGHT_1 7
#define RIGHT_2 5
void setup()
{
Serial.begin(57600); // This isn’t actually used anywhere; it’s here because
// once you start modifying the code and need to add
// print statements, you’ll forget to put this back in.
pinSetup(); // Configure the pins for the application. If we are in
// test mode, this will also configure the pins needed
// to support the addtional test functionality.
driveStop(); // Just to be good citizens, make sure the motors aren’t
// going to just randomly start turning.
}
void loop()
{
driveFwd(128);
delay(3000);
driveStop();
delay(500);
driveRev(128);
delay(2000);
leftFwd(128);
rightRev(128);
delay(1000);
leftRev(128);
rightFwd(128);
delay(1000);
}
void pinSetup()
{
pinMode(LEFT_PWM, OUTPUT);
pinMode(LEFT_1, OUTPUT);
pinMode(LEFT_2, OUTPUT);
pinMode(RIGHT_PWM, OUTPUT);
pinMode(RIGHT_1, OUTPUT);
pinMode(RIGHT_2, OUTPUT);
}
// Stop mode is simply a hi-z state. The motor will coast for some time if it
// is running at the time when this mode is activated.
void driveStop()
{
leftStop();
rightStop();
}
// Brake mode actually connects the two pins of the motor together, which will
// cause it to stop more quickly and to resist moving to some extent.
void driveBrake()
{
leftBrake();
rightBrake();
}
// Forward and reverse ground one pin and then toggle the other at the rate
// defined by the PWM inputs.
void driveFwd(byte spd)
{
leftFwd(spd);
rightFwd(spd);
}
void driveRev(byte spd)
{
leftRev(spd);
rightRev(spd);
}
// The left/right Rev/Fwd functions are set forth in the datasheet. Worth
// noting- this is relative to the preferred assembly of the Minibot kit. If
// you wire up your motors in another way, expect different results.
void leftRev(byte spd)
{
digitalWrite(LEFT_1, HIGH);
digitalWrite(LEFT_2, LOW);
analogWrite(LEFT_PWM, spd);
}
void leftFwd(byte spd)
{
digitalWrite(LEFT_1, LOW);
digitalWrite(LEFT_2, HIGH);
analogWrite(LEFT_PWM, spd);
}
void rightRev(byte spd)
{
digitalWrite(RIGHT_1, HIGH);
digitalWrite(RIGHT_2, LOW);
analogWrite(RIGHT_PWM, spd);
}
void rightFwd(byte spd)
{
digitalWrite(RIGHT_1, LOW);
digitalWrite(RIGHT_2, HIGH);
analogWrite(RIGHT_PWM, spd);
}
void leftBrake()
{
digitalWrite(LEFT_1, HIGH);
digitalWrite(LEFT_2, HIGH);
analogWrite(LEFT_PWM, 0);
}
void rightBrake()
{
digitalWrite(RIGHT_1, HIGH);
digitalWrite(RIGHT_2, HIGH);
analogWrite(RIGHT_PWM, 0);
}
void leftStop()
{
digitalWrite(LEFT_1, LOW);
digitalWrite(LEFT_2, LOW);
analogWrite(LEFT_PWM, 0);
}
void rightStop()
{
digitalWrite(RIGHT_1, LOW);
digitalWrite(RIGHT_2, LOW);
analogWrite(RIGHT_PWM, 0);
}
The hex is available ? I don't figure out about the programming software ...Thanks !
ReplyDelete