beta1
Fork of a4998 by
a4988.cpp@3:9e9f3cd7fff0, 2018-07-17 (annotated)
- Committer:
- glintligo
- Date:
- Tue Jul 17 00:28:36 2018 +0000
- Revision:
- 3:9e9f3cd7fff0
- Parent:
- 2:57c57267b1da
beta2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
glintligo | 0:173936452e07 | 1 | #include "a4988.h" |
glintligo | 0:173936452e07 | 2 | #include "mbed.h" |
glintligo | 3:9e9f3cd7fff0 | 3 | |
glintligo | 3:9e9f3cd7fff0 | 4 | Stepper::Stepper(PinName _en, PinName _stepPin, PinName _direction) : en(_en), |
glintligo | 3:9e9f3cd7fff0 | 5 | stepPin(_stepPin), |
glintligo | 3:9e9f3cd7fff0 | 6 | direction(_direction) |
glintligo | 0:173936452e07 | 7 | { |
glintligo | 0:173936452e07 | 8 | } |
glintligo | 3:9e9f3cd7fff0 | 9 | /** |
glintligo | 3:9e9f3cd7fff0 | 10 | * 转动特定脉冲 |
glintligo | 3:9e9f3cd7fff0 | 11 | * @param dir [运动方向] |
glintligo | 3:9e9f3cd7fff0 | 12 | * @param frequency [脉冲周期] |
glintligo | 3:9e9f3cd7fff0 | 13 | * @param _remain [脉冲个数] |
glintligo | 3:9e9f3cd7fff0 | 14 | */ |
glintligo | 3:9e9f3cd7fff0 | 15 | void Stepper::step(int dir, int frequency, volatile int _remain) |
glintligo | 0:173936452e07 | 16 | { |
glintligo | 3:9e9f3cd7fff0 | 17 | if (dir == 1) |
glintligo | 3:9e9f3cd7fff0 | 18 | { |
glintligo | 0:173936452e07 | 19 | direction = 0; |
glintligo | 3:9e9f3cd7fff0 | 20 | } |
glintligo | 3:9e9f3cd7fff0 | 21 | else if (dir == 0) |
glintligo | 3:9e9f3cd7fff0 | 22 | { |
glintligo | 0:173936452e07 | 23 | direction = 1; |
glintligo | 0:173936452e07 | 24 | } |
glintligo | 3:9e9f3cd7fff0 | 25 | else |
glintligo | 2:57c57267b1da | 26 | { |
glintligo | 2:57c57267b1da | 27 | return; |
glintligo | 2:57c57267b1da | 28 | } |
glintligo | 0:173936452e07 | 29 | remain = _remain; |
glintligo | 3:9e9f3cd7fff0 | 30 | step_ticker.attach(callback(this, &Stepper::step_control), 0.5 / frequency); |
glintligo | 0:173936452e07 | 31 | } |
glintligo | 3:9e9f3cd7fff0 | 32 | /** |
glintligo | 3:9e9f3cd7fff0 | 33 | * 启动步进电机 |
glintligo | 3:9e9f3cd7fff0 | 34 | */ |
glintligo | 0:173936452e07 | 35 | void Stepper::enable() |
glintligo | 0:173936452e07 | 36 | { |
glintligo | 0:173936452e07 | 37 | en = 0; |
glintligo | 0:173936452e07 | 38 | } |
glintligo | 3:9e9f3cd7fff0 | 39 | /** |
glintligo | 3:9e9f3cd7fff0 | 40 | * 关闭步进电机 |
glintligo | 3:9e9f3cd7fff0 | 41 | */ |
glintligo | 0:173936452e07 | 42 | void Stepper::disable() |
glintligo | 0:173936452e07 | 43 | { |
glintligo | 0:173936452e07 | 44 | en = 1; |
glintligo | 0:173936452e07 | 45 | } |
glintligo | 3:9e9f3cd7fff0 | 46 | /** |
glintligo | 3:9e9f3cd7fff0 | 47 | * 步进电机控制程序 |
glintligo | 3:9e9f3cd7fff0 | 48 | */ |
glintligo | 0:173936452e07 | 49 | void Stepper::step_control() |
glintligo | 0:173936452e07 | 50 | { |
glintligo | 3:9e9f3cd7fff0 | 51 | if (remain <= 0) |
glintligo | 3:9e9f3cd7fff0 | 52 | { |
glintligo | 3:9e9f3cd7fff0 | 53 | step_ticker.detach(); |
glintligo | 3:9e9f3cd7fff0 | 54 | return; |
glintligo | 3:9e9f3cd7fff0 | 55 | } |
glintligo | 3:9e9f3cd7fff0 | 56 | |
glintligo | 3:9e9f3cd7fff0 | 57 | if (stepPin) |
glintligo | 3:9e9f3cd7fff0 | 58 | { |
glintligo | 3:9e9f3cd7fff0 | 59 | stepPin = 0; //STEP 1->0 |
glintligo | 3:9e9f3cd7fff0 | 60 | remain--; |
glintligo | 3:9e9f3cd7fff0 | 61 | } |
glintligo | 3:9e9f3cd7fff0 | 62 | else |
glintligo | 3:9e9f3cd7fff0 | 63 | { |
glintligo | 3:9e9f3cd7fff0 | 64 | stepPin = 1; //STEP 0->1 |
glintligo | 3:9e9f3cd7fff0 | 65 | } |
glintligo | 0:173936452e07 | 66 | } |
glintligo | 3:9e9f3cd7fff0 | 67 | /** |
glintligo | 3:9e9f3cd7fff0 | 68 | * 一直转 |
glintligo | 3:9e9f3cd7fff0 | 69 | * @param dir [运动方向] |
glintligo | 3:9e9f3cd7fff0 | 70 | * @param frequency [脉冲周期] |
glintligo | 3:9e9f3cd7fff0 | 71 | */ |
glintligo | 2:57c57267b1da | 72 | void Stepper::longrun(int dir, int frequency) |
glintligo | 2:57c57267b1da | 73 | { |
glintligo | 3:9e9f3cd7fff0 | 74 | if (dir == 1) |
glintligo | 3:9e9f3cd7fff0 | 75 | { |
glintligo | 2:57c57267b1da | 76 | direction = 0; |
glintligo | 3:9e9f3cd7fff0 | 77 | } |
glintligo | 3:9e9f3cd7fff0 | 78 | else if (dir == 0) |
glintligo | 3:9e9f3cd7fff0 | 79 | { |
glintligo | 2:57c57267b1da | 80 | direction = 1; |
glintligo | 2:57c57267b1da | 81 | } |
glintligo | 3:9e9f3cd7fff0 | 82 | else |
glintligo | 2:57c57267b1da | 83 | { |
glintligo | 2:57c57267b1da | 84 | return; |
glintligo | 2:57c57267b1da | 85 | } |
glintligo | 3:9e9f3cd7fff0 | 86 | step_ticker.attach(callback(this, &Stepper::run_control), 0.5 / frequency); |
glintligo | 2:57c57267b1da | 87 | } |
glintligo | 3:9e9f3cd7fff0 | 88 | /** |
glintligo | 3:9e9f3cd7fff0 | 89 | * 一直转运动函数 |
glintligo | 3:9e9f3cd7fff0 | 90 | */ |
glintligo | 2:57c57267b1da | 91 | void Stepper::run_control() |
glintligo | 2:57c57267b1da | 92 | { |
glintligo | 3:9e9f3cd7fff0 | 93 | if (stepPin) |
glintligo | 3:9e9f3cd7fff0 | 94 | { |
glintligo | 3:9e9f3cd7fff0 | 95 | stepPin = 0; //STEP 1->0 |
glintligo | 3:9e9f3cd7fff0 | 96 | remain--; |
glintligo | 3:9e9f3cd7fff0 | 97 | } |
glintligo | 3:9e9f3cd7fff0 | 98 | else |
glintligo | 3:9e9f3cd7fff0 | 99 | { |
glintligo | 3:9e9f3cd7fff0 | 100 | stepPin = 1; //STEP 0->1 |
glintligo | 3:9e9f3cd7fff0 | 101 | } |
glintligo | 2:57c57267b1da | 102 | } |
glintligo | 3:9e9f3cd7fff0 | 103 | /** |
glintligo | 3:9e9f3cd7fff0 | 104 | * 停止一直转 |
glintligo | 3:9e9f3cd7fff0 | 105 | */ |
glintligo | 2:57c57267b1da | 106 | void Stepper::stoprun() |
glintligo | 2:57c57267b1da | 107 | { |
glintligo | 2:57c57267b1da | 108 | step_ticker.detach(); |
glintligo | 3:9e9f3cd7fff0 | 109 | } |