Updated stepper motor controller
Fork of StepperController by
steppercontroller.cpp@2:d589fc047bc9, 2018-06-15 (annotated)
- Committer:
- acracan
- Date:
- Fri Jun 15 17:39:52 2018 +0000
- Revision:
- 2:d589fc047bc9
- Parent:
- 1:6e8186dd5bfa
.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |