MotorDriverのクラス

Dependencies:  

Dependents:   MotorDriveDEBUG

Committer:
kikoaac
Date:
Tue Aug 18 01:29:19 2015 +0000
Revision:
0:842f92dcf668
MotorDrive????
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kikoaac 0:842f92dcf668 1 #ifndef MotorClass_H
kikoaac 0:842f92dcf668 2 #define MotorClass_H
kikoaac 0:842f92dcf668 3
kikoaac 0:842f92dcf668 4 #include "mbed.h"
kikoaac 0:842f92dcf668 5
kikoaac 0:842f92dcf668 6 #define MotorMode 0x04
kikoaac 0:842f92dcf668 7 #define MotorState 0x0e
kikoaac 0:842f92dcf668 8 #define Who_am_I 0x2
kikoaac 0:842f92dcf668 9 #define MotorPWML 0x0f
kikoaac 0:842f92dcf668 10 #define MotorPWMH 0x10
kikoaac 0:842f92dcf668 11 #define MoterRevolutionL 0x11
kikoaac 0:842f92dcf668 12 #define MoterRevolutionH 0x12
kikoaac 0:842f92dcf668 13 #define MoterPulseL 0x13
kikoaac 0:842f92dcf668 14 #define MoterPulseH 0x14
kikoaac 0:842f92dcf668 15 #define MoterSpeedL 0x15
kikoaac 0:842f92dcf668 16 #define MoterSpeedH 0x16
kikoaac 0:842f92dcf668 17 #define Automatic 0x0
kikoaac 0:842f92dcf668 18 #define MotorP 0x30
kikoaac 0:842f92dcf668 19 #define MotorI 0x31
kikoaac 0:842f92dcf668 20 #define MotorD 0x32
kikoaac 0:842f92dcf668 21 #define FinishAuto 0x00
kikoaac 0:842f92dcf668 22 #define TargetSpeedH 0x24
kikoaac 0:842f92dcf668 23 #define TargetSpeedL 0x23
kikoaac 0:842f92dcf668 24 #define TargetAngleH 0x22
kikoaac 0:842f92dcf668 25 #define TargetAngleL 0x21
kikoaac 0:842f92dcf668 26 #define PulsePerRev 0x18
kikoaac 0:842f92dcf668 27 #define PulsePerRev2 0x19
kikoaac 0:842f92dcf668 28 #define PulsePerRevolutionL 0x25
kikoaac 0:842f92dcf668 29 #define PulsePerRevolutionH 0x26
kikoaac 0:842f92dcf668 30 #define PulsePerSec 0x27
kikoaac 0:842f92dcf668 31 #define PulsePerSec2 0x28
kikoaac 0:842f92dcf668 32 #define PulsePerAngle 0x20
kikoaac 0:842f92dcf668 33 #define RotateMode 0x17
kikoaac 0:842f92dcf668 34 #define Randam 0x3b
kikoaac 0:842f92dcf668 35 #define ADDRESS 0x3a
kikoaac 0:842f92dcf668 36 #define Debug1H 0x70
kikoaac 0:842f92dcf668 37 #define Debug1L 0x71
kikoaac 0:842f92dcf668 38 #define Debug2H 0x72
kikoaac 0:842f92dcf668 39 #define Debug2L 0x73
kikoaac 0:842f92dcf668 40 #define Debug3H 0x74
kikoaac 0:842f92dcf668 41 #define Debug3L 0x75
kikoaac 0:842f92dcf668 42
kikoaac 0:842f92dcf668 43 #define Front 1
kikoaac 0:842f92dcf668 44 #define Back 2
kikoaac 0:842f92dcf668 45 #define Stop 3
kikoaac 0:842f92dcf668 46 #define Free 4
kikoaac 0:842f92dcf668 47
kikoaac 0:842f92dcf668 48 class MotorClass
kikoaac 0:842f92dcf668 49 {
kikoaac 0:842f92dcf668 50 I2C& i2c;
kikoaac 0:842f92dcf668 51 QEI& wheel;
kikoaac 0:842f92dcf668 52 Ticker QeiInt;
kikoaac 0:842f92dcf668 53 private:
kikoaac 0:842f92dcf668 54
kikoaac 0:842f92dcf668 55 char QEIMode;
kikoaac 0:842f92dcf668 56 int AngOrSpe;
kikoaac 0:842f92dcf668 57 char addr;
kikoaac 0:842f92dcf668 58 char Action;
kikoaac 0:842f92dcf668 59 void attach()
kikoaac 0:842f92dcf668 60 {
kikoaac 0:842f92dcf668 61 double i = 0;
kikoaac 0:842f92dcf668 62 if(AngOrSpe == 0)
kikoaac 0:842f92dcf668 63 i=wheel.getSumangle();
kikoaac 0:842f92dcf668 64 if(AngOrSpe == 1)
kikoaac 0:842f92dcf668 65 i=wheel.getRPM()*1000;
kikoaac 0:842f92dcf668 66 char reg[2] = {PulsePerRev,PulsePerSec};
kikoaac 0:842f92dcf668 67 char data[2]={((short)i>>8),((short)i&0xff)};
kikoaac 0:842f92dcf668 68 OutputSomeData(reg[AngOrSpe],data,2);
kikoaac 0:842f92dcf668 69 printf("motor speed or angle is %f \r\n",i);
kikoaac 0:842f92dcf668 70 }
kikoaac 0:842f92dcf668 71 bool OutputOneData(char reg, char data )
kikoaac 0:842f92dcf668 72 {
kikoaac 0:842f92dcf668 73 char DATA[2]={reg,1};
kikoaac 0:842f92dcf668 74 bool N = i2c.write(addr,DATA,2);
kikoaac 0:842f92dcf668 75 N |= i2c.write(addr,&data,1);
kikoaac 0:842f92dcf668 76 return N;
kikoaac 0:842f92dcf668 77 }
kikoaac 0:842f92dcf668 78 bool OutputSomeData(char reg, char *data ,int size )
kikoaac 0:842f92dcf668 79 {
kikoaac 0:842f92dcf668 80 char DATA[2] = {reg,size};
kikoaac 0:842f92dcf668 81 bool N = i2c.write(addr,DATA,2);
kikoaac 0:842f92dcf668 82 N|= i2c.write(addr,data,size);
kikoaac 0:842f92dcf668 83 return N;
kikoaac 0:842f92dcf668 84 }
kikoaac 0:842f92dcf668 85 char InputOneData(char address){
kikoaac 0:842f92dcf668 86 char DATA[2] = {address,1};
kikoaac 0:842f92dcf668 87 char output;
kikoaac 0:842f92dcf668 88 i2c.write( addr , DATA, 2); //tell it what you want to read
kikoaac 0:842f92dcf668 89 i2c.read( addr , &output, 1); //tell it where to store the data
kikoaac 0:842f92dcf668 90 return output;
kikoaac 0:842f92dcf668 91 }
kikoaac 0:842f92dcf668 92 void InputSomeData(char address, char* output, int size) {
kikoaac 0:842f92dcf668 93 char DATA[2] = {address,size};
kikoaac 0:842f92dcf668 94 i2c.write( addr, DATA, 2); //tell it where to read from
kikoaac 0:842f92dcf668 95 i2c.read( addr , output, size); //tell it where to store the data read
kikoaac 0:842f92dcf668 96 }
kikoaac 0:842f92dcf668 97 float PWM;
kikoaac 0:842f92dcf668 98 short target;
kikoaac 0:842f92dcf668 99 public:
kikoaac 0:842f92dcf668 100 void UseAddress(char ad);
kikoaac 0:842f92dcf668 101 float interval;
kikoaac 0:842f92dcf668 102 MotorClass(I2C& _i2c,QEI& _qei);
kikoaac 0:842f92dcf668 103 char SetAddress(char ad);
kikoaac 0:842f92dcf668 104 char GetAddress();
kikoaac 0:842f92dcf668 105 bool SetRate(char rate);
kikoaac 0:842f92dcf668 106 bool Motor_PWM(float pwm);
kikoaac 0:842f92dcf668 107 bool Setup(char action);
kikoaac 0:842f92dcf668 108 bool Motor(char state,float pwm);
kikoaac 0:842f92dcf668 109 bool SetP(float p);
kikoaac 0:842f92dcf668 110 bool SetI(float i);
kikoaac 0:842f92dcf668 111 bool SetD(float d);
kikoaac 0:842f92dcf668 112 bool SetPID(float *pid);
kikoaac 0:842f92dcf668 113 bool SetTarget(short tar);
kikoaac 0:842f92dcf668 114 void StartQEIPut();
kikoaac 0:842f92dcf668 115 void StopQEIPut();
kikoaac 0:842f92dcf668 116 void QEIAllSetup(short tar,float *pid);
kikoaac 0:842f92dcf668 117 void GetDebugData(float *data,int mode);
kikoaac 0:842f92dcf668 118 float operator++(int) { // 後置きの場合ダミーの引数 int をつける。
kikoaac 0:842f92dcf668 119
kikoaac 0:842f92dcf668 120 if(Action == 1)
kikoaac 0:842f92dcf668 121 {
kikoaac 0:842f92dcf668 122 PWM+=0.01;
kikoaac 0:842f92dcf668 123 Motor_PWM(PWM);
kikoaac 0:842f92dcf668 124 return PWM;
kikoaac 0:842f92dcf668 125 }
kikoaac 0:842f92dcf668 126 else
kikoaac 0:842f92dcf668 127 {
kikoaac 0:842f92dcf668 128 target+=10;
kikoaac 0:842f92dcf668 129 SetTarget(short(target));
kikoaac 0:842f92dcf668 130 return (float)target;
kikoaac 0:842f92dcf668 131 }
kikoaac 0:842f92dcf668 132 }
kikoaac 0:842f92dcf668 133 short operator--(int) { // 後置きの場合ダミーの引数 int をつける。
kikoaac 0:842f92dcf668 134
kikoaac 0:842f92dcf668 135 if(Action == 1)
kikoaac 0:842f92dcf668 136 {
kikoaac 0:842f92dcf668 137 PWM-=0.01;
kikoaac 0:842f92dcf668 138 Motor_PWM(PWM);
kikoaac 0:842f92dcf668 139 return PWM;
kikoaac 0:842f92dcf668 140 }
kikoaac 0:842f92dcf668 141 else
kikoaac 0:842f92dcf668 142 {
kikoaac 0:842f92dcf668 143 target-=10;
kikoaac 0:842f92dcf668 144 SetTarget(short(target));
kikoaac 0:842f92dcf668 145 return (float)target;
kikoaac 0:842f92dcf668 146 }
kikoaac 0:842f92dcf668 147 }
kikoaac 0:842f92dcf668 148 void operator=(float val)
kikoaac 0:842f92dcf668 149 {
kikoaac 0:842f92dcf668 150 if(Action == 1)
kikoaac 0:842f92dcf668 151 {
kikoaac 0:842f92dcf668 152 if(val<0)Motor(Back ,val*-1);
kikoaac 0:842f92dcf668 153 else if(val>0)Motor(Front,val);
kikoaac 0:842f92dcf668 154 else Motor(Stop , val);
kikoaac 0:842f92dcf668 155 }
kikoaac 0:842f92dcf668 156 else
kikoaac 0:842f92dcf668 157 {
kikoaac 0:842f92dcf668 158 SetTarget(short(val));
kikoaac 0:842f92dcf668 159 }
kikoaac 0:842f92dcf668 160 }
kikoaac 0:842f92dcf668 161 };
kikoaac 0:842f92dcf668 162 #endif