added gy80 dcm

Dependencies:   mbed DCM_AHRS_GY80 PID MMA8451Q

Fork of quadCommand by Greg Abdo

quadCommand/motor/motor.cpp

Committer:
gabdo
Date:
2013-06-13
Revision:
55:bca9c9e92da6
Parent:
45:088885f4a13d
Child:
56:a550127695b2

File content as of revision 55:bca9c9e92da6:

/****************************** motor.cpp ********************************/
/* Version: 1.0                                                          */
/* Last Updated: June 1, 2013                                            */
/*                                                                       */
/* The motor class is used for motor control using a PWM ECS. When a     */
/*a motor object is created you must pass the PWM pin as the only        */
/*argument.                                                              */
/*************************************************************************/

#include "motor.h"

/************************** motor( PinName ) *****************************/
/* The motor constructor takes the pin to be used as for PWM and sets it */
/*to default safe valuse.                                                */
/*************************************************************************/

motor::motor( PinName pin ) : _pwm(pin)
{
    _pwm.period( 0.020 );       // Set the period to 20ms.
    setPulseMin( 0.001150 );    // Set default min pulse.
    setPulseMax( 0.002 );       // Set default max pulse.
    setSpeed( 0 );              // Set motor to stopped.
}

/************************** setSpeed( int ) ******************************/
/* Set speed takes an int value between 0 and 100 and sets the speed of  */
/*the motor based on passed in percent value of speed.                   */
/*************************************************************************/

void motor::setSpeed( float value )
{
    // Is the value to small?
    if( value - trim  < 0 )             // Yup, just set to 0.
        currentSpeed = 0;
    
    // Is the value to large?
    else if( value + trim  > 100 )      // Yup, just set to 100.
        currentSpeed = 100;
    
    // Value must be in the correct range.    
    else    
        currentSpeed = value + trim;   // Set the new value.

    // Calculate the value based on pulseMin, pulseMax and currentSpeed.
    pulse = ((pulseMax - pulseMin ) / 100 * currentSpeed ) + pulseMin;
    _pwm.pulsewidth( pulse );   // Write the pulse to the pin.
}

/************************** setPulseMin( float ) *************************/
/*                                                                       */
/*************************************************************************/

void motor::setPulseMin( float value )
{
    pulseMin = value;
}

/************************** setPulseMax( float ) *************************/
/*                                                                       */
/*************************************************************************/

void motor::setPulseMax( float value )
{
    pulseMax = value;
}

/*************************** float getPulse( ) ***************************/
/* Get the current pulse value.                                          */
/*************************************************************************/

float motor::getPulse( void )
{
    return pulse;
}

/*************************** float getSpeed( ) ***************************/
/*                                                                       */
/*************************************************************************/

float motor::getSpeed()
{
    return currentSpeed;
}