Library for handle a Stepper Motor Driver Borad

StepperMotor.cpp

Committer:
dury
Date:
2012-11-20
Revision:
0:ce88091ae9fb
Child:
1:b96435078d4d

File content as of revision 0:ce88091ae9fb:

#include "StepperMotor.h"

StepperMotorDrv::StepperMotorDrv(PinName PinDir, PinName PinClk):Dir(PinDir),Clock(PinClk)
{
    MaxSpeed=100;
    Speed=0;
    Step=1;
    DutyCycle=50;
    Direction=CW;
    SetRawSpeedHz(0);
    SetDutyCyclePerc(DutyCycle);
    SetDir(CW);
}

StepperMotorDrv::~StepperMotorDrv()
{
}

// Set duty cycle of pwm in percentual
float StepperMotorDrv::SetDutyCyclePerc(float PercentualValue)
{
    if (PercentualValue > 100) PercentualValue=100;
    DutyCycle=PercentualValue;
    Clock.write(DutyCycle/100); 
    return (DutyCycle);
}

// Set duty cycle of pwm as float value from 0.0 to 1.0
// Values grater than 1.0 were used as 0.n
float StepperMotorDrv::SetDutyCycleValue(float DecimalValue)
{
    if (DecimalValue > 1){
        DecimalValue=DecimalValue - int(DecimalValue);
    }    
    Clock.write(DecimalValue); 
    return(DecimalValue * 100);
}

// Set Raw Speed in Hz
float StepperMotorDrv::SetRawSpeedHz(float SpeedHz)
{
    Speed=SpeedHz;
    Clock.period(1/Speed);
    return(Speed);
}

// Set Max Speed to Reach in Hz
void StepperMotorDrv::SetMaxSpeedHz(float MaxSpeedHz)
{
    MaxSpeed=MaxSpeedHz;
}

// Set Speed in Percentoal Value (the result depends on MaxSpeed)
// Return: Calculated Speed in Hz
float StepperMotorDrv::SetSpeedPerc(float PercValue)
{
    Speed=(MaxSpeed/100)*PercValue;
    Clock.period(1/Speed);
    return(Speed);
}

// Set Speed in Percentoal Value (the result depends on MaxSpeed)
// Return: new Speed in Hz
float StepperMotorDrv::IncSpeedHz(float StepValueHz)
{
    Speed+=StepValueHz;
    Clock.period(1/Speed);
    return(Speed);
}

// Increment Speed by <IncStep> Value
// Return: new Speed in Hz
float StepperMotorDrv::SpeedUp(void)
{
    return(IncSpeedHz(Step));
}

// Set Speed in Percentoal Value (the result depends on MaxSpeed)
// Return: new Speed in Hz
float StepperMotorDrv::DecSpeedHz(float StepValueHz)
{
    Speed-=StepValueHz;
    Clock.period(1/Speed);
    return Speed;
}

// Decrement Speed by <Step> Value
// Return: new Speed in Hz
float StepperMotorDrv::SpeedDown(void)
{
    return(DecSpeedHz(Step));
}

// Stop the Motor
void StepperMotorDrv::Stop(void)
{
    SetRawSpeedHz(0);
}

// Get the current speed in Hz
float StepperMotorDrv::GetSpeedHz(void)
{
    return Speed;
}

// Get the current speed in Perc Value
float StepperMotorDrv::GetSpeedPerc(void)
{
    return (Speed*100)/MaxSpeed;
}

// Get the current MAX Speed in Hz
float StepperMotorDrv::GetMaxSpeed(void)
{
    return (MaxSpeed);
}

// Get the current Duty Cycle in Perc Value
float StepperMotorDrv::GetDuryCyclePerc(void)
{
    return (DutyCycle);
}

// Get the current Duty Cycle decimal value
float StepperMotorDrv::GetDuryCycleValue(void)
{
    return (DutyCycle/100);
}

// Get the current Step Value
float StepperMotorDrv::GetStepHz(void)
{
    return (Step);
}

// Set Rotation Direction: CW=1 CC=0
void StepperMotorDrv::SetDir(bool RotationDir)
{
    Dir=RotationDir;
}

// Set Rotation Direction CW
void StepperMotorDrv::SetDirCW(void)
{
    Dir=CW;
}

// Set Rotation Direction CC
void StepperMotorDrv::SetDirCC(void)
{
    Dir=CC;
}

// Set Rotation Direction CW
void StepperMotorDrv::RevertDir(void)
{
    Dir=!Dir;
}

// Get Rotation Direction Direction
// Return: CW=1 or CC=0
bool StepperMotorDrv::GetDir(void)
{
    return(Dir);
}