LV8548 Motor Driver Stepper Motor Dc MOtor

Dependencies:   LV8548 mbed

Committer:
yamasho
Date:
Mon Nov 19 02:03:25 2018 +0000
Revision:
3:de46cb8b50cb
Parent:
2:77d8b59fa58c
COMMENT INSERT;

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