Arcadie Cracan / StepperController

Fork of StepperController by Viorel Stefan Savinescu

Committer:
acracan
Date:
Fri Jun 08 08:05:29 2018 +0000
Revision:
1:6e8186dd5bfa
Parent:
0:2cfd64d210f3
Child:
2:d589fc047bc9
Add different types of sequencing

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