Stepper driver draft

This commit is contained in:
philsson 2018-08-25 19:51:22 +02:00
parent 5f0099f390
commit 5b3adbf65d
3 changed files with 132 additions and 0 deletions

View File

@ -367,6 +367,7 @@ OBJECTS += ./src/test.o
#OBJECTS += ./src/drivers/HMC5883L.o
OBJECTS += ./src/drivers/MPU6000.o
OBJECTS += ./src/drivers/MS5611.o
OBJECTS += ./src/drivers/stepper.o
INCLUDE_PATHS += -I../

86
src/drivers/stepper.cpp Normal file
View File

@ -0,0 +1,86 @@
#include "drivers/stepper.h"
namespace drivers {
Stepper::Stepper(PinName stepPin,
PinName dirPin,
PinName enPin)
: m_step(stepPin)
, m_dir(dirPin)
, m_en(enPin)
, m_stepsPerRevolution(200)
, m_microStepResolution(8)
, m_currentPeriod()
{
m_step.pulsewidth_us(1);
m_en.write(1);
}
void Stepper::init()
{
}
void Stepper::enable()
{
// Controller is enabled when IO is low
m_en.write(0);
}
void Stepper::disable()
{
// Controller is disabled when IO is high
m_en.write(1);
}
bool Stepper::isEnabled()
{
// Controller is enabled when IO is low
return m_en.read() == 0;
}
void Stepper::setDirection(int dir)
{
m_dir.write(dir);
}
int Stepper::getDirection()
{
return m_dir.read();
}
void Stepper::setSpeed(const double& DPS)
{
if (DPS == 0)
{
disable();
return;
}
else
{
enable();
}
double revPerSecond = abs(DPS)/360.0;
double stepsPerSecond =
m_stepsPerRevolution*m_microStepResolution*revPerSecond;
double usPerSecond = 1000000;
double periodUs = usPerSecond/stepsPerSecond;
if (periodUs == m_currentPeriod)
{
return;
}
m_currentPeriod = periodUs;
m_step.period_us(periodUs);
m_step.pulsewidth_us(5);
m_dir = (DPS > 0) ? 1 : 0;
}
} // namespace drivers

45
src/drivers/stepper.h Normal file
View File

@ -0,0 +1,45 @@
#pragma once
#include "mbed.h"
namespace drivers {
class Stepper
{
public:
Stepper(PinName stepPin,
PinName dirPin,
PinName enPin);
void init();
void enable();
void disable();
bool isEnabled();
void setDirection(int dir);
int getDirection();
// Steps per second? / deg per second?
void setSpeed(const double& DPS);
private:
PwmOut m_step;
DigitalOut m_dir, m_en;
int m_stepsPerRevolution;
int m_microStepResolution;
int m_currentPeriod;
};
} // namespace drivers