Files
school_archives/OSU SARL/Control Board Firmware/Dechorionator/Driver Board Revision 1.1/StepperClass.cpp
Corwin Perren b300c76103 Added old firmware and pcb design files
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.
2016-05-12 20:04:43 -07:00

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
}