LV8548 Motor Driver Stepper Motor Dc MOtor

Dependencies:   LV8548 mbed

Committer:
yamasho
Date:
Mon Nov 19 01:52:38 2018 +0000
Revision:
2:77d8b59fa58c
Parent:
1:f62c3257d673
Child:
3:de46cb8b50cb
Bug Fix

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