mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 13:41:13 +00:00
These are all design documents that I thought I had lost. It's may make me cringe, but it's still cool to use it to see how far I've come.
120 lines
2.9 KiB
C++
120 lines
2.9 KiB
C++
/*
|
|
* StepperClass.cpp
|
|
*
|
|
* Created: 8/1/2014 5:13:57 PM
|
|
* Author: corwin
|
|
*/
|
|
|
|
|
|
#include "StepperClass.h"
|
|
|
|
// default constructor
|
|
StepperClass::StepperClass(volatile uint8_t *enport, volatile uint8_t *enddr, int enpin,
|
|
volatile uint8_t *dirport, volatile uint8_t *dirddr, int dirpin,
|
|
volatile uint8_t *stepport, volatile uint8_t *stepddr, int steppin,
|
|
volatile uint8_t *faultport, volatile uint8_t *faultddr, int faultpin,
|
|
volatile uint8_t *m0port, volatile uint8_t *m0ddr, int m0pin,
|
|
volatile uint8_t *m1port, volatile uint8_t *m1ddr, int m1pin,
|
|
volatile uint8_t *m2port, volatile uint8_t *m2ddr, int m2pin
|
|
)
|
|
{
|
|
enPort = enport;
|
|
enDDR = enddr;
|
|
enPin = enpin;
|
|
_setupPinAsOutput(enDDR, enPin);
|
|
_disableStepper();
|
|
|
|
dirPort = dirport;
|
|
dirDDR = dirddr;
|
|
dirPin = dirpin;
|
|
_setupPinAsOutput(enDDR, enPin);
|
|
_setPinLow(dirPort, dirPin);
|
|
|
|
stepPort = stepport;
|
|
stepDDR = stepddr;
|
|
stepPin = steppin;
|
|
_setupPinAsOutput(enDDR, enPin);
|
|
_setPinLow(stepPort, stepPin);
|
|
|
|
faultPort = faultport;
|
|
faultDDR = faultddr;
|
|
faultPin = faultpin;
|
|
_setupPinAsInput(faultPort, faultDDR, faultPin, false);
|
|
|
|
m0Port = m0port;
|
|
m0DDR = m0ddr;
|
|
m0Pin = m0pin;
|
|
_setupPinAsOutput(enDDR, enPin);
|
|
_setPinHigh(m0Port, m0Pin);
|
|
|
|
m1Port = m1port;
|
|
m1DDR = m1ddr;
|
|
m1Pin = m1pin;
|
|
_setupPinAsOutput(enDDR, enPin);
|
|
_setPinLow(m1Port, m1Pin);
|
|
|
|
m2Port = m2port;
|
|
m2DDR = m2ddr;
|
|
m2Pin = m2pin;
|
|
_setupPinAsOutput(enDDR, enPin);
|
|
_setPinLow(m2Port, m2Pin);
|
|
|
|
|
|
TCCR1A = 0; //Set output compare mode for channel A and B to normal operation and waveform generation to normal
|
|
TCCR1B = ((1 << WGM12) | (1 << CS10) | (1 << CS11)); //Set clk prescalar for timer to clk/1024 and enable clear on timer compare match
|
|
TCNT1 = 0; //Zero the count register
|
|
TIMSK1 = (1 << OCIE1A); //Set interrupt flag to trigger on counter 1 overflow
|
|
OCR1A = 2000; //Set the count value based on what's needed to update at a specific number of fps
|
|
|
|
} //StepperClass
|
|
|
|
// default destructor
|
|
StepperClass::~StepperClass()
|
|
{
|
|
} //~StepperClass
|
|
|
|
void StepperClass::_setupPinAsOutput(volatile uint8_t *ddr, int pin)
|
|
{
|
|
*ddr |= (1 << pin);
|
|
}
|
|
|
|
void StepperClass::_setupPinAsInput(volatile uint8_t *port, volatile uint8_t *ddr, int pin, bool enablePullup = false)
|
|
{
|
|
*ddr &= ~(1 << pin);
|
|
if(enablePullup){
|
|
*port |= (1 << pin);
|
|
}
|
|
}
|
|
|
|
void StepperClass::_enableStepper()
|
|
{
|
|
*enPort &= ~(1 << enPin);
|
|
}
|
|
|
|
void StepperClass::_disableStepper()
|
|
{
|
|
*enPort |= (1 << enPin);
|
|
}
|
|
|
|
void StepperClass::_setPinLow(volatile uint8_t *port, int pin)
|
|
{
|
|
*port &= ~(1 << pin);
|
|
}
|
|
|
|
void StepperClass::_setPinHigh(volatile uint8_t *port, int pin)
|
|
{
|
|
*port |= (1 << pin);
|
|
}
|
|
|
|
void StepperClass::OneStep()
|
|
{
|
|
_setPinHigh(stepPort, stepPin);
|
|
_delay_us(2);
|
|
_setPinLow(stepPort, stepPin);
|
|
}
|
|
|
|
void StepperClass::SetRPM(int rpm)
|
|
{
|
|
OCR1B = 35000;//(long(STEPPER_RPM_CONSTANT)/rpm); //Set the count value based on what's needed to update at a specific number of fps
|
|
}
|