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:
Mon Jul 29 09:15:11 2013 +0000
Revision:
1:66e95666c3b5
Parent:
0:a509cc91f7c2
Child:
2:4102dd9293a6
Sone uncommitted changes ?

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 1:66e95666c3b5 78
ceri 1:66e95666c3b5 79 bool Stepper::Enable (bool OnOff)
ceri 1:66e95666c3b5 80 {
ceri 1:66e95666c3b5 81 _En = OnOff;
ceri 1:66e95666c3b5 82 }
ceri 1:66e95666c3b5 83
ceri 1:66e95666c3b5 84 // ------------------------------------------------------------------------------------
ceri 1:66e95666c3b5 85
ceri 0:a509cc91f7c2 86 bool Stepper::Set_Dir (bool Dir2Set)
ceri 0:a509cc91f7c2 87 {
ceri 0:a509cc91f7c2 88 // if (Dir == NC)
ceri 0:a509cc91f7c2 89 // {
ceri 0:a509cc91f7c2 90 // return false;
ceri 0:a509cc91f7c2 91 // }
ceri 0:a509cc91f7c2 92 // else
ceri 0:a509cc91f7c2 93 {
ceri 0:a509cc91f7c2 94 if (Dir2Set)
ceri 0:a509cc91f7c2 95 {
ceri 0:a509cc91f7c2 96 _Invert_Dir ? _Dir = 0 : _Dir = 1;
ceri 0:a509cc91f7c2 97 }
ceri 0:a509cc91f7c2 98 else
ceri 0:a509cc91f7c2 99 {
ceri 0:a509cc91f7c2 100 _Invert_Dir ? _Dir = 1 : _Dir = 0;
ceri 0:a509cc91f7c2 101 }
ceri 0:a509cc91f7c2 102
ceri 0:a509cc91f7c2 103 return true;
ceri 0:a509cc91f7c2 104 }
ceri 0:a509cc91f7c2 105 }
ceri 0:a509cc91f7c2 106
ceri 0:a509cc91f7c2 107
ceri 0:a509cc91f7c2 108 // ------------------------------------------------------------------------------------
ceri 0:a509cc91f7c2 109
ceri 0:a509cc91f7c2 110 // test if ENDSTOP is enabled .... _Endstop_Left
ceri 0:a509cc91f7c2 111
ceri 0:a509cc91f7c2 112 bool Stepper::ESL_Fitted()
ceri 0:a509cc91f7c2 113 {
ceri 0:a509cc91f7c2 114 // (ESL) ? return true : return false;
ceri 0:a509cc91f7c2 115 if (ESL)
ceri 0:a509cc91f7c2 116 return true;
ceri 0:a509cc91f7c2 117 else
ceri 0:a509cc91f7c2 118 return false;
ceri 0:a509cc91f7c2 119 }
ceri 0:a509cc91f7c2 120
ceri 0:a509cc91f7c2 121 //
ceri 0:a509cc91f7c2 122
ceri 0:a509cc91f7c2 123 bool Stepper::ESR_Fitted()
ceri 0:a509cc91f7c2 124 {
ceri 0:a509cc91f7c2 125 //ESR ? return true : return false;
ceri 0:a509cc91f7c2 126 if (ESR)
ceri 0:a509cc91f7c2 127 return true;
ceri 0:a509cc91f7c2 128 else
ceri 0:a509cc91f7c2 129 return false;
ceri 0:a509cc91f7c2 130 }
ceri 0:a509cc91f7c2 131
ceri 0:a509cc91f7c2 132 // ...............................................................................
ceri 0:a509cc91f7c2 133
ceri 0:a509cc91f7c2 134 bool Stepper::ESL_Activeated()
ceri 0:a509cc91f7c2 135 {
ceri 0:a509cc91f7c2 136 bool retval;
ceri 0:a509cc91f7c2 137
ceri 0:a509cc91f7c2 138 if (_Invert_ESL)
ceri 0:a509cc91f7c2 139 {
ceri 0:a509cc91f7c2 140 if (_Endstop_Left) retval = true; else retval = false;
ceri 0:a509cc91f7c2 141 }
ceri 0:a509cc91f7c2 142 else
ceri 0:a509cc91f7c2 143 {
ceri 0:a509cc91f7c2 144 if (_Endstop_Left) retval = false; else retval = true; //
ceri 0:a509cc91f7c2 145 }
ceri 0:a509cc91f7c2 146
ceri 0:a509cc91f7c2 147 if (retval)
ceri 0:a509cc91f7c2 148 {
ceri 1:66e95666c3b5 149 //StepCount = 0; // might be very bad for H-BOT
ceri 0:a509cc91f7c2 150 }
ceri 0:a509cc91f7c2 151
ceri 0:a509cc91f7c2 152 return retval;
ceri 0:a509cc91f7c2 153 }
ceri 0:a509cc91f7c2 154
ceri 0:a509cc91f7c2 155 //
ceri 0:a509cc91f7c2 156
ceri 0:a509cc91f7c2 157 bool Stepper::ESR_Activeated()
ceri 0:a509cc91f7c2 158 {
ceri 0:a509cc91f7c2 159 if (_Invert_ESR)
ceri 0:a509cc91f7c2 160 {
ceri 0:a509cc91f7c2 161 if(_Endstop_Right) return true; else return false;
ceri 0:a509cc91f7c2 162 }
ceri 0:a509cc91f7c2 163 else
ceri 0:a509cc91f7c2 164 {
ceri 0:a509cc91f7c2 165 if(_Endstop_Right) return false; else return true;
ceri 0:a509cc91f7c2 166 }
ceri 0:a509cc91f7c2 167 }
ceri 0:a509cc91f7c2 168 // ------------------------------------------------------------------------------------
ceri 0:a509cc91f7c2 169
ceri 0:a509cc91f7c2 170 // test if endstop is triggerd.
ceri 0:a509cc91f7c2 171 // ** will return false if not triggerd AND false if pin is NC
ceri 0:a509cc91f7c2 172 // ** user should test if connected befor in a nested routeen from MAIN !!
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
ceri 0:a509cc91f7c2 188
ceri 0:a509cc91f7c2 189
ceri 0:a509cc91f7c2 190
ceri 0:a509cc91f7c2 191
ceri 0:a509cc91f7c2 192 /* **********************************************************************
ceri 0:a509cc91f7c2 193
ceri 0:a509cc91f7c2 194 **
ceri 0:a509cc91f7c2 195 * ` want an entity for a SINGLE Stepper motor, and assosiated things ..
ceri 0:a509cc91f7c2 196
ceri 0:a509cc91f7c2 197 PINS:
ceri 0:a509cc91f7c2 198 step,
ceri 0:a509cc91f7c2 199 Direction,
ceri 0:a509cc91f7c2 200 Enable,
ceri 0:a509cc91f7c2 201
ceri 0:a509cc91f7c2 202 endstop_left
ceri 0:a509cc91f7c2 203 endstop_right
ceri 0:a509cc91f7c2 204
ceri 0:a509cc91f7c2 205 Direction_Invert (T/F)
ceri 0:a509cc91f7c2 206
ceri 0:a509cc91f7c2 207 calls:
ceri 0:a509cc91f7c2 208 step
ceri 0:a509cc91f7c2 209 Endstop_Detected
ceri 0:a509cc91f7c2 210 **
ceri 0:a509cc91f7c2 211 *
ceri 0:a509cc91f7c2 212 *
ceri 0:a509cc91f7c2 213 Vars:
ceri 0:a509cc91f7c2 214 Number of steps to take
ceri 0:a509cc91f7c2 215 *
ceri 0:a509cc91f7c2 216 *
ceri 0:a509cc91f7c2 217 **
ceri 0:a509cc91f7c2 218 * also need to be able to tell if endstops are defined
ceri 0:a509cc91f7c2 219 *
ceri 0:a509cc91f7c2 220 *
ceri 0:a509cc91f7c2 221
ceri 0:a509cc91f7c2 222 if (ESR != NC) ESR_En = true; else ESR_En = false; // 44;
ceri 0:a509cc91f7c2 223
ceri 0:a509cc91f7c2 224 // got 340 with g1 defined ..
ceri 0:a509cc91f7c2 225 // got 44 with NO define :)
ceri 0:a509cc91f7c2 226
ceri 0:a509cc91f7c2 227 ***************************
ceri 0:a509cc91f7c2 228
ceri 0:a509cc91f7c2 229 if (Endstop_Right_Enabled)
ceri 0:a509cc91f7c2 230 {
ceri 0:a509cc91f7c2 231
ceri 0:a509cc91f7c2 232 }
ceri 0:a509cc91f7c2 233 else
ceri 0:a509cc91f7c2 234 {
ceri 0:a509cc91f7c2 235
ceri 0:a509cc91f7c2 236 }
ceri 0:a509cc91f7c2 237
ceri 0:a509cc91f7c2 238 * ********************************************************************* */