Libary for Strpper motor controller, eg: Rep-Rap smart stick Catering for both, Phisical 'PIN' endstops, and PORT Expander end stops . ** BOTH IN TEST ** ** Phisical PIN tested (minimal) **** PORT PIN NOT TESTED ****
Stepper.cpp
- Committer:
- ceri
- Date:
- 2013-08-08
- Revision:
- 3:57d3774612fc
- Parent:
- 2:4102dd9293a6
File content as of revision 3:57d3774612fc:
#include "mbed.h" #include "Stepper.h" /* ....................................... ? Pars Expanded Byte(s) Assuming Port expander is used; then on ISR, read chip registors .. -> code -> ........................................ */ Stepper::Stepper(PinName Step, PinName Dir, PinName En, PinName Endstop_Left, PinName Endstop_Right, bool Invert_Dir, bool Invert_ESL, bool Invert_ESR) : _Step (Step), _Dir(Dir), _En(En), _Endstop_Left(Endstop_Left), _Endstop_Right(Endstop_Right) { // Assume End Stop Left is MIN, // and End Stop Right is MAX endstop. _Invert_Dir = Invert_Dir, _Invert_ESL = Invert_ESL, _Invert_ESR = Invert_ESR; { // bool read_1(); if (Endstop_Left != NC) { ESL = true; _Endstop_Left.mode (PullUp); } else { ESL = false; } if (Endstop_Right != NC) { ESR = true; _Endstop_Right.mode (PullUp); } else { ESR = false; } // Set default val;ues .. no potr Endstops //Port_MASK_L = 0; //Port_INV_MASK_L = 0; } } // ------------------------------------------------------------------------------------ bool Stepper::Pulse() { // if (Step == NC) // { // return false; // } // else // Enable motor .. if not enabled .. short delay befor moveing .. if (_En) { _En = 0; wait (0.005); // 5 mSec. } _En = 0; { _Step = 1; wait_us (2); _Step = 0; return true; } } // ------------------------------------------------------------------------------------ void Stepper::Enable (bool OnOff) { _En = !OnOff; } // ------------------------------------------------------------------------------------ bool Stepper::Set_Dir (bool Dir2Set) { // if (Dir == NC) // { // return false; // } // else { if (Dir2Set) { _Invert_Dir ? _Dir = 0 : _Dir = 1; } else { _Invert_Dir ? _Dir = 1 : _Dir = 0; } return true; } } // ------------------------------------------------------------------------------------ // test if ENDSTOP is enabled .... _Endstop_Left bool Stepper::ESL_Fitted() { // (ESL) ? return true : return false; if (ESL) return true; else return false; } // bool Stepper::ESR_Fitted() { //ESR ? return true : return false; if (ESR) return true; else return false; } // ............................................................................... bool Stepper::ESL_Activeated() { bool retval; if (_Invert_ESL) { if (_Endstop_Left) retval = true; else retval = false; } else { if (_Endstop_Left) retval = false; else retval = true; // } if (retval) { //StepCount = 0; // might be very bad for H-BOT } return retval; } // bool Stepper::ESR_Activeated() { if (_Invert_ESR) { if(_Endstop_Right) return true; else return false; } else { if(_Endstop_Right) return false; else return true; } } // ------------------------------------------------------------------------------------ // test if endstop is triggerd. // ** will return false if not triggerd AND false if pin is NC // ** user should test if connected befor in a nested routeen from MAIN !! bool Stepper::ESL_Port(int PORT_In) { bool Ret = false; if (!Port_MASK_L) { Ret = false; } else { if (PORT_In && Port_MASK_L) { (Port_INV_MASK_L) ? Ret = true : Ret = false; } else { (Port_INV_MASK_L) ? Ret = false : Ret = true; } } return (Ret); } // ............................. void Stepper::ESL_Set_MASK (int Port_MASK_L_in) { Port_MASK_L = Port_MASK_L_in; } void Stepper::ESL_Set_INV_MASK (int Port_INV_MASK_L_in) { Port_INV_MASK_L = Port_INV_MASK_L_in; } /* ********************************************************************** ** * ` want an entity for a SINGLE Stepper motor, and assosiated things .. PINS: step, Direction, Enable, endstop_left endstop_right Direction_Invert (T/F) calls: step Endstop_Detected ** * * Vars: Number of steps to take * * ** * also need to be able to tell if endstops are defined * * if (ESR != NC) ESR_En = true; else ESR_En = false; // 44; // got 340 with g1 defined .. // got 44 with NO define :) *************************** if (Endstop_Right_Enabled) { } else { } * ********************************************************************* */