MotorDriverのクラス
MotorClass.h@0:842f92dcf668, 2015-08-18 (annotated)
- Committer:
- kikoaac
- Date:
- Tue Aug 18 01:29:19 2015 +0000
- Revision:
- 0:842f92dcf668
MotorDrive????
;
Who changed what in which revision?
User | Revision | Line number | New 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 |