DRV8825 steeper motor controller with serial interface for delimited matlab input input format dir,step, delay
main.cpp@1:19ba52379a64, 2016-09-21 (annotated)
- Committer:
- kanatronics
- Date:
- Wed Sep 21 11:43:12 2016 +0000
- Revision:
- 1:19ba52379a64
- Parent:
- 0:24171bdfc41f
Added ready status LED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kanatronics | 1:19ba52379a64 | 1 | /*Kamil Kanas QUB |
kanatronics | 0:24171bdfc41f | 2 | NUCLEO FR401 Serial Stepper motor controller DRV8825 |
kanatronics | 1:19ba52379a64 | 3 | Matlab interface: dir,step,speed |
kanatronics | 0:24171bdfc41f | 4 | 15/9/2016 |
kanatronics | 0:24171bdfc41f | 5 | */ |
kanatronics | 0:24171bdfc41f | 6 | |
kanatronics | 0:24171bdfc41f | 7 | |
kanatronics | 0:24171bdfc41f | 8 | #include "mbed.h" |
kanatronics | 0:24171bdfc41f | 9 | |
kanatronics | 0:24171bdfc41f | 10 | /*--INITS-------------------------------------------------------------------------------*/ |
kanatronics | 1:19ba52379a64 | 11 | Serial pc(USBTX, USBRX); // create PC interface |
kanatronics | 1:19ba52379a64 | 12 | DigitalOut stepOut(PA_7); // step output |
kanatronics | 1:19ba52379a64 | 13 | DigitalOut dirOut(PA_6); // direction output |
kanatronics | 1:19ba52379a64 | 14 | DigitalOut enableOut(PA_8); // enable output |
kanatronics | 1:19ba52379a64 | 15 | DigitalOut ledGreen (PA_5); // green ready led |
kanatronics | 0:24171bdfc41f | 16 | |
kanatronics | 0:24171bdfc41f | 17 | /*--VARIABLES---------------------------------------------------------------------------*/ |
kanatronics | 0:24171bdfc41f | 18 | char buffer[16]; //Serial buffer |
kanatronics | 0:24171bdfc41f | 19 | uint8_t direction; //Direction 0 - right, 1- left |
kanatronics | 0:24171bdfc41f | 20 | uint16_t step; //step 0-400 full turn in half step mode |
kanatronics | 0:24171bdfc41f | 21 | uint16_t speed; //speed |
kanatronics | 1:19ba52379a64 | 22 | char *pch; //auxilary pointer to buffer |
kanatronics | 0:24171bdfc41f | 23 | char *mot_char[16]; //motor char |
kanatronics | 0:24171bdfc41f | 24 | int mot_int[3]; //motor int |
kanatronics | 0:24171bdfc41f | 25 | /*--FUNCTION DECLARATIONS---------------------------------------------------------------*/ |
kanatronics | 1:19ba52379a64 | 26 | |
kanatronics | 0:24171bdfc41f | 27 | void int_usb(void); |
kanatronics | 0:24171bdfc41f | 28 | void stepMOtor (int,int,int); |
kanatronics | 0:24171bdfc41f | 29 | void stepDemo (void); |
kanatronics | 1:19ba52379a64 | 30 | |
kanatronics | 0:24171bdfc41f | 31 | /*--FUNCTION DEFINITIONS----------------------------------------------------------------*/ |
kanatronics | 0:24171bdfc41f | 32 | |
kanatronics | 0:24171bdfc41f | 33 | /* |
kanatronics | 0:24171bdfc41f | 34 | void int_usb (void) // initialize serial connection |
kanatronics | 0:24171bdfc41f | 35 | */ |
kanatronics | 0:24171bdfc41f | 36 | |
kanatronics | 0:24171bdfc41f | 37 | void int_usb(void) |
kanatronics | 0:24171bdfc41f | 38 | |
kanatronics | 0:24171bdfc41f | 39 | { |
kanatronics | 0:24171bdfc41f | 40 | pc.baud(115200); /*Set baud rate*/ |
kanatronics | 0:24171bdfc41f | 41 | } |
kanatronics | 0:24171bdfc41f | 42 | |
kanatronics | 0:24171bdfc41f | 43 | |
kanatronics | 0:24171bdfc41f | 44 | /* stepMottor |
kanatronics | 0:24171bdfc41f | 45 | int dir 0- right, 1- left |
kanatronics | 0:24171bdfc41f | 46 | int steps 0-200 full step mode |
kanatronics | 0:24171bdfc41f | 47 | int speed |
kanatronics | 0:24171bdfc41f | 48 | */ |
kanatronics | 0:24171bdfc41f | 49 | |
kanatronics | 0:24171bdfc41f | 50 | void stepMOtor(int dir, int steps, int speedS ) |
kanatronics | 0:24171bdfc41f | 51 | |
kanatronics | 0:24171bdfc41f | 52 | { |
kanatronics | 0:24171bdfc41f | 53 | |
kanatronics | 0:24171bdfc41f | 54 | if (!dir) // Checking direction flag |
kanatronics | 0:24171bdfc41f | 55 | { |
kanatronics | 0:24171bdfc41f | 56 | enableOut=0; |
kanatronics | 0:24171bdfc41f | 57 | dirOut=0; // drive right |
kanatronics | 0:24171bdfc41f | 58 | |
kanatronics | 0:24171bdfc41f | 59 | } |
kanatronics | 0:24171bdfc41f | 60 | else |
kanatronics | 0:24171bdfc41f | 61 | { |
kanatronics | 0:24171bdfc41f | 62 | enableOut=0; |
kanatronics | 0:24171bdfc41f | 63 | dirOut=1; // drive left |
kanatronics | 0:24171bdfc41f | 64 | } |
kanatronics | 0:24171bdfc41f | 65 | |
kanatronics | 0:24171bdfc41f | 66 | int deg; |
kanatronics | 0:24171bdfc41f | 67 | |
kanatronics | 0:24171bdfc41f | 68 | for (deg=0;deg<steps;deg++) |
kanatronics | 0:24171bdfc41f | 69 | { |
kanatronics | 0:24171bdfc41f | 70 | |
kanatronics | 0:24171bdfc41f | 71 | stepOut=1; |
kanatronics | 0:24171bdfc41f | 72 | wait_us(500); |
kanatronics | 0:24171bdfc41f | 73 | stepOut=0; |
kanatronics | 0:24171bdfc41f | 74 | wait_ms(speedS); |
kanatronics | 0:24171bdfc41f | 75 | if (deg==steps-2) |
kanatronics | 0:24171bdfc41f | 76 | { |
kanatronics | 1:19ba52379a64 | 77 | pc.printf("ready %s\n"); |
kanatronics | 1:19ba52379a64 | 78 | ledGreen=1; // ready status ON |
kanatronics | 0:24171bdfc41f | 79 | } |
kanatronics | 0:24171bdfc41f | 80 | } |
kanatronics | 0:24171bdfc41f | 81 | } |
kanatronics | 0:24171bdfc41f | 82 | |
kanatronics | 0:24171bdfc41f | 83 | /* |
kanatronics | 0:24171bdfc41f | 84 | void stepDemo(void); |
kanatronics | 0:24171bdfc41f | 85 | full motor revolution |
kanatronics | 0:24171bdfc41f | 86 | 0.8 deg / sec |
kanatronics | 0:24171bdfc41f | 87 | */ |
kanatronics | 0:24171bdfc41f | 88 | |
kanatronics | 0:24171bdfc41f | 89 | void stepDemo (void) |
kanatronics | 0:24171bdfc41f | 90 | { |
kanatronics | 0:24171bdfc41f | 91 | enableOut=0; |
kanatronics | 0:24171bdfc41f | 92 | dirOut=0; // Enables the motor direction right |
kanatronics | 0:24171bdfc41f | 93 | for(int x = 0; x < 199; x++) { // Makes 400 steps for full revolution |
kanatronics | 0:24171bdfc41f | 94 | stepOut=1; |
kanatronics | 0:24171bdfc41f | 95 | wait_us(1000); |
kanatronics | 0:24171bdfc41f | 96 | stepOut=0; |
kanatronics | 0:24171bdfc41f | 97 | wait_ms(999); |
kanatronics | 0:24171bdfc41f | 98 | } |
kanatronics | 0:24171bdfc41f | 99 | } |
kanatronics | 0:24171bdfc41f | 100 | |
kanatronics | 0:24171bdfc41f | 101 | int main() { |
kanatronics | 0:24171bdfc41f | 102 | int_usb(); |
kanatronics | 1:19ba52379a64 | 103 | enableOut=1; |
kanatronics | 0:24171bdfc41f | 104 | |
kanatronics | 0:24171bdfc41f | 105 | while(1){ |
kanatronics | 1:19ba52379a64 | 106 | //pc.printf("Hello %s \n"); |
kanatronics | 0:24171bdfc41f | 107 | wait(0.5); |
kanatronics | 0:24171bdfc41f | 108 | while(true){ |
kanatronics | 0:24171bdfc41f | 109 | while (pc.readable()) { //if data in the ring buffer |
kanatronics | 0:24171bdfc41f | 110 | pc.gets(buffer,16); //read 7 characters |
kanatronics | 1:19ba52379a64 | 111 | ledGreen=0; |
kanatronics | 1:19ba52379a64 | 112 | //pc.printf("stringReceived %s ", buffer); |
kanatronics | 0:24171bdfc41f | 113 | char * pch; |
kanatronics | 0:24171bdfc41f | 114 | pch = strtok (buffer,","); |
kanatronics | 0:24171bdfc41f | 115 | int i=0; |
kanatronics | 0:24171bdfc41f | 116 | while (pch != NULL) |
kanatronics | 0:24171bdfc41f | 117 | |
kanatronics | 0:24171bdfc41f | 118 | { |
kanatronics | 0:24171bdfc41f | 119 | mot_char[i++] = pch; |
kanatronics | 0:24171bdfc41f | 120 | pch = strtok (NULL, ","); |
kanatronics | 0:24171bdfc41f | 121 | } |
kanatronics | 0:24171bdfc41f | 122 | |
kanatronics | 0:24171bdfc41f | 123 | for (i = 0; i < 3; ++i) { |
kanatronics | 0:24171bdfc41f | 124 | //pc.printf("%s\n", mot_char[i]); |
kanatronics | 0:24171bdfc41f | 125 | mot_int[i]=atoi(mot_char[i]); |
kanatronics | 0:24171bdfc41f | 126 | pc.printf("%d\n", mot_int[i]); |
kanatronics | 0:24171bdfc41f | 127 | } |
kanatronics | 1:19ba52379a64 | 128 | stepMOtor(mot_int[0],mot_int[1],mot_int[2]); |
kanatronics | 1:19ba52379a64 | 129 | enableOut=1; |
kanatronics | 0:24171bdfc41f | 130 | break; } |
kanatronics | 0:24171bdfc41f | 131 | |
kanatronics | 0:24171bdfc41f | 132 | } |
kanatronics | 0:24171bdfc41f | 133 | } |
kanatronics | 0:24171bdfc41f | 134 | } |