beta1

Dependents:   Ex_Stepper

Fork of a4998 by Keegan Hu

Committer:
glintligo
Date:
Tue Jul 17 00:28:36 2018 +0000
Revision:
3:9e9f3cd7fff0
Parent:
2:57c57267b1da
beta2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glintligo 0:173936452e07 1 #include "a4988.h"
glintligo 0:173936452e07 2 #include "mbed.h"
glintligo 3:9e9f3cd7fff0 3
glintligo 3:9e9f3cd7fff0 4 Stepper::Stepper(PinName _en, PinName _stepPin, PinName _direction) : en(_en),
glintligo 3:9e9f3cd7fff0 5 stepPin(_stepPin),
glintligo 3:9e9f3cd7fff0 6 direction(_direction)
glintligo 0:173936452e07 7 {
glintligo 0:173936452e07 8 }
glintligo 3:9e9f3cd7fff0 9 /**
glintligo 3:9e9f3cd7fff0 10 * 转动特定脉冲
glintligo 3:9e9f3cd7fff0 11 * @param dir [运动方向]
glintligo 3:9e9f3cd7fff0 12 * @param frequency [脉冲周期]
glintligo 3:9e9f3cd7fff0 13 * @param _remain [脉冲个数]
glintligo 3:9e9f3cd7fff0 14 */
glintligo 3:9e9f3cd7fff0 15 void Stepper::step(int dir, int frequency, volatile int _remain)
glintligo 0:173936452e07 16 {
glintligo 3:9e9f3cd7fff0 17 if (dir == 1)
glintligo 3:9e9f3cd7fff0 18 {
glintligo 0:173936452e07 19 direction = 0;
glintligo 3:9e9f3cd7fff0 20 }
glintligo 3:9e9f3cd7fff0 21 else if (dir == 0)
glintligo 3:9e9f3cd7fff0 22 {
glintligo 0:173936452e07 23 direction = 1;
glintligo 0:173936452e07 24 }
glintligo 3:9e9f3cd7fff0 25 else
glintligo 2:57c57267b1da 26 {
glintligo 2:57c57267b1da 27 return;
glintligo 2:57c57267b1da 28 }
glintligo 0:173936452e07 29 remain = _remain;
glintligo 3:9e9f3cd7fff0 30 step_ticker.attach(callback(this, &Stepper::step_control), 0.5 / frequency);
glintligo 0:173936452e07 31 }
glintligo 3:9e9f3cd7fff0 32 /**
glintligo 3:9e9f3cd7fff0 33 * 启动步进电机
glintligo 3:9e9f3cd7fff0 34 */
glintligo 0:173936452e07 35 void Stepper::enable()
glintligo 0:173936452e07 36 {
glintligo 0:173936452e07 37 en = 0;
glintligo 0:173936452e07 38 }
glintligo 3:9e9f3cd7fff0 39 /**
glintligo 3:9e9f3cd7fff0 40 * 关闭步进电机
glintligo 3:9e9f3cd7fff0 41 */
glintligo 0:173936452e07 42 void Stepper::disable()
glintligo 0:173936452e07 43 {
glintligo 0:173936452e07 44 en = 1;
glintligo 0:173936452e07 45 }
glintligo 3:9e9f3cd7fff0 46 /**
glintligo 3:9e9f3cd7fff0 47 * 步进电机控制程序
glintligo 3:9e9f3cd7fff0 48 */
glintligo 0:173936452e07 49 void Stepper::step_control()
glintligo 0:173936452e07 50 {
glintligo 3:9e9f3cd7fff0 51 if (remain <= 0)
glintligo 3:9e9f3cd7fff0 52 {
glintligo 3:9e9f3cd7fff0 53 step_ticker.detach();
glintligo 3:9e9f3cd7fff0 54 return;
glintligo 3:9e9f3cd7fff0 55 }
glintligo 3:9e9f3cd7fff0 56
glintligo 3:9e9f3cd7fff0 57 if (stepPin)
glintligo 3:9e9f3cd7fff0 58 {
glintligo 3:9e9f3cd7fff0 59 stepPin = 0; //STEP 1->0
glintligo 3:9e9f3cd7fff0 60 remain--;
glintligo 3:9e9f3cd7fff0 61 }
glintligo 3:9e9f3cd7fff0 62 else
glintligo 3:9e9f3cd7fff0 63 {
glintligo 3:9e9f3cd7fff0 64 stepPin = 1; //STEP 0->1
glintligo 3:9e9f3cd7fff0 65 }
glintligo 0:173936452e07 66 }
glintligo 3:9e9f3cd7fff0 67 /**
glintligo 3:9e9f3cd7fff0 68 * 一直转
glintligo 3:9e9f3cd7fff0 69 * @param dir [运动方向]
glintligo 3:9e9f3cd7fff0 70 * @param frequency [脉冲周期]
glintligo 3:9e9f3cd7fff0 71 */
glintligo 2:57c57267b1da 72 void Stepper::longrun(int dir, int frequency)
glintligo 2:57c57267b1da 73 {
glintligo 3:9e9f3cd7fff0 74 if (dir == 1)
glintligo 3:9e9f3cd7fff0 75 {
glintligo 2:57c57267b1da 76 direction = 0;
glintligo 3:9e9f3cd7fff0 77 }
glintligo 3:9e9f3cd7fff0 78 else if (dir == 0)
glintligo 3:9e9f3cd7fff0 79 {
glintligo 2:57c57267b1da 80 direction = 1;
glintligo 2:57c57267b1da 81 }
glintligo 3:9e9f3cd7fff0 82 else
glintligo 2:57c57267b1da 83 {
glintligo 2:57c57267b1da 84 return;
glintligo 2:57c57267b1da 85 }
glintligo 3:9e9f3cd7fff0 86 step_ticker.attach(callback(this, &Stepper::run_control), 0.5 / frequency);
glintligo 2:57c57267b1da 87 }
glintligo 3:9e9f3cd7fff0 88 /**
glintligo 3:9e9f3cd7fff0 89 * 一直转运动函数
glintligo 3:9e9f3cd7fff0 90 */
glintligo 2:57c57267b1da 91 void Stepper::run_control()
glintligo 2:57c57267b1da 92 {
glintligo 3:9e9f3cd7fff0 93 if (stepPin)
glintligo 3:9e9f3cd7fff0 94 {
glintligo 3:9e9f3cd7fff0 95 stepPin = 0; //STEP 1->0
glintligo 3:9e9f3cd7fff0 96 remain--;
glintligo 3:9e9f3cd7fff0 97 }
glintligo 3:9e9f3cd7fff0 98 else
glintligo 3:9e9f3cd7fff0 99 {
glintligo 3:9e9f3cd7fff0 100 stepPin = 1; //STEP 0->1
glintligo 3:9e9f3cd7fff0 101 }
glintligo 2:57c57267b1da 102 }
glintligo 3:9e9f3cd7fff0 103 /**
glintligo 3:9e9f3cd7fff0 104 * 停止一直转
glintligo 3:9e9f3cd7fff0 105 */
glintligo 2:57c57267b1da 106 void Stepper::stoprun()
glintligo 2:57c57267b1da 107 {
glintligo 2:57c57267b1da 108 step_ticker.detach();
glintligo 3:9e9f3cd7fff0 109 }