Lab 6 code.

Dependencies:   mbed

Fork of WaG by GroupA

Committer:
spm71
Date:
Thu Mar 22 16:41:11 2018 +0000
Revision:
36:ad2b3d6f0e5a
Parent:
22:09dd6977576b
Child:
41:9b293b14b845
Started stepper functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spm71 18:0e281922212c 1 /******************************************************************************
spm71 18:0e281922212c 2 * EECS 397
spm71 18:0e281922212c 3 *
spm71 18:0e281922212c 4 * Assignment Name: Lab 5: WaG
spm71 18:0e281922212c 5 *
spm71 18:0e281922212c 6 * Authors: Sam Morrison and Phong Nguyen
spm71 18:0e281922212c 7 * File name: stepper.cpp
spm71 18:0e281922212c 8 * Purpose: Driver for stepper motor
spm71 18:0e281922212c 9 *
spm71 18:0e281922212c 10 * Created: 03/02/2018
spm71 22:09dd6977576b 11 * Last Modified: 03/08/2018
spm71 18:0e281922212c 12 *
spm71 18:0e281922212c 13 ******************************************************************************/
spm71 18:0e281922212c 14
spm71 18:0e281922212c 15 #include "mbed.h"
spm71 18:0e281922212c 16 #include "io_pins.h"
spm71 18:0e281922212c 17 #include "spi.h"
spm71 18:0e281922212c 18 #include "stepper.h"
spm71 18:0e281922212c 19
spm71 21:88f9f280931b 20 extern DigitalIn jog_ccw;
spm71 21:88f9f280931b 21 extern DigitalIn jog_cw;
spm71 36:ad2b3d6f0e5a 22 extern DigitalIn my_button;
spm71 36:ad2b3d6f0e5a 23 extern DigitalIn cal_button;
spm71 22:09dd6977576b 24 extern Serial pc;
spm71 20:d23bcd97f2c5 25
spm71 20:d23bcd97f2c5 26 int stp_cur_pos;
spm71 20:d23bcd97f2c5 27 int stp_sensor_pos[NUM_SENSORS + 1];
spm71 18:0e281922212c 28
spm71 18:0e281922212c 29 extern spi_cfg drv8806 {
spm71 18:0e281922212c 30 SPI_DRV8806_ID,
spm71 18:0e281922212c 31 STP_DRV8806_NCS,
spm71 20:d23bcd97f2c5 32 DRV8806_SPI_MODE,
spm71 20:d23bcd97f2c5 33 DRV8806_SPI_FREQ,
spm71 20:d23bcd97f2c5 34 DRV8806_SPI_NO_BITS,
spm71 18:0e281922212c 35 };
spm71 18:0e281922212c 36
spm71 18:0e281922212c 37 /*
spm71 18:0e281922212c 38 * void stp_init();
spm71 18:0e281922212c 39 * Description: initializes stepper values to unkown
spm71 18:0e281922212c 40 *
spm71 18:0e281922212c 41 * Inputs:
spm71 18:0e281922212c 42 * Parameters: void
spm71 18:0e281922212c 43 * Globals:
spm71 18:0e281922212c 44 *
spm71 18:0e281922212c 45 * Outputs:
spm71 18:0e281922212c 46 * Returns: void
spm71 18:0e281922212c 47 */
spm71 18:0e281922212c 48 void stp_init() {
spm71 20:d23bcd97f2c5 49 stp_cur_pos = STP_POS_UNKN;
spm71 18:0e281922212c 50 for (int i = 1; i <= NUM_SENSORS; i++) {
spm71 18:0e281922212c 51 stp_sensor_pos[i] = STP_POS_UNKN;
spm71 18:0e281922212c 52 }
spm71 18:0e281922212c 53 }
spm71 18:0e281922212c 54
spm71 18:0e281922212c 55 /*
spm71 18:0e281922212c 56 * void stp_step(int direction);
spm71 18:0e281922212c 57 * Description: turns the stepper motor clockwise or counter-clockwise
spm71 18:0e281922212c 58 *
spm71 18:0e281922212c 59 * Inputs:
spm71 18:0e281922212c 60 * Parameters:
spm71 18:0e281922212c 61 * int direction
spm71 18:0e281922212c 62 * Globals:
spm71 18:0e281922212c 63 *
spm71 18:0e281922212c 64 * Outputs:
spm71 18:0e281922212c 65 * Returns: void
spm71 18:0e281922212c 66 */
spm71 18:0e281922212c 67 void stp_step(int direction) {
spm71 20:d23bcd97f2c5 68 jog_cw.mode(PullUp);
spm71 20:d23bcd97f2c5 69 jog_ccw.mode(PullUp);
spm71 20:d23bcd97f2c5 70
spm71 20:d23bcd97f2c5 71 //static int cur_pos = stp_cur_pos;
spm71 20:d23bcd97f2c5 72 static int turn[4] = {0x03, 0x06, 0x0c, 0x09};
spm71 20:d23bcd97f2c5 73 if (direction == STP_CW) {
spm71 22:09dd6977576b 74 for (int i = 0; i < 4; i++) {
spm71 22:09dd6977576b 75 wait(0.002);
spm71 22:09dd6977576b 76 //pc.printf("i = %d\n", i);
spm71 20:d23bcd97f2c5 77 spi_send(drv8806, turn[i]);
spm71 22:09dd6977576b 78 }
spm71 20:d23bcd97f2c5 79 }
spm71 20:d23bcd97f2c5 80 else if (direction == STP_CCW) {
spm71 22:09dd6977576b 81 for (int i = 3; i >= 0; i--) {
spm71 22:09dd6977576b 82 wait(0.002);
spm71 22:09dd6977576b 83 //pc.printf("i = %d\n", i);
spm71 20:d23bcd97f2c5 84 spi_send(drv8806, turn[i]);
spm71 22:09dd6977576b 85 }
spm71 20:d23bcd97f2c5 86 }
spm71 36:ad2b3d6f0e5a 87 }
spm71 36:ad2b3d6f0e5a 88
spm71 36:ad2b3d6f0e5a 89 /*
spm71 36:ad2b3d6f0e5a 90 * void step_test();
spm71 36:ad2b3d6f0e5a 91 * Description: tests the stepper motor
spm71 36:ad2b3d6f0e5a 92 *
spm71 36:ad2b3d6f0e5a 93 * Inputs:
spm71 36:ad2b3d6f0e5a 94 * Parameters:
spm71 36:ad2b3d6f0e5a 95 * Globals:
spm71 36:ad2b3d6f0e5a 96 *
spm71 36:ad2b3d6f0e5a 97 * Outputs:
spm71 36:ad2b3d6f0e5a 98 * Returns: void
spm71 36:ad2b3d6f0e5a 99 */
spm71 36:ad2b3d6f0e5a 100 void step_test() {
spm71 36:ad2b3d6f0e5a 101 while(1) {
spm71 36:ad2b3d6f0e5a 102 if (jog_ccw == 0) {
spm71 36:ad2b3d6f0e5a 103 stp_step(STP_CCW);
spm71 36:ad2b3d6f0e5a 104 }
spm71 36:ad2b3d6f0e5a 105 if (jog_cw == 0) {
spm71 36:ad2b3d6f0e5a 106 stp_step(STP_CW);
spm71 36:ad2b3d6f0e5a 107 }
spm71 36:ad2b3d6f0e5a 108 if (cal_button == 0) {
spm71 36:ad2b3d6f0e5a 109 stp_find_home();
spm71 36:ad2b3d6f0e5a 110 }
spm71 36:ad2b3d6f0e5a 111 }
spm71 36:ad2b3d6f0e5a 112 }
spm71 36:ad2b3d6f0e5a 113
spm71 36:ad2b3d6f0e5a 114 void stp_find_home() {
spm71 18:0e281922212c 115
spm71 18:0e281922212c 116 }