Telescope Control Library

Dependents:   PushToGo-F429

Committer:
caoyu@caoyuan9642-desktop.MIT.EDU
Date:
Mon Sep 24 19:36:48 2018 -0400
Revision:
19:fd854309cb4c
Parent:
0:6cb2eaf8b133
Fix bug in nudging with small speeds mentioned in the last commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caoyuan9642 0:6cb2eaf8b133 1 /*
caoyuan9642 0:6cb2eaf8b133 2 * AMIS30543StepperDriver.cpp
caoyuan9642 0:6cb2eaf8b133 3 *
caoyuan9642 0:6cb2eaf8b133 4 * Created on: 2018��2��8��
caoyuan9642 0:6cb2eaf8b133 5 * Author: caoyuan9642
caoyuan9642 0:6cb2eaf8b133 6 */
caoyuan9642 0:6cb2eaf8b133 7
caoyuan9642 0:6cb2eaf8b133 8 #include <AMIS30543StepperDriver.h>
caoyuan9642 0:6cb2eaf8b133 9 #include "mbed.h"
caoyuan9642 0:6cb2eaf8b133 10 #include "pinmap.h"
caoyuan9642 0:6cb2eaf8b133 11 AMIS30543StepperDriver::AMIS30543StepperDriver(SPI *spi, PinName cs,
caoyuan9642 0:6cb2eaf8b133 12 PinName step, PinName dir, PinName err, bool invert) :
caoyuan9642 0:6cb2eaf8b133 13 StepperMotor(invert), spi(spi), cs(cs, 1), step(step), dir(dir), err(
caoyuan9642 0:6cb2eaf8b133 14 err), status(IDLE), inc(1), stepCount(0)
caoyuan9642 0:6cb2eaf8b133 15 {
caoyuan9642 0:6cb2eaf8b133 16 if (dir != NC)
caoyuan9642 0:6cb2eaf8b133 17 {
caoyuan9642 0:6cb2eaf8b133 18 useDIR = true;
caoyuan9642 0:6cb2eaf8b133 19 this->dir = 0; /*Forward*/
caoyuan9642 0:6cb2eaf8b133 20 }
caoyuan9642 0:6cb2eaf8b133 21 else
caoyuan9642 0:6cb2eaf8b133 22 useDIR = false;
caoyuan9642 0:6cb2eaf8b133 23 if (err != NC)
caoyuan9642 0:6cb2eaf8b133 24 {
caoyuan9642 0:6cb2eaf8b133 25 useERR = true;
caoyuan9642 0:6cb2eaf8b133 26 }
caoyuan9642 0:6cb2eaf8b133 27 else
caoyuan9642 0:6cb2eaf8b133 28 useERR = false;
caoyuan9642 0:6cb2eaf8b133 29
caoyuan9642 0:6cb2eaf8b133 30 spi->frequency(400000);
caoyuan9642 0:6cb2eaf8b133 31
caoyuan9642 0:6cb2eaf8b133 32 /*CPOL=0, CPHA=0*/
caoyuan9642 0:6cb2eaf8b133 33 spi->format(8, 0);
caoyuan9642 0:6cb2eaf8b133 34
caoyuan9642 0:6cb2eaf8b133 35 wait_us(10);
caoyuan9642 0:6cb2eaf8b133 36
caoyuan9642 0:6cb2eaf8b133 37 /*Perform initialization*/
caoyuan9642 0:6cb2eaf8b133 38 writeReg(CR0, 0x00); // 1/32 step
caoyuan9642 0:6cb2eaf8b133 39 writeReg(CR1, 0x00); //
caoyuan9642 0:6cb2eaf8b133 40 writeReg(CR2, 0x80); // MOTEN = 1
caoyuan9642 0:6cb2eaf8b133 41 writeReg(CR3, 0x00); // 1/32 step
caoyuan9642 0:6cb2eaf8b133 42
caoyuan9642 0:6cb2eaf8b133 43 microstep = 32;
caoyuan9642 0:6cb2eaf8b133 44 }
caoyuan9642 0:6cb2eaf8b133 45
caoyuan9642 0:6cb2eaf8b133 46 AMIS30543StepperDriver::~AMIS30543StepperDriver()
caoyuan9642 0:6cb2eaf8b133 47 {
caoyuan9642 0:6cb2eaf8b133 48 printf("AMIS Shutdown\n");
caoyuan9642 0:6cb2eaf8b133 49 writeReg(CR2, 0x00); // MOTEN = 0, stop driving the motor
caoyuan9642 0:6cb2eaf8b133 50 writeReg(CR2, 0x00); // MOTEN = 0, stop driving the motor
caoyuan9642 0:6cb2eaf8b133 51 writeReg(CR2, 0x00); // MOTEN = 0, stop driving the motor
caoyuan9642 0:6cb2eaf8b133 52 }
caoyuan9642 0:6cb2eaf8b133 53
caoyuan9642 0:6cb2eaf8b133 54 void AMIS30543StepperDriver::writeReg(regaddr_t addr, uint8_t data)
caoyuan9642 0:6cb2eaf8b133 55 {
caoyuan9642 0:6cb2eaf8b133 56 assertCS();
caoyuan9642 0:6cb2eaf8b133 57 wait_us(3);
caoyuan9642 0:6cb2eaf8b133 58 txbuf[0] = (char) (addr & 0x1F) | 0x80;
caoyuan9642 0:6cb2eaf8b133 59 txbuf[1] = data;
caoyuan9642 0:6cb2eaf8b133 60 spi->write(txbuf, 2, NULL, 0);
caoyuan9642 0:6cb2eaf8b133 61 wait_us(3);
caoyuan9642 0:6cb2eaf8b133 62 deassertCS();
caoyuan9642 0:6cb2eaf8b133 63 wait_us(6);
caoyuan9642 0:6cb2eaf8b133 64 }
caoyuan9642 0:6cb2eaf8b133 65
caoyuan9642 0:6cb2eaf8b133 66 uint8_t AMIS30543StepperDriver::readReg(regaddr_t addr)
caoyuan9642 0:6cb2eaf8b133 67 {
caoyuan9642 0:6cb2eaf8b133 68 assertCS();
caoyuan9642 0:6cb2eaf8b133 69 wait_us(3);
caoyuan9642 0:6cb2eaf8b133 70 txbuf[0] = (char) (addr & 0x1F);
caoyuan9642 0:6cb2eaf8b133 71 spi->write(txbuf, 2, rxbuf, 2);
caoyuan9642 0:6cb2eaf8b133 72 wait_us(3);
caoyuan9642 0:6cb2eaf8b133 73 deassertCS();
caoyuan9642 0:6cb2eaf8b133 74 wait_us(6);
caoyuan9642 0:6cb2eaf8b133 75 return rxbuf[1];
caoyuan9642 0:6cb2eaf8b133 76 }
caoyuan9642 0:6cb2eaf8b133 77
caoyuan9642 0:6cb2eaf8b133 78 void AMIS30543StepperDriver::start(stepdir_t dir)
caoyuan9642 0:6cb2eaf8b133 79 {
caoyuan9642 0:6cb2eaf8b133 80 /*Set Direction*/
caoyuan9642 0:6cb2eaf8b133 81 if (status == IDLE)
caoyuan9642 0:6cb2eaf8b133 82 {
caoyuan9642 0:6cb2eaf8b133 83 if (useDIR)
caoyuan9642 0:6cb2eaf8b133 84 {
caoyuan9642 0:6cb2eaf8b133 85 /*Hard switch*/
caoyuan9642 0:6cb2eaf8b133 86 if ((dir == STEP_FORWARD) ^ invert)
caoyuan9642 0:6cb2eaf8b133 87 this->dir = 0;
caoyuan9642 0:6cb2eaf8b133 88 else
caoyuan9642 0:6cb2eaf8b133 89 this->dir = 1;
caoyuan9642 0:6cb2eaf8b133 90 }
caoyuan9642 0:6cb2eaf8b133 91 else
caoyuan9642 0:6cb2eaf8b133 92 {
caoyuan9642 0:6cb2eaf8b133 93 /*Soft switch*/
caoyuan9642 0:6cb2eaf8b133 94 uint8_t cr1 = readReg(CR1) & 0x7F;
caoyuan9642 0:6cb2eaf8b133 95 if ((dir == STEP_FORWARD) ^ invert)
caoyuan9642 0:6cb2eaf8b133 96 cr1 |= 0x00;
caoyuan9642 0:6cb2eaf8b133 97 else
caoyuan9642 0:6cb2eaf8b133 98 cr1 |= 0x80;
caoyuan9642 0:6cb2eaf8b133 99 writeReg(CR1, cr1);
caoyuan9642 0:6cb2eaf8b133 100 }
caoyuan9642 0:6cb2eaf8b133 101
caoyuan9642 0:6cb2eaf8b133 102 inc = (dir == STEP_FORWARD) ? 1 : -1;
caoyuan9642 0:6cb2eaf8b133 103
caoyuan9642 0:6cb2eaf8b133 104 // Start stepping
caoyuan9642 0:6cb2eaf8b133 105 step.start();
caoyuan9642 0:6cb2eaf8b133 106 step.resetCount();
caoyuan9642 0:6cb2eaf8b133 107 status = STEPPING;
caoyuan9642 0:6cb2eaf8b133 108 }
caoyuan9642 0:6cb2eaf8b133 109 }
caoyuan9642 0:6cb2eaf8b133 110
caoyuan9642 0:6cb2eaf8b133 111 void AMIS30543StepperDriver::stop()
caoyuan9642 0:6cb2eaf8b133 112 {
caoyuan9642 0:6cb2eaf8b133 113 if (status == STEPPING)
caoyuan9642 0:6cb2eaf8b133 114 {
caoyuan9642 0:6cb2eaf8b133 115 status = IDLE;
caoyuan9642 0:6cb2eaf8b133 116 step.stop();
caoyuan9642 0:6cb2eaf8b133 117 stepCount += ((double) step.getCount()) * inc / microstep; // the stepCount should be divided by microstep
caoyuan9642 0:6cb2eaf8b133 118 }
caoyuan9642 0:6cb2eaf8b133 119 }
caoyuan9642 0:6cb2eaf8b133 120
caoyuan9642 0:6cb2eaf8b133 121 double AMIS30543StepperDriver::setFrequency(double frequency)
caoyuan9642 0:6cb2eaf8b133 122 {
caoyuan9642 0:6cb2eaf8b133 123 return step.setFrequency(frequency * microstep) / microstep; //Use the microstepping frequency
caoyuan9642 0:6cb2eaf8b133 124
caoyuan9642 0:6cb2eaf8b133 125 }
caoyuan9642 0:6cb2eaf8b133 126
caoyuan9642 0:6cb2eaf8b133 127 double AMIS30543StepperDriver::getStepCount()
caoyuan9642 0:6cb2eaf8b133 128 {
caoyuan9642 0:6cb2eaf8b133 129 if (status == IDLE)
caoyuan9642 0:6cb2eaf8b133 130 return stepCount;
caoyuan9642 0:6cb2eaf8b133 131 else
caoyuan9642 0:6cb2eaf8b133 132 return stepCount + ((double) step.getCount()) * inc / microstep; // the step count should be divided by microstep
caoyuan9642 0:6cb2eaf8b133 133 }
caoyuan9642 0:6cb2eaf8b133 134
caoyuan9642 0:6cb2eaf8b133 135 void AMIS30543StepperDriver::setMicroStep(int microstep)
caoyuan9642 0:6cb2eaf8b133 136 {
caoyuan9642 0:6cb2eaf8b133 137 uint8_t cr0 = readReg(CR0) & ~(0xE0);
caoyuan9642 0:6cb2eaf8b133 138
caoyuan9642 0:6cb2eaf8b133 139 switch (microstep)
caoyuan9642 0:6cb2eaf8b133 140 {
caoyuan9642 0:6cb2eaf8b133 141 case 1:
caoyuan9642 0:6cb2eaf8b133 142 writeReg(CR3, 0x03); // Compensated full-step
caoyuan9642 0:6cb2eaf8b133 143 writeReg(CR0, cr0 | (0x00 << 5)); // 1/32-step
caoyuan9642 0:6cb2eaf8b133 144 break;
caoyuan9642 0:6cb2eaf8b133 145 case 2:
caoyuan9642 0:6cb2eaf8b133 146 writeReg(CR3, 0x00);
caoyuan9642 0:6cb2eaf8b133 147 writeReg(CR0, cr0 | (0x04 << 5)); // Compensated half-step
caoyuan9642 0:6cb2eaf8b133 148 break;
caoyuan9642 0:6cb2eaf8b133 149 case 4:
caoyuan9642 0:6cb2eaf8b133 150 writeReg(CR3, 0x00);
caoyuan9642 0:6cb2eaf8b133 151 writeReg(CR0, cr0 | (0x03 << 5)); // 1/4-step
caoyuan9642 0:6cb2eaf8b133 152 break;
caoyuan9642 0:6cb2eaf8b133 153 case 8:
caoyuan9642 0:6cb2eaf8b133 154 writeReg(CR3, 0x00);
caoyuan9642 0:6cb2eaf8b133 155 writeReg(CR0, cr0 | (0x02 << 5)); // 1/8-step
caoyuan9642 0:6cb2eaf8b133 156 break;
caoyuan9642 0:6cb2eaf8b133 157 case 16:
caoyuan9642 0:6cb2eaf8b133 158 writeReg(CR3, 0x00);
caoyuan9642 0:6cb2eaf8b133 159 writeReg(CR0, cr0 | (0x01 << 5)); // 1/16-step
caoyuan9642 0:6cb2eaf8b133 160 break;
caoyuan9642 0:6cb2eaf8b133 161 case 32:
caoyuan9642 0:6cb2eaf8b133 162 writeReg(CR3, 0x00);
caoyuan9642 0:6cb2eaf8b133 163 writeReg(CR0, cr0 | (0x00 << 5)); // 1/32-step
caoyuan9642 0:6cb2eaf8b133 164 break;
caoyuan9642 0:6cb2eaf8b133 165 case 64:
caoyuan9642 0:6cb2eaf8b133 166 writeReg(CR3, 0x02); // 1/64-step
caoyuan9642 0:6cb2eaf8b133 167 writeReg(CR0, cr0 | (0x00 << 5)); // 1/32-step
caoyuan9642 0:6cb2eaf8b133 168 break;
caoyuan9642 0:6cb2eaf8b133 169 case 128:
caoyuan9642 0:6cb2eaf8b133 170 writeReg(CR3, 0x01);
caoyuan9642 0:6cb2eaf8b133 171 writeReg(CR0, cr0 | (0x00 << 5)); // 1/32-step
caoyuan9642 0:6cb2eaf8b133 172 break;
caoyuan9642 0:6cb2eaf8b133 173 default:
caoyuan9642 0:6cb2eaf8b133 174 debug("Error: microsteps must be a power of 2\n");
caoyuan9642 0:6cb2eaf8b133 175 return;
caoyuan9642 0:6cb2eaf8b133 176 }
caoyuan9642 0:6cb2eaf8b133 177
caoyuan9642 0:6cb2eaf8b133 178 // Update the microstep variable only if the value is valid
caoyuan9642 0:6cb2eaf8b133 179 this->microstep = microstep;
caoyuan9642 0:6cb2eaf8b133 180 }
caoyuan9642 0:6cb2eaf8b133 181
caoyuan9642 0:6cb2eaf8b133 182 void AMIS30543StepperDriver::setCurrent(double current)
caoyuan9642 0:6cb2eaf8b133 183 {
caoyuan9642 0:6cb2eaf8b133 184 uint8_t reg_cur = 0;
caoyuan9642 0:6cb2eaf8b133 185 uint8_t cr0 = readReg(CR0) & ~(0x1F);
caoyuan9642 0:6cb2eaf8b133 186
caoyuan9642 0:6cb2eaf8b133 187 if (current <= 0.132)
caoyuan9642 0:6cb2eaf8b133 188 {
caoyuan9642 0:6cb2eaf8b133 189 reg_cur = 0;
caoyuan9642 0:6cb2eaf8b133 190 }
caoyuan9642 0:6cb2eaf8b133 191 else if (current <= 0.245)
caoyuan9642 0:6cb2eaf8b133 192 {
caoyuan9642 0:6cb2eaf8b133 193 reg_cur = 1;
caoyuan9642 0:6cb2eaf8b133 194 }
caoyuan9642 0:6cb2eaf8b133 195 else if (current <= 0.355)
caoyuan9642 0:6cb2eaf8b133 196 {
caoyuan9642 0:6cb2eaf8b133 197 reg_cur = 2;
caoyuan9642 0:6cb2eaf8b133 198 }
caoyuan9642 0:6cb2eaf8b133 199 else if (current <= 0.395)
caoyuan9642 0:6cb2eaf8b133 200 {
caoyuan9642 0:6cb2eaf8b133 201 reg_cur = 3;
caoyuan9642 0:6cb2eaf8b133 202 }
caoyuan9642 0:6cb2eaf8b133 203 else if (current <= 0.445)
caoyuan9642 0:6cb2eaf8b133 204 {
caoyuan9642 0:6cb2eaf8b133 205 reg_cur = 4;
caoyuan9642 0:6cb2eaf8b133 206 }
caoyuan9642 0:6cb2eaf8b133 207 else if (current <= 0.485)
caoyuan9642 0:6cb2eaf8b133 208 {
caoyuan9642 0:6cb2eaf8b133 209 reg_cur = 5;
caoyuan9642 0:6cb2eaf8b133 210 }
caoyuan9642 0:6cb2eaf8b133 211 else if (current <= 0.540)
caoyuan9642 0:6cb2eaf8b133 212 {
caoyuan9642 0:6cb2eaf8b133 213 reg_cur = 6;
caoyuan9642 0:6cb2eaf8b133 214 }
caoyuan9642 0:6cb2eaf8b133 215 else if (current <= 0.585)
caoyuan9642 0:6cb2eaf8b133 216 {
caoyuan9642 0:6cb2eaf8b133 217 reg_cur = 7;
caoyuan9642 0:6cb2eaf8b133 218 }
caoyuan9642 0:6cb2eaf8b133 219 else if (current <= 0.640)
caoyuan9642 0:6cb2eaf8b133 220 {
caoyuan9642 0:6cb2eaf8b133 221 reg_cur = 8;
caoyuan9642 0:6cb2eaf8b133 222 }
caoyuan9642 0:6cb2eaf8b133 223 else if (current <= 0.715)
caoyuan9642 0:6cb2eaf8b133 224 {
caoyuan9642 0:6cb2eaf8b133 225 reg_cur = 9;
caoyuan9642 0:6cb2eaf8b133 226 }
caoyuan9642 0:6cb2eaf8b133 227 else if (current <= 0.780)
caoyuan9642 0:6cb2eaf8b133 228 {
caoyuan9642 0:6cb2eaf8b133 229 reg_cur = 10;
caoyuan9642 0:6cb2eaf8b133 230 }
caoyuan9642 0:6cb2eaf8b133 231 else if (current <= 0.870)
caoyuan9642 0:6cb2eaf8b133 232 {
caoyuan9642 0:6cb2eaf8b133 233 reg_cur = 11;
caoyuan9642 0:6cb2eaf8b133 234 }
caoyuan9642 0:6cb2eaf8b133 235 else if (current <= 0.955)
caoyuan9642 0:6cb2eaf8b133 236 {
caoyuan9642 0:6cb2eaf8b133 237 reg_cur = 12;
caoyuan9642 0:6cb2eaf8b133 238 }
caoyuan9642 0:6cb2eaf8b133 239 else if (current <= 1.060)
caoyuan9642 0:6cb2eaf8b133 240 {
caoyuan9642 0:6cb2eaf8b133 241 reg_cur = 13;
caoyuan9642 0:6cb2eaf8b133 242 }
caoyuan9642 0:6cb2eaf8b133 243 else if (current <= 1.150)
caoyuan9642 0:6cb2eaf8b133 244 {
caoyuan9642 0:6cb2eaf8b133 245 reg_cur = 14;
caoyuan9642 0:6cb2eaf8b133 246 }
caoyuan9642 0:6cb2eaf8b133 247 else if (current <= 1.260)
caoyuan9642 0:6cb2eaf8b133 248 {
caoyuan9642 0:6cb2eaf8b133 249 reg_cur = 15;
caoyuan9642 0:6cb2eaf8b133 250 }
caoyuan9642 0:6cb2eaf8b133 251 else if (current <= 1.405)
caoyuan9642 0:6cb2eaf8b133 252 {
caoyuan9642 0:6cb2eaf8b133 253 reg_cur = 16;
caoyuan9642 0:6cb2eaf8b133 254 }
caoyuan9642 0:6cb2eaf8b133 255 else if (current <= 1.520)
caoyuan9642 0:6cb2eaf8b133 256 {
caoyuan9642 0:6cb2eaf8b133 257 reg_cur = 17;
caoyuan9642 0:6cb2eaf8b133 258 }
caoyuan9642 0:6cb2eaf8b133 259 else if (current <= 1.695)
caoyuan9642 0:6cb2eaf8b133 260 {
caoyuan9642 0:6cb2eaf8b133 261 reg_cur = 18;
caoyuan9642 0:6cb2eaf8b133 262 }
caoyuan9642 0:6cb2eaf8b133 263 else if (current <= 1.820)
caoyuan9642 0:6cb2eaf8b133 264 {
caoyuan9642 0:6cb2eaf8b133 265 reg_cur = 19;
caoyuan9642 0:6cb2eaf8b133 266 }
caoyuan9642 0:6cb2eaf8b133 267 else if (current <= 2.070)
caoyuan9642 0:6cb2eaf8b133 268 {
caoyuan9642 0:6cb2eaf8b133 269 reg_cur = 20;
caoyuan9642 0:6cb2eaf8b133 270 }
caoyuan9642 0:6cb2eaf8b133 271 else if (current <= 2.240)
caoyuan9642 0:6cb2eaf8b133 272 {
caoyuan9642 0:6cb2eaf8b133 273 reg_cur = 21;
caoyuan9642 0:6cb2eaf8b133 274 }
caoyuan9642 0:6cb2eaf8b133 275 else if (current <= 2.440)
caoyuan9642 0:6cb2eaf8b133 276 {
caoyuan9642 0:6cb2eaf8b133 277 reg_cur = 22;
caoyuan9642 0:6cb2eaf8b133 278 }
caoyuan9642 0:6cb2eaf8b133 279 else if (current <= 2.700)
caoyuan9642 0:6cb2eaf8b133 280 {
caoyuan9642 0:6cb2eaf8b133 281 reg_cur = 23;
caoyuan9642 0:6cb2eaf8b133 282 }
caoyuan9642 0:6cb2eaf8b133 283 else if (current <= 2.845)
caoyuan9642 0:6cb2eaf8b133 284 {
caoyuan9642 0:6cb2eaf8b133 285 reg_cur = 24;
caoyuan9642 0:6cb2eaf8b133 286 }
caoyuan9642 0:6cb2eaf8b133 287 else if (current <= 3.000)
caoyuan9642 0:6cb2eaf8b133 288 {
caoyuan9642 0:6cb2eaf8b133 289 reg_cur = 25;
caoyuan9642 0:6cb2eaf8b133 290 }
caoyuan9642 0:6cb2eaf8b133 291 else
caoyuan9642 0:6cb2eaf8b133 292 {
caoyuan9642 0:6cb2eaf8b133 293 debug("Error: maximum current supported is 3.0A/phase\n");
caoyuan9642 0:6cb2eaf8b133 294 return;
caoyuan9642 0:6cb2eaf8b133 295 }
caoyuan9642 0:6cb2eaf8b133 296 writeReg(CR0, cr0 | reg_cur);
caoyuan9642 0:6cb2eaf8b133 297 }
caoyuan9642 0:6cb2eaf8b133 298
caoyuan9642 0:6cb2eaf8b133 299 inline void AMIS30543StepperDriver::assertCS()
caoyuan9642 0:6cb2eaf8b133 300 {
caoyuan9642 0:6cb2eaf8b133 301 cs = 0;
caoyuan9642 0:6cb2eaf8b133 302 }
caoyuan9642 0:6cb2eaf8b133 303
caoyuan9642 0:6cb2eaf8b133 304 inline void AMIS30543StepperDriver::deassertCS()
caoyuan9642 0:6cb2eaf8b133 305 {
caoyuan9642 0:6cb2eaf8b133 306 cs = 1;
caoyuan9642 0:6cb2eaf8b133 307 }
caoyuan9642 0:6cb2eaf8b133 308
caoyuan9642 0:6cb2eaf8b133 309 void AMIS30543StepperDriver::poweron()
caoyuan9642 0:6cb2eaf8b133 310 {
caoyuan9642 0:6cb2eaf8b133 311 writeReg(CR2, 0x80); // MOTEN = 80, start driving the motor
caoyuan9642 0:6cb2eaf8b133 312 writeReg(CR2, 0x80); // MOTEN = 80, start driving the motor
caoyuan9642 0:6cb2eaf8b133 313 writeReg(CR2, 0x80); // MOTEN = 80, start driving the motor
caoyuan9642 0:6cb2eaf8b133 314 }
caoyuan9642 0:6cb2eaf8b133 315
caoyuan9642 0:6cb2eaf8b133 316 void AMIS30543StepperDriver::poweroff()
caoyuan9642 0:6cb2eaf8b133 317 {
caoyuan9642 0:6cb2eaf8b133 318 writeReg(CR2, 0x00); // MOTEN = 0, stop driving the motor
caoyuan9642 0:6cb2eaf8b133 319 writeReg(CR2, 0x00); // MOTEN = 0, stop driving the motor
caoyuan9642 0:6cb2eaf8b133 320 writeReg(CR2, 0x00); // MOTEN = 0, stop driving the motor
caoyuan9642 0:6cb2eaf8b133 321 }
caoyuan9642 0:6cb2eaf8b133 322