Update

Dependencies:   mbed mbed-rtos X_NUCLEO_IHM02A1

Committer:
hagenrap
Date:
Sun May 05 16:18:20 2019 +0000
Revision:
35:758191d5c6e1
Parent:
34:0dee9a606869
Child:
37:a74d377d8f74
V3; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hagenrap 35:758191d5c6e1 1 /* ------------------------ INCLUDE ----------------------------------------- */
hagenrap 33:de144094bdd1 2 #include "SETUP.h"
Davidroid 1:9f1974b0960d 3
hagenrap 35:758191d5c6e1 4 /* ---------------------------- END ----------------------------------------- */
hagenrap 35:758191d5c6e1 5
hagenrap 35:758191d5c6e1 6
hagenrap 35:758191d5c6e1 7 /* Zum testen */
hagenrap 35:758191d5c6e1 8 DigitalOut myled(LED1);
hagenrap 35:758191d5c6e1 9 DigitalIn mybutton(USER_BUTTON);
hagenrap 35:758191d5c6e1 10
hagenrap 35:758191d5c6e1 11
hagenrap 35:758191d5c6e1 12
hagenrap 35:758191d5c6e1 13 /* ----------------------- INITIALISIERUNG ---------------------------------- */
hagenrap 35:758191d5c6e1 14 /* -------------------------------------------------------------------------- */
Davidroid 0:5148e9486cf2 15
scherfa2 27:23bd03a6a6f6 16 /* Status Spleisser definieren*/
scherfa2 27:23bd03a6a6f6 17 int StatusSpleisser = ST_SOLO;
scherfa2 27:23bd03a6a6f6 18
hagenrap 35:758191d5c6e1 19
scherfa2 34:0dee9a606869 20 /*Buttons initialisieren*/
hagenrap 35:758191d5c6e1 21 InterruptIn buttonSTART(START_BUTTON);
scherfa2 34:0dee9a606869 22 volatile bool buttonSTART_pressed = false; // Used in the main loop
scherfa2 34:0dee9a606869 23 volatile bool buttonSTART_enabled = true; // Used for debouncing
scherfa2 34:0dee9a606869 24 Timeout buttonSTART_timeout; // Used for debouncing
scherfa2 34:0dee9a606869 25
hagenrap 35:758191d5c6e1 26 InterruptIn buttonAbbruch(ABBRUCH_BUTTON);
hagenrap 35:758191d5c6e1 27 volatile bool buttonAbbruch_pressed = false; // Used in the main loop
hagenrap 35:758191d5c6e1 28 volatile bool buttonAbbruch_enabled = true; // Used for debouncing
hagenrap 35:758191d5c6e1 29 Timeout buttonAbbruch_timeout; // Used for debouncing
hagenrap 35:758191d5c6e1 30
hagenrap 35:758191d5c6e1 31
scherfa2 34:0dee9a606869 32 /*PWMs initialisieren*/
hagenrap 35:758191d5c6e1 33 PwmOut Servo (SERVO_PWM);
hagenrap 35:758191d5c6e1 34 PwmOut Cutter_1 (CUTTER_ARC_1);
hagenrap 35:758191d5c6e1 35 PwmOut Cutter_2 (CUTTER_ARC_2);
hagenrap 35:758191d5c6e1 36 PwmOut Spleisser_1 (SPLEISSER_ARC_1);
hagenrap 35:758191d5c6e1 37 PwmOut Spleisser_2 (SPLEISSER_ARC_2);
hagenrap 35:758191d5c6e1 38
hagenrap 35:758191d5c6e1 39 /*Lichtschranken*/
hagenrap 35:758191d5c6e1 40 DigitalIn LS_1(LICHTSCHRANKE_1); // HIGH - kein Filament / LOW - Filament
hagenrap 35:758191d5c6e1 41 DigitalIn LS_2(LICHTSCHRANKE_2); // HIGH - kein Filament / LOW - Filament /* Mit LS_x.read(); auslesen */
hagenrap 35:758191d5c6e1 42 DigitalIn LS_3(LICHTSCHRANKE_3); // HIGH - kein Filament / LOW - Filament
scherfa2 34:0dee9a606869 43
scherfa2 27:23bd03a6a6f6 44 /*Input initalisieren für Status Spleisser*/
hagenrap 33:de144094bdd1 45 DigitalIn InputKontrollmodul(COM_SIGNAL);
hagenrap 33:de144094bdd1 46
scherfa2 34:0dee9a606869 47 /* Motor Control Expansion Board. */
scherfa2 34:0dee9a606869 48 XNucleoIHM02A1 *x_nucleo_ihm02a1_1;
scherfa2 34:0dee9a606869 49 XNucleoIHM02A12 *x_nucleo_ihm02a1_2;
hagenrap 33:de144094bdd1 50
scherfa2 34:0dee9a606869 51 /* Initialization parameters of the motors connected to the expansion board. */
scherfa2 34:0dee9a606869 52 L6470_init_t init[L6470DAISYCHAINSIZE] = {
scherfa2 34:0dee9a606869 53 /* First Motor. */
scherfa2 34:0dee9a606869 54 {
hagenrap 35:758191d5c6e1 55 12.0, /* Motor supply voltage in V. */
scherfa2 34:0dee9a606869 56 400, /* Min number of steps per revolution for the motor. */
scherfa2 34:0dee9a606869 57 1.7, /* Max motor phase voltage in A. */
scherfa2 34:0dee9a606869 58 3.06, /* Max motor phase voltage in V. */
scherfa2 34:0dee9a606869 59 300.0, /* Motor initial speed [step/s]. */
scherfa2 34:0dee9a606869 60 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
scherfa2 34:0dee9a606869 61 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
scherfa2 34:0dee9a606869 62 992.0, /* Motor maximum speed [step/s]. */
scherfa2 34:0dee9a606869 63 0.0, /* Motor minimum speed [step/s]. */
scherfa2 34:0dee9a606869 64 602.7, /* Motor full-step speed threshold [step/s]. */
scherfa2 34:0dee9a606869 65 3.06, /* Holding kval [V]. */
scherfa2 34:0dee9a606869 66 3.06, /* Constant speed kval [V]. */
scherfa2 34:0dee9a606869 67 3.06, /* Acceleration starting kval [V]. */
scherfa2 34:0dee9a606869 68 3.06, /* Deceleration starting kval [V]. */
scherfa2 34:0dee9a606869 69 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */
scherfa2 34:0dee9a606869 70 392.1569e-6, /* Start slope [s/step]. */
scherfa2 34:0dee9a606869 71 643.1372e-6, /* Acceleration final slope [s/step]. */
scherfa2 34:0dee9a606869 72 643.1372e-6, /* Deceleration final slope [s/step]. */
scherfa2 34:0dee9a606869 73 0, /* Thermal compensation factor (range [0, 15]). */
scherfa2 34:0dee9a606869 74 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
scherfa2 34:0dee9a606869 75 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
scherfa2 34:0dee9a606869 76 StepperMotor::STEP_MODE_1_128, /* Step mode selection. */
scherfa2 34:0dee9a606869 77 0xFF, /* Alarm conditions enable. */
scherfa2 34:0dee9a606869 78 0x2E88 /* Ic configuration. */
scherfa2 34:0dee9a606869 79 },
scherfa2 34:0dee9a606869 80
scherfa2 34:0dee9a606869 81 /* Second Motor. */
scherfa2 34:0dee9a606869 82 {
scherfa2 34:0dee9a606869 83 12.0, /* Motor supply voltage in V. */
scherfa2 34:0dee9a606869 84 400, /* Min number of steps per revolution for the motor. */
scherfa2 34:0dee9a606869 85 1.7, /* Max motor phase voltage in A. */
scherfa2 34:0dee9a606869 86 3.06, /* Max motor phase voltage in V. */
scherfa2 34:0dee9a606869 87 300.0, /* Motor initial speed [step/s]. */
scherfa2 34:0dee9a606869 88 500.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
scherfa2 34:0dee9a606869 89 500.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
scherfa2 34:0dee9a606869 90 992.0, /* Motor maximum speed [step/s]. */
scherfa2 34:0dee9a606869 91 0.0, /* Motor minimum speed [step/s]. */
scherfa2 34:0dee9a606869 92 602.7, /* Motor full-step speed threshold [step/s]. */
scherfa2 34:0dee9a606869 93 3.06, /* Holding kval [V]. */
scherfa2 34:0dee9a606869 94 3.06, /* Constant speed kval [V]. */
scherfa2 34:0dee9a606869 95 3.06, /* Acceleration starting kval [V]. */
scherfa2 34:0dee9a606869 96 3.06, /* Deceleration starting kval [V]. */
scherfa2 34:0dee9a606869 97 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */
scherfa2 34:0dee9a606869 98 392.1569e-6, /* Start slope [s/step]. */
scherfa2 34:0dee9a606869 99 643.1372e-6, /* Acceleration final slope [s/step]. */
scherfa2 34:0dee9a606869 100 643.1372e-6, /* Deceleration final slope [s/step]. */
scherfa2 34:0dee9a606869 101 0, /* Thermal compensation factor (range [0, 15]). */
scherfa2 34:0dee9a606869 102 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
scherfa2 34:0dee9a606869 103 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
scherfa2 34:0dee9a606869 104 StepperMotor::STEP_MODE_1_128, /* Step mode selection. */
scherfa2 34:0dee9a606869 105 0xFF, /* Alarm conditions enable. */
scherfa2 34:0dee9a606869 106 0x2E88 /* Ic configuration. */
scherfa2 34:0dee9a606869 107 }
scherfa2 34:0dee9a606869 108 };
hagenrap 33:de144094bdd1 109
hagenrap 35:758191d5c6e1 110 /* Motor Objekte */
scherfa2 34:0dee9a606869 111 L6470B **motors2;
scherfa2 34:0dee9a606869 112 L6470 **motors;
Davidroid 0:5148e9486cf2 113
hagenrap 35:758191d5c6e1 114 /* --------------------------------- END ------------------------------------ */
hagenrap 35:758191d5c6e1 115 /* -------------------------------------------------------------------------- */
Davidroid 9:f35fbeedb8f4 116
hagenrap 35:758191d5c6e1 117
hagenrap 35:758191d5c6e1 118
hagenrap 35:758191d5c6e1 119
hagenrap 35:758191d5c6e1 120
hagenrap 35:758191d5c6e1 121
hagenrap 35:758191d5c6e1 122 /* ---------------------------------- MAIN ---------------------------------- */
hagenrap 35:758191d5c6e1 123 /* -------------------------------------------------------------------------- */
Davidroid 0:5148e9486cf2 124
Davidroid 0:5148e9486cf2 125 int main()
Davidroid 0:5148e9486cf2 126 {
hagenrap 35:758191d5c6e1 127
scherfa2 34:0dee9a606869 128 /* Initializing Motor Control Expansion Board. */
hagenrap 35:758191d5c6e1 129 x_nucleo_ihm02a1_1 = new XNucleoIHM02A1 (&init[0], &init[1], IRQ_FLAG_MOTOR, IRQ_BUSY_MOTOR, STB_MOTOR, SPI_CS_1, SPI_MOSI, SPI_MISO, SPI_CLK );
hagenrap 35:758191d5c6e1 130 x_nucleo_ihm02a1_2 = new XNucleoIHM02A12(&init[0], &init[1], IRQ_FLAG_MOTOR, IRQ_BUSY_MOTOR, STB_MOTOR, SPI_CS_2, SPI_MOSI, SPI_MISO, SPI_CLK );
hagenrap 35:758191d5c6e1 131
scherfa2 34:0dee9a606869 132 /* Building a list of motor control components. */
scherfa2 34:0dee9a606869 133 motors2 = x_nucleo_ihm02a1_2->get_components();
hagenrap 35:758191d5c6e1 134 motors = x_nucleo_ihm02a1_1->get_components();
hagenrap 35:758191d5c6e1 135
hagenrap 35:758191d5c6e1 136 /* Attach ISR to handle button press event */
hagenrap 35:758191d5c6e1 137 buttonSTART.fall(callback(buttonSTART_onpressed_cb));
hagenrap 35:758191d5c6e1 138 buttonAbbruch.fall(callback(buttonAbbruch_onpressed_cb));
hagenrap 35:758191d5c6e1 139
hagenrap 35:758191d5c6e1 140 /* Init PWM */
hagenrap 35:758191d5c6e1 141 Init_Servo();
hagenrap 35:758191d5c6e1 142 Init_Cutter();
hagenrap 35:758191d5c6e1 143 Init_Spleisser();
Davidroid 18:591a007effc2 144
hagenrap 35:758191d5c6e1 145 /*Display*/
hagenrap 35:758191d5c6e1 146 wait_ms(250);
hagenrap 35:758191d5c6e1 147 DisplayInit();
hagenrap 35:758191d5c6e1 148
hagenrap 35:758191d5c6e1 149
hagenrap 35:758191d5c6e1 150
hagenrap 35:758191d5c6e1 151
hagenrap 35:758191d5c6e1 152
hagenrap 35:758191d5c6e1 153
hagenrap 35:758191d5c6e1 154 /* -------------------- ---- STATE_MACHINE ------------------------------ */
hagenrap 35:758191d5c6e1 155 while(1)
scherfa2 27:23bd03a6a6f6 156 {
scherfa2 27:23bd03a6a6f6 157 switch (StatusSpleisser)
scherfa2 27:23bd03a6a6f6 158 {
scherfa2 27:23bd03a6a6f6 159 case ST_SOLO:
hagenrap 33:de144094bdd1 160 if(InputKontrollmodul == 0)
scherfa2 27:23bd03a6a6f6 161 {
scherfa2 27:23bd03a6a6f6 162 EntrySOLO();
scherfa2 27:23bd03a6a6f6 163 }
scherfa2 27:23bd03a6a6f6 164 else
scherfa2 27:23bd03a6a6f6 165 {
scherfa2 27:23bd03a6a6f6 166 StatusSpleisser = ST_DUO;
scherfa2 27:23bd03a6a6f6 167 }
scherfa2 27:23bd03a6a6f6 168 break;
scherfa2 27:23bd03a6a6f6 169 case ST_DUO:
hagenrap 33:de144094bdd1 170 if(InputKontrollmodul == 1)
scherfa2 27:23bd03a6a6f6 171 {
scherfa2 27:23bd03a6a6f6 172 EntryDUO();
scherfa2 27:23bd03a6a6f6 173 }
scherfa2 27:23bd03a6a6f6 174 else
scherfa2 27:23bd03a6a6f6 175 {
scherfa2 27:23bd03a6a6f6 176 StatusSpleisser = ST_SOLO;
scherfa2 27:23bd03a6a6f6 177 }
scherfa2 27:23bd03a6a6f6 178 break;
scherfa2 27:23bd03a6a6f6 179
scherfa2 27:23bd03a6a6f6 180 }
Davidroid 22:e81ccf73bc5d 181 }
hagenrap 35:758191d5c6e1 182 /* ------------------------------ END ----------------------------------- */
hagenrap 35:758191d5c6e1 183
hagenrap 35:758191d5c6e1 184
hagenrap 35:758191d5c6e1 185
hagenrap 35:758191d5c6e1 186
Davidroid 22:e81ccf73bc5d 187 }
hagenrap 35:758191d5c6e1 188 /* --------------------------------- END ------------------------------------ */
hagenrap 35:758191d5c6e1 189 /* -------------------------------------------------------------------------- */