DRV8825 steeper motor controller with serial interface for delimited matlab input input format dir,step, delay

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }