Stepper driver draft
This commit is contained in:
parent
5f0099f390
commit
5b3adbf65d
1
Makefile
1
Makefile
@ -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
86
src/drivers/stepper.cpp
Normal 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
45
src/drivers/stepper.h
Normal 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
|
Loading…
x
Reference in New Issue
Block a user