Design-in of LPC11U24 (lqfp48) of mbed as Steppermotor controller with USB control.

Dependencies:   USBDevice mbed

Mbed repository of Stepper Motor Control board. Using mbed LPC11U24 chip with HID USB.

Hardware in copy repo on bitbucket https://bitbucket.org/jeroen3/stepper-motor-board

Committer:
jeroen3
Date:
Wed Oct 30 21:59:32 2013 +0000
Revision:
2:ddae311a4533
Parent:
0:d0306c0cbee6
fix led blink after soft reset

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jeroen3 0:d0306c0cbee6 1 /**
jeroen3 0:d0306c0cbee6 2 * @file SMC.h
jeroen3 0:d0306c0cbee6 3 * @brief Stepper motor control module
jeroen3 0:d0306c0cbee6 4 *
jeroen3 0:d0306c0cbee6 5 * @author Jeroen Lodder
jeroen3 0:d0306c0cbee6 6 * @date Oktober 2013
jeroen3 0:d0306c0cbee6 7 *
jeroen3 0:d0306c0cbee6 8 * @{
jeroen3 0:d0306c0cbee6 9 */
jeroen3 0:d0306c0cbee6 10 #ifndef StepperMotorControl_H_
jeroen3 0:d0306c0cbee6 11 #define StepperMotorControl_H_
jeroen3 0:d0306c0cbee6 12
jeroen3 0:d0306c0cbee6 13 #include <stdint.h>
jeroen3 0:d0306c0cbee6 14
jeroen3 0:d0306c0cbee6 15 /**
jeroen3 0:d0306c0cbee6 16 * @brief Motor control microstepping with Sine or Triangle
jeroen3 0:d0306c0cbee6 17 * @{
jeroen3 0:d0306c0cbee6 18 */
jeroen3 0:d0306c0cbee6 19 #define LUT_SINE 1
jeroen3 0:d0306c0cbee6 20 #define LUT_TRIANGLE 0
jeroen3 0:d0306c0cbee6 21 #if (LUT_SINE == LUT_TRIANGLE)
jeroen3 0:d0306c0cbee6 22 #error At least one LUT needs to Enabled or Disabled, not both.
jeroen3 0:d0306c0cbee6 23 #endif
jeroen3 0:d0306c0cbee6 24 /**
jeroen3 0:d0306c0cbee6 25 * @}
jeroen3 0:d0306c0cbee6 26 */
jeroen3 0:d0306c0cbee6 27
jeroen3 0:d0306c0cbee6 28 /* Api */
jeroen3 0:d0306c0cbee6 29 void SMC_init(void);
jeroen3 0:d0306c0cbee6 30 int SMC_step(int steps, uint8_t dir, uint32_t time_ms, uint8_t free);
jeroen3 0:d0306c0cbee6 31 uint32_t SMC_idle(void);
jeroen3 0:d0306c0cbee6 32 void SMC_deinit(void);
jeroen3 0:d0306c0cbee6 33 void SMC_brake(void);
jeroen3 0:d0306c0cbee6 34 void SMC_free(void);
jeroen3 0:d0306c0cbee6 35 void SMC_pause(void);
jeroen3 0:d0306c0cbee6 36 void SMC_continue(void);
jeroen3 0:d0306c0cbee6 37 int SMC_getState(void);
jeroen3 0:d0306c0cbee6 38 void SMC_egg(void);
jeroen3 0:d0306c0cbee6 39
jeroen3 0:d0306c0cbee6 40 /* Example of MOSFET bridges
jeroen3 0:d0306c0cbee6 41 * ------------------------ V+
jeroen3 0:d0306c0cbee6 42 * | | | |
jeroen3 0:d0306c0cbee6 43 * \H1 \H2 \H3 \H4
jeroen3 0:d0306c0cbee6 44 * |--MA--| |--MB--|
jeroen3 0:d0306c0cbee6 45 * \L1 \L2 \L3 \L4
jeroen3 0:d0306c0cbee6 46 * | | | |
jeroen3 0:d0306c0cbee6 47 * ------------------------ V-
jeroen3 0:d0306c0cbee6 48 */
jeroen3 0:d0306c0cbee6 49
jeroen3 0:d0306c0cbee6 50 /**
jeroen3 0:d0306c0cbee6 51 * @brief Motor control lookup tables
jeroen3 0:d0306c0cbee6 52 * @{
jeroen3 0:d0306c0cbee6 53 */
jeroen3 0:d0306c0cbee6 54 const uint16_t LUT_H1[32] = {
jeroen3 0:d0306c0cbee6 55 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
jeroen3 0:d0306c0cbee6 56 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
jeroen3 0:d0306c0cbee6 57 };
jeroen3 0:d0306c0cbee6 58
jeroen3 0:d0306c0cbee6 59 const uint16_t LUT_H2[32] = {
jeroen3 0:d0306c0cbee6 60 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
jeroen3 0:d0306c0cbee6 61 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
jeroen3 0:d0306c0cbee6 62 };
jeroen3 0:d0306c0cbee6 63
jeroen3 0:d0306c0cbee6 64 const uint16_t LUT_H3[32] = {
jeroen3 0:d0306c0cbee6 65 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
jeroen3 0:d0306c0cbee6 66 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1
jeroen3 0:d0306c0cbee6 67 };
jeroen3 0:d0306c0cbee6 68
jeroen3 0:d0306c0cbee6 69 const uint16_t LUT_H4[32] = {
jeroen3 0:d0306c0cbee6 70 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
jeroen3 0:d0306c0cbee6 71 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
jeroen3 0:d0306c0cbee6 72 };
jeroen3 0:d0306c0cbee6 73
jeroen3 0:d0306c0cbee6 74 #if (LUT_SINE == 1)
jeroen3 0:d0306c0cbee6 75 const uint16_t LUT_L1[32] = {
jeroen3 0:d0306c0cbee6 76 0 ,102 ,194 ,286 ,
jeroen3 0:d0306c0cbee6 77 363 ,424 ,471 ,501 ,
jeroen3 0:d0306c0cbee6 78 512 ,501 ,471 ,424 ,
jeroen3 0:d0306c0cbee6 79 363 ,286 ,194 ,102 ,
jeroen3 0:d0306c0cbee6 80 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 81 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 82 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 83 0 ,0 ,0 ,0
jeroen3 0:d0306c0cbee6 84 };
jeroen3 0:d0306c0cbee6 85
jeroen3 0:d0306c0cbee6 86 const uint16_t LUT_L2[32] = {
jeroen3 0:d0306c0cbee6 87 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 88 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 89 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 90 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 91 0 ,102 ,194,286 ,
jeroen3 0:d0306c0cbee6 92 363 ,424 ,471 ,501 ,
jeroen3 0:d0306c0cbee6 93 512 ,501 ,471 ,424 ,
jeroen3 0:d0306c0cbee6 94 363 ,286 ,194 ,102.
jeroen3 0:d0306c0cbee6 95 };
jeroen3 0:d0306c0cbee6 96
jeroen3 0:d0306c0cbee6 97 const uint16_t LUT_L3[32] = {
jeroen3 0:d0306c0cbee6 98 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 99 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 100 0 ,102 ,194 ,286 ,
jeroen3 0:d0306c0cbee6 101 363 ,424 ,471 ,501 ,
jeroen3 0:d0306c0cbee6 102 512 ,501 ,471 ,424 ,
jeroen3 0:d0306c0cbee6 103 363 ,286 ,194 ,102 ,
jeroen3 0:d0306c0cbee6 104 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 105 0 ,0 ,0 ,0
jeroen3 0:d0306c0cbee6 106 };
jeroen3 0:d0306c0cbee6 107
jeroen3 0:d0306c0cbee6 108 const uint16_t LUT_L4[32] = {
jeroen3 0:d0306c0cbee6 109 512 ,501,471 ,424 ,
jeroen3 0:d0306c0cbee6 110 363 ,286,194 ,102 ,
jeroen3 0:d0306c0cbee6 111 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 112 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 113 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 114 0 ,0 ,0 ,0 ,
jeroen3 0:d0306c0cbee6 115 0 ,102,194 ,286 ,
jeroen3 0:d0306c0cbee6 116 363 ,424,471 ,501
jeroen3 0:d0306c0cbee6 117 };
jeroen3 0:d0306c0cbee6 118 #endif // LUT_SINE
jeroen3 0:d0306c0cbee6 119 #if (LUT_TRIANGLE == 1)
jeroen3 0:d0306c0cbee6 120 const uint16_t LUT_L1[32] = {
jeroen3 0:d0306c0cbee6 121 0 ,
jeroen3 0:d0306c0cbee6 122 64 ,
jeroen3 0:d0306c0cbee6 123 128,
jeroen3 0:d0306c0cbee6 124 192,
jeroen3 0:d0306c0cbee6 125 256,
jeroen3 0:d0306c0cbee6 126 320,
jeroen3 0:d0306c0cbee6 127 384,
jeroen3 0:d0306c0cbee6 128 448,
jeroen3 0:d0306c0cbee6 129 512,
jeroen3 0:d0306c0cbee6 130 448,
jeroen3 0:d0306c0cbee6 131 384,
jeroen3 0:d0306c0cbee6 132 320,
jeroen3 0:d0306c0cbee6 133 256,
jeroen3 0:d0306c0cbee6 134 192,
jeroen3 0:d0306c0cbee6 135 128,
jeroen3 0:d0306c0cbee6 136 64 ,
jeroen3 0:d0306c0cbee6 137 0 ,
jeroen3 0:d0306c0cbee6 138 0 ,
jeroen3 0:d0306c0cbee6 139 0 ,
jeroen3 0:d0306c0cbee6 140 0 ,
jeroen3 0:d0306c0cbee6 141 0 ,
jeroen3 0:d0306c0cbee6 142 0 ,
jeroen3 0:d0306c0cbee6 143 0 ,
jeroen3 0:d0306c0cbee6 144 0 ,
jeroen3 0:d0306c0cbee6 145 0 ,
jeroen3 0:d0306c0cbee6 146 0 ,
jeroen3 0:d0306c0cbee6 147 0 ,
jeroen3 0:d0306c0cbee6 148 0 ,
jeroen3 0:d0306c0cbee6 149 0 ,
jeroen3 0:d0306c0cbee6 150 0 ,
jeroen3 0:d0306c0cbee6 151 0 ,
jeroen3 0:d0306c0cbee6 152 0
jeroen3 0:d0306c0cbee6 153 };
jeroen3 0:d0306c0cbee6 154
jeroen3 0:d0306c0cbee6 155 const uint16_t LUT_L2[32] = {
jeroen3 0:d0306c0cbee6 156 0 ,
jeroen3 0:d0306c0cbee6 157 0 ,
jeroen3 0:d0306c0cbee6 158 0 ,
jeroen3 0:d0306c0cbee6 159 0 ,
jeroen3 0:d0306c0cbee6 160 0 ,
jeroen3 0:d0306c0cbee6 161 0 ,
jeroen3 0:d0306c0cbee6 162 0 ,
jeroen3 0:d0306c0cbee6 163 0 ,
jeroen3 0:d0306c0cbee6 164 0 ,
jeroen3 0:d0306c0cbee6 165 0 ,
jeroen3 0:d0306c0cbee6 166 0 ,
jeroen3 0:d0306c0cbee6 167 0 ,
jeroen3 0:d0306c0cbee6 168 0 ,
jeroen3 0:d0306c0cbee6 169 0 ,
jeroen3 0:d0306c0cbee6 170 0 ,
jeroen3 0:d0306c0cbee6 171 0 ,
jeroen3 0:d0306c0cbee6 172 0 ,
jeroen3 0:d0306c0cbee6 173 64 ,
jeroen3 0:d0306c0cbee6 174 128,
jeroen3 0:d0306c0cbee6 175 192,
jeroen3 0:d0306c0cbee6 176 256,
jeroen3 0:d0306c0cbee6 177 320,
jeroen3 0:d0306c0cbee6 178 384,
jeroen3 0:d0306c0cbee6 179 448,
jeroen3 0:d0306c0cbee6 180 512,
jeroen3 0:d0306c0cbee6 181 448,
jeroen3 0:d0306c0cbee6 182 384,
jeroen3 0:d0306c0cbee6 183 320,
jeroen3 0:d0306c0cbee6 184 256,
jeroen3 0:d0306c0cbee6 185 192,
jeroen3 0:d0306c0cbee6 186 128,
jeroen3 0:d0306c0cbee6 187 64
jeroen3 0:d0306c0cbee6 188 };
jeroen3 0:d0306c0cbee6 189
jeroen3 0:d0306c0cbee6 190 const uint16_t LUT_L3[32] = {
jeroen3 0:d0306c0cbee6 191 0 ,
jeroen3 0:d0306c0cbee6 192 0 ,
jeroen3 0:d0306c0cbee6 193 0 ,
jeroen3 0:d0306c0cbee6 194 0 ,
jeroen3 0:d0306c0cbee6 195 0 ,
jeroen3 0:d0306c0cbee6 196 0 ,
jeroen3 0:d0306c0cbee6 197 0 ,
jeroen3 0:d0306c0cbee6 198 0 ,
jeroen3 0:d0306c0cbee6 199 0 ,
jeroen3 0:d0306c0cbee6 200 64 ,
jeroen3 0:d0306c0cbee6 201 128,
jeroen3 0:d0306c0cbee6 202 192,
jeroen3 0:d0306c0cbee6 203 256,
jeroen3 0:d0306c0cbee6 204 320,
jeroen3 0:d0306c0cbee6 205 384,
jeroen3 0:d0306c0cbee6 206 448,
jeroen3 0:d0306c0cbee6 207 512,
jeroen3 0:d0306c0cbee6 208 448,
jeroen3 0:d0306c0cbee6 209 384,
jeroen3 0:d0306c0cbee6 210 320,
jeroen3 0:d0306c0cbee6 211 256,
jeroen3 0:d0306c0cbee6 212 192,
jeroen3 0:d0306c0cbee6 213 128,
jeroen3 0:d0306c0cbee6 214 64 ,
jeroen3 0:d0306c0cbee6 215 0 ,
jeroen3 0:d0306c0cbee6 216 0 ,
jeroen3 0:d0306c0cbee6 217 0 ,
jeroen3 0:d0306c0cbee6 218 0 ,
jeroen3 0:d0306c0cbee6 219 0 ,
jeroen3 0:d0306c0cbee6 220 0 ,
jeroen3 0:d0306c0cbee6 221 0 ,
jeroen3 0:d0306c0cbee6 222 0
jeroen3 0:d0306c0cbee6 223 };
jeroen3 0:d0306c0cbee6 224
jeroen3 0:d0306c0cbee6 225 const uint16_t LUT_L4[32] = {
jeroen3 0:d0306c0cbee6 226 512,
jeroen3 0:d0306c0cbee6 227 448,
jeroen3 0:d0306c0cbee6 228 384,
jeroen3 0:d0306c0cbee6 229 320,
jeroen3 0:d0306c0cbee6 230 256,
jeroen3 0:d0306c0cbee6 231 192,
jeroen3 0:d0306c0cbee6 232 128,
jeroen3 0:d0306c0cbee6 233 64 ,
jeroen3 0:d0306c0cbee6 234 0 ,
jeroen3 0:d0306c0cbee6 235 0 ,
jeroen3 0:d0306c0cbee6 236 0 ,
jeroen3 0:d0306c0cbee6 237 0 ,
jeroen3 0:d0306c0cbee6 238 0 ,
jeroen3 0:d0306c0cbee6 239 0 ,
jeroen3 0:d0306c0cbee6 240 0 ,
jeroen3 0:d0306c0cbee6 241 0 ,
jeroen3 0:d0306c0cbee6 242 0 ,
jeroen3 0:d0306c0cbee6 243 0 ,
jeroen3 0:d0306c0cbee6 244 0 ,
jeroen3 0:d0306c0cbee6 245 0 ,
jeroen3 0:d0306c0cbee6 246 0 ,
jeroen3 0:d0306c0cbee6 247 0 ,
jeroen3 0:d0306c0cbee6 248 0 ,
jeroen3 0:d0306c0cbee6 249 0 ,
jeroen3 0:d0306c0cbee6 250 0 ,
jeroen3 0:d0306c0cbee6 251 64 ,
jeroen3 0:d0306c0cbee6 252 128,
jeroen3 0:d0306c0cbee6 253 192,
jeroen3 0:d0306c0cbee6 254 256,
jeroen3 0:d0306c0cbee6 255 320,
jeroen3 0:d0306c0cbee6 256 384,
jeroen3 0:d0306c0cbee6 257 448
jeroen3 0:d0306c0cbee6 258 };
jeroen3 0:d0306c0cbee6 259 #endif //LUT_TRIANGLE
jeroen3 0:d0306c0cbee6 260 /**
jeroen3 0:d0306c0cbee6 261 * @}
jeroen3 0:d0306c0cbee6 262 */
jeroen3 0:d0306c0cbee6 263 #endif //StepperMotorControl_H_
jeroen3 0:d0306c0cbee6 264 /**
jeroen3 0:d0306c0cbee6 265 *@}
jeroen3 0:d0306c0cbee6 266 */
jeroen3 0:d0306c0cbee6 267