Michael Marzano / Mbed 2 deprecated Linear_Stepper_Motor_Nema17

Dependencies:   mbed

Committer:
mikermarza
Date:
Sun Apr 19 22:16:24 2020 +0000
Revision:
0:54c5be5f26f4
Child:
1:757a52db1604
Motor works for basic test program using BusOut.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mikermarza 0:54c5be5f26f4 1 // Code for the lin_step_mtr driver
mikermarza 0:54c5be5f26f4 2
mikermarza 0:54c5be5f26f4 3 #include "lin_step_mtr.h"
mikermarza 0:54c5be5f26f4 4 #include "debug.h"
mikermarza 0:54c5be5f26f4 5
mikermarza 0:54c5be5f26f4 6 //Construtor
mikermarza 0:54c5be5f26f4 7 LinStepMtr::LinStepMtr(PinName A_f, PinName A_r, PinName B_f, PinName B_r, int m_speed=MAX_SPEED)
mikermarza 0:54c5be5f26f4 8 :mtr_ctrl(B_r, A_r, B_f,A_f), max_speed((m_speed > MAX_SPEED) ? MAX_SPEED:m_speed)
mikermarza 0:54c5be5f26f4 9 {
mikermarza 0:54c5be5f26f4 10 mtr_ctrl = 0x0;
mikermarza 0:54c5be5f26f4 11 speed = floor((double)DEFAULT_SPEED * 10 / 3);
mikermarza 0:54c5be5f26f4 12 dir = CW;
mikermarza 0:54c5be5f26f4 13
mikermarza 0:54c5be5f26f4 14 stop_mtr = true;
mikermarza 0:54c5be5f26f4 15 terminate = false;
mikermarza 0:54c5be5f26f4 16
mikermarza 0:54c5be5f26f4 17
mikermarza 0:54c5be5f26f4 18
mikermarza 0:54c5be5f26f4 19
mikermarza 0:54c5be5f26f4 20
mikermarza 0:54c5be5f26f4 21 cur_state = STOP_MOTOR;
mikermarza 0:54c5be5f26f4 22 }
mikermarza 0:54c5be5f26f4 23
mikermarza 0:54c5be5f26f4 24
mikermarza 0:54c5be5f26f4 25 float LinStepMtr::get_speed()
mikermarza 0:54c5be5f26f4 26 {
mikermarza 0:54c5be5f26f4 27 return (float) speed * 3 / 10;
mikermarza 0:54c5be5f26f4 28 }
mikermarza 0:54c5be5f26f4 29
mikermarza 0:54c5be5f26f4 30 LinStepMtr::Direction LinStepMtr::get_dir()
mikermarza 0:54c5be5f26f4 31 {
mikermarza 0:54c5be5f26f4 32 return dir;
mikermarza 0:54c5be5f26f4 33 }
mikermarza 0:54c5be5f26f4 34
mikermarza 0:54c5be5f26f4 35 void LinStepMtr::rotate()
mikermarza 0:54c5be5f26f4 36 {
mikermarza 0:54c5be5f26f4 37 while(!terminate) {
mikermarza 0:54c5be5f26f4 38 if(!stop_mtr){
mikermarza 0:54c5be5f26f4 39 switch(dir) {
mikermarza 0:54c5be5f26f4 40 case CW:
mikermarza 0:54c5be5f26f4 41 mtr_ctrl = ++cur_step;
mikermarza 0:54c5be5f26f4 42 rev_cnt +=.005;
mikermarza 0:54c5be5f26f4 43 break;
mikermarza 0:54c5be5f26f4 44 case CCW:
mikermarza 0:54c5be5f26f4 45 mtr_ctrl = --cur_step;
mikermarza 0:54c5be5f26f4 46 rev_cnt-=.005;
mikermarza 0:54c5be5f26f4 47 break;
mikermarza 0:54c5be5f26f4 48 }
mikermarza 0:54c5be5f26f4 49 Thread::wait(30 / speed);
mikermarza 0:54c5be5f26f4 50 } else {
mikermarza 0:54c5be5f26f4 51 mtr_ctrl = STOP;
mikermarza 0:54c5be5f26f4 52 Thread::yield();
mikermarza 0:54c5be5f26f4 53 }
mikermarza 0:54c5be5f26f4 54 }
mikermarza 0:54c5be5f26f4 55 }
mikermarza 0:54c5be5f26f4 56
mikermarza 0:54c5be5f26f4 57 // Private Step Class functions
mikermarza 0:54c5be5f26f4 58 /*
mikermarza 0:54c5be5f26f4 59 LinStepMtr::Step::Step() : cur_step(ONE)
mikermarza 0:54c5be5f26f4 60 {
mikermarza 0:54c5be5f26f4 61 pc.printf("\n\nCalled Constructor\n cur_step: %x\n",cur_step);
mikermarza 0:54c5be5f26f4 62
mikermarza 0:54c5be5f26f4 63 pc.printf("Step_Num val:\n ONE = %x\n TWO = %x\n THREE = %x\n FOUR = %x\n\n", ONE, TWO, THREE, FOUR);
mikermarza 0:54c5be5f26f4 64 };
mikermarza 0:54c5be5f26f4 65 */
mikermarza 0:54c5be5f26f4 66 LinStepMtr::Step_Num LinStepMtr::Step::get_cur_step()
mikermarza 0:54c5be5f26f4 67 {
mikermarza 0:54c5be5f26f4 68 return cur_step;
mikermarza 0:54c5be5f26f4 69 }
mikermarza 0:54c5be5f26f4 70
mikermarza 0:54c5be5f26f4 71 LinStepMtr::Step_Num LinStepMtr::Step::operator++()
mikermarza 0:54c5be5f26f4 72 {
mikermarza 0:54c5be5f26f4 73 switch(cur_step){
mikermarza 0:54c5be5f26f4 74 case ONE:
mikermarza 0:54c5be5f26f4 75 cur_step=TWO;
mikermarza 0:54c5be5f26f4 76 break;
mikermarza 0:54c5be5f26f4 77 case TWO:
mikermarza 0:54c5be5f26f4 78 cur_step = THREE;
mikermarza 0:54c5be5f26f4 79 break;
mikermarza 0:54c5be5f26f4 80 case THREE:
mikermarza 0:54c5be5f26f4 81 cur_step = FOUR;
mikermarza 0:54c5be5f26f4 82 break;
mikermarza 0:54c5be5f26f4 83 case FOUR:
mikermarza 0:54c5be5f26f4 84 cur_step = ONE;
mikermarza 0:54c5be5f26f4 85 break;
mikermarza 0:54c5be5f26f4 86 }
mikermarza 0:54c5be5f26f4 87 return cur_step;
mikermarza 0:54c5be5f26f4 88 }
mikermarza 0:54c5be5f26f4 89
mikermarza 0:54c5be5f26f4 90 LinStepMtr::Step_Num LinStepMtr::Step::operator--()
mikermarza 0:54c5be5f26f4 91 {
mikermarza 0:54c5be5f26f4 92 switch(cur_step){
mikermarza 0:54c5be5f26f4 93 case ONE:
mikermarza 0:54c5be5f26f4 94 cur_step=FOUR;
mikermarza 0:54c5be5f26f4 95 break;
mikermarza 0:54c5be5f26f4 96 case TWO:
mikermarza 0:54c5be5f26f4 97 cur_step = ONE;
mikermarza 0:54c5be5f26f4 98 break;
mikermarza 0:54c5be5f26f4 99 case THREE:
mikermarza 0:54c5be5f26f4 100 cur_step = TWO;
mikermarza 0:54c5be5f26f4 101 break;
mikermarza 0:54c5be5f26f4 102 case FOUR:
mikermarza 0:54c5be5f26f4 103 cur_step = THREE;
mikermarza 0:54c5be5f26f4 104 break;
mikermarza 0:54c5be5f26f4 105 }
mikermarza 0:54c5be5f26f4 106 return cur_step;
mikermarza 0:54c5be5f26f4 107 }