Library for handle a Stepper Motor Driver Borad
StepperMotor.cpp@0:ce88091ae9fb, 2012-11-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |