ステッピングドライバー

Dependents:   OneCircleRobot

Committer:
kikoaac
Date:
Sun Aug 07 12:47:30 2016 +0000
Revision:
0:5ab22c563f6a
Stepper;

Who changed what in which revision?

UserRevisionLine numberNew 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 */