LV8548 Motor Driver Stepper Motor Dc MOtor

Dependencies:   LV8548 mbed

Committer:
yamasho
Date:
Sat Nov 17 05:11:50 2018 +0000
Revision:
1:f62c3257d673
Parent:
0:82bafa3985c2
Child:
2:77d8b59fa58c
DC /Step select can able

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yamasho 0:82bafa3985c2 1 #include "mbed.h"
yamasho 0:82bafa3985c2 2 #include "LV8548.h"
yamasho 0:82bafa3985c2 3
yamasho 0:82bafa3985c2 4 #define DC_ID "LV8548DC_Ver.2.0.0\n"
yamasho 0:82bafa3985c2 5 #define STEP_ID "LV8548Step_Ver.2.0.0\n"
yamasho 0:82bafa3985c2 6
yamasho 0:82bafa3985c2 7 //#define DEFAULT_BAUDRATE (9600)
yamasho 0:82bafa3985c2 8 #define DEFAULT_BAUDRATE (19200)
yamasho 0:82bafa3985c2 9 //#define DEFAULT_BAUDRATE (115200)
yamasho 0:82bafa3985c2 10
yamasho 1:f62c3257d673 11 #define USE_DC_MOTOR (false)
yamasho 1:f62c3257d673 12 #define USE_STEP_MOTOR (true)
yamasho 1:f62c3257d673 13
yamasho 0:82bafa3985c2 14
yamasho 0:82bafa3985c2 15 #define _USE_DEBUG_ (0)
yamasho 0:82bafa3985c2 16 enum DCSerialCommandType {
yamasho 0:82bafa3985c2 17 SRMES_GET_ID = 0x03, // 3
yamasho 0:82bafa3985c2 18 SRMES_POLLING_ID = 0x04, // 4
yamasho 0:82bafa3985c2 19 //// For Dc Motor Control ////////
yamasho 0:82bafa3985c2 20 SRMES_CTL_VOLTAGE = 'A', // 'A'
yamasho 0:82bafa3985c2 21 SRMES_ROTATION = 'D', // 'D'
yamasho 0:82bafa3985c2 22 SRMES_PWM_FREQSET = 'g', // 'g'
yamasho 0:82bafa3985c2 23 SRMES_START_FLAG = 'h', // 'h'
yamasho 0:82bafa3985c2 24 //// For Stepper Motor Control ////////
yamasho 0:82bafa3985c2 25 SRMES_STEP_ANGLE = 'i', // 'i'
yamasho 0:82bafa3985c2 26 SRMES_ROTATION_ANGLE = 'j', // 'j'
yamasho 0:82bafa3985c2 27 SRMES_ROTATION_TIME = 'k', // 'k'
yamasho 0:82bafa3985c2 28 SRMES_ROTATION_STEP = 'l', // 'l'
yamasho 0:82bafa3985c2 29 SRMES_ROTATION_STOP = 'n', // 'n'
yamasho 0:82bafa3985c2 30 SRMES_ROTATION_FREE = 'o', // 'o'
yamasho 0:82bafa3985c2 31 };
yamasho 0:82bafa3985c2 32 //// For Dc Motor
yamasho 0:82bafa3985c2 33
yamasho 0:82bafa3985c2 34 // Segment definition of serial message
yamasho 0:82bafa3985c2 35 typedef struct
yamasho 0:82bafa3985c2 36 {
yamasho 0:82bafa3985c2 37 uint8_t motorNo;
yamasho 0:82bafa3985c2 38 uint8_t duty;
yamasho 0:82bafa3985c2 39 } __attribute__ ((packed)) SrMesDivCtlVoltage;
yamasho 0:82bafa3985c2 40
yamasho 0:82bafa3985c2 41 typedef struct
yamasho 0:82bafa3985c2 42 {
yamasho 0:82bafa3985c2 43 uint8_t motorNo;
yamasho 0:82bafa3985c2 44 DriverPwmOut select;
yamasho 0:82bafa3985c2 45 } __attribute__ ((packed)) SrMesDivStartFlag;
yamasho 0:82bafa3985c2 46
yamasho 0:82bafa3985c2 47 typedef struct
yamasho 0:82bafa3985c2 48 {
yamasho 0:82bafa3985c2 49 uint8_t motorNo;
yamasho 0:82bafa3985c2 50 DriverPwmMode select;
yamasho 0:82bafa3985c2 51 } __attribute__ ((packed)) SrMesDivRotation;
yamasho 0:82bafa3985c2 52
yamasho 0:82bafa3985c2 53 typedef struct
yamasho 0:82bafa3985c2 54 {
yamasho 0:82bafa3985c2 55 uint8_t hz;
yamasho 0:82bafa3985c2 56 } __attribute__ ((packed)) SrMesDivPwmFreqset;
yamasho 0:82bafa3985c2 57
yamasho 0:82bafa3985c2 58
yamasho 0:82bafa3985c2 59
yamasho 0:82bafa3985c2 60 SrMesDivCtlVoltage DcMtrvoltValue ;
yamasho 0:82bafa3985c2 61 SrMesDivRotation DcMtrrotationValue;
yamasho 0:82bafa3985c2 62 SrMesDivStartFlag DcMtrstartFlag;
yamasho 0:82bafa3985c2 63 SrMesDivPwmFreqset DcMtrfreqValue;
yamasho 0:82bafa3985c2 64
yamasho 0:82bafa3985c2 65 /// For Stepper Motor
yamasho 0:82bafa3985c2 66 typedef struct
yamasho 0:82bafa3985c2 67 {
yamasho 0:82bafa3985c2 68 uint16_t angle;
yamasho 0:82bafa3985c2 69 } __attribute__ ((packed)) SrMesDivSetStepAngle;
yamasho 0:82bafa3985c2 70
yamasho 0:82bafa3985c2 71 typedef struct
yamasho 0:82bafa3985c2 72 {
yamasho 0:82bafa3985c2 73 uint16_t frequency;
yamasho 0:82bafa3985c2 74 uint16_t deg;
yamasho 0:82bafa3985c2 75 uint8_t rotation;
yamasho 0:82bafa3985c2 76 uint8_t exp;
yamasho 0:82bafa3985c2 77 } __attribute__ ((packed)) SrMesDivRotationDeg;
yamasho 0:82bafa3985c2 78
yamasho 0:82bafa3985c2 79 typedef struct
yamasho 0:82bafa3985c2 80 {
yamasho 0:82bafa3985c2 81 uint16_t frequency;
yamasho 0:82bafa3985c2 82 uint16_t time;
yamasho 0:82bafa3985c2 83 uint8_t rotation;
yamasho 0:82bafa3985c2 84 uint8_t exp;
yamasho 0:82bafa3985c2 85 } __attribute__ ((packed)) SrMesDivRotationTime;
yamasho 0:82bafa3985c2 86
yamasho 0:82bafa3985c2 87 typedef struct
yamasho 0:82bafa3985c2 88 {
yamasho 0:82bafa3985c2 89 uint16_t frequency;
yamasho 0:82bafa3985c2 90 uint16_t step;
yamasho 0:82bafa3985c2 91 uint8_t rotation;
yamasho 0:82bafa3985c2 92 uint8_t exp;
yamasho 0:82bafa3985c2 93 } __attribute__ ((packed)) SrMesDivRotationStep;
yamasho 0:82bafa3985c2 94
yamasho 0:82bafa3985c2 95
yamasho 0:82bafa3985c2 96
yamasho 0:82bafa3985c2 97 SrMesDivSetStepAngle StepMtrAngleValue;
yamasho 0:82bafa3985c2 98 SrMesDivRotationDeg StepMtrDegValue;
yamasho 0:82bafa3985c2 99 SrMesDivRotationTime StepMtrTimeValue;
yamasho 0:82bafa3985c2 100 SrMesDivRotationStep StepMtrStepValue;
yamasho 0:82bafa3985c2 101
yamasho 0:82bafa3985c2 102
yamasho 0:82bafa3985c2 103
yamasho 0:82bafa3985c2 104 /* pc の仮想ポートをwindows softで開ける */
yamasho 1:f62c3257d673 105 //Serial pc(USBTX, USBRX); // tx, rx
yamasho 1:f62c3257d673 106 //#if _USE_DEBUG_
yamasho 1:f62c3257d673 107 //Serial uart(D1, D0); // tx, rx
yamasho 1:f62c3257d673 108 //#endif
yamasho 0:82bafa3985c2 109 #if _USE_DEBUG_
yamasho 1:f62c3257d673 110 Serial uart(USBTX, USBRX); // tx, rx
yamasho 0:82bafa3985c2 111 #endif
yamasho 1:f62c3257d673 112 Serial pc(D1, D0); // tx, rx
yamasho 0:82bafa3985c2 113
yamasho 0:82bafa3985c2 114 DigitalOut myled(LED1);
yamasho 0:82bafa3985c2 115 #if USE_DC_MOTOR
yamasho 0:82bafa3985c2 116 LV8548 MOTORDriver( D3,D5,D10,D11,DCMOTOR); // SELECT DCMOTOR
yamasho 0:82bafa3985c2 117 #else
yamasho 0:82bafa3985c2 118 LV8548 MOTORDriver( D3,D5,D10,D11,STEPERMOTOR); // STEP MOTOR
yamasho 0:82bafa3985c2 119 #endif
yamasho 0:82bafa3985c2 120
yamasho 0:82bafa3985c2 121 DigitalOut TEST(D12);
yamasho 0:82bafa3985c2 122 Ticker Timer500;
yamasho 0:82bafa3985c2 123 Ticker Timer1ms;
yamasho 0:82bafa3985c2 124 uint8_t LedImage;
yamasho 0:82bafa3985c2 125 uint8_t CommandTimer;
yamasho 0:82bafa3985c2 126
yamasho 0:82bafa3985c2 127 #define SBUFMAX 64
yamasho 0:82bafa3985c2 128 volatile uint8_t SerialBuffer[SBUFMAX];
yamasho 0:82bafa3985c2 129 volatile uint8_t RingBuffer[256];
yamasho 0:82bafa3985c2 130 volatile uint8_t RingReadpoint;
yamasho 0:82bafa3985c2 131 volatile uint8_t RingWritepoint;
yamasho 0:82bafa3985c2 132
yamasho 0:82bafa3985c2 133 /*******************************************/
yamasho 0:82bafa3985c2 134 /* AA */
yamasho 0:82bafa3985c2 135 /* AAAA ii ii */
yamasho 0:82bafa3985c2 136 /* AA AA sssss cccc */
yamasho 0:82bafa3985c2 137 /* AAAAAA ss cc iii iii */
yamasho 0:82bafa3985c2 138 /* AA AA ssss cc ii ii */
yamasho 0:82bafa3985c2 139 /* AA AA ss cc ii ii */
yamasho 0:82bafa3985c2 140 /* AA AA sssss cccc iiii iiii */
yamasho 0:82bafa3985c2 141 /* */
yamasho 0:82bafa3985c2 142 /*******************************************/
yamasho 0:82bafa3985c2 143
yamasho 0:82bafa3985c2 144 uint8_t Ascii(uint8_t Data)
yamasho 0:82bafa3985c2 145 {
yamasho 0:82bafa3985c2 146 switch(Data & 0xf)
yamasho 0:82bafa3985c2 147 {
yamasho 0:82bafa3985c2 148 case 0: return('0');
yamasho 0:82bafa3985c2 149 case 1: return('1');
yamasho 0:82bafa3985c2 150 case 2: return('2');
yamasho 0:82bafa3985c2 151 case 3: return('3');
yamasho 0:82bafa3985c2 152 case 4: return('4');
yamasho 0:82bafa3985c2 153 case 5: return('5');
yamasho 0:82bafa3985c2 154 case 6: return('6');
yamasho 0:82bafa3985c2 155 case 7: return('7');
yamasho 0:82bafa3985c2 156 case 8: return('8');
yamasho 0:82bafa3985c2 157 case 9: return('9');
yamasho 0:82bafa3985c2 158 case 0xA: return('A');
yamasho 0:82bafa3985c2 159 case 0xB: return('B');
yamasho 0:82bafa3985c2 160 case 0xC: return('C');
yamasho 0:82bafa3985c2 161 case 0xD: return('D');
yamasho 0:82bafa3985c2 162 case 0xE: return('E');
yamasho 0:82bafa3985c2 163 case 0xF: return('F');
yamasho 0:82bafa3985c2 164 }
yamasho 0:82bafa3985c2 165 return (0);
yamasho 0:82bafa3985c2 166 }
yamasho 0:82bafa3985c2 167 /***************************************************************************************************************************/
yamasho 0:82bafa3985c2 168 /* UU UU RRRRR IIII */
yamasho 0:82bafa3985c2 169 /* UU UU tt RR RR ii II */
yamasho 0:82bafa3985c2 170 /* UU UU aaaa rrrrr tttttt RR RR eeee cccc vv vv eeee II rrrrr qqqqq */
yamasho 0:82bafa3985c2 171 /* UU UU aa rr rr tt RRRRR ee ee cc iii vv vv ee ee II rr rr qq qq */
yamasho 0:82bafa3985c2 172 /* UU UU aaaaa rr tt RRRR eeeeee cc ii vv vv eeeeee II rr qq qq */
yamasho 0:82bafa3985c2 173 /* UU UU aa aa rr tt RR RR ee cc ii vvvv ee II rr qqqqq */
yamasho 0:82bafa3985c2 174 /* UUUU aaaaa rr ttt RR RR eeee cccc iiii vv eeee IIII rr qq */
yamasho 0:82bafa3985c2 175 /* qq */
yamasho 0:82bafa3985c2 176 /***************************************************************************************************************************/
yamasho 0:82bafa3985c2 177 void Read_Rx(void)
yamasho 0:82bafa3985c2 178 {
yamasho 0:82bafa3985c2 179 RingWritepoint++;
yamasho 0:82bafa3985c2 180 RingBuffer[RingWritepoint] = pc.getc();
yamasho 0:82bafa3985c2 181 CommandTimer = 2; // 2(最小1)ms後にコマンド処理
yamasho 0:82bafa3985c2 182 }
yamasho 0:82bafa3985c2 183 /***********************************************************************************************************/
yamasho 0:82bafa3985c2 184 /* CCCC PPPPP */
yamasho 0:82bafa3985c2 185 /* CC CC dd PP PP */
yamasho 0:82bafa3985c2 186 /* CC oooo mm mm mm mm nnnnn aaaa dd PP PP aaaa rrrrr sssss eeee */
yamasho 0:82bafa3985c2 187 /* CC oo oo mmmmmmm mmmmmmm nn nn aa ddddd PPPPP aa rr rr ss ee ee */
yamasho 0:82bafa3985c2 188 /* CC oo oo mmmmmmm mmmmmmm nn nn aaaaa dd dd PP aaaaa rr ssss eeeeee */
yamasho 0:82bafa3985c2 189 /* CC CC oo oo mm m mm mm m mm nn nn aa aa dd dd PP aa aa rr ss ee */
yamasho 0:82bafa3985c2 190 /* CCCC oooo mm mm mm mm nn nn aaaaa ddddd PP aaaaa rr sssss eeee */
yamasho 0:82bafa3985c2 191 /* */
yamasho 0:82bafa3985c2 192 /***********************************************************************************************************/
yamasho 0:82bafa3985c2 193 void SerialRead(void)
yamasho 0:82bafa3985c2 194 {
yamasho 0:82bafa3985c2 195 int i = 0;
yamasho 0:82bafa3985c2 196 if(CommandTimer ) return; /* 1ms 以上データ無しが安定してから読む */
yamasho 0:82bafa3985c2 197
yamasho 0:82bafa3985c2 198
yamasho 0:82bafa3985c2 199 SerialBuffer[0] = '\0';
yamasho 0:82bafa3985c2 200 while( RingWritepoint != RingReadpoint)
yamasho 0:82bafa3985c2 201 {
yamasho 0:82bafa3985c2 202 RingReadpoint++;
yamasho 0:82bafa3985c2 203 SerialBuffer[i] = RingBuffer[RingReadpoint];
yamasho 0:82bafa3985c2 204 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 205 uart.putc(Ascii(SerialBuffer[i] >> 4)) ;
yamasho 0:82bafa3985c2 206 uart.putc(Ascii(SerialBuffer[i] >> 0)) ;
yamasho 0:82bafa3985c2 207 uart.putc(0x20);
yamasho 0:82bafa3985c2 208 #endif
yamasho 0:82bafa3985c2 209 i++;
yamasho 0:82bafa3985c2 210 if(i >= (SBUFMAX-1))
yamasho 0:82bafa3985c2 211 {
yamasho 0:82bafa3985c2 212 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 213 uart.printf("Max over\n");
yamasho 0:82bafa3985c2 214 #endif
yamasho 0:82bafa3985c2 215 SerialBuffer[i] = '\0';
yamasho 0:82bafa3985c2 216
yamasho 0:82bafa3985c2 217 }
yamasho 0:82bafa3985c2 218 continue;
yamasho 0:82bafa3985c2 219 }
yamasho 0:82bafa3985c2 220
yamasho 0:82bafa3985c2 221 switch( SerialBuffer[0] )
yamasho 0:82bafa3985c2 222 {
yamasho 0:82bafa3985c2 223 case SRMES_GET_ID: // 3
yamasho 0:82bafa3985c2 224 {
yamasho 0:82bafa3985c2 225 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 226 uart.printf("Send Id\n");
yamasho 0:82bafa3985c2 227 #endif
yamasho 0:82bafa3985c2 228 #if USE_DC_MOTOR
yamasho 0:82bafa3985c2 229 pc.printf(DC_ID);
yamasho 0:82bafa3985c2 230 #else
yamasho 0:82bafa3985c2 231 pc.printf(STEP_ID);
yamasho 0:82bafa3985c2 232 #endif
yamasho 0:82bafa3985c2 233 }
yamasho 0:82bafa3985c2 234 break;
yamasho 0:82bafa3985c2 235
yamasho 0:82bafa3985c2 236 case SRMES_POLLING_ID: // 4
yamasho 0:82bafa3985c2 237 {
yamasho 0:82bafa3985c2 238 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 239 uart.printf("Polling\n");
yamasho 0:82bafa3985c2 240 #endif
yamasho 0:82bafa3985c2 241 }
yamasho 0:82bafa3985c2 242 break;
yamasho 0:82bafa3985c2 243 /***************************************************************************************************/
yamasho 0:82bafa3985c2 244 /* FFFFFF DDDD MM MM */
yamasho 0:82bafa3985c2 245 /* FF DD DD MMM MMM tt */
yamasho 0:82bafa3985c2 246 /* FF oooo rrrrr DD DD cccc MMMMMMM oooo tttttt oooo rrrrr */
yamasho 0:82bafa3985c2 247 /* FFFF oo oo rr rr DD DD cc MM M MM oo oo tt oo oo rr rr */
yamasho 0:82bafa3985c2 248 /* FF oo oo rr DD DD cc MM MM oo oo tt oo oo rr */
yamasho 0:82bafa3985c2 249 /* FF oo oo rr DD DD cc MM MM oo oo tt oo oo rr */
yamasho 0:82bafa3985c2 250 /* FF oooo rr DDDD cccc MM MM oooo ttt oooo rr */
yamasho 0:82bafa3985c2 251 /* */
yamasho 0:82bafa3985c2 252 /***************************************************************************************************/
yamasho 0:82bafa3985c2 253 case SRMES_CTL_VOLTAGE: // 0x41
yamasho 0:82bafa3985c2 254 {
yamasho 0:82bafa3985c2 255 DcMtrvoltValue = *(SrMesDivCtlVoltage *)SerialBuffer;
yamasho 0:82bafa3985c2 256 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 257 uart.printf("Voltage Commnad %2x %2x \n",DcMtrvoltValue.motorNo,DcMtrvoltValue.duty);
yamasho 0:82bafa3985c2 258 #endif
yamasho 0:82bafa3985c2 259 MOTORDriver.SetDcPwmDuty(DcMtrvoltValue.motorNo,(float)DcMtrvoltValue.duty/(float)100);
yamasho 0:82bafa3985c2 260 }
yamasho 0:82bafa3985c2 261 break;
yamasho 0:82bafa3985c2 262
yamasho 0:82bafa3985c2 263 case SRMES_ROTATION: // 0x44
yamasho 0:82bafa3985c2 264 {
yamasho 0:82bafa3985c2 265 DcMtrrotationValue = *(SrMesDivRotation *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 266 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 267 uart.printf("Roteationcommand %2x %2x \n",DcMtrrotationValue.motorNo,DcMtrrotationValue.select);
yamasho 0:82bafa3985c2 268 #endif
yamasho 0:82bafa3985c2 269 MOTORDriver.SetDcPwmMode(DcMtrrotationValue.motorNo,DcMtrrotationValue.select);
yamasho 0:82bafa3985c2 270 }
yamasho 0:82bafa3985c2 271 break;
yamasho 0:82bafa3985c2 272
yamasho 0:82bafa3985c2 273 case SRMES_PWM_FREQSET: // 0x67
yamasho 0:82bafa3985c2 274 {
yamasho 0:82bafa3985c2 275 DcMtrfreqValue = *(SrMesDivPwmFreqset *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 276 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 277 uart.printf("Freq Hz %2x \n",DcMtrfreqValue.hz);
yamasho 0:82bafa3985c2 278 #endif
yamasho 0:82bafa3985c2 279 switch(DcMtrfreqValue.hz)
yamasho 0:82bafa3985c2 280 {
yamasho 0:82bafa3985c2 281 case 0: MOTORDriver.SetDcPwmFreqency( MOTOR_A, 7813 );
yamasho 0:82bafa3985c2 282 MOTORDriver.SetDcPwmFreqency( MOTOR_B, 7813 );
yamasho 0:82bafa3985c2 283 break;
yamasho 0:82bafa3985c2 284 case 1: MOTORDriver.SetDcPwmFreqency( MOTOR_A,977 );
yamasho 0:82bafa3985c2 285 MOTORDriver.SetDcPwmFreqency( MOTOR_B,977 );
yamasho 0:82bafa3985c2 286 break;
yamasho 0:82bafa3985c2 287 case 2: MOTORDriver.SetDcPwmFreqency( MOTOR_A,244 );
yamasho 0:82bafa3985c2 288 MOTORDriver.SetDcPwmFreqency( MOTOR_B,244 );
yamasho 0:82bafa3985c2 289 break;
yamasho 0:82bafa3985c2 290 case 3: MOTORDriver.SetDcPwmFreqency( MOTOR_A,61 );
yamasho 0:82bafa3985c2 291 MOTORDriver.SetDcPwmFreqency( MOTOR_B,61 );
yamasho 0:82bafa3985c2 292 break;
yamasho 0:82bafa3985c2 293 default: break;
yamasho 0:82bafa3985c2 294 }
yamasho 0:82bafa3985c2 295 }
yamasho 0:82bafa3985c2 296 break;
yamasho 0:82bafa3985c2 297
yamasho 0:82bafa3985c2 298 case SRMES_START_FLAG: // 0x68
yamasho 0:82bafa3985c2 299 {
yamasho 0:82bafa3985c2 300 DcMtrstartFlag = *(SrMesDivStartFlag *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 301 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 302 uart.printf("StartFlag command %2x %2x \n",DcMtrstartFlag.motorNo,DcMtrstartFlag.select);
yamasho 0:82bafa3985c2 303 #endif
yamasho 0:82bafa3985c2 304 MOTORDriver.SetDcOutPut(DcMtrstartFlag.motorNo,DcMtrstartFlag.select);
yamasho 0:82bafa3985c2 305 }
yamasho 0:82bafa3985c2 306 break;
yamasho 0:82bafa3985c2 307 /*******************************************************************************************************************/
yamasho 0:82bafa3985c2 308 /* FFFFFF SSSS MM MM */
yamasho 0:82bafa3985c2 309 /* FF SS SS tt MMM MMM tt */
yamasho 0:82bafa3985c2 310 /* FF oooo rrrrr SS tttttt eeee ppppp MMMMMMM oooo tttttt oooo rrrrr */
yamasho 0:82bafa3985c2 311 /* FFFF oo oo rr rr SSSS tt ee ee pp pp MM M MM oo oo tt oo oo rr rr */
yamasho 0:82bafa3985c2 312 /* FF oo oo rr SS tt eeeeee pp pp MM MM oo oo tt oo oo rr */
yamasho 0:82bafa3985c2 313 /* FF oo oo rr SS SS tt ee ppppp MM MM oo oo tt oo oo rr */
yamasho 0:82bafa3985c2 314 /* FF oooo rr SSSS ttt eeee pp MM MM oooo ttt oooo rr */
yamasho 0:82bafa3985c2 315 /* pp */
yamasho 0:82bafa3985c2 316 /*******************************************************************************************************************/
yamasho 0:82bafa3985c2 317 case SRMES_STEP_ANGLE:
yamasho 0:82bafa3985c2 318 {
yamasho 0:82bafa3985c2 319 StepMtrAngleValue = *(SrMesDivSetStepAngle *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 320 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 321 uart.printf("Step Angle command %4x Req:% \n",StepMtrAngleValue.angle);
yamasho 0:82bafa3985c2 322 #endif
yamasho 0:82bafa3985c2 323 MOTORDriver.SetStepAngle(StepMtrAngleValue.angle/100);
yamasho 0:82bafa3985c2 324 }
yamasho 0:82bafa3985c2 325 break;
yamasho 0:82bafa3985c2 326
yamasho 0:82bafa3985c2 327 case SRMES_ROTATION_ANGLE:
yamasho 0:82bafa3985c2 328 {
yamasho 0:82bafa3985c2 329 SrMesDivRotationDeg StepMtrDegValue = *(SrMesDivRotationDeg *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 330 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 331 uart.printf("Step Deg command \n");
yamasho 0:82bafa3985c2 332 #endif
yamasho 0:82bafa3985c2 333 MOTORDriver.SetStepDeg(StepMtrDegValue.frequency/10, StepMtrDegValue.deg/100, StepMtrDegValue.rotation, StepMtrDegValue.exp);
yamasho 0:82bafa3985c2 334 }
yamasho 0:82bafa3985c2 335 break;
yamasho 0:82bafa3985c2 336
yamasho 0:82bafa3985c2 337 case SRMES_ROTATION_TIME:
yamasho 0:82bafa3985c2 338 {
yamasho 0:82bafa3985c2 339 StepMtrTimeValue = *(SrMesDivRotationTime *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 340 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 341 uart.printf("Step Time command \n");
yamasho 0:82bafa3985c2 342 #endif
yamasho 0:82bafa3985c2 343 MOTORDriver.SetStepTime(StepMtrTimeValue.frequency/10, StepMtrTimeValue.time/10, StepMtrTimeValue.rotation, StepMtrTimeValue.exp);
yamasho 0:82bafa3985c2 344 }
yamasho 0:82bafa3985c2 345 break;
yamasho 0:82bafa3985c2 346
yamasho 0:82bafa3985c2 347 case SRMES_ROTATION_STEP:
yamasho 0:82bafa3985c2 348 {
yamasho 0:82bafa3985c2 349 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 350 uart.printf("Step Step command \n");
yamasho 0:82bafa3985c2 351 #endif
yamasho 0:82bafa3985c2 352 StepMtrStepValue = *(SrMesDivRotationStep *)&SerialBuffer[1];
yamasho 0:82bafa3985c2 353 MOTORDriver.SetStepStep(StepMtrStepValue.frequency/10, StepMtrStepValue.step/10, StepMtrStepValue.rotation,StepMtrStepValue.exp);
yamasho 0:82bafa3985c2 354 }
yamasho 0:82bafa3985c2 355 break;
yamasho 0:82bafa3985c2 356
yamasho 0:82bafa3985c2 357 case SRMES_ROTATION_STOP:
yamasho 0:82bafa3985c2 358 {
yamasho 0:82bafa3985c2 359 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 360 uart.printf("Step Stop command \n");
yamasho 0:82bafa3985c2 361 #endif
yamasho 0:82bafa3985c2 362 MOTORDriver.SetStepStop();
yamasho 0:82bafa3985c2 363 }
yamasho 0:82bafa3985c2 364 break;
yamasho 0:82bafa3985c2 365
yamasho 0:82bafa3985c2 366 case SRMES_ROTATION_FREE:
yamasho 0:82bafa3985c2 367 {
yamasho 0:82bafa3985c2 368 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 369 uart.printf("Step Free command \n");
yamasho 0:82bafa3985c2 370 #endif
yamasho 0:82bafa3985c2 371
yamasho 0:82bafa3985c2 372 MOTORDriver.SetStepFree();
yamasho 0:82bafa3985c2 373 }
yamasho 0:82bafa3985c2 374 break;
yamasho 0:82bafa3985c2 375
yamasho 0:82bafa3985c2 376 default:
yamasho 0:82bafa3985c2 377 {
yamasho 0:82bafa3985c2 378 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 379 // uart.printf("unknown command\n");
yamasho 0:82bafa3985c2 380 #endif
yamasho 0:82bafa3985c2 381 }
yamasho 0:82bafa3985c2 382 break;
yamasho 0:82bafa3985c2 383 }
yamasho 0:82bafa3985c2 384 }
yamasho 0:82bafa3985c2 385 /***************************************************************************/
yamasho 0:82bafa3985c2 386 /* TTTTTT PPPPP */
yamasho 0:82bafa3985c2 387 /* TT ii PP PP */
yamasho 0:82bafa3985c2 388 /* TT mm mm eeee rrrrr PP PP rrrrr oooo cccc */
yamasho 0:82bafa3985c2 389 /* TT iii mmmmmmm ee ee rr rr PPPPP rr rr oo oo cc */
yamasho 0:82bafa3985c2 390 /* TT ii mmmmmmm eeeeee rr PP rr oo oo cc */
yamasho 0:82bafa3985c2 391 /* TT ii mm m mm ee rr PP rr oo oo cc */
yamasho 0:82bafa3985c2 392 /* TT iiii mm mm eeee rr PP rr oooo cccc */
yamasho 0:82bafa3985c2 393 /* */
yamasho 0:82bafa3985c2 394 /***************************************************************************/
yamasho 0:82bafa3985c2 395 void Eventtimer500(void)
yamasho 0:82bafa3985c2 396 {
yamasho 0:82bafa3985c2 397 LedImage = !LedImage;
yamasho 0:82bafa3985c2 398 }
yamasho 0:82bafa3985c2 399
yamasho 0:82bafa3985c2 400 void Eventtimer1ms(void)
yamasho 0:82bafa3985c2 401 {
yamasho 0:82bafa3985c2 402 if(CommandTimer) CommandTimer --;
yamasho 0:82bafa3985c2 403 }
yamasho 0:82bafa3985c2 404
yamasho 0:82bafa3985c2 405 /***********************************/
yamasho 0:82bafa3985c2 406 /* MM MM */
yamasho 0:82bafa3985c2 407 /* MMM MMM ii */
yamasho 0:82bafa3985c2 408 /* MMMMMMM aaaa nnnnn */
yamasho 0:82bafa3985c2 409 /* MM M MM aa iii nn nn */
yamasho 0:82bafa3985c2 410 /* MM MM aaaaa ii nn nn */
yamasho 0:82bafa3985c2 411 /* MM MM aa aa ii nn nn */
yamasho 0:82bafa3985c2 412 /* MM MM aaaaa iiii nn nn */
yamasho 0:82bafa3985c2 413 /* */
yamasho 0:82bafa3985c2 414 /***********************************/
yamasho 0:82bafa3985c2 415 int main()
yamasho 0:82bafa3985c2 416 {
yamasho 0:82bafa3985c2 417 RingReadpoint = 0;
yamasho 0:82bafa3985c2 418 RingWritepoint = 0;
yamasho 0:82bafa3985c2 419 CommandTimer = 0;
yamasho 0:82bafa3985c2 420 pc .baud(DEFAULT_BAUDRATE);
yamasho 0:82bafa3985c2 421 #if _USE_DEBUG_
yamasho 0:82bafa3985c2 422 uart.baud(115200);//DEFAULT_BAUDRATE);
yamasho 0:82bafa3985c2 423 pc.printf("Program Start!\n");
yamasho 0:82bafa3985c2 424 uart.printf("Program deb Start!\n");
yamasho 0:82bafa3985c2 425 #endif
yamasho 0:82bafa3985c2 426 Timer500.attach(&Eventtimer500, 0.5);
yamasho 0:82bafa3985c2 427 Timer1ms.attach(&Eventtimer1ms, 0.001);
yamasho 0:82bafa3985c2 428 pc.attach(Read_Rx, Serial::RxIrq);
yamasho 0:82bafa3985c2 429 while(1) {
yamasho 0:82bafa3985c2 430 SerialRead();
yamasho 0:82bafa3985c2 431 myled = LedImage; // LED is ON
yamasho 0:82bafa3985c2 432 }
yamasho 0:82bafa3985c2 433
yamasho 0:82bafa3985c2 434 }