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