Updated stepper motor controller

Fork of StepperController by Viorel Stefan Savinescu

Committer:
acracan
Date:
Fri Jun 15 17:39:52 2018 +0000
Revision:
2:d589fc047bc9
Parent:
1:6e8186dd5bfa
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SavinescuStefan 0:2cfd64d210f3 1 #include "steppercontroller.h"
SavinescuStefan 0:2cfd64d210f3 2
SavinescuStefan 0:2cfd64d210f3 3 StepperController::StepperController(PinName phaseA,PinName enA, PinName phaseB, PinName enB ):
SavinescuStefan 0:2cfd64d210f3 4 phaseA(phaseA), enA(enA), phaseB(phaseB), enB(enB)
SavinescuStefan 0:2cfd64d210f3 5 {
SavinescuStefan 0:2cfd64d210f3 6 this->enA.period(50e-6f);
SavinescuStefan 0:2cfd64d210f3 7 this->enB.period(50e-6f);
SavinescuStefan 0:2cfd64d210f3 8 pulseWidth = 0.1f;
SavinescuStefan 0:2cfd64d210f3 9 state = 0;
acracan 2:d589fc047bc9 10 seq = Interleaved;
SavinescuStefan 0:2cfd64d210f3 11 }
SavinescuStefan 0:2cfd64d210f3 12
SavinescuStefan 0:2cfd64d210f3 13 void StepperController::advance()
SavinescuStefan 0:2cfd64d210f3 14 {
SavinescuStefan 0:2cfd64d210f3 15 state = (state + 4 + dir) & 3;
SavinescuStefan 0:2cfd64d210f3 16 updateOutputs();
SavinescuStefan 0:2cfd64d210f3 17 }
SavinescuStefan 0:2cfd64d210f3 18
SavinescuStefan 0:2cfd64d210f3 19 void StepperController::setPeriod(float period)
SavinescuStefan 0:2cfd64d210f3 20 {
SavinescuStefan 0:2cfd64d210f3 21 enA.period(period);
SavinescuStefan 0:2cfd64d210f3 22 enB.period(period);
SavinescuStefan 0:2cfd64d210f3 23 }
SavinescuStefan 0:2cfd64d210f3 24
SavinescuStefan 0:2cfd64d210f3 25 void StepperController::setPulseWidth(float pulseWidth)
SavinescuStefan 0:2cfd64d210f3 26 {
SavinescuStefan 0:2cfd64d210f3 27 this->pulseWidth = pulseWidth;
SavinescuStefan 0:2cfd64d210f3 28 }
SavinescuStefan 0:2cfd64d210f3 29
SavinescuStefan 0:2cfd64d210f3 30 void StepperController::setDirection(Direction dir)
SavinescuStefan 0:2cfd64d210f3 31 {
SavinescuStefan 0:2cfd64d210f3 32 this->dir = dir;
SavinescuStefan 0:2cfd64d210f3 33 }
SavinescuStefan 0:2cfd64d210f3 34
acracan 1:6e8186dd5bfa 35 void StepperController::setSequenceType(SequenceType seq)
acracan 1:6e8186dd5bfa 36 {
acracan 1:6e8186dd5bfa 37 this->seq = seq;
acracan 1:6e8186dd5bfa 38 }
acracan 1:6e8186dd5bfa 39
SavinescuStefan 0:2cfd64d210f3 40 void StepperController::updateOutputs()
SavinescuStefan 0:2cfd64d210f3 41 {
SavinescuStefan 0:2cfd64d210f3 42 switch(state){
SavinescuStefan 0:2cfd64d210f3 43 case 0:
SavinescuStefan 0:2cfd64d210f3 44 phaseA = 1;
SavinescuStefan 0:2cfd64d210f3 45 enA = pulseWidth;
SavinescuStefan 0:2cfd64d210f3 46 phaseB = 0;
SavinescuStefan 0:2cfd64d210f3 47 enB = 0.0f;
SavinescuStefan 0:2cfd64d210f3 48 break;
SavinescuStefan 0:2cfd64d210f3 49 case 1:
acracan 1:6e8186dd5bfa 50 switch(seq) {
acracan 1:6e8186dd5bfa 51 case Consecutive:
acracan 1:6e8186dd5bfa 52 phaseA = 0;
acracan 1:6e8186dd5bfa 53 enA = pulseWidth;
acracan 1:6e8186dd5bfa 54 phaseB = 0;
acracan 1:6e8186dd5bfa 55 enB = 0.0f;
acracan 1:6e8186dd5bfa 56 break;
acracan 1:6e8186dd5bfa 57 case Interleaved:
acracan 1:6e8186dd5bfa 58 phaseA = 0;
acracan 1:6e8186dd5bfa 59 enA = 0.0f;
acracan 1:6e8186dd5bfa 60 phaseB = 1;
acracan 1:6e8186dd5bfa 61 enB = pulseWidth;
acracan 1:6e8186dd5bfa 62 break;
acracan 1:6e8186dd5bfa 63 }
SavinescuStefan 0:2cfd64d210f3 64 break;
SavinescuStefan 0:2cfd64d210f3 65
SavinescuStefan 0:2cfd64d210f3 66 case 2:
acracan 1:6e8186dd5bfa 67 switch(seq) {
acracan 1:6e8186dd5bfa 68 case Consecutive:
acracan 1:6e8186dd5bfa 69 phaseA = 0;
acracan 1:6e8186dd5bfa 70 enA = 0.0f;
acracan 1:6e8186dd5bfa 71 phaseB = 1;
acracan 1:6e8186dd5bfa 72 enB = pulseWidth;
acracan 1:6e8186dd5bfa 73 break;
acracan 1:6e8186dd5bfa 74 case Interleaved:
acracan 1:6e8186dd5bfa 75 phaseA = 0;
acracan 1:6e8186dd5bfa 76 enA = pulseWidth;
acracan 1:6e8186dd5bfa 77 phaseB = 0;
acracan 1:6e8186dd5bfa 78 enB = 0.0f;
acracan 1:6e8186dd5bfa 79 break;
acracan 1:6e8186dd5bfa 80 }
SavinescuStefan 0:2cfd64d210f3 81 break;
SavinescuStefan 0:2cfd64d210f3 82
SavinescuStefan 0:2cfd64d210f3 83 case 3:
acracan 1:6e8186dd5bfa 84 phaseA = 0;
acracan 1:6e8186dd5bfa 85 enA = 0.0f;
acracan 1:6e8186dd5bfa 86 phaseB = 0;
acracan 1:6e8186dd5bfa 87 enB = pulseWidth;
SavinescuStefan 0:2cfd64d210f3 88 break;
SavinescuStefan 0:2cfd64d210f3 89
SavinescuStefan 0:2cfd64d210f3 90 default:
SavinescuStefan 0:2cfd64d210f3 91 phaseA = 0;
SavinescuStefan 0:2cfd64d210f3 92 enA = 0.0;
SavinescuStefan 0:2cfd64d210f3 93 phaseB = 0;
SavinescuStefan 0:2cfd64d210f3 94 enB = 0.0;
SavinescuStefan 0:2cfd64d210f3 95 }
acracan 1:6e8186dd5bfa 96 }