Update

Dependencies:   mbed mbed-rtos X_NUCLEO_IHM02A1

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?

UserRevisionLine numberNew 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 }