Example for a Magnevation Board used previously on a OOPICII
Fork of Motordriver by
Diff: motordriver.cpp
- Revision:
- 6:81b393c33b77
- Parent:
- 5:3110b9209d3c
diff -r 3110b9209d3c -r 81b393c33b77 motordriver.cpp --- a/motordriver.cpp Thu Nov 25 13:34:15 2010 +0000 +++ b/motordriver.cpp Mon Feb 11 21:44:17 2013 +0000 @@ -1,11 +1,11 @@ /*motor driver libary modified from the following libary, * * mbed simple H-bridge motor controller -* Copyright (c) 2007-2010, sford +* Copyright (c) 2007-2010, S Ford * -* by Christopher Hasler. +* by Derek Calland modified for a Magnevation PWM Driver Board based on LMD18200T H-Bridge Driver IC's * -* from sford's libary, +* from Christopher Hasler originally from Simon Ford'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 @@ -30,111 +30,40 @@ #include "mbed.h" -Motor::Motor(PinName pwm, PinName fwd, PinName rev, int brakeable): - _pwm(pwm), _fwd(fwd), _rev(rev) { +Motor::Motor(PinName pwm, PinName fwdrev, PinName brake, bool direction, bool stop): ///Class Implementation + _pwm(pwm), _fwdrev(fwdrev), _brake(brake) +{ + _direction = direction; //Set each motor to rotate in clockwise or counter clockwise + _stop = stop; //Stop all motion // Set initial condition of PWM _pwm.period(0.001); _pwm = 0; // Initial condition of output enables - _fwd = 0; - _rev = 0; + _fwdrev = fwdrev; //sets output to drive Motor in a direction + /* check the motor to see what direction this is from Magnevation Board */ - //set if the motor dirver is capable of braking. (addition) - Brakeable= brakeable; - sign = 0;//i.e nothing. + //Initial condition of Brake + _brake = brake; //sets brake to ON/OFF condition to Magnevation Board } -float Motor::speed(float speed) { - float temp = 0; - if (sign == 0) { - _fwd = (speed > 0.0); - _rev = (speed < 0.0); - temp = abs(speed); - _pwm = temp; - } else if (sign == 1) { - if (speed < 0) { - _fwd = (speed > 0.0); - _rev = (speed < 0.0); - _pwm = 0; - temp = 0; - } else { - _fwd = (speed > 0.0); - _rev = (speed < 0.0); - temp = abs(speed); - _pwm = temp; - } - } else if (sign == -1) { - if (speed > 0) { - _fwd = (speed > 0.0); - _rev = (speed < 0.0); - _pwm = 0; - temp = 0; - } else { - _fwd = (speed > 0.0); - _rev = (speed < 0.0); - temp = abs(speed); - _pwm = temp; - } - } - if (speed > 0) - sign = 1; - else if (speed < 0) { - sign = -1; - } else if (speed == 0) { - sign = 0; - } - return temp; -} -// (additions) -void Motor::coast(void) { - _fwd = 0; - _rev = 0; - _pwm = 0; - sign = 0; +float Motor::speed(float speed, bool direction, bool stop) +{ + _fwdrev = direction; + _brake = stop; //Sets brake to ON/OFF condition to Magnevation Board + _pwm = abs(speed); + return speed; } -float Motor::stop(float duty) { - if (Brakeable == 1) { - _fwd = 1; - _rev = 1; - _pwm = duty; - sign = 0; - return duty; - } else - Motor::coast(); - return -1; +float Motor::stop(float speed, bool stop) +{ + if (speed == 0.0) { + wait(0.02); + _brake = stop; + } + _pwm = abs(speed); + return speed; } -float Motor::state(void) { - if ((_fwd == _rev) && (_pwm > 0)) { - return -2;//braking - } else if (_pwm == 0) { - return 2;//coasting - } else if ((_fwd == 0) && (_rev == 1)) { - return -(_pwm);//reversing - } else if ((_fwd == 1) && (_rev == 0)) { - return _pwm;//fowards - } else - return -3;//error -} -/* - test code, this demonstrates working motor drivers. - -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); - wait(0.02); - } - A.stop(); - B.stop(); - wait(1); - A.coast(); - B.coast(); -} -*/ \ No newline at end of file