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

Dependencies:   mbed

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?

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