beta1

Dependents:   Ex_Stepper

Fork of a4998 by Keegan Hu

a4988.cpp

Committer:
glintligo
Date:
2018-07-17
Revision:
3:9e9f3cd7fff0
Parent:
2:57c57267b1da

File content as of revision 3:9e9f3cd7fff0:

#include "a4988.h"
#include "mbed.h"

Stepper::Stepper(PinName _en, PinName _stepPin, PinName _direction) : en(_en),
                                                                      stepPin(_stepPin),
                                                                      direction(_direction)
{
}
/**
 * 转动特定脉冲
 * @param dir          [运动方向]
 * @param frequency    [脉冲周期]
 * @param _remain      [脉冲个数]
 */
void Stepper::step(int dir, int frequency, volatile int _remain)
{
    if (dir == 1)
    {
        direction = 0;
    }
    else if (dir == 0)
    {
        direction = 1;
    }
    else
    {
        return;
    }
    remain = _remain;
    step_ticker.attach(callback(this, &Stepper::step_control), 0.5 / frequency);
}
/**
 * 启动步进电机
 */
void Stepper::enable()
{
    en = 0;
}
/**
 * 关闭步进电机
 */
void Stepper::disable()
{
    en = 1;
}
/**
 * 步进电机控制程序
 */
void Stepper::step_control()
{
    if (remain <= 0)
    {
        step_ticker.detach();
        return;
    }

    if (stepPin)
    {
        stepPin = 0; //STEP 1->0
        remain--;
    }
    else
    {
        stepPin = 1; //STEP 0->1
    }
}
/**
 * 一直转
 * @param dir          [运动方向]
 * @param frequency    [脉冲周期]
 */
void Stepper::longrun(int dir, int frequency)
{
    if (dir == 1)
    {
        direction = 0;
    }
    else if (dir == 0)
    {
        direction = 1;
    }
    else
    {
        return;
    }
    step_ticker.attach(callback(this, &Stepper::run_control), 0.5 / frequency);
}
/**
 * 一直转运动函数
 */
void Stepper::run_control()
{
    if (stepPin)
    {
        stepPin = 0; //STEP 1->0
        remain--;
    }
    else
    {
        stepPin = 1; //STEP 0->1
    }
}
/**
 * 停止一直转
 */
void Stepper::stoprun()
{
    step_ticker.detach();
}