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

Dependencies:   mbed

main.cpp

Committer:
kanatronics
Date:
2016-09-16
Revision:
0:24171bdfc41f
Child:
1:19ba52379a64

File content as of revision 0:24171bdfc41f:

/*Kamil Kanas 
NUCLEO FR401 Serial Stepper motor controller DRV8825
Matlab interface (dir,step,speed)
15/9/2016
*/


#include "mbed.h"

// DRV8825 control pins

#define stepPin PA_5     //Step pin
#define dirPin  PA_6     //Direction pin
#define enPin   PA_7     //Enable pin

/*--INITS-------------------------------------------------------------------------------*/
Serial pc(USBTX, USBRX);        // create PC interface
DigitalOut stepOut(stepPin);    // step output
DigitalOut dirOut(dirPin);      // direction output
DigitalOut enableOut(enPin);    //enable output   

/*--VARIABLES---------------------------------------------------------------------------*/
char buffer[16];                //Serial buffer
uint8_t direction;              //Direction 0 - right, 1- left
uint16_t step;                  //step 0-400 full turn in half step mode 
uint16_t speed;                 //speed
char * pch;                     //auxilary pointer to buffer
char *mot_char[16];             //motor char
int mot_int[3];                 //motor int 
/*--FUNCTION DECLARATIONS---------------------------------------------------------------*/
void int_usb(void);
void stepMOtor (int,int,int);
void stepDemo (void);
/*--FUNCTION DEFINITIONS----------------------------------------------------------------*/

/*
 void int_usb (void) // initialize serial connection
*/

void int_usb(void)

 {
     pc.baud(115200);                                  /*Set baud rate*/   
 }        


/* stepMottor
   int dir 0- right, 1- left
   int steps 0-200 full step mode
   int speed
*/
   
void stepMOtor(int dir, int steps, int speedS )        

{

 if (!dir)                                                        // Checking direction flag
  {
    
    enableOut=0;
    dirOut=0;                                                     // drive right 
                                                              
  }
    else
      {
        enableOut=0;
        dirOut=1;                                                 // drive left  
      }

 int deg;

    for (deg=0;deg<steps;deg++)
  {
   
    stepOut=1;
    wait_us(500);
    stepOut=0;
    wait_ms(speedS);
    if (deg==steps-2)
      {
              pc.printf("ready %s \n");
      }
  }
 }

/*
void stepDemo(void);
full motor revolution 
0.8 deg / sec
*/

void stepDemo (void)
{
    enableOut=0;
    dirOut=0;                                                            // Enables the motor direction right
       for(int x = 0; x < 199; x++) {                                    // Makes 400 steps for full revolution
         stepOut=1; 
          wait_us(1000); 
         stepOut=0;
      wait_ms(999);
      }
}

int main() {
   int_usb(); 
  
   while(1){ 
        pc.printf("Hello %s \n"); 
        wait(0.5);
            while(true){
            while (pc.readable()) {                    //if data in the ring buffer
                     pc.gets(buffer,16);               //read 7 characters
                     pc.printf("stringReceived %s ", buffer);
                   char * pch;
                    pch = strtok (buffer,",");
                      int i=0;
                      while (pch != NULL)
                        
                        {
                         mot_char[i++] = pch;
                         pch = strtok (NULL, ","); 
                        }
                       
                       for (i = 0; i < 3; ++i) {
                          //pc.printf("%s\n", mot_char[i]);
                         mot_int[i]=atoi(mot_char[i]);
                         pc.printf("%d\n", mot_int[i]);
                       }
            break; }

       }
     }
  }