ステッピングドライバー
stepperMotor.h@0:5ab22c563f6a, 2016-08-07 (annotated)
- Committer:
- kikoaac
- Date:
- Sun Aug 07 12:47:30 2016 +0000
- Revision:
- 0:5ab22c563f6a
Stepper;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kikoaac | 0:5ab22c563f6a | 1 | |
kikoaac | 0:5ab22c563f6a | 2 | #ifndef Stepper_H |
kikoaac | 0:5ab22c563f6a | 3 | #define Stepper_H |
kikoaac | 0:5ab22c563f6a | 4 | |
kikoaac | 0:5ab22c563f6a | 5 | #include "mbed.h" |
kikoaac | 0:5ab22c563f6a | 6 | #define Front 1 |
kikoaac | 0:5ab22c563f6a | 7 | #define Back 2 |
kikoaac | 0:5ab22c563f6a | 8 | #define Stop 3 |
kikoaac | 0:5ab22c563f6a | 9 | #define Servo 4 |
kikoaac | 0:5ab22c563f6a | 10 | #define OFF 0 |
kikoaac | 0:5ab22c563f6a | 11 | #define ON 1 |
kikoaac | 0:5ab22c563f6a | 12 | |
kikoaac | 0:5ab22c563f6a | 13 | int step[4] = {0,1,3,2}; |
kikoaac | 0:5ab22c563f6a | 14 | |
kikoaac | 0:5ab22c563f6a | 15 | class Stepper |
kikoaac | 0:5ab22c563f6a | 16 | { |
kikoaac | 0:5ab22c563f6a | 17 | protected : |
kikoaac | 0:5ab22c563f6a | 18 | PinName Pin[2]; |
kikoaac | 0:5ab22c563f6a | 19 | float bias; |
kikoaac | 0:5ab22c563f6a | 20 | Stepper& operator=(const Motor &m) { |
kikoaac | 0:5ab22c563f6a | 21 | return *this; |
kikoaac | 0:5ab22c563f6a | 22 | } |
kikoaac | 0:5ab22c563f6a | 23 | |
kikoaac | 0:5ab22c563f6a | 24 | public: |
kikoaac | 0:5ab22c563f6a | 25 | |
kikoaac | 0:5ab22c563f6a | 26 | Stepper(PinName _pin1, PinName _pin2) : input(_pin1,_pin2) { |
kikoaac | 0:5ab22c563f6a | 27 | Max = 0; |
kikoaac | 0:5ab22c563f6a | 28 | state = Stop; |
kikoaac | 0:5ab22c563f6a | 29 | pulse = 0; |
kikoaac | 0:5ab22c563f6a | 30 | Step = 0; |
kikoaac | 0:5ab22c563f6a | 31 | intervalTime = 0.1; |
kikoaac | 0:5ab22c563f6a | 32 | start(); |
kikoaac | 0:5ab22c563f6a | 33 | time = 0; |
kikoaac | 0:5ab22c563f6a | 34 | } |
kikoaac | 0:5ab22c563f6a | 35 | |
kikoaac | 0:5ab22c563f6a | 36 | |
kikoaac | 0:5ab22c563f6a | 37 | Stepper& operator= (float duty) { |
kikoaac | 0:5ab22c563f6a | 38 | if(duty<-0.01F) |
kikoaac | 0:5ab22c563f6a | 39 | { |
kikoaac | 0:5ab22c563f6a | 40 | duty = -0.01 / duty; |
kikoaac | 0:5ab22c563f6a | 41 | run(Back,duty); |
kikoaac | 0:5ab22c563f6a | 42 | } |
kikoaac | 0:5ab22c563f6a | 43 | else if(float(duty)>0.01F) |
kikoaac | 0:5ab22c563f6a | 44 | { |
kikoaac | 0:5ab22c563f6a | 45 | duty = 0.01 / duty; |
kikoaac | 0:5ab22c563f6a | 46 | run(Front,duty); |
kikoaac | 0:5ab22c563f6a | 47 | } |
kikoaac | 0:5ab22c563f6a | 48 | else run(Stop,0); |
kikoaac | 0:5ab22c563f6a | 49 | return *this; |
kikoaac | 0:5ab22c563f6a | 50 | } |
kikoaac | 0:5ab22c563f6a | 51 | void start() { |
kikoaac | 0:5ab22c563f6a | 52 | tick.attach(this,&Stepper::interval,0.01); |
kikoaac | 0:5ab22c563f6a | 53 | |
kikoaac | 0:5ab22c563f6a | 54 | } |
kikoaac | 0:5ab22c563f6a | 55 | void run(int i,float duty) { |
kikoaac | 0:5ab22c563f6a | 56 | intervalTime = duty; |
kikoaac | 0:5ab22c563f6a | 57 | state = i; |
kikoaac | 0:5ab22c563f6a | 58 | } |
kikoaac | 0:5ab22c563f6a | 59 | float min,max; |
kikoaac | 0:5ab22c563f6a | 60 | void setbias_motor(float b) { |
kikoaac | 0:5ab22c563f6a | 61 | bias=b; |
kikoaac | 0:5ab22c563f6a | 62 | } |
kikoaac | 0:5ab22c563f6a | 63 | void duty_max(float Max) { |
kikoaac | 0:5ab22c563f6a | 64 | max=Max; |
kikoaac | 0:5ab22c563f6a | 65 | } |
kikoaac | 0:5ab22c563f6a | 66 | void duty_min(float Min) { |
kikoaac | 0:5ab22c563f6a | 67 | min=Min; |
kikoaac | 0:5ab22c563f6a | 68 | } |
kikoaac | 0:5ab22c563f6a | 69 | void setTarget(int tar) |
kikoaac | 0:5ab22c563f6a | 70 | { |
kikoaac | 0:5ab22c563f6a | 71 | target = tar; |
kikoaac | 0:5ab22c563f6a | 72 | } |
kikoaac | 0:5ab22c563f6a | 73 | int enable; |
kikoaac | 0:5ab22c563f6a | 74 | int state; |
kikoaac | 0:5ab22c563f6a | 75 | int target; |
kikoaac | 0:5ab22c563f6a | 76 | float Max; |
kikoaac | 0:5ab22c563f6a | 77 | bool finished; |
kikoaac | 0:5ab22c563f6a | 78 | int Step; |
kikoaac | 0:5ab22c563f6a | 79 | float angle; |
kikoaac | 0:5ab22c563f6a | 80 | int pulse; |
kikoaac | 0:5ab22c563f6a | 81 | int targetPulse; |
kikoaac | 0:5ab22c563f6a | 82 | float intervalTime; |
kikoaac | 0:5ab22c563f6a | 83 | BusOut input; |
kikoaac | 0:5ab22c563f6a | 84 | Ticker tick; |
kikoaac | 0:5ab22c563f6a | 85 | double time; |
kikoaac | 0:5ab22c563f6a | 86 | void interval() { |
kikoaac | 0:5ab22c563f6a | 87 | /*if(enable == OFF) |
kikoaac | 0:5ab22c563f6a | 88 | { |
kikoaac | 0:5ab22c563f6a | 89 | return; |
kikoaac | 0:5ab22c563f6a | 90 | }*/ |
kikoaac | 0:5ab22c563f6a | 91 | time = time + 0.01; |
kikoaac | 0:5ab22c563f6a | 92 | if(intervalTime < time) { |
kikoaac | 0:5ab22c563f6a | 93 | time = 0; |
kikoaac | 0:5ab22c563f6a | 94 | if(state == Front) { |
kikoaac | 0:5ab22c563f6a | 95 | Step++; |
kikoaac | 0:5ab22c563f6a | 96 | if(Step>=4)Step = 0; |
kikoaac | 0:5ab22c563f6a | 97 | input = step[Step]; |
kikoaac | 0:5ab22c563f6a | 98 | pulse++; |
kikoaac | 0:5ab22c563f6a | 99 | |
kikoaac | 0:5ab22c563f6a | 100 | //printf("%d %d ",step[Step],Step); |
kikoaac | 0:5ab22c563f6a | 101 | } |
kikoaac | 0:5ab22c563f6a | 102 | if(state == Back) { |
kikoaac | 0:5ab22c563f6a | 103 | Step--; |
kikoaac | 0:5ab22c563f6a | 104 | if(Step<=-1)Step = 3; |
kikoaac | 0:5ab22c563f6a | 105 | input = step[Step]; |
kikoaac | 0:5ab22c563f6a | 106 | pulse--; |
kikoaac | 0:5ab22c563f6a | 107 | } |
kikoaac | 0:5ab22c563f6a | 108 | if(state == Servo) { |
kikoaac | 0:5ab22c563f6a | 109 | if(pulse < target) { |
kikoaac | 0:5ab22c563f6a | 110 | Step++; |
kikoaac | 0:5ab22c563f6a | 111 | if(Step>=4)Step = 0; |
kikoaac | 0:5ab22c563f6a | 112 | input = step[Step]; |
kikoaac | 0:5ab22c563f6a | 113 | pulse++; |
kikoaac | 0:5ab22c563f6a | 114 | |
kikoaac | 0:5ab22c563f6a | 115 | //printf("%d %d ",step[Step],Step); |
kikoaac | 0:5ab22c563f6a | 116 | } |
kikoaac | 0:5ab22c563f6a | 117 | if(pulse > target) { |
kikoaac | 0:5ab22c563f6a | 118 | Step--; |
kikoaac | 0:5ab22c563f6a | 119 | if(Step<=-1)Step = 3; |
kikoaac | 0:5ab22c563f6a | 120 | input = step[Step]; |
kikoaac | 0:5ab22c563f6a | 121 | pulse--; |
kikoaac | 0:5ab22c563f6a | 122 | } |
kikoaac | 0:5ab22c563f6a | 123 | } |
kikoaac | 0:5ab22c563f6a | 124 | } |
kikoaac | 0:5ab22c563f6a | 125 | } |
kikoaac | 0:5ab22c563f6a | 126 | }; |
kikoaac | 0:5ab22c563f6a | 127 | |
kikoaac | 0:5ab22c563f6a | 128 | #endif /* PID_H */ |