Update
Dependencies: mbed mbed-rtos X_NUCLEO_IHM02A1
main.cpp@27:23bd03a6a6f6, 2019-04-07 (annotated)
- Committer:
- scherfa2
- Date:
- Sun Apr 07 18:31:29 2019 +0000
- Revision:
- 27:23bd03a6a6f6
- Parent:
- 26:caec5f51abe8
- Child:
- 30:e464b2bb2376
OK
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Davidroid | 0:5148e9486cf2 | 1 | /** |
Davidroid | 0:5148e9486cf2 | 2 | ****************************************************************************** |
Davidroid | 0:5148e9486cf2 | 3 | * @file main.cpp |
scherfa2 | 27:23bd03a6a6f6 | 4 | * @author Fabian Scherrer |
Davidroid | 0:5148e9486cf2 | 5 | * @version V1.0.0 |
scherfa2 | 27:23bd03a6a6f6 | 6 | * @date April 7th, 2019 |
scherfa2 | 27:23bd03a6a6f6 | 7 | * @brief |
Davidroid | 0:5148e9486cf2 | 8 | ****************************************************************************** |
Davidroid | 0:5148e9486cf2 | 9 | * @attention |
scherfa2 | 27:23bd03a6a6f6 | 10 | * Verwendete I/O's: Input: |
scherfa2 | 27:23bd03a6a6f6 | 11 | * PA9 (InputKontrollmodul Pin von Kontroll-Modul)(CN5-1) |
scherfa2 | 27:23bd03a6a6f6 | 12 | * |
scherfa2 | 27:23bd03a6a6f6 | 13 | * Output: |
scherfa2 | 27:23bd03a6a6f6 | 14 | * PA10 (D2) (Select Steppmotor Treiber2) |
scherfa2 | 27:23bd03a6a6f6 | 15 | * PA7 (D11) (mosi Steppmotor Treiber1) |
scherfa2 | 27:23bd03a6a6f6 | 16 | * PA6 (D12) (miso Steppmotor Treiber1) |
scherfa2 | 27:23bd03a6a6f6 | 17 | * PA4 (A2) (Select Steppmotor Treiber1) |
Davidroid | 0:5148e9486cf2 | 18 | * |
scherfa2 | 27:23bd03a6a6f6 | 19 | * PB15 (mosi Steppmotor Treiber2) |
scherfa2 | 27:23bd03a6a6f6 | 20 | * PB14 (miso Steppmotor Treiber2) |
scherfa2 | 27:23bd03a6a6f6 | 21 | * PB13 (slk Steppmotor Treiber2) |
scherfa2 | 27:23bd03a6a6f6 | 22 | * PB6 (D10)(pwm_io)(CN5-3) |
scherfa2 | 27:23bd03a6a6f6 | 23 | * PB5 (D4)(Standby_reset Steppmotor) |
scherfa2 | 27:23bd03a6a6f6 | 24 | * PB4 (D5)(pwm_io2)(CN9-6) |
scherfa2 | 27:23bd03a6a6f6 | 25 | * PB3 (D3)(Select Steppmotor Treiber1) |
scherfa2 | 27:23bd03a6a6f6 | 26 | |
scherfa2 | 27:23bd03a6a6f6 | 27 | * PC1 (A4)(Flag_irq Steppmotor) |
scherfa2 | 27:23bd03a6a6f6 | 28 | * PC0 (A5)(Busy_irq Steppmotor) |
scherfa2 | 27:23bd03a6a6f6 | 29 | ******************************************************************************/ |
scherfa2 | 27:23bd03a6a6f6 | 30 | |
Davidroid | 0:5148e9486cf2 | 31 | /* Includes ------------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 32 | |
Davidroid | 0:5148e9486cf2 | 33 | /* mbed specific header files. */ |
Davidroid | 0:5148e9486cf2 | 34 | #include "mbed.h" |
scherfa2 | 27:23bd03a6a6f6 | 35 | #include "main.h" |
scherfa2 | 27:23bd03a6a6f6 | 36 | #include "PWM.h" |
scherfa2 | 27:23bd03a6a6f6 | 37 | #include "ST_SOLO.h" |
scherfa2 | 27:23bd03a6a6f6 | 38 | #include "ST_DUO.h" |
Davidroid | 0:5148e9486cf2 | 39 | |
Davidroid | 0:5148e9486cf2 | 40 | /* Helper header files. */ |
Davidroid | 0:5148e9486cf2 | 41 | #include "DevSPI.h" |
Davidroid | 0:5148e9486cf2 | 42 | |
Davidroid | 0:5148e9486cf2 | 43 | /* Expansion Board specific header files. */ |
Davidroid | 26:caec5f51abe8 | 44 | #include "XNucleoIHM02A1.h" |
Davidroid | 0:5148e9486cf2 | 45 | |
Davidroid | 0:5148e9486cf2 | 46 | |
Davidroid | 0:5148e9486cf2 | 47 | /* Definitions ---------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 48 | |
Davidroid | 0:5148e9486cf2 | 49 | /* Number of movements per revolution. */ |
Davidroid | 0:5148e9486cf2 | 50 | #define MPR_1 4 |
Davidroid | 1:9f1974b0960d | 51 | |
Davidroid | 1:9f1974b0960d | 52 | /* Number of steps. */ |
Davidroid | 18:591a007effc2 | 53 | #define STEPS_1 (400 * 128) /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */ |
Davidroid | 18:591a007effc2 | 54 | #define STEPS_2 (STEPS_1 * 2) |
Davidroid | 0:5148e9486cf2 | 55 | |
Davidroid | 0:5148e9486cf2 | 56 | /* Delay in milliseconds. */ |
Davidroid | 1:9f1974b0960d | 57 | #define DELAY_1 1000 |
Davidroid | 0:5148e9486cf2 | 58 | #define DELAY_2 2000 |
Davidroid | 0:5148e9486cf2 | 59 | #define DELAY_3 5000 |
Davidroid | 0:5148e9486cf2 | 60 | |
scherfa2 | 27:23bd03a6a6f6 | 61 | /* Status Spleisser definieren*/ |
scherfa2 | 27:23bd03a6a6f6 | 62 | int StatusSpleisser = ST_SOLO; |
scherfa2 | 27:23bd03a6a6f6 | 63 | |
scherfa2 | 27:23bd03a6a6f6 | 64 | /*Input initalisieren für Status Spleisser*/ |
scherfa2 | 27:23bd03a6a6f6 | 65 | DigitalIn InputKontrollmodul(PA_9); |
scherfa2 | 27:23bd03a6a6f6 | 66 | |
scherfa2 | 27:23bd03a6a6f6 | 67 | InterruptIn button1(USER_BUTTON); |
scherfa2 | 27:23bd03a6a6f6 | 68 | volatile int idx = 0; |
scherfa2 | 27:23bd03a6a6f6 | 69 | volatile bool button1_pressed = false; // Used in the main loop |
scherfa2 | 27:23bd03a6a6f6 | 70 | volatile bool button1_enabled = true; // Used for debouncing |
scherfa2 | 27:23bd03a6a6f6 | 71 | Timeout button1_timeout; // Used for debouncing |
scherfa2 | 27:23bd03a6a6f6 | 72 | |
scherfa2 | 27:23bd03a6a6f6 | 73 | // Enables button when bouncing is over |
scherfa2 | 27:23bd03a6a6f6 | 74 | void button1_enabled_cb(void) |
scherfa2 | 27:23bd03a6a6f6 | 75 | { |
scherfa2 | 27:23bd03a6a6f6 | 76 | button1_enabled = true; |
scherfa2 | 27:23bd03a6a6f6 | 77 | } |
scherfa2 | 27:23bd03a6a6f6 | 78 | |
scherfa2 | 27:23bd03a6a6f6 | 79 | // ISR handling button pressed event |
scherfa2 | 27:23bd03a6a6f6 | 80 | void button1_onpressed_cb(void) |
scherfa2 | 27:23bd03a6a6f6 | 81 | { |
scherfa2 | 27:23bd03a6a6f6 | 82 | if (button1_enabled) { // Disabled while the button is bouncing |
scherfa2 | 27:23bd03a6a6f6 | 83 | button1_enabled = false; |
scherfa2 | 27:23bd03a6a6f6 | 84 | button1_pressed = true; // To be read by the main loop |
scherfa2 | 27:23bd03a6a6f6 | 85 | |
scherfa2 | 27:23bd03a6a6f6 | 86 | if(idx<4){ |
scherfa2 | 27:23bd03a6a6f6 | 87 | idx++; |
scherfa2 | 27:23bd03a6a6f6 | 88 | } |
scherfa2 | 27:23bd03a6a6f6 | 89 | else{idx=1;} |
scherfa2 | 27:23bd03a6a6f6 | 90 | |
scherfa2 | 27:23bd03a6a6f6 | 91 | button1_timeout.attach(callback(button1_enabled_cb), 0.03); // Debounce time 300 ms |
scherfa2 | 27:23bd03a6a6f6 | 92 | } |
scherfa2 | 27:23bd03a6a6f6 | 93 | } |
Davidroid | 0:5148e9486cf2 | 94 | |
Davidroid | 0:5148e9486cf2 | 95 | /* Variables -----------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 96 | |
Davidroid | 0:5148e9486cf2 | 97 | /* Motor Control Expansion Board. */ |
scherfa2 | 27:23bd03a6a6f6 | 98 | XNucleoIHM02A1 *x_nucleo_ihm02a1_1; |
scherfa2 | 27:23bd03a6a6f6 | 99 | XNucleoIHM02A12 *x_nucleo_ihm02a1_2; |
Davidroid | 0:5148e9486cf2 | 100 | |
Davidroid | 9:f35fbeedb8f4 | 101 | /* Initialization parameters of the motors connected to the expansion board. */ |
davide.aliprandi@st.com | 24:d1f487cb02ba | 102 | L6470_init_t init[L6470DAISYCHAINSIZE] = { |
Davidroid | 9:f35fbeedb8f4 | 103 | /* First Motor. */ |
Davidroid | 9:f35fbeedb8f4 | 104 | { |
Davidroid | 18:591a007effc2 | 105 | 9.0, /* Motor supply voltage in V. */ |
Davidroid | 18:591a007effc2 | 106 | 400, /* Min number of steps per revolution for the motor. */ |
Davidroid | 18:591a007effc2 | 107 | 1.7, /* Max motor phase voltage in A. */ |
Davidroid | 18:591a007effc2 | 108 | 3.06, /* Max motor phase voltage in V. */ |
Davidroid | 18:591a007effc2 | 109 | 300.0, /* Motor initial speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 110 | 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ |
Davidroid | 18:591a007effc2 | 111 | 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ |
Davidroid | 18:591a007effc2 | 112 | 992.0, /* Motor maximum speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 113 | 0.0, /* Motor minimum speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 114 | 602.7, /* Motor full-step speed threshold [step/s]. */ |
Davidroid | 18:591a007effc2 | 115 | 3.06, /* Holding kval [V]. */ |
Davidroid | 18:591a007effc2 | 116 | 3.06, /* Constant speed kval [V]. */ |
Davidroid | 18:591a007effc2 | 117 | 3.06, /* Acceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 118 | 3.06, /* Deceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 119 | 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ |
Davidroid | 18:591a007effc2 | 120 | 392.1569e-6, /* Start slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 121 | 643.1372e-6, /* Acceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 122 | 643.1372e-6, /* Deceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 123 | 0, /* Thermal compensation factor (range [0, 15]). */ |
Davidroid | 18:591a007effc2 | 124 | 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ |
Davidroid | 18:591a007effc2 | 125 | 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ |
Davidroid | 18:591a007effc2 | 126 | StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ |
Davidroid | 18:591a007effc2 | 127 | 0xFF, /* Alarm conditions enable. */ |
Davidroid | 18:591a007effc2 | 128 | 0x2E88 /* Ic configuration. */ |
Davidroid | 9:f35fbeedb8f4 | 129 | }, |
Davidroid | 9:f35fbeedb8f4 | 130 | |
Davidroid | 9:f35fbeedb8f4 | 131 | /* Second Motor. */ |
Davidroid | 9:f35fbeedb8f4 | 132 | { |
Davidroid | 18:591a007effc2 | 133 | 9.0, /* Motor supply voltage in V. */ |
Davidroid | 18:591a007effc2 | 134 | 400, /* Min number of steps per revolution for the motor. */ |
Davidroid | 18:591a007effc2 | 135 | 1.7, /* Max motor phase voltage in A. */ |
Davidroid | 18:591a007effc2 | 136 | 3.06, /* Max motor phase voltage in V. */ |
Davidroid | 18:591a007effc2 | 137 | 300.0, /* Motor initial speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 138 | 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ |
Davidroid | 18:591a007effc2 | 139 | 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ |
Davidroid | 18:591a007effc2 | 140 | 992.0, /* Motor maximum speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 141 | 0.0, /* Motor minimum speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 142 | 602.7, /* Motor full-step speed threshold [step/s]. */ |
Davidroid | 18:591a007effc2 | 143 | 3.06, /* Holding kval [V]. */ |
Davidroid | 18:591a007effc2 | 144 | 3.06, /* Constant speed kval [V]. */ |
Davidroid | 18:591a007effc2 | 145 | 3.06, /* Acceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 146 | 3.06, /* Deceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 147 | 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ |
Davidroid | 18:591a007effc2 | 148 | 392.1569e-6, /* Start slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 149 | 643.1372e-6, /* Acceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 150 | 643.1372e-6, /* Deceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 151 | 0, /* Thermal compensation factor (range [0, 15]). */ |
Davidroid | 18:591a007effc2 | 152 | 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ |
Davidroid | 18:591a007effc2 | 153 | 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ |
Davidroid | 18:591a007effc2 | 154 | StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ |
Davidroid | 18:591a007effc2 | 155 | 0xFF, /* Alarm conditions enable. */ |
Davidroid | 18:591a007effc2 | 156 | 0x2E88 /* Ic configuration. */ |
Davidroid | 9:f35fbeedb8f4 | 157 | } |
Davidroid | 9:f35fbeedb8f4 | 158 | }; |
Davidroid | 9:f35fbeedb8f4 | 159 | |
Davidroid | 0:5148e9486cf2 | 160 | /* Main ----------------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 161 | |
Davidroid | 0:5148e9486cf2 | 162 | int main() |
Davidroid | 0:5148e9486cf2 | 163 | { |
Davidroid | 1:9f1974b0960d | 164 | /*----- Initialization. -----*/ |
scherfa2 | 27:23bd03a6a6f6 | 165 | |
scherfa2 | 27:23bd03a6a6f6 | 166 | pwm_io2(20000, 0.075); |
Davidroid | 0:5148e9486cf2 | 167 | |
Davidroid | 5:3b8e19bbf386 | 168 | /* Initializing Motor Control Expansion Board. */ |
scherfa2 | 27:23bd03a6a6f6 | 169 | x_nucleo_ihm02a1_2 = new XNucleoIHM02A12(&init[0], &init[1],A4, A5, D4, D2, PB_15, PB_14, PB_13 ); |
scherfa2 | 27:23bd03a6a6f6 | 170 | x_nucleo_ihm02a1_1 = new XNucleoIHM02A1(&init[0], &init[1], A4, A5, D4, A2, D11, D12, D3 ); |
scherfa2 | 27:23bd03a6a6f6 | 171 | |
scherfa2 | 27:23bd03a6a6f6 | 172 | |
Davidroid | 1:9f1974b0960d | 173 | |
scherfa2 | 27:23bd03a6a6f6 | 174 | printf("--> bis hier gehts2.\r\n"); |
scherfa2 | 27:23bd03a6a6f6 | 175 | /* Building a list of motor control components. */ |
scherfa2 | 27:23bd03a6a6f6 | 176 | L6470B **motors2 = x_nucleo_ihm02a1_2->get_components(); |
scherfa2 | 27:23bd03a6a6f6 | 177 | L6470 **motors = x_nucleo_ihm02a1_1->get_components(); |
scherfa2 | 27:23bd03a6a6f6 | 178 | |
scherfa2 | 27:23bd03a6a6f6 | 179 | printf("--> bis hier gehts3.\r\n"); |
scherfa2 | 27:23bd03a6a6f6 | 180 | |
scherfa2 | 27:23bd03a6a6f6 | 181 | button1.fall(callback(button1_onpressed_cb)); // Attach ISR to handle button press event |
Davidroid | 18:591a007effc2 | 182 | |
scherfa2 | 27:23bd03a6a6f6 | 183 | while(1) |
scherfa2 | 27:23bd03a6a6f6 | 184 | { |
scherfa2 | 27:23bd03a6a6f6 | 185 | switch (StatusSpleisser) |
scherfa2 | 27:23bd03a6a6f6 | 186 | { |
scherfa2 | 27:23bd03a6a6f6 | 187 | case ST_SOLO: |
scherfa2 | 27:23bd03a6a6f6 | 188 | if(InputKontrollmodul ==0) |
scherfa2 | 27:23bd03a6a6f6 | 189 | { |
scherfa2 | 27:23bd03a6a6f6 | 190 | EntrySOLO(); |
scherfa2 | 27:23bd03a6a6f6 | 191 | } |
scherfa2 | 27:23bd03a6a6f6 | 192 | else |
scherfa2 | 27:23bd03a6a6f6 | 193 | { |
scherfa2 | 27:23bd03a6a6f6 | 194 | StatusSpleisser = ST_DUO; |
scherfa2 | 27:23bd03a6a6f6 | 195 | } |
scherfa2 | 27:23bd03a6a6f6 | 196 | break; |
scherfa2 | 27:23bd03a6a6f6 | 197 | case ST_DUO: |
scherfa2 | 27:23bd03a6a6f6 | 198 | if(InputKontrollmodul ==1) |
scherfa2 | 27:23bd03a6a6f6 | 199 | { |
scherfa2 | 27:23bd03a6a6f6 | 200 | EntryDUO(); |
scherfa2 | 27:23bd03a6a6f6 | 201 | } |
scherfa2 | 27:23bd03a6a6f6 | 202 | else |
scherfa2 | 27:23bd03a6a6f6 | 203 | { |
scherfa2 | 27:23bd03a6a6f6 | 204 | StatusSpleisser = ST_SOLO; |
scherfa2 | 27:23bd03a6a6f6 | 205 | } |
scherfa2 | 27:23bd03a6a6f6 | 206 | break; |
scherfa2 | 27:23bd03a6a6f6 | 207 | |
scherfa2 | 27:23bd03a6a6f6 | 208 | } |
Davidroid | 22:e81ccf73bc5d | 209 | } |
Davidroid | 22:e81ccf73bc5d | 210 | } |