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 ****

Committer:
ceri
Date:
Thu Jul 18 09:05:15 2013 +0000
Revision:
0:a509cc91f7c2
Child:
1:66e95666c3b5
Going to remove all discreet  stepper code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ceri 0:a509cc91f7c2 1
ceri 0:a509cc91f7c2 2
ceri 0:a509cc91f7c2 3
ceri 0:a509cc91f7c2 4 #include "mbed.h"
ceri 0:a509cc91f7c2 5 #include "Stepper.h"
ceri 0:a509cc91f7c2 6
ceri 0:a509cc91f7c2 7
ceri 0:a509cc91f7c2 8 /* .......................................
ceri 0:a509cc91f7c2 9
ceri 0:a509cc91f7c2 10 ? Pars Expanded Byte(s)
ceri 0:a509cc91f7c2 11
ceri 0:a509cc91f7c2 12 Assuming Port expander is used;
ceri 0:a509cc91f7c2 13
ceri 0:a509cc91f7c2 14 then on ISR, read chip registors ..
ceri 0:a509cc91f7c2 15 -> code ->
ceri 0:a509cc91f7c2 16 ........................................ */
ceri 0:a509cc91f7c2 17
ceri 0:a509cc91f7c2 18
ceri 0:a509cc91f7c2 19
ceri 0:a509cc91f7c2 20 Stepper::Stepper(PinName Step, PinName Dir, PinName En,
ceri 0:a509cc91f7c2 21 PinName Endstop_Left,
ceri 0:a509cc91f7c2 22 PinName Endstop_Right,
ceri 0:a509cc91f7c2 23
ceri 0:a509cc91f7c2 24 bool Invert_Dir,
ceri 0:a509cc91f7c2 25 bool Invert_ESL,
ceri 0:a509cc91f7c2 26 bool Invert_ESR)
ceri 0:a509cc91f7c2 27
ceri 0:a509cc91f7c2 28
ceri 0:a509cc91f7c2 29 : _Step (Step), _Dir(Dir), _En(En), _Endstop_Left(Endstop_Left), _Endstop_Right(Endstop_Right)
ceri 0:a509cc91f7c2 30 {
ceri 0:a509cc91f7c2 31
ceri 0:a509cc91f7c2 32 // Assume End Stop Left is MIN,
ceri 0:a509cc91f7c2 33 // and End Stop Right is MAX endstop.
ceri 0:a509cc91f7c2 34
ceri 0:a509cc91f7c2 35 _Invert_Dir = Invert_Dir,
ceri 0:a509cc91f7c2 36 _Invert_ESL = Invert_ESL,
ceri 0:a509cc91f7c2 37 _Invert_ESR = Invert_ESR;
ceri 0:a509cc91f7c2 38
ceri 0:a509cc91f7c2 39 {
ceri 0:a509cc91f7c2 40 // bool read_1();
ceri 0:a509cc91f7c2 41 if (Endstop_Left != NC) ESL = true; else ESL = false;
ceri 0:a509cc91f7c2 42 if (Endstop_Right != NC) ESR = true; else ESR = false;
ceri 0:a509cc91f7c2 43
ceri 0:a509cc91f7c2 44 }
ceri 0:a509cc91f7c2 45 }
ceri 0:a509cc91f7c2 46
ceri 0:a509cc91f7c2 47 // ------------------------------------------------------------------------------------
ceri 0:a509cc91f7c2 48
ceri 0:a509cc91f7c2 49
ceri 0:a509cc91f7c2 50 bool Stepper::Pulse()
ceri 0:a509cc91f7c2 51 {
ceri 0:a509cc91f7c2 52 // if (Step == NC)
ceri 0:a509cc91f7c2 53 // {
ceri 0:a509cc91f7c2 54 // return false;
ceri 0:a509cc91f7c2 55 // }
ceri 0:a509cc91f7c2 56 // else
ceri 0:a509cc91f7c2 57 // Enable motor .. if not enabled .. short delay befor moveing ..
ceri 0:a509cc91f7c2 58
ceri 0:a509cc91f7c2 59 if (!_En)
ceri 0:a509cc91f7c2 60 {
ceri 0:a509cc91f7c2 61 _En = 1;
ceri 0:a509cc91f7c2 62 wait (0.005); // 5 mSec.
ceri 0:a509cc91f7c2 63 }
ceri 0:a509cc91f7c2 64
ceri 0:a509cc91f7c2 65 _En = 1;
ceri 0:a509cc91f7c2 66
ceri 0:a509cc91f7c2 67
ceri 0:a509cc91f7c2 68 {
ceri 0:a509cc91f7c2 69 _Step = 1;
ceri 0:a509cc91f7c2 70 wait_us (2);
ceri 0:a509cc91f7c2 71 _Step = 0;
ceri 0:a509cc91f7c2 72 return true;
ceri 0:a509cc91f7c2 73 }
ceri 0:a509cc91f7c2 74 }
ceri 0:a509cc91f7c2 75
ceri 0:a509cc91f7c2 76 // ------------------------------------------------------------------------------------
ceri 0:a509cc91f7c2 77
ceri 0:a509cc91f7c2 78 bool Stepper::Set_Dir (bool Dir2Set)
ceri 0:a509cc91f7c2 79 {
ceri 0:a509cc91f7c2 80 // if (Dir == NC)
ceri 0:a509cc91f7c2 81 // {
ceri 0:a509cc91f7c2 82 // return false;
ceri 0:a509cc91f7c2 83 // }
ceri 0:a509cc91f7c2 84 // else
ceri 0:a509cc91f7c2 85 {
ceri 0:a509cc91f7c2 86 if (Dir2Set)
ceri 0:a509cc91f7c2 87 {
ceri 0:a509cc91f7c2 88 _Invert_Dir ? _Dir = 0 : _Dir = 1;
ceri 0:a509cc91f7c2 89 }
ceri 0:a509cc91f7c2 90 else
ceri 0:a509cc91f7c2 91 {
ceri 0:a509cc91f7c2 92 _Invert_Dir ? _Dir = 1 : _Dir = 0;
ceri 0:a509cc91f7c2 93 }
ceri 0:a509cc91f7c2 94
ceri 0:a509cc91f7c2 95 return true;
ceri 0:a509cc91f7c2 96 }
ceri 0:a509cc91f7c2 97 }
ceri 0:a509cc91f7c2 98
ceri 0:a509cc91f7c2 99
ceri 0:a509cc91f7c2 100 // ------------------------------------------------------------------------------------
ceri 0:a509cc91f7c2 101
ceri 0:a509cc91f7c2 102 // test if ENDSTOP is enabled .... _Endstop_Left
ceri 0:a509cc91f7c2 103
ceri 0:a509cc91f7c2 104 bool Stepper::ESL_Fitted()
ceri 0:a509cc91f7c2 105 {
ceri 0:a509cc91f7c2 106 // (ESL) ? return true : return false;
ceri 0:a509cc91f7c2 107 if (ESL)
ceri 0:a509cc91f7c2 108 return true;
ceri 0:a509cc91f7c2 109 else
ceri 0:a509cc91f7c2 110 return false;
ceri 0:a509cc91f7c2 111 }
ceri 0:a509cc91f7c2 112
ceri 0:a509cc91f7c2 113 //
ceri 0:a509cc91f7c2 114
ceri 0:a509cc91f7c2 115 bool Stepper::ESR_Fitted()
ceri 0:a509cc91f7c2 116 {
ceri 0:a509cc91f7c2 117 //ESR ? return true : return false;
ceri 0:a509cc91f7c2 118 if (ESR)
ceri 0:a509cc91f7c2 119 return true;
ceri 0:a509cc91f7c2 120 else
ceri 0:a509cc91f7c2 121 return false;
ceri 0:a509cc91f7c2 122 }
ceri 0:a509cc91f7c2 123
ceri 0:a509cc91f7c2 124 // ...............................................................................
ceri 0:a509cc91f7c2 125
ceri 0:a509cc91f7c2 126 bool Stepper::ESL_Activeated()
ceri 0:a509cc91f7c2 127 {
ceri 0:a509cc91f7c2 128 bool retval;
ceri 0:a509cc91f7c2 129
ceri 0:a509cc91f7c2 130 if (_Invert_ESL)
ceri 0:a509cc91f7c2 131 {
ceri 0:a509cc91f7c2 132 if (_Endstop_Left) retval = true; else retval = false;
ceri 0:a509cc91f7c2 133 }
ceri 0:a509cc91f7c2 134 else
ceri 0:a509cc91f7c2 135 {
ceri 0:a509cc91f7c2 136 if (_Endstop_Left) retval = false; else retval = true; //
ceri 0:a509cc91f7c2 137 }
ceri 0:a509cc91f7c2 138
ceri 0:a509cc91f7c2 139 if (retval)
ceri 0:a509cc91f7c2 140 {
ceri 0:a509cc91f7c2 141 StepCount = 0; // might be very bad for H-BOT
ceri 0:a509cc91f7c2 142 }
ceri 0:a509cc91f7c2 143
ceri 0:a509cc91f7c2 144 return retval;
ceri 0:a509cc91f7c2 145 }
ceri 0:a509cc91f7c2 146
ceri 0:a509cc91f7c2 147 //
ceri 0:a509cc91f7c2 148
ceri 0:a509cc91f7c2 149 bool Stepper::ESR_Activeated()
ceri 0:a509cc91f7c2 150 {
ceri 0:a509cc91f7c2 151 if (_Invert_ESR)
ceri 0:a509cc91f7c2 152 {
ceri 0:a509cc91f7c2 153 if(_Endstop_Right) return true; else return false;
ceri 0:a509cc91f7c2 154 }
ceri 0:a509cc91f7c2 155 else
ceri 0:a509cc91f7c2 156 {
ceri 0:a509cc91f7c2 157 if(_Endstop_Right) return false; else return true;
ceri 0:a509cc91f7c2 158 }
ceri 0:a509cc91f7c2 159 }
ceri 0:a509cc91f7c2 160 // ------------------------------------------------------------------------------------
ceri 0:a509cc91f7c2 161
ceri 0:a509cc91f7c2 162 // test if endstop is triggerd.
ceri 0:a509cc91f7c2 163 // ** will return false if not triggerd AND false if pin is NC
ceri 0:a509cc91f7c2 164 // ** user should test if connected befor in a nested routeen from MAIN !!
ceri 0:a509cc91f7c2 165
ceri 0:a509cc91f7c2 166
ceri 0:a509cc91f7c2 167
ceri 0:a509cc91f7c2 168
ceri 0:a509cc91f7c2 169
ceri 0:a509cc91f7c2 170
ceri 0:a509cc91f7c2 171
ceri 0:a509cc91f7c2 172
ceri 0:a509cc91f7c2 173
ceri 0:a509cc91f7c2 174
ceri 0:a509cc91f7c2 175
ceri 0:a509cc91f7c2 176
ceri 0:a509cc91f7c2 177
ceri 0:a509cc91f7c2 178
ceri 0:a509cc91f7c2 179
ceri 0:a509cc91f7c2 180
ceri 0:a509cc91f7c2 181
ceri 0:a509cc91f7c2 182
ceri 0:a509cc91f7c2 183
ceri 0:a509cc91f7c2 184 /* **********************************************************************
ceri 0:a509cc91f7c2 185
ceri 0:a509cc91f7c2 186 **
ceri 0:a509cc91f7c2 187 * ` want an entity for a SINGLE Stepper motor, and assosiated things ..
ceri 0:a509cc91f7c2 188
ceri 0:a509cc91f7c2 189 PINS:
ceri 0:a509cc91f7c2 190 step,
ceri 0:a509cc91f7c2 191 Direction,
ceri 0:a509cc91f7c2 192 Enable,
ceri 0:a509cc91f7c2 193
ceri 0:a509cc91f7c2 194 endstop_left
ceri 0:a509cc91f7c2 195 endstop_right
ceri 0:a509cc91f7c2 196
ceri 0:a509cc91f7c2 197 Direction_Invert (T/F)
ceri 0:a509cc91f7c2 198
ceri 0:a509cc91f7c2 199 calls:
ceri 0:a509cc91f7c2 200 step
ceri 0:a509cc91f7c2 201 Endstop_Detected
ceri 0:a509cc91f7c2 202 **
ceri 0:a509cc91f7c2 203 *
ceri 0:a509cc91f7c2 204 *
ceri 0:a509cc91f7c2 205 Vars:
ceri 0:a509cc91f7c2 206 Number of steps to take
ceri 0:a509cc91f7c2 207 *
ceri 0:a509cc91f7c2 208 *
ceri 0:a509cc91f7c2 209 **
ceri 0:a509cc91f7c2 210 * also need to be able to tell if endstops are defined
ceri 0:a509cc91f7c2 211 *
ceri 0:a509cc91f7c2 212 *
ceri 0:a509cc91f7c2 213
ceri 0:a509cc91f7c2 214 if (ESR != NC) ESR_En = true; else ESR_En = false; // 44;
ceri 0:a509cc91f7c2 215
ceri 0:a509cc91f7c2 216 // got 340 with g1 defined ..
ceri 0:a509cc91f7c2 217 // got 44 with NO define :)
ceri 0:a509cc91f7c2 218
ceri 0:a509cc91f7c2 219 ***************************
ceri 0:a509cc91f7c2 220
ceri 0:a509cc91f7c2 221 if (Endstop_Right_Enabled)
ceri 0:a509cc91f7c2 222 {
ceri 0:a509cc91f7c2 223
ceri 0:a509cc91f7c2 224 }
ceri 0:a509cc91f7c2 225 else
ceri 0:a509cc91f7c2 226 {
ceri 0:a509cc91f7c2 227
ceri 0:a509cc91f7c2 228 }
ceri 0:a509cc91f7c2 229
ceri 0:a509cc91f7c2 230 * ********************************************************************* */