Library for handle a Stepper Motor Driver Borad

Committer:
dury
Date:
Tue Nov 20 16:46:43 2012 +0000
Revision:
0:ce88091ae9fb
Child:
1:b96435078d4d
First Release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dury 0:ce88091ae9fb 1 #include "StepperMotor.h"
dury 0:ce88091ae9fb 2
dury 0:ce88091ae9fb 3 StepperMotorDrv::StepperMotorDrv(PinName PinDir, PinName PinClk):Dir(PinDir),Clock(PinClk)
dury 0:ce88091ae9fb 4 {
dury 0:ce88091ae9fb 5 MaxSpeed=100;
dury 0:ce88091ae9fb 6 Speed=0;
dury 0:ce88091ae9fb 7 Step=1;
dury 0:ce88091ae9fb 8 DutyCycle=50;
dury 0:ce88091ae9fb 9 Direction=CW;
dury 0:ce88091ae9fb 10 SetRawSpeedHz(0);
dury 0:ce88091ae9fb 11 SetDutyCyclePerc(DutyCycle);
dury 0:ce88091ae9fb 12 SetDir(CW);
dury 0:ce88091ae9fb 13 }
dury 0:ce88091ae9fb 14
dury 0:ce88091ae9fb 15 StepperMotorDrv::~StepperMotorDrv()
dury 0:ce88091ae9fb 16 {
dury 0:ce88091ae9fb 17 }
dury 0:ce88091ae9fb 18
dury 0:ce88091ae9fb 19 // Set duty cycle of pwm in percentual
dury 0:ce88091ae9fb 20 float StepperMotorDrv::SetDutyCyclePerc(float PercentualValue)
dury 0:ce88091ae9fb 21 {
dury 0:ce88091ae9fb 22 if (PercentualValue > 100) PercentualValue=100;
dury 0:ce88091ae9fb 23 DutyCycle=PercentualValue;
dury 0:ce88091ae9fb 24 Clock.write(DutyCycle/100);
dury 0:ce88091ae9fb 25 return (DutyCycle);
dury 0:ce88091ae9fb 26 }
dury 0:ce88091ae9fb 27
dury 0:ce88091ae9fb 28 // Set duty cycle of pwm as float value from 0.0 to 1.0
dury 0:ce88091ae9fb 29 // Values grater than 1.0 were used as 0.n
dury 0:ce88091ae9fb 30 float StepperMotorDrv::SetDutyCycleValue(float DecimalValue)
dury 0:ce88091ae9fb 31 {
dury 0:ce88091ae9fb 32 if (DecimalValue > 1){
dury 0:ce88091ae9fb 33 DecimalValue=DecimalValue - int(DecimalValue);
dury 0:ce88091ae9fb 34 }
dury 0:ce88091ae9fb 35 Clock.write(DecimalValue);
dury 0:ce88091ae9fb 36 return(DecimalValue * 100);
dury 0:ce88091ae9fb 37 }
dury 0:ce88091ae9fb 38
dury 0:ce88091ae9fb 39 // Set Raw Speed in Hz
dury 0:ce88091ae9fb 40 float StepperMotorDrv::SetRawSpeedHz(float SpeedHz)
dury 0:ce88091ae9fb 41 {
dury 0:ce88091ae9fb 42 Speed=SpeedHz;
dury 0:ce88091ae9fb 43 Clock.period(1/Speed);
dury 0:ce88091ae9fb 44 return(Speed);
dury 0:ce88091ae9fb 45 }
dury 0:ce88091ae9fb 46
dury 0:ce88091ae9fb 47 // Set Max Speed to Reach in Hz
dury 0:ce88091ae9fb 48 void StepperMotorDrv::SetMaxSpeedHz(float MaxSpeedHz)
dury 0:ce88091ae9fb 49 {
dury 0:ce88091ae9fb 50 MaxSpeed=MaxSpeedHz;
dury 0:ce88091ae9fb 51 }
dury 0:ce88091ae9fb 52
dury 0:ce88091ae9fb 53 // Set Speed in Percentoal Value (the result depends on MaxSpeed)
dury 0:ce88091ae9fb 54 // Return: Calculated Speed in Hz
dury 0:ce88091ae9fb 55 float StepperMotorDrv::SetSpeedPerc(float PercValue)
dury 0:ce88091ae9fb 56 {
dury 0:ce88091ae9fb 57 Speed=(MaxSpeed/100)*PercValue;
dury 0:ce88091ae9fb 58 Clock.period(1/Speed);
dury 0:ce88091ae9fb 59 return(Speed);
dury 0:ce88091ae9fb 60 }
dury 0:ce88091ae9fb 61
dury 0:ce88091ae9fb 62 // Set Speed in Percentoal Value (the result depends on MaxSpeed)
dury 0:ce88091ae9fb 63 // Return: new Speed in Hz
dury 0:ce88091ae9fb 64 float StepperMotorDrv::IncSpeedHz(float StepValueHz)
dury 0:ce88091ae9fb 65 {
dury 0:ce88091ae9fb 66 Speed+=StepValueHz;
dury 0:ce88091ae9fb 67 Clock.period(1/Speed);
dury 0:ce88091ae9fb 68 return(Speed);
dury 0:ce88091ae9fb 69 }
dury 0:ce88091ae9fb 70
dury 0:ce88091ae9fb 71 // Increment Speed by <IncStep> Value
dury 0:ce88091ae9fb 72 // Return: new Speed in Hz
dury 0:ce88091ae9fb 73 float StepperMotorDrv::SpeedUp(void)
dury 0:ce88091ae9fb 74 {
dury 0:ce88091ae9fb 75 return(IncSpeedHz(Step));
dury 0:ce88091ae9fb 76 }
dury 0:ce88091ae9fb 77
dury 0:ce88091ae9fb 78 // Set Speed in Percentoal Value (the result depends on MaxSpeed)
dury 0:ce88091ae9fb 79 // Return: new Speed in Hz
dury 0:ce88091ae9fb 80 float StepperMotorDrv::DecSpeedHz(float StepValueHz)
dury 0:ce88091ae9fb 81 {
dury 0:ce88091ae9fb 82 Speed-=StepValueHz;
dury 0:ce88091ae9fb 83 Clock.period(1/Speed);
dury 0:ce88091ae9fb 84 return Speed;
dury 0:ce88091ae9fb 85 }
dury 0:ce88091ae9fb 86
dury 0:ce88091ae9fb 87 // Decrement Speed by <Step> Value
dury 0:ce88091ae9fb 88 // Return: new Speed in Hz
dury 0:ce88091ae9fb 89 float StepperMotorDrv::SpeedDown(void)
dury 0:ce88091ae9fb 90 {
dury 0:ce88091ae9fb 91 return(DecSpeedHz(Step));
dury 0:ce88091ae9fb 92 }
dury 0:ce88091ae9fb 93
dury 0:ce88091ae9fb 94 // Stop the Motor
dury 0:ce88091ae9fb 95 void StepperMotorDrv::Stop(void)
dury 0:ce88091ae9fb 96 {
dury 0:ce88091ae9fb 97 SetRawSpeedHz(0);
dury 0:ce88091ae9fb 98 }
dury 0:ce88091ae9fb 99
dury 0:ce88091ae9fb 100 // Get the current speed in Hz
dury 0:ce88091ae9fb 101 float StepperMotorDrv::GetSpeedHz(void)
dury 0:ce88091ae9fb 102 {
dury 0:ce88091ae9fb 103 return Speed;
dury 0:ce88091ae9fb 104 }
dury 0:ce88091ae9fb 105
dury 0:ce88091ae9fb 106 // Get the current speed in Perc Value
dury 0:ce88091ae9fb 107 float StepperMotorDrv::GetSpeedPerc(void)
dury 0:ce88091ae9fb 108 {
dury 0:ce88091ae9fb 109 return (Speed*100)/MaxSpeed;
dury 0:ce88091ae9fb 110 }
dury 0:ce88091ae9fb 111
dury 0:ce88091ae9fb 112 // Get the current MAX Speed in Hz
dury 0:ce88091ae9fb 113 float StepperMotorDrv::GetMaxSpeed(void)
dury 0:ce88091ae9fb 114 {
dury 0:ce88091ae9fb 115 return (MaxSpeed);
dury 0:ce88091ae9fb 116 }
dury 0:ce88091ae9fb 117
dury 0:ce88091ae9fb 118 // Get the current Duty Cycle in Perc Value
dury 0:ce88091ae9fb 119 float StepperMotorDrv::GetDuryCyclePerc(void)
dury 0:ce88091ae9fb 120 {
dury 0:ce88091ae9fb 121 return (DutyCycle);
dury 0:ce88091ae9fb 122 }
dury 0:ce88091ae9fb 123
dury 0:ce88091ae9fb 124 // Get the current Duty Cycle decimal value
dury 0:ce88091ae9fb 125 float StepperMotorDrv::GetDuryCycleValue(void)
dury 0:ce88091ae9fb 126 {
dury 0:ce88091ae9fb 127 return (DutyCycle/100);
dury 0:ce88091ae9fb 128 }
dury 0:ce88091ae9fb 129
dury 0:ce88091ae9fb 130 // Get the current Step Value
dury 0:ce88091ae9fb 131 float StepperMotorDrv::GetStepHz(void)
dury 0:ce88091ae9fb 132 {
dury 0:ce88091ae9fb 133 return (Step);
dury 0:ce88091ae9fb 134 }
dury 0:ce88091ae9fb 135
dury 0:ce88091ae9fb 136 // Set Rotation Direction: CW=1 CC=0
dury 0:ce88091ae9fb 137 void StepperMotorDrv::SetDir(bool RotationDir)
dury 0:ce88091ae9fb 138 {
dury 0:ce88091ae9fb 139 Dir=RotationDir;
dury 0:ce88091ae9fb 140 }
dury 0:ce88091ae9fb 141
dury 0:ce88091ae9fb 142 // Set Rotation Direction CW
dury 0:ce88091ae9fb 143 void StepperMotorDrv::SetDirCW(void)
dury 0:ce88091ae9fb 144 {
dury 0:ce88091ae9fb 145 Dir=CW;
dury 0:ce88091ae9fb 146 }
dury 0:ce88091ae9fb 147
dury 0:ce88091ae9fb 148 // Set Rotation Direction CC
dury 0:ce88091ae9fb 149 void StepperMotorDrv::SetDirCC(void)
dury 0:ce88091ae9fb 150 {
dury 0:ce88091ae9fb 151 Dir=CC;
dury 0:ce88091ae9fb 152 }
dury 0:ce88091ae9fb 153
dury 0:ce88091ae9fb 154 // Set Rotation Direction CW
dury 0:ce88091ae9fb 155 void StepperMotorDrv::RevertDir(void)
dury 0:ce88091ae9fb 156 {
dury 0:ce88091ae9fb 157 Dir=!Dir;
dury 0:ce88091ae9fb 158 }
dury 0:ce88091ae9fb 159
dury 0:ce88091ae9fb 160 // Get Rotation Direction Direction
dury 0:ce88091ae9fb 161 // Return: CW=1 or CC=0
dury 0:ce88091ae9fb 162 bool StepperMotorDrv::GetDir(void)
dury 0:ce88091ae9fb 163 {
dury 0:ce88091ae9fb 164 return(Dir);
dury 0:ce88091ae9fb 165 }