LV8548 Motor Driver Stepper Motor Dc MOtor

Dependencies:   LV8548 mbed

Committer:
yamasho
Date:
Fri Nov 16 16:49:36 2018 +0000
Revision:
0:82bafa3985c2
Child:
1:f62c3257d673
LV8548 Motor Driver Stepper Motor Dc MOtor Sample Soft;

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