test
Fork of MotorDriver by
Diff: MotorDriver.h
- Revision:
- 0:871adb9cf798
- Child:
- 1:19476b49822b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MotorDriver.h Tue Dec 08 00:11:04 2015 +0000 @@ -0,0 +1,103 @@ +/* +Bryce Williams +09/14/2014 + +General/Basic Motor Driver Class providing Motor Control using a COTS Motor Driver + + Class based off of Christopher Hasler's Motordriver library found at + https://developer.mbed.org/cookbook/Motor + + +* 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. +*/ + +#ifndef MOTORDRIVER_H +#define MOTORDRIVER_H + +#include "mbed.h" + +typedef enum {ERROR=0, DRIVING_CW=1, DRIVING_CCW=2, BRAKING=3, COASTING=4}Code_t; +typedef struct{ + Code_t code; + float value; +}State_t; + +class MotorDriver{ + public: + /* + Constructor of MotorDriver Objects + @param in_1 Direction Input 1 + @param in_2 Direction Input 2 + @param pwm PWM speed control input + @param pwmFreq PWM frequency, some motors may whine at lower freqs + @param isBrakable Boolean value indicating whether or not the + motor driver is brakeable(see your datasheet) + */ + MotorDriver(DigitalOut in1, DigitalOut in2, PwmOut pwm, float pwmFreq, bool isBrakeable = false); + + /* + Sets speed of motor normalized between -1.0 to 1.0 + @param speed Value -1.0 to 1.0 (>0 CW at speed as percentage) + (<0 CCW at speed as percentage) + (=0 speed is zero) + @return state of the motor + NOTE: This method will NOT allow user to instantaneously swithch + from CW to CCW or vise versa. Doing so will cause the motor to + be put in to a BRAKE condition, while the motor_state.code will + be updated to ERROR. User should avoid trying to do this, call + first setSpeed(0) or brake(). + */ + State_t setSpeed(float speed); + + /* + Same as setSpeed(float speed), however does not impose the safety disallowing + instantaneous reversal of motor direction. It is up to the user to ensure they + do not blow up their motor. + */ + State_t forceSetSpeed(float speed); + + /* + Put motor into braked config + @param intensity How hard to brake (0.0 to 1.0) + @return state of the motors + */ + State_t brake(float intensity); + + /* + Put motor into stop/coast config + */ + State_t coast(); + + + /* + Get state of the motor + @return state of the motor + */ + State_t getState(); + + protected: // Protected so objects that inherit can access + State_t motor_state; + DigitalOut _in1; + DigitalOut _in2; + PwmOut _pwm; + bool isBrakeable; + void determineState(); // Determine motor state based on in1, in2, and pwm +}; + +#endif \ No newline at end of file