Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: motordrivertestprogram Initialmbedrobotprogram mbedrobot ipod ... more
Revision 1:3da7302dc9ae, committed 2010-11-11
- Comitter:
- littlexc
- Date:
- Thu Nov 11 15:32:55 2010 +0000
- Parent:
- 0:edc152f119b7
- Child:
- 2:2dc873322032
- Commit message:
- this libary prevents throwing the motor from full foward to full reverse. to change direction, the motor must first come to a full stop, ie, coast, break or set speed to = 0.
Changed in this revision
| motordriver.cpp | Show annotated file Show diff for this revision Revisions of this file |
| motordriver.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/motordriver.cpp Sat Nov 06 13:05:17 2010 +0000
+++ b/motordriver.cpp Thu Nov 11 15:32:55 2010 +0000
@@ -1,35 +1,35 @@
- /*motor driver libary modified from the following libary,
- *
- * mbed simple H-bridge motor controller
- * Copyright (c) 2007-2010, sford
- *
- * by Christopher Hasler.
- *
- * from sford's libary,
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
+/*motor driver libary modified from the following libary,
+*
+* mbed simple H-bridge motor controller
+* Copyright (c) 2007-2010, sford
+*
+* by Christopher Hasler.
+*
+* from sford's libary,
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+* THE SOFTWARE.
+*/
#include "motordriver.h"
-
+
#include "mbed.h"
-
+
Motor::Motor(PinName pwm, PinName fwd, PinName rev, int brakeable):
_pwm(pwm), _fwd(fwd), _rev(rev) {
@@ -40,21 +40,53 @@
// Initial condition of output enables
_fwd = 0;
_rev = 0;
-
+
//set if the motor dirver is capable of braking. (addition)
Brakeable= brakeable;
+ sign = 0;//i.e nothing.
}
-
+
void Motor::speed(float speed) {
- _fwd = (speed > 0.0);
- _rev = (speed < 0.0);
- _pwm = abs(speed);
+ if (sign == 0) {
+ _fwd = (speed > 0.0);
+ _rev = (speed < 0.0);
+ _pwm = abs(speed);
+ } else if (sign == 1) {
+ if (speed < 0) {
+ _fwd = (speed > 0.0);
+ _rev = (speed < 0.0);
+ _pwm = 0;
+ } else {
+ _fwd = (speed > 0.0);
+ _rev = (speed < 0.0);
+ _pwm = abs(speed);
+ }
+ } else if (sign == -1) {
+ if (speed > 0) {
+ _fwd = (speed > 0.0);
+ _rev = (speed < 0.0);
+ _pwm = 0;
+ } else {
+ _fwd = (speed > 0.0);
+ _rev = (speed < 0.0);
+ _pwm = abs(speed);
+ }
+ }
+ if (speed > 0)
+ sign = 1;
+ else if (speed < 0) {
+ sign = -1;
+ } else if (speed == 0) {
+ sign = 0;
+ }
+
}
// (additions)
void Motor::coast(void) {
_fwd = 0;
_rev = 0;
_pwm = 0;
+ sign = 0;
}
void Motor::stop(void) {
@@ -62,20 +94,20 @@
_fwd = 1;
_rev = 1;
_pwm = 0.5;
- }
- else
- return;
+ sign = 0;
+ } else
+ return;
}
-
+
/*
test code, this demonstrates working motor drivers.
-
-Motor A(p22, p6, p5, 1); // pwm, fwd, rev, can break
+
+Motor A(p22, p6, p5, 1); // pwm, fwd, rev, can break
Motor B(p21, p7, p8, 1); // pwm, fwd, rev, can break
int main() {
for (float s=-1.0; s < 1.0 ; s += 0.01) {
- A.speed(s);
- B.speed(s);
+ A.speed(s);
+ B.speed(s);
wait(0.02);
}
A.stop();
--- a/motordriver.h Sat Nov 06 13:05:17 2010 +0000
+++ b/motordriver.h Thu Nov 11 15:32:55 2010 +0000
@@ -71,6 +71,7 @@
DigitalOut _fwd;
DigitalOut _rev;
int Brakeable; // (addition)
+ int sign; //prevents throwing the motor from full foward to full reverse and stuff melting.
};
DC Motor